5 SUBROUTINE ol_define_dim (UG, KSIZE_FULL, HPROGRAM, KLUOUT, KNI, &
6 KDIM1, HUNIT1, HUNIT2, PX, PY, KDIMS, &
7 KDDIM, HNAME_DIM, KNPATCH, KNSNLAYER, PLAT, PLON)
47 USE modi_get_grid_coord
48 USE modi_get_ign_maskall
68 INTEGER,
INTENT(IN) :: KSIZE_FULL
70 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
71 INTEGER,
INTENT(IN) :: KLUOUT
72 INTEGER,
INTENT(IN) :: KNI
73 INTEGER,
INTENT(OUT) :: KDIM1
74 CHARACTER(LEN=13) ,
DIMENSION(:),
INTENT(OUT) :: HUNIT1, HUNIT2
76 REAL,
DIMENSION(:),
POINTER :: PX, PY
77 INTEGER,
DIMENSION(:),
POINTER :: KDIMS, KDDIM
78 CHARACTER(LEN=100),
DIMENSION(:),
POINTER :: HNAME_DIM
79 INTEGER,
OPTIONAL,
INTENT(IN) :: KNPATCH
80 INTEGER,
OPTIONAL,
INTENT(IN) :: KNSNLAYER
81 REAL,
DIMENSION(:),
OPTIONAL,
POINTER :: PLAT, PLON
83 REAL,
DIMENSION(:),
ALLOCATABLE :: ZXFULL, ZYFULL, ZDXFULL, ZDYFULL, ZLAT_XY, ZLON_XY
84 REAL,
DIMENSION(KNI) :: ZXX, ZYY
85 REAL :: ZLAT0,ZLON0,ZRPK,ZBETA,ZLATOR,ZLONOR,ZCODIL,&
87 CHARACTER(LEN=3) :: YTYPE
88 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INLOPA
89 INTEGER :: JJ, ILAMBERT, IFULL, IDIM1, IL, IIMAX, IJMAX
90 INTEGER :: INDIMS, INDIMSMAX, IDIM2, INLATI
91 INTEGER :: INSNLAYER, INPATCH, ID
93 REAL(KIND=JPRB) :: ZHOOK_HANDLE
101 IF (
PRESENT(knsnlayer)) insnlayer = knsnlayer
104 IF (
PRESENT(knpatch)) inpatch = knpatch
110 IF (ug%G%CGRID.EQ.
'LONLAT REG'.OR.ug%G%CGRID.EQ.
'LONLATVAL '.OR.ug%G%CGRID.EQ.
'LONLAT ROT') ytype=
'LON' 114 IF ( ug%G%CGRID.EQ.
'CONF PROJ ' .OR. ug%G%CGRID.EQ.
'CARTESIAN '&
115 .OR. ug%G%CGRID.EQ.
'LONLAT REG' .OR. ug%G%CGRID.EQ.
'IGN' )
THEN 116 IF (
ASSOCIATED(ug%XGRID_FULL_PAR))
THEN 117 CALL get_grid_dim(ug%G%CGRID,ug%NGRID_FULL_PAR,ug%XGRID_FULL_PAR,grect,kdim1,idim2)
118 ELSEIF (
ASSOCIATED(ug%G%XGRID_PAR))
THEN 119 CALL get_grid_dim(ug%G%CGRID,ug%G%NGRID_PAR,ug%G%XGRID_PAR,grect,kdim1,idim2)
125 IF ( ug%G%CGRID.EQ.
'IGN' )
CALL get_gridtype_ign(ug%XGRID_FULL_PAR,kl=il,kdimx=iimax,kdimy=ijmax)
128 IF ( inpatch/=0 .AND. insnlayer/=0 )
THEN 130 ELSEIF ( inpatch/=0 .OR. insnlayer/=0 )
THEN 136 IF ( kdim1.NE.0 )
THEN 138 ELSEIF ( ug%G%CGRID==
"GAUSS " )
THEN 140 ELSEIF (ug%G%CGRID/=
"LONLATVAL ".AND.(ug%G%CGRID/=
"IGN ".OR.iimax*ijmax==il) )
THEN 146 ALLOCATE(kdims(indims))
147 ALLOCATE(kddim(indims))
148 ALLOCATE(hname_dim(indims))
151 IF ( kdim1.NE.0 )
THEN 155 IF (ytype.EQ.
'LON')
THEN 158 hunit1(1) =
'degrees_east' 159 hunit2(1) =
'degrees_north' 175 hname_dim(1) =
'Number_of_points' 177 IF (ug%G%CGRID==
"GAUSS ")
THEN 179 hname_dim(2) =
"latitude" 180 hname_dim(3) =
"longitude" 181 hunit1(1) =
'degrees_east' 182 hunit2(1) =
'degrees_north' 184 ALLOCATE(inlopa(inlati))
187 kdims(3) = maxval(inlopa)
190 ELSEIF (ug%G%CGRID/=
"LONLATVAL ".AND.(ug%G%CGRID/=
"IGN ".OR.iimax*ijmax==il))
THEN 192 IF (ytype.EQ.
'LON')
THEN 195 hunit1(1) =
'degrees_east' 196 hunit2(1) =
'degrees_north' 205 IF (ug%G%CGRID==
"CONF PROJ ")
THEN 207 ELSEIF(ug%G%CGRID==
"CARTESIAN ")
THEN 209 ELSEIF(ug%G%CGRID==
"LONLAT REG")
THEN 211 ELSEIF(ug%G%CGRID==
"LONLATROT ")
THEN 233 IF (
ASSOCIATED(ug%XGRID_FULL_PAR))
THEN 234 CALL get_grid_coord(ug%G%CGRID, ug%G%NGRID_PAR, ug%G%XGRID_PAR, ksize_full, &
235 kluout,px=px,py=py,kl=kni,hgrid=ug%G%CGRID,pgrid_par=ug%XGRID_FULL_PAR)
236 ELSEIF (
ASSOCIATED(ug%G%XGRID_PAR))
THEN 237 CALL get_grid_coord(ug%G%CGRID, ug%G%NGRID_PAR, ug%G%XGRID_PAR, ksize_full, &
238 kluout,px=px,py=py,kl=kni,hgrid=ug%G%CGRID,pgrid_par=ug%G%XGRID_PAR)
241 ELSEIF ( ug%G%CGRID.EQ.
'CONF PROJ '.OR. ug%G%CGRID.EQ.
'CARTESIAN '.OR. &
242 ug%G%CGRID.EQ.
'LONLAT REG' )
THEN 244 IF (
ASSOCIATED(ug%XGRID_FULL_PAR))
THEN 245 CALL get_grid_coord(ug%G%CGRID, ug%G%NGRID_PAR, ug%G%XGRID_PAR, ksize_full, &
246 kluout,px=zxx,py=zyy,kl=kni,hgrid=ug%G%CGRID,pgrid_par=ug%XGRID_FULL_PAR)
247 ELSEIF (
ASSOCIATED(ug%G%XGRID_PAR))
THEN 248 CALL get_grid_coord(ug%G%CGRID, ug%G%NGRID_PAR, ug%G%XGRID_PAR, ksize_full, &
249 kluout,px=zxx,py=zyy,kl=kni,hgrid=ug%G%CGRID,pgrid_par=ug%G%XGRID_PAR)
252 IF (
ASSOCIATED(px))
THEN 257 IF (
ASSOCIATED(py))
THEN 259 py(jj)=zyy((jj-1)*(kni/
SIZE(py))+1)
263 ELSEIF(ug%G%CGRID.EQ.
'IGN ')
THEN 269 IF (
PRESENT(plat) .AND.
PRESENT(plon))
THEN 271 IF (ug%G%CGRID==
"IGN ".AND.iimax*ijmax/=il.AND.
lwrite_coord)
THEN 273 ALLOCATE(zxfull(ifull),zyfull(ifull))
274 ALLOCATE(plat(ifull),plon(ifull))
276 CALL get_gridtype_ign(ug%XGRID_FULL_PAR,klambert=ilambert,px=zxfull,py=zyfull)
277 CALL latlon_ign(ilambert,zxfull,zyfull,plat,plon)
279 DEALLOCATE(zxfull, zyfull)
281 ELSEIF (ug%G%CGRID==
"LONLATVAL ")
THEN 283 ALLOCATE(plat(ifull),plon(ifull))
286 ELSEIF (ug%G%CGRID==
"GAUSS ")
THEN 288 ALLOCATE(plat(ifull),plon(ifull))
293 ALLOCATE(plat(0),plon(0))
300 IF ( inpatch/=0 )
THEN 301 kdims(indims-1) = knpatch
302 hname_dim(indims-1) =
'Number_of_Patches' 305 IF ( insnlayer/=0 )
THEN 307 IF (inpatch/=0) id = 2
308 kdims(indims-id) = insnlayer
309 hname_dim(indims-id) =
'snow_layer' 313 IF (hprogram/=
'NOTIME ')
THEN 314 kdims(indims) = nf90_unlimited
315 hname_dim(indims) =
'time' 318 hname_dim(indims) =
'char_len' subroutine get_gridtype_ign(PGRID_PAR, KLAMBERT, KL, PX, PY, PDX, PDY, KDIMX, KDIMY, PXALL, PYALL)
subroutine get_gridtype_lonlatval(PGRID_PAR, KL, PX, PY, PDX, PDY)
subroutine get_grid_dim(HGRID, KGRID_PAR, PGRID_PAR, ORECT, KDIM1, KDIM
subroutine ol_define_dim(UG, KSIZE_FULL, HPROGRAM, KLUOUT, KNI, KDIM1, HUNIT1, HUNIT2, PX, PY, KDIMS, KDDIM, HNAME_DIM, KNPATCH, KNSNLAYER, PLAT, PLON)
subroutine latlon_ign(KLAMBERT, PX, PY, PLAT, PLON)
subroutine get_gridtype_lonlat_reg(PGRID_PAR, PLONMIN, PLONMAX, PLATMIN, PLATMAX, KLON, KLAT, KL, PLON, PLAT)
subroutine get_grid_coord(HGRID_IN, KGRID_PAR_IN, PGRID_PAR_IN, K
subroutine get_gridtype_lonlat_rot(PGRID_PAR,
subroutine get_ign_maskall(UG, KNI, PX, PY, OTOT)
subroutine get_gridtype_conf_proj(PGRID_PAR, PLAT0, PLON0, PRPK, PBETA
subroutine get_gridtype_gauss(PGRID_PAR, KNLATI, PLAPO, PLOPO, PCODIL, KNLOPA, KL, PLAT, PLON, PLAT_XY, PLON_XY, PMESH_SIZE, PLONINF, PLATINF, PLONSUP, PLATSUP)
subroutine get_gridtype_cartesian(PGRID_PAR, PLAT0, PLON0,
integer, dimension(:), allocatable nmask_ign