58 USE xios
, ONLY : xios_field, xios_fieldgroup, xios_file, xios_get_handle,&
59 xios_add_child, xios_set_attr, xios_is_defined_field_attr, xios_set_field_attr, &
60 xios_get_file_attr, xios_is_valid_file, xios_is_valid_field, xios_is_valid_axis, &
61 xios_is_defined_file_attr
64 USE modi_sfx_xios_check_field_2d
72 CHARACTER(LEN=*) ,
INTENT(IN) :: HREC
73 CHARACTER(LEN=100) ,
INTENT(IN) :: HCOMMENT
74 LOGICAL ,
INTENT(OUT):: OWRITE
75 REAL,
DIMENSION(:) ,
INTENT(IN) ,
OPTIONAL :: PFIELD1
76 REAL,
DIMENSION(:,:) ,
INTENT(IN) ,
OPTIONAL :: PFIELD2
77 REAL,
DIMENSION(:,:,:) ,
INTENT(IN) ,
OPTIONAL :: PFIELD3
78 CHARACTER(LEN=*) ,
INTENT(IN) ,
OPTIONAL :: HAXIS
82 LOGICAL :: LISDEF, LLWRITE
85 REAL(KIND=JPRB) :: ZHOOK_HANDLE
88 TYPE(xios_field) :: field_hdl, other_field_hdl
89 TYPE(xios_fieldgroup) :: fieldgroup_hdl
90 TYPE(xios_file) :: file_hdl
93 IF (
lhook)
CALL dr_hook(
'SFX_XIOS_CHECK_FIELD',0,zhook_handle)
103 IF (
PRESENT(pfield3))
THEN 104 CALL abor1_sfx(
'THIS XIOS INTERFACE CANNOT YET HANDLE 2 AXES IN ADDITION TO HORIZONTAL SPACE AXES')
111 IF ((
PRESENT(pfield1)) .OR. (
PRESENT(pfield2)) .OR. (
PRESENT(pfield3)) )
THEN 112 IF (
PRESENT(pfield1)) ksize=
SIZE(pfield1)
113 IF (
PRESENT(pfield2)) ksize=
SIZE(pfield2,1)
114 IF (
PRESENT(pfield3)) ksize=
SIZE(pfield3,1)
115 IF ((
yxios_domain==
'FULL' ) .AND. (ksize /= u%NSIZE_FULL )) owrite=.false.
116 IF ((
yxios_domain==
'NATURE') .AND. (ksize /= u%NSIZE_NATURE)) owrite=.false.
117 IF ((
yxios_domain==
'SEA ') .AND. (ksize /= u%NSIZE_SEA )) owrite=.false.
118 IF ((
yxios_domain==
'WATER ') .AND. (ksize /= u%NSIZE_WATER )) owrite=.false.
119 IF ((
yxios_domain==
'TOWN ') .AND. (ksize /= u%NSIZE_TOWN )) owrite=.false.
120 IF (.NOT. owrite)
THEN 122 CALL abor1_sfx(
'SFX_XIOS_CHECK_FIELD : Inconsistent size for field '//hrec//
' on domain '//
yxios_domain)
124 IF (
lhook)
CALL dr_hook(
'SFX_XIOS_CHECK_FIELD',1,zhook_handle)
136 owrite=xios_is_valid_field(hrec)
138 IF (
lhook)
CALL dr_hook(
'SFX_XIOS_CHECK_FIELD',1,zhook_handle)
149 IF (.NOT. xios_is_valid_field(hrec))
THEN 150 CALL xios_get_handle(
"field_definition",fieldgroup_hdl)
151 CALL xios_add_child(fieldgroup_hdl,field_hdl,hrec)
153 IF (.NOT. xios_is_valid_field(
"default_field")) &
154 CALL abor1_sfx(
'sfx_xios_check_field:cannot output field '//hrec//
' : no default_field is defined')
157 CALL xios_set_attr(field_hdl,
name=hrec)
160 CALL xios_get_handle(hrec,field_hdl)
167 CALL xios_is_defined_field_attr(hrec,enabled=lisdef)
168 IF ( .NOT. lisdef )
CALL xios_set_field_attr(hrec, enabled=.true.)
174 CALL xios_is_defined_field_attr(hrec,domain_ref=lisdef)
175 IF ( .NOT. lisdef )
THEN 183 IF (
PRESENT(pfield2))
THEN 184 IF (
PRESENT(haxis))
THEN 195 CALL xios_is_defined_field_attr(hrec,
name=lisdef)
196 IF ( .NOT. lisdef )
THEN 197 CALL xios_set_field_attr(hrec,
name=hrec)
204 CALL xios_is_defined_field_attr(hrec,long_name=lisdef)
205 IF ( .NOT. lisdef .AND. (
trim(hcomment) /=
'') )
THEN 206 CALL xios_set_field_attr(hrec,long_name=
trim(hcomment))
215 CALL xios_is_defined_field_attr(hrec,unit=lisdef)
216 IF ( .NOT. lisdef )
THEN 217 ipo=
index(hcomment,
"(",.true.)
218 ipf=
index(hcomment,
")",.true.)
219 IF ( (ipo > 0) .AND. (ipf>ipo+1) )
THEN 220 CALL xios_set_field_attr(hrec,unit=hcomment(ipo+1:ipf-1))
229 CALL xios_set_field_attr(hrec,default_value=
xundef)
240 CALL xios_add_child(file_hdl,field_hdl)
241 CALL xios_set_attr(field_hdl,field_ref=hrec)
244 CALL abor1_sfx(
'sfx_xios_check_field : cannot output field '//hrec//
' : no default_output file is defined')
253 IF (
lhook)
CALL dr_hook(
'SFX_XIOS_CHECK_FIELD',1,zhook_handle)
static const char * trim(const char *name, int *n)
quick &counting sorts only inumt inumt name
subroutine sfx_xios_check_field_2d(U, HREC, HCOMMENT, OWRITE, PFIELD2, HAXIS)
subroutine abor1_sfx(YTEXT)
subroutine sfx_xios_check_field(U, HREC, HCOMMENT, OWRITE, PFIELD1, PFIELD2, PFIELD3, HAXIS)
character(len=6) yxios_domain
character(len=14) coutput_default