7 kfile_id,hname,hlong_name,kdim_id,hatt_title,hatt_text,kvar_id,ktype,klen)
23 USE yomhook
,ONLY : lhook, dr_hook
24 USE parkind1
,ONLY : jprb
32 INTEGER,
INTENT(IN) :: kfile_id
33 CHARACTER(LEN=*),
INTENT(IN) :: hname
34 CHARACTER(LEN=*),
INTENT(IN) :: hlong_name
35 INTEGER,
DIMENSION(:),
INTENT(IN) :: kdim_id
36 CHARACTER(LEN=*),
DIMENSION(:),
OPTIONAL,
INTENT(IN) :: hatt_title,hatt_text
37 INTEGER,
OPTIONAL,
INTENT(OUT) :: kvar_id
38 INTEGER,
OPTIONAL,
INTENT(IN) :: ktype
39 INTEGER,
OPTIONAL,
INTENT(IN) :: klen
43 CHARACTER(LEN=20),
DIMENSION(:),
ALLOCATABLE :: ytemp
44 CHARACTER(LEN=100) :: yname
45 CHARACTER(LEN=50) :: ypas
46 INTEGER,
DIMENSION(4) :: iret
47 INTEGER :: jret,ivar_id,iatt,jatt,ilen,indim
48 INTEGER :: ifield,jfield,isize
49 LOGICAL :: nowrite, gopened, gexist
50 REAL(KIND=JPRB) :: zhook_handle
53 IF (lhook) CALL dr_hook(
'DEF_VAR_NETCDF',0,zhook_handle)
55 IF (.NOT.
ALLOCATED(xvar_to_fileout))
ALLOCATE(xvar_to_fileout(100))
60 IF (xout.GT.1) ytemp(1:xout-1) = xvar_to_fileout
62 IF(
ALLOCATED(xvar_to_fileout))
DEALLOCATE(xvar_to_fileout)
63 ALLOCATE(xvar_to_fileout(xout))
64 xvar_to_fileout = ytemp
69 IF ( hname/=
'xx' .AND. hname/=
'yy' .AND. hname/=
'lon' .AND. &
70 hname/=
'lat' .AND. hname/=
'time' .AND. dgu%LSELECT )
THEN
71 ifield=count(dgu%CSELECT /=
' ')
74 IF ( trim(dgu%CSELECT(jfield))==trim(hname) )
THEN
78 IF ( nowrite .AND. lhook) CALL dr_hook(
'DEF_VAR_NETCDF',1,zhook_handle)
85 IF (present(ktype))
THEN
86 iret(1) = nf_def_var(kfile_id,hname,ktype,indim,kdim_id,ivar_id)
88 iret(1) = nf_def_var(kfile_id,hname,nf_double,indim,kdim_id,ivar_id)
92 IF (present(ktype))
THEN
93 IF (ktype==nf_double .OR. ktype==nf_float)
THEN
94 iret(2) = nf_put_att_double(kfile_id,ivar_id,
'_FillValue',nf_double,1,xundef)
95 ELSEIF (ktype==nf_int .OR. ktype==nf_short)
THEN
96 iret(2) = nf_put_att_int(kfile_id,ivar_id,
'_FillValue',nf_int,1,nundef)
97 ELSEIF (ktype==nf_char)
THEN
98 IF (indim>1) iret(2) = nf_put_att_text(kfile_id,ivar_id,
'_FillValue',nf_char,1,
"")
99 IF (present(klen)) iret(3) = nf_put_att_int(kfile_id,ivar_id,
'len',nf_int,1,klen)
102 iret(2) = nf_put_att_double(kfile_id,ivar_id,
'_FillValue',nf_double,1,xundef)
106 IF (present(ktype))
THEN
107 IF (ktype==nf_char)
THEN
108 IF (present(klen)) iret(3) = nf_put_att_int(kfile_id,ivar_id,
'len',nf_int,1,klen)
112 IF (hlong_name.NE.
'') iret(2) = nf_put_att_text(kfile_id,ivar_id,
'long_name',len_trim(hlong_name),hlong_name)
115 IF (present(hatt_title).AND.present(hatt_text))
THEN
116 iatt=
SIZE(hatt_title)
117 IF (iatt .EQ.
SIZE(hatt_text))
THEN
119 ilen=len_trim(hatt_text(jatt))
121 jret = nf_put_att_text(kfile_id,ivar_id,hatt_title(jatt),ilen,hatt_text(jatt))
126 IF (present(kvar_id)) kvar_id = ivar_id
128 IF (lhook) CALL dr_hook(
'DEF_VAR_NETCDF',1,zhook_handle)
subroutine def_var_netcdf(DGU, KFILE_ID, HNAME, HLONG_NAME, KDIM_ID, HATT_TITLE, HATT_TEXT, KVAR_ID, KTYPE, KLEN)