69 CHARACTER(LEN=*) ,
INTENT(IN) :: HREC
70 CHARACTER(LEN=*) ,
INTENT(IN),
OPTIONAL :: HDOMAIN
71 CHARACTER(LEN=*) ,
INTENT(IN),
OPTIONAL :: HAXIS
72 INTEGER ,
INTENT(IN),
OPTIONAL :: KLEV
73 CHARACTER(LEN=*) ,
INTENT(IN),
OPTIONAL :: HAXIS2
74 INTEGER ,
INTENT(IN),
OPTIONAL :: KLEV2
75 CHARACTER(LEN=*) ,
INTENT(IN),
OPTIONAL :: HCOMMENT
76 INTEGER(KIND=JPIM) ,
INTENT(IN),
OPTIONAL :: KFREQOP
78 CHARACTER(1000) :: YLDOMAIN
79 CHARACTER(1000) :: YLCOMMENT
80 CHARACTER(1000) :: YAXIS,YAXIS2
83 INTEGER(KIND=JPIM) :: IFREQOP
84 INTEGER(KIND=JPIM) :: IIDIM, ILEV, ILEV2
87 REAL(KIND=JPRB) :: ZHOOK_HANDLE
89 IF (
lhook)
CALL dr_hook(
'SFX_XIOS_DECLARE_FIELD',0,zhook_handle)
98 IF (
lhook)
CALL dr_hook(
'SFX_XIOS_DECLARE_FIELD_INTERNAL',1,zhook_handle)
103 IF (
PRESENT(hdomain)) yldomain=
trim(hdomain)
105 IF (
PRESENT(hcomment)) ylcomment=
trim(hcomment)
107 IF (
PRESENT(kfreqop)) ifreqop=kfreqop
109 IF (
PRESENT(klev)) ilev=klev
111 IF (
PRESENT(klev2)) ilev2=klev2
113 IF (
PRESENT(haxis)) yaxis=
trim(haxis)
115 IF (
PRESENT(haxis2)) yaxis2=
trim(haxis2)
121 IF ( ilev == 0 )
CALL xios_get_axis_attr(haxis, n_glo=ilev)
123 IF ( iidim < 10 )
THEN 124 WRITE(yidim,
'(I1)') iidim
126 IF ( iidim < 100 )
THEN 127 WRITE(yidim,
'(I2)') iidim
129 WRITE(yidim,
'(I2)') iidim
146 IF (
lhook)
CALL dr_hook(
'SFX_XIOS_DECLARE_FIELD',1,zhook_handle)
169 CHARACTER(LEN=*) ,
INTENT(IN) :: HREC
170 CHARACTER(LEN=*) ,
INTENT(IN) :: HDOMAIN
171 CHARACTER(LEN=*) ,
INTENT(IN) :: HCOMMENT
172 INTEGER(KIND=JPIM) ,
INTENT(IN) :: KFREQOP
176 LOGICAL :: GISDEF, GGRIDDEF
179 REAL(KIND=JPRB) :: ZHOOK_HANDLE
182 TYPE(xios_field) :: field_hdl, other_field_hdl
183 TYPE(xios_fieldgroup) :: fieldgroup_hdl
184 TYPE(xios_file) :: file_hdl
187 IF (
lhook)
CALL dr_hook(
'SFX_XIOS_DECLARE_FIELD',0,zhook_handle)
197 IF (.NOT. xios_is_valid_field(hrec))
THEN 199 CALL xios_get_handle(
"field_definition",fieldgroup_hdl)
200 CALL xios_add_child(fieldgroup_hdl,field_hdl,hrec)
203 CALL xios_set_attr(field_hdl,
name=hrec)
211 CALL xios_add_child(file_hdl,field_hdl)
212 CALL xios_set_attr(field_hdl,field_ref=hrec)
221 CALL xios_is_defined_field_attr(hrec,grid_ref=ggriddef)
222 CALL xios_is_defined_field_attr(hrec,domain_ref=gisdef)
224 IF ( .NOT. gisdef .AND. .NOT. ggriddef )
THEN 225 IF (
trim(hdomain)==
'') &
226 CALL abor1_sfx(
'SFX_XIOS_DECLARE_FIELD_INTERNAL : MUST PROVIDE HDOMAIN '//hrec)
228 CALL xios_set_field_attr(hrec, domain_ref=
trim(hdomain))
248 CALL xios_is_defined_field_attr(hrec,unit=gisdef)
249 IF ( .NOT. gisdef )
THEN 250 ipo=
index(hcomment,
"(",.true.)
251 ipf=
index(hcomment,
")",.true.)
252 IF ( (ipo > 0) .AND. (ipf>ipo+1) )
THEN 253 CALL xios_set_field_attr(hrec,unit=hcomment(ipo+1:ipf-1))
261 CALL xios_is_defined_field_attr(hrec,long_name=gisdef)
262 IF ( .NOT. gisdef .AND. (
trim(hcomment) /=
'') )
THEN 264 CALL xios_set_field_attr(hrec,long_name=
trim(hcomment(1:ipo-1)))
266 CALL xios_set_field_attr(hrec,long_name=
trim(hcomment(:)))
274 CALL xios_set_field_attr(hrec,default_value=
xundef)
279 IF (
lhook)
CALL dr_hook(
'SFX_XIOS_DECLARE_FIELD_INTERNAL',1,zhook_handle)
300 CHARACTER(LEN=*) ,
INTENT(IN) :: HREC
301 CHARACTER(LEN=*) ,
INTENT(IN) :: HAXIS
302 INTEGER ,
INTENT(IN) :: KLEV
303 LOGICAL ,
INTENT(IN),
OPTIONAL :: OSECOND
307 LOGICAL :: GISDEF, GGRIDDEF, GVALID_AXIS
308 CHARACTER(1000) :: YAXIS
310 REAL(KIND=JPRB) :: ZHOOK_HANDLE
312 IF (
lhook)
CALL dr_hook(
'SFX_XIOS_DECLARE_AXIS_INTERNAL',0,zhook_handle)
315 CALL xios_is_defined_field_attr(hrec,grid_ref=ggriddef)
316 IF (.NOT. ggriddef )
THEN 319 CALL xios_is_defined_field_attr(hrec,axis_ref=gisdef)
320 IF ( .NOT. gisdef .OR.
PRESENT(osecond))
THEN 321 IF (
trim(haxis) ==
'')
THEN 323 IF (
PRESENT(osecond))
THEN 324 yaxis=
'dim2_for_'//
trim(hrec)
326 yaxis=
'dim_for_'//
trim(hrec)
329 gvalid_axis=xios_is_valid_axis(
trim(haxis))
332 IF (.NOT. gvalid_axis)
THEN 337 CALL abor1_sfx(
'SFX_XIOS_DECLARE_FIELD:SFX_XIOS_DECLARE_AXIS_INTERNAL'//&
338 ': MUST PROVIDE KLEV OR AN ALREADY DECLARED HAXIS for '//hrec)
341 CALL xios_set_field_attr(hrec, axis_ref=
trim(yaxis))
350 IF (
lhook)
CALL dr_hook(
'SFX_XIOS_DECLARE_AXIS_INTERNAL',1,zhook_handle)
static const char * trim(const char *name, int *n)
subroutine set_axis(HNAME, PVALUE, CDPOSITIVE, KSIZE, CDUNITS, PBOUNDS)
quick &counting sorts only inumt inumt name
subroutine abor1_sfx(YTEXT)
subroutine sfx_xios_declare_field_internal(HREC, HDOMAIN, HCOMMENT, KFREQOP)
character(len=30) ypatch_dim_name
subroutine sfx_xios_declare_field(HREC, HDOMAIN, HAXIS, KLEV, HAXIS2, KLEV2, HCOMMENT, KFREQOP)
subroutine sfx_xios_declare_axis_internal(HREC, HAXIS, KLEV, OSECOND)
character(len=14) coutput_default