68 INTEGER,
INTENT(IN) :: KLISTING
69 INTEGER,
INTENT(IN) :: KLON
70 INTEGER,
INTENT(IN) :: KLAT
75 INTEGER,
PARAMETER :: INCORNER = 4
76 INTEGER,
PARAMETER :: IG_PARSIZE = 3
77 INTEGER,
PARAMETER :: IG_NSEGMENTS = 1
78 INTEGER,
DIMENSION(2),
PARAMETER :: IVAR_NODIMS = (/2,1/)
80 CHARACTER(LEN=4) :: YCPL_LAND =
'tlan' 81 CHARACTER(LEN=4) :: YCPL_GW =
'tgw ' 82 CHARACTER(LEN=4) :: YCPL_FLD =
'tfld' 83 CHARACTER(LEN=4) :: YCPL_SEA =
'tsea' 84 CHARACTER(LEN=4) :: YCPL_GRE =
'tgre' 85 CHARACTER(LEN=4) :: YCPL_ANT =
'tant' 91 REAL,
DIMENSION(KLON) :: ZLON1D
92 REAL,
DIMENSION(KLAT) :: ZLAT1D
93 REAL,
DIMENSION(KLON,KLAT) :: ZLON
94 REAL,
DIMENSION(KLON,KLAT) :: ZLAT
95 REAL,
DIMENSION(KLON,KLAT) :: ZAREA
96 INTEGER,
DIMENSION(KLON,KLAT) :: IMASK
98 REAL,
DIMENSION(KLON,KLAT,INCORNER) :: ZCORNER_LON
99 REAL,
DIMENSION(KLON,KLAT,INCORNER) :: ZCORNER_LAT
101 INTEGER,
DIMENSION(IG_PARSIZE) :: IPARAL
102 INTEGER,
DIMENSION(2,2) :: IVAR_SHAPE
110 INTEGER :: JLON, JLAT, JC, IFLAG
112 REAL(KIND=JPRB) :: ZHOOK_HANDLE
116 IF (
lhook)
CALL dr_hook(
'TRIP_OASIS_PREP',0,zhook_handle)
125 CALL get_trip_grid(tpg%XTRIP_GRID,pres=zres,plon=zlon1d,plat=zlat1d)
141 zlon(jlon,jlat)=zlon1d(jlon)
142 zlat(jlon,jlat)=zlat1d(jlat)
146 zcorner_lon(jlon,jlat,1) = zlon1d(jlon) - zres
147 zcorner_lat(jlon,jlat,1) = zlat1d(jlat) - zres
149 zcorner_lon(jlon,jlat,3) = zlon1d(jlon) + zres
150 zcorner_lat(jlon,jlat,3) = zlat1d(jlat) + zres
155 zcorner_lon(:,:,4) = zcorner_lon(:,:,1)
156 zcorner_lat(:,:,4) = zcorner_lat(:,:,3)
158 zcorner_lon(:,:,2) = zcorner_lon(:,:,3)
159 zcorner_lat(:,:,2) = zcorner_lat(:,:,1)
161 CALL oasis_start_grids_writing(iflag)
170 WHERE(tpg%GMASK(:,:))
176 zarea(:,:) = tpg%XAREA(:,:) * (1.0-imask(:,:))
178 CALL oasis_write_grid (ycpl_land,klon,klat,zlon(:,:),zlat(:,:))
179 CALL oasis_write_corner(ycpl_land,klon,klat,incorner,zcorner_lon(:,:,:),zcorner_lat(:,:,:))
180 CALL oasis_write_area (ycpl_land,klon,klat,zarea(:,:))
181 CALL oasis_write_mask (ycpl_land,klon,klat,imask(:,:))
190 WHERE(tpg%GMASK_GW(:,:))
196 zarea(:,:) = tpg%XAREA(:,:) * (1.0-imask(:,:))
198 CALL oasis_write_grid (ycpl_gw,klon,klat,zlon(:,:),zlat(:,:))
199 CALL oasis_write_corner(ycpl_gw,klon,klat,incorner,zcorner_lon(:,:,:),zcorner_lat(:,:,:))
200 CALL oasis_write_area (ycpl_gw,klon,klat,zarea(:,:))
201 CALL oasis_write_mask (ycpl_gw,klon,klat,imask(:,:))
210 WHERE(tpg%GMASK_FLD(:,:))
216 zarea(:,:) = tpg%XAREA(:,:) * (1.0-imask(:,:))
218 CALL oasis_write_grid (ycpl_fld,klon,klat,zlon(:,:),zlat(:,:))
219 CALL oasis_write_corner(ycpl_fld,klon,klat,incorner,zcorner_lon(:,:,:),zcorner_lat(:,:,:))
220 CALL oasis_write_area (ycpl_fld,klon,klat,zarea(:,:))
221 CALL oasis_write_mask (ycpl_fld,klon,klat,imask(:,:))
231 WHERE(tpg%NGRCN(:,:)==9.OR.tpg%NGRCN(:,:)==12)
237 zarea(:,:) = tpg%XAREA(:,:) * (1.0-imask(:,:))
239 CALL oasis_write_grid (ycpl_sea,klon,klat,zlon(:,:),zlat(:,:))
240 CALL oasis_write_corner(ycpl_sea,klon,klat,incorner,zcorner_lon(:,:,:),zcorner_lat(:,:,:))
241 CALL oasis_write_area (ycpl_sea,klon,klat,zarea(:,:))
242 CALL oasis_write_mask (ycpl_sea,klon,klat,imask(:,:))
254 WHERE(tpg%GMASK_GRE(:,:))
260 zarea(:,:) = tpg%XAREA(:,:) * (1.0-imask(:,:))
262 CALL oasis_write_grid (ycpl_gre,klon,klat,zlon(:,:),zlat(:,:))
263 CALL oasis_write_corner(ycpl_gre,klon,klat,incorner,zcorner_lon(:,:,:),zcorner_lat(:,:,:))
264 CALL oasis_write_area (ycpl_gre,klon,klat,zarea(:,:))
265 CALL oasis_write_mask (ycpl_gre,klon,klat,imask(:,:))
270 WHERE(tpg%GMASK_ANT(:,:))
276 zarea(:,:) = tpg%XAREA(:,:) * (1.0-imask(:,:))
278 CALL oasis_write_grid (ycpl_ant,klon,klat,zlon(:,:),zlat(:,:))
279 CALL oasis_write_corner(ycpl_ant,klon,klat,incorner,zcorner_lon(:,:,:),zcorner_lat(:,:,:))
280 CALL oasis_write_area (ycpl_ant,klon,klat,zarea(:,:))
281 CALL oasis_write_mask (ycpl_ant,klon,klat,imask(:,:))
285 CALL oasis_terminate_grids_writing()
287 CALL oasis_enddef(ierr)
289 IF(ierr/=oasis_ok)
THEN 290 WRITE(klisting,*)
'TRIP_OASIS_PREP: OASIS enddef problem, err = ',ierr
291 CALL abort_trip(
'TRIP_OASIS_PREP: OASIS enddef problem')
298 IF (
lhook)
CALL dr_hook(
'TRIP_OASIS_PREP',1,zhook_handle)
subroutine get_trip_grid(PTRIP_GRID, PLONMIN, PLONMAX, PLATMIN, PLATMAX, PRES, KLON, KLAT, PLON, PLAT)
subroutine trip_oasis_prep(TPG, KLISTING, KLON, KLAT)
subroutine abort_trip(YTEXT)