56 USE modi_get_mesh_corner
58 USE modi_sfx_oasis_check
64 USE yomhook
,ONLY : lhook, dr_hook
65 USE parkind1
,ONLY : jprb
73 TYPE(isba_t
),
INTENT(INOUT) :: i
77 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
83 INTEGER,
PARAMETER :: inc = 4
85 CHARACTER(LEN=4),
PARAMETER :: ysfx_land =
'slan'
86 CHARACTER(LEN=4),
PARAMETER :: ysfx_qsb =
'sdra'
87 CHARACTER(LEN=4),
PARAMETER :: ysfx_gw =
'sgw '
88 CHARACTER(LEN=4),
PARAMETER :: ysfx_sea =
'ssea'
89 CHARACTER(LEN=4),
PARAMETER :: ysfx_lake =
'slak'
94 REAL,
DIMENSION(U%NDIM_FULL) :: zgw
95 REAL,
DIMENSION(U%NDIM_FULL) :: zmask_land
96 REAL,
DIMENSION(U%NDIM_FULL) :: zmask_lake
97 REAL,
DIMENSION(U%NDIM_FULL) :: zmask_sea
99 REAL,
DIMENSION(U%NDIM_FULL,1) :: zlon
100 REAL,
DIMENSION(U%NDIM_FULL,1) :: zlat
101 REAL,
DIMENSION(U%NDIM_FULL,1) :: zarea
102 INTEGER,
DIMENSION(U%NDIM_FULL,1) :: imask
104 REAL,
DIMENSION(U%NDIM_FULL,1,INC) :: zcorner_lon
105 REAL,
DIMENSION(U%NDIM_FULL,1,INC) :: zcorner_lat
107 INTEGER,
DIMENSION(2) :: ivar_shape
112 INTEGER :: iluout, iflag
116 REAL(KIND=JPRB) :: zhook_handle
120 IF (lhook) CALL dr_hook(
'SFX_OASIS_PREP',0,zhook_handle)
141 iluout,zcorner_lat(:,1,:),zcorner_lon(:,1,:))
146 IF(lcpl_gw.AND.i%LGW)
THEN
148 WHERE(zgw(:)==xundef)
150 ELSEWHERE(zgw(:)>0.0)
162 zmask_land(:) = u%XNATURE(:)+u%XTOWN(:)
163 zmask_sea(:) = u%XSEA (:)
164 IF(u%CWATER==
'FLAKE ')
THEN
165 zmask_lake(:) = u%XWATER (:)
167 zmask_lake(:) = xundef
169 IF(lcpl_sea.AND.lwater)
THEN
170 zmask_sea(:) = u%XSEA (:)+u%XWATER(:)
180 CALL oasis_start_grids_writing(iflag)
187 zarea(:,1) = ug%XMESH_SIZE(:) * zmask_land(:)
189 WHERE(zarea(:,1)>0.0)
194 CALL oasis_write_grid(ysfx_land,u%NDIM_FULL,1,zlon(:,:),zlat(:,:))
195 CALL oasis_write_corner(ysfx_land,u%NDIM_FULL,1,inc,zcorner_lon(:,:,:),zcorner_lat(:,:,:))
196 CALL oasis_write_area(ysfx_land,u%NDIM_FULL,1,zarea(:,:))
197 CALL oasis_write_mask(ysfx_land,u%NDIM_FULL,1,imask(:,:))
199 zarea(:,1) = ug%XMESH_SIZE(:) * zmask_land(:) * (1.0-zgw(:))
201 WHERE(zarea(:,1)>0.0)
206 CALL oasis_write_grid(ysfx_qsb,u%NDIM_FULL,1,zlon(:,:),zlat(:,:))
207 CALL oasis_write_corner(ysfx_qsb,u%NDIM_FULL,1,inc,zcorner_lon(:,:,:),zcorner_lat(:,:,:))
208 CALL oasis_write_area(ysfx_qsb,u%NDIM_FULL,1,zarea(:,:))
209 CALL oasis_write_mask(ysfx_qsb,u%NDIM_FULL,1,imask(:,:))
216 zarea(:,1) = ug%XMESH_SIZE(:) * zgw(:)
218 WHERE(zarea(:,1)>0.0)
223 CALL oasis_write_grid(ysfx_gw,u%NDIM_FULL,1,zlon(:,:),zlat(:,:))
224 CALL oasis_write_corner(ysfx_gw,u%NDIM_FULL,1,inc,zcorner_lon(:,:,:),zcorner_lat(:,:,:))
225 CALL oasis_write_area(ysfx_gw,u%NDIM_FULL,1,zarea(:,:))
226 CALL oasis_write_mask(ysfx_gw,u%NDIM_FULL,1,imask(:,:))
233 zarea(:,1) = ug%XMESH_SIZE(:) * zmask_lake(:)
235 WHERE(zarea(:,1)>0.0)
240 CALL oasis_write_grid(ysfx_lake,u%NDIM_FULL,1,zlon(:,:),zlat(:,:))
241 CALL oasis_write_corner(ysfx_lake,u%NDIM_FULL,1,inc,zcorner_lon(:,:,:),zcorner_lat(:,:,:))
242 CALL oasis_write_area(ysfx_lake,u%NDIM_FULL,1,zarea(:,:))
243 CALL oasis_write_mask(ysfx_lake,u%NDIM_FULL,1,imask(:,:))
250 zarea(:,1) = ug%XMESH_SIZE(:) * zmask_sea(:)
252 WHERE(zarea(:,1)>0.0)
257 CALL oasis_write_grid(ysfx_sea,u%NDIM_FULL,1,zlon(:,:),zlat(:,:))
258 CALL oasis_write_corner(ysfx_sea,u%NDIM_FULL,1,inc,zcorner_lon(:,:,:),zcorner_lat(:,:,:))
259 CALL oasis_write_area(ysfx_sea,u%NDIM_FULL,1,zarea(:,:))
260 CALL oasis_write_mask(ysfx_sea,u%NDIM_FULL,1,imask(:,:))
263 CALL oasis_terminate_grids_writing()
265 CALL oasis_enddef(ierr)
267 IF(ierr/=oasis_ok)
THEN
268 WRITE(iluout,*)
'SFX_OASIS_PREP: OASIS enddef problem, err = ',ierr
269 CALL
abor1_sfx(
'SFX_OASIS_PREP: OASIS enddef problem')
276 IF (lhook) CALL dr_hook(
'SFX_OASIS_PREP',1,zhook_handle)
subroutine get_mesh_corner(UG, KLUOUT, PCORNER_LAT, PCORNER_LON)
subroutine abor1_sfx(YTEXT)
subroutine sfx_oasis_check(I, U, KLUOUT)
subroutine get_luout(HPROGRAM, KLUOUT)
subroutine sfx_oasis_prep(I, UG, U, HPROGRAM)