6 ODMASK, PLON, PLAT, PCORNER_LON, PCORNER_LAT, KMASK)
54 USE xios
,ONLY : xios_domain, xios_domaingroup, xios_axisgroup, xios_axis, &
55 xios_get_handle, xios_add_child, xios_set_domain_attr, &
56 xios_is_defined_domain_attr
58 USE modi_get_surf_grid_dim_n
59 USE modi_latlon_gridtype_lonlat_reg
67 CHARACTER(LEN=*),
INTENT(IN) :: HGRID
68 CHARACTER(LEN=*),
INTENT(IN) :: HNAME
69 INTEGER,
INTENT(IN) :: KDIM1
71 INTEGER,
INTENT(IN) :: KDIM2
72 INTEGER,
INTENT(IN) :: KEXT1
75 INTEGER,
INTENT(IN),
DIMENSION(:) :: KINDEX
77 LOGICAL,
INTENT(IN),
DIMENSION(:) :: ODMASK
78 REAL ,
INTENT(IN),
DIMENSION(:),
OPTIONAL :: PLON
79 REAL ,
INTENT(IN),
DIMENSION(:),
OPTIONAL :: PLAT
80 REAL ,
INTENT(IN),
DIMENSION(:,:),
OPTIONAL:: PCORNER_LON, PCORNER_LAT
81 INTEGER,
INTENT(IN),
DIMENSION(:),
OPTIONAL :: KMASK
83 TYPE(xios_domaingroup) :: domaingroup_hdl
84 TYPE(xios_domain) :: domain_hdl
90 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IINDEX, JINDEX
92 REAL(KIND=JPRB) :: ZHOOK_HANDLE
94 IF (
lhook)
CALL dr_hook(
'SFX_XIOS_SET_DOMAIN',0,zhook_handle)
98 CALL xios_get_handle(
"domain_definition",domaingroup_hdl)
99 CALL xios_add_child(domaingroup_hdl,domain_hdl,hname)
108 CALL xios_set_domain_attr(hname, ni_glo=kdim1-kext1, nj_glo=kdim2)
109 CALL xios_set_domain_attr(hname, data_dim=1, ibegin=0)
110 CALL xios_set_domain_attr(hname, ni=isize)
111 CALL xios_set_domain_attr(hname, nj=1, data_nj=1)
113 ALLOCATE(iindex(isize), jindex(isize))
116 iindex(jk)=mod(kindex(jk),kdim1-kext1)
117 jindex(jk)=kindex(jk)/(kdim1-kext1)
118 IF (jindex(jk) .GT. kdim2-1 ) &
119 CALL abor1_sfx(
"SFX_XIOS_SET_DOMAIN : Inconsistent jindex")
122 CALL xios_set_domain_attr(hname, i_index=iindex, j_index=jindex)
123 DEALLOCATE(iindex, jindex)
124 CALL xios_set_domain_attr(hname, mask_1d=odmask)
126 IF (
PRESENT(kmask))
THEN 127 CALL xios_set_domain_attr(hname, data_i_index=kmask(:), data_ni=
size(kmask))
133 CALL xios_set_domain_attr(hname, lonvalue_1d=plon,latvalue_1d=plat)
134 IF (hgrid==
"LONLAT REG")
THEN 136 CALL xios_set_domain_attr(hname, type=
'rectilinear')
137 CALL xios_set_domain_attr(hname, lonvalue_1d=plon,latvalue_1d=plat)
147 CALL xios_set_domain_attr(hname, type=
'rectilinear')
150 IF (hgrid/=
"CONF PROJ ") &
151 print*,
"SFX_XIOS_SET_DOMAIN : Managing "//hgrid//
" type grid is not yet tested " 153 CALL xios_set_domain_attr(hname, type=
"curvilinear")
154 CALL xios_set_domain_attr(hname, lonvalue_1d=plon,latvalue_1d=plat)
155 IF (
PRESENT(pcorner_lat) .AND. (hgrid /=
'CARTESIAN'))
THEN 156 CALL xios_set_domain_attr(hname, nvertex=4, &
157 bounds_lon_1d=pcorner_lon,bounds_lat_1d=pcorner_lat)
166 CALL xios_set_domain_attr(hname, type=
'unstructured', data_dim=1, ni_glo=kdim1*kdim2)
167 CALL xios_set_domain_attr(hname, ibegin=0)
168 if (maxval(kindex) > kdim1*kdim2-1 )
CALL abor1_sfx(
"SFX_XIOS_SET_DOMAIN : maxval(i_index)")
169 if (minval(kindex) < 0 )
CALL abor1_sfx(
"SFX_XIOS_SET_DOMAIN : minval(i_index)")
170 CALL xios_set_domain_attr(hname, i_index=kindex, ni=
size(kindex) )
172 IF (
PRESENT(kmask))
THEN 179 if (
size(kmask) > 0 )
then 180 if (
size(kmask) >
size(kindex))
CALL abor1_sfx(
"SFX_XIOS_SET_DOMAIN : size(kmask))")
181 if (maxval(kmask) >
size(kindex)-1 )
CALL abor1_sfx(
"SFX_XIOS_SET_DOMAIN : maxval(data_i_index)")
182 if (minval(kmask) < 0 )
CALL abor1_sfx(
"SFX_XIOS_SET_DOMAIN : minval(data_i_index)")
186 CALL xios_set_domain_attr(hname, data_i_index=kmask, data_ni=
size(kmask))
194 IF (
PRESENT(plat) .AND.
PRESENT(plon))
THEN 195 CALL xios_set_domain_attr(hname, lonvalue_1d=plon,latvalue_1d=plat)
197 CALL abor1_sfx(
"SFX_XIOS_SET_DOMAIN : Must provide lat and lon")
199 IF (
PRESENT(pcorner_lat) .AND.
PRESENT(pcorner_lon) .AND. &
200 (hgrid/=
'CARTESIAN' ))
THEN 201 CALL xios_set_domain_attr(hname, nvertex=4, &
202 bounds_lat_1d=pcorner_lat, bounds_lon_1d=pcorner_lon )
207 IF (
lhook)
CALL dr_hook(
'SFX_XIOS_SET_DOMAIN',1,zhook_handle)
subroutine abor1_sfx(YTEXT)
subroutine sfx_xios_set_domain(HGRID, HNAME, KDIM1, KDIM2, KEXT1, KINDEX, ODMASK, PLON, PLAT, PCORNER_LON, PCORNER_LAT, KMASK)