59 INTEGER,
INTENT(IN) :: KGRID_PAR
60 REAL,
DIMENSION(KGRID_PAR),
INTENT(IN) :: PGRID_PAR
61 LOGICAL,
DIMENSION(720,360),
INTENT(OUT) :: OLATLONMASK
74 REAL,
DIMENSION(:),
ALLOCATABLE :: ZDX
75 REAL,
DIMENSION(:),
ALLOCATABLE :: ZDY
76 REAL,
DIMENSION(:),
ALLOCATABLE :: ZX
77 REAL,
DIMENSION(:),
ALLOCATABLE :: ZY
78 REAL,
DIMENSION(:),
ALLOCATABLE :: ZXCORNER
79 REAL,
DIMENSION(:),
ALLOCATABLE :: ZYCORNER
80 REAL,
DIMENSION(:),
ALLOCATABLE :: ZLON
81 REAL,
DIMENSION(:),
ALLOCATABLE :: ZLAT
82 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZLON2D
83 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZLAT2D
84 REAL,
DIMENSION(720,360) :: ZX_MASK
85 REAL,
DIMENSION(720,360) :: ZY_MASK
86 INTEGER,
DIMENSION(720,360) :: ICOUNT1
87 INTEGER,
DIMENSION(720,360) :: ICOUNT2
88 REAL,
DIMENSION(720) :: ZLON_MASK
89 REAL,
DIMENSION(720) :: ZLAT_MASK
103 REAL(KIND=JPRB) :: ZHOOK_HANDLE
106 IF (
lhook)
CALL dr_hook(
'LATLONMASK_CONF_PROJ',0,zhook_handle)
110 ALLOCATE(zx(iimax*ijmax))
111 ALLOCATE(zy(iimax*ijmax))
112 ALLOCATE(zdx(iimax*ijmax))
113 ALLOCATE(zdy(iimax*ijmax))
114 ALLOCATE(zxcorner((iimax+1)*(ijmax+1)))
115 ALLOCATE(zycorner((iimax+1)*(ijmax+1)))
116 ALLOCATE(zlon((iimax+1)*(ijmax+1)))
117 ALLOCATE(zlat((iimax+1)*(ijmax+1)))
121 olatlonmask(:,:) = .false.
130 zxmin = minval(zx) - 3.* maxval(zdx)/2.
131 zxmax = maxval(zx) + 3.* maxval(zdx)/2.
133 zymin = minval(zy) - 3.* maxval(zdy)/2.
134 zymax = maxval(zy) + 3.* maxval(zdy)/2.
138 zxcorner(ji+(jj-1)*(iimax+1)) = zx(ji+(jj-1)*iimax) - 0.5*zdx(ji+(jj
141 zxcorner(iimax+1+(jj-1)*(iimax+1)) = zx(iimax+(jj-1)*iimax) + 0.5*zdx(iimax
145 zxcorner(ji+ijmax*(iimax+1)) = zx(ji+(ijmax-1)*iimax) - 0.5*zdx(ji+(ijmax
148 zxcorner((ijmax+1)*(iimax+1)) = zx(ijmax*iimax) + 0.5*zdx(ijmax*iimax)
149 zycorner((ijmax+1)*(iimax+1)) = zy(ijmax*iimax) + 0.5*zdy(ijmax*iimax)
161 zlon_mask(:)= (/ ( jlon /2. - 0.25 , jlon=1,720 ) /)
167 plat0=zlat0,plon0=zlon0,prpk=zrpk,
170 zlon_mask(:)=zlon_mask(:)+nint((zlon0-zlon_mask(:))/360.)*360.
175 DO jlat=1,
SIZE(olatlonmask,2)
176 zlat_mask(:) = (jlat-180)/2. - 0.25
177 CALL xy_conf_proj(zlat0,zlon0,zrpk,zbeta,zlator,zlonor, &
178 zx_mask(:,jlat),zy_mask(:,jlat), &
179 zlat_mask(:),zlon_mask(:) )
185 WHERE ( zx_mask(:,:) >= zxmin .AND. zx_mask(:,:) <= zxmax &
186 .AND. zy_mask(:,:) >= zymin .AND. zy_mask(:,:) <= zymax )
187 olatlonmask(:,:) = .true.
196 zxcorner,zycorner,zlat,zlon )
201 zlon(:) = zlon(:) + nint((180.-zlon(:))/360.)*360.
209 ALLOCATE(zlat2d(iimax+1,ijmax+1))
210 ALLOCATE(zlon2d(iimax+1,ijmax+1))
214 zlat2d(ji,jj) = zlat(ji+(jj-1)*(iimax+1))
215 zlon2d(ji,jj) = zlon(ji+(jj-1)*(iimax+1))
225 jlat = min( 1 + int( ( zlat2d(ji,jj) + 90. ) * 2. ) ,360)
226 jlon = min( 1 + int( ( zlon2d(ji,jj) ) * 2. ) ,720)
228 icount1(jlon,jlat) = icount1(jlon,jlat) + 1
237 icount2(jlon,jlat) = icount2(jlon,jlat) + 1
242 jlat = min( 1 + int( ( zlat2d(min(ji+1,iimax),jj) + 90. ) * 2. ) ,36
247 jlat = min( 1 + int( ( zlat2d(ji,min(jj+1,ijmax)) + 90. ) * 2. ) ,36
252 jlat = min( 1 + int( ( zlat2d(max(ji-1,1),jj) + 90. ) * 2. ) ,360)
253 jlon = min( 1 + int( ( zlon2d(max(ji-1,1),jj) ) * 2. ) ,720)
254 icount1(jlon,jlat) = icount1(jlon,jlat) + 1
255 icount2(jlon,jlat) = icount2(jlon,jlat) + 1
257 jlat = min( 1 + int( ( zlat2d(ji,max(jj-1,1)) + 90. ) * 2. ) ,360)
258 jlon = min( 1 + int( ( zlon2d(ji,max(jj-1,1)) ) * 2. ) ,720)
259 icount1(jlon,jlat) = icount1(jlon,jlat) + 1
260 icount2(jlon,jlat) = icount2(jlon,jlat) + 1
268 WHERE (icount1(:,:) > 0 .AND. icount2(:,:) == 0)
269 olatlonmask(:,:) = .false.
272 WHERE (icount1(:,:) > 0 .AND. icount2(:,:) > 0)
273 olatlonmask(:,:) = .true.
276 zlat_mask(1:360)= (/ ( (jlat-180)/2. - 0.25 , jlat=1,360 ) /)
280 IF ( (icount1(jlon,jlat) > 0 .OR. olatlonmask(jlon,jlat)) .AND. iverb
281 WRITE(*,
'(2(I3,1X),2(F6.2,1X),2(F8.0,1X),L1)') jlon,jlat,zlon_mask
295 IF (
lhook)
CALL dr_hook(
'LATLONMASK_CONF_PROJ',1,zhook_handle)
subroutine latlonmask_conf_proj(KGRID_PAR, PGRID_PAR, OLATLONMASK)
subroutine latlon_conf_proj(PLAT0, PLON0, PRPK, PBETA, PLATOR, PLONOR,
subroutine xy_conf_proj(PLAT0, PLON0, PRPK, PBETA, PLATOR, PLONOR, PX, PY, PLAT, PLON)
subroutine get_gridtype_conf_proj(PGRID_PAR, PLAT0, PLON0, PRPK, PBETA