56 USE modi_get_mesh_corner
58 USE modi_sfx_oasis_check
77 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
78 INTEGER,
INTENT(IN) :: KNPTS
79 INTEGER,
DIMENSION(:),
INTENT(IN) :: KPARAL
84 INTEGER,
PARAMETER :: INC = 4
86 CHARACTER(LEN=4),
PARAMETER :: YSFX_LAND =
'slan' 87 CHARACTER(LEN=4),
PARAMETER :: YSFX_SEA =
'ssea' 88 CHARACTER(LEN=4),
PARAMETER :: YSFX_LAKE =
'slak' 93 REAL,
DIMENSION(U%NSIZE_FULL) :: ZMASK_LAND
94 REAL,
DIMENSION(U%NSIZE_FULL) :: ZMASK_LAKE
95 REAL,
DIMENSION(U%NSIZE_FULL) :: ZMASK_SEA
97 REAL,
DIMENSION(U%NSIZE_FULL,1) :: ZLON
98 REAL,
DIMENSION(U%NSIZE_FULL,1) :: ZLAT
99 REAL,
DIMENSION(U%NSIZE_FULL,1) :: ZAREA
100 INTEGER,
DIMENSION(U%NSIZE_FULL,1) :: IMASK
102 REAL,
DIMENSION(U%NSIZE_FULL,1,INC) :: ZCORNER_LON
103 REAL,
DIMENSION(U%NSIZE_FULL,1,INC) :: ZCORNER_LAT
105 REAL,
DIMENSION(U%NDIM_FULL) :: ZMASK_LAND_TOT
106 REAL,
DIMENSION(U%NDIM_FULL) :: ZMASK_LAKE_TOT
107 REAL,
DIMENSION(U%NDIM_FULL) :: ZMASK_SEA_TOT
109 REAL,
DIMENSION(U%NDIM_FULL,1) :: ZLON_TOT
110 REAL,
DIMENSION(U%NDIM_FULL,1) :: ZLAT_TOT
111 REAL,
DIMENSION(U%NDIM_FULL,1) :: ZAREA_TOT
112 INTEGER,
DIMENSION(U%NDIM_FULL,1) :: IMASK_TOT
114 REAL,
DIMENSION(U%NDIM_FULL,1,INC) :: ZCORNER_LON_TOT
115 REAL,
DIMENSION(U%NDIM_FULL,1,INC) :: ZCORNER_LAT_TOT
117 INTEGER,
DIMENSION(2) :: IVAR_SHAPE
122 INTEGER :: ILUOUT, IFLAG
126 REAL(KIND=JPRB) :: ZHOOK_HANDLE
130 IF (
lhook)
CALL dr_hook(
'SFX_OASIS_PREP',0,zhook_handle)
149 CALL oasis_def_partition(ipart_id,kparal(:),ierr)
151 IF(ierr/=oasis_ok)
THEN 152 WRITE(iluout,*)
'SFX_OASIS_DEFINE: OASIS def partition problem, err = ',ierr
153 CALL abor1_sfx(
'SFX_OASIS_DEFINE: OASIS def partition problem')
163 zlon(:,1)=ug%G%XLON(:)
164 zlat(:,1)=ug%G%XLAT(:)
171 zmask_land(:) = u%XNATURE(:)+u%XTOWN(:)
172 zmask_sea(:) = u%XSEA (:)
173 IF(u%CWATER==
'FLAKE ')
THEN 174 zmask_lake(:) = u%XWATER (:)
179 zmask_sea(:) = u%XSEA (:)+u%XWATER(:)
189 IF (
nrank==
npio)
CALL oasis_start_grids_writing(iflag)
196 zarea(:,1) = ug%G%XMESH_SIZE(:) * zmask_land(:)
198 WHERE(zarea(:,1)>0.0)
212 CALL oasis_write_grid (ysfx_land,u%NDIM_FULL,1,zlon_tot(:,:),zlat_tot(:,:))
213 CALL oasis_write_corner(ysfx_land,u%NDIM_FULL,1,inc,zcorner_lon_tot(:,:,:),zcorner_lat_tot(:,:,:))
214 CALL oasis_write_area (ysfx_land,u%NDIM_FULL,1,zarea_tot(:,:))
215 CALL oasis_write_mask (ysfx_land,u%NDIM_FULL,1,imask_tot(:,:))
225 zarea(:,1) = ug%G%XMESH_SIZE(:) * zmask_lake(:)
227 WHERE(zarea(:,1)>0.0)
241 CALL oasis_write_grid (ysfx_lake,u%NDIM_FULL,1,zlon_tot(:,:),zlat_tot(:,:))
242 CALL oasis_write_corner(ysfx_lake,u%NDIM_FULL,1,inc,zcorner_lon_tot(:,:,:),zcorner_lat_tot(:,:,:))
243 CALL oasis_write_area (ysfx_lake,u%NDIM_FULL,1,zarea_tot(:,:))
244 CALL oasis_write_mask (ysfx_lake,u%NDIM_FULL,1,imask_tot(:,:))
254 zarea(:,1) = ug%G%XMESH_SIZE(:) * zmask_sea(:)
256 WHERE(zarea(:,1)>0.0)
270 CALL oasis_write_grid (ysfx_sea,u%NDIM_FULL,1,zlon_tot(:,:),zlat_tot(:,:))
271 CALL oasis_write_corner(ysfx_sea,u%NDIM_FULL,1,inc,zcorner_lon_tot(:,:,:),zcorner_lat_tot(:,:,:))
272 CALL oasis_write_area (ysfx_sea,u%NDIM_FULL,1,zarea_tot(:,:))
273 CALL oasis_write_mask (ysfx_sea,u%NDIM_FULL,1,imask_tot(:,:))
278 IF (
nrank==
npio)
CALL oasis_terminate_grids_writing()
280 CALL oasis_enddef(ierr)
282 IF(ierr/=oasis_ok)
THEN 283 WRITE(iluout,*)
'SFX_OASIS_PREP: OASIS enddef problem, err = ',ierr
284 CALL abor1_sfx(
'SFX_OASIS_PREP: OASIS enddef problem')
291 IF (
lhook)
CALL dr_hook(
'SFX_OASIS_PREP',1,zhook_handle)
subroutine get_mesh_corner(UG, KLUOUT, PCORNER_LAT, PCORNER_LON)
subroutine sfx_oasis_check(IO, U, KLUOUT)
subroutine abor1_sfx(YTEXT)
subroutine sfx_oasis_prep(IO, S, UG, U, HPROGRAM, KNPTS, KPARAL)
subroutine get_luout(HPROGRAM, KLUOUT)