13 USE yomhook
,ONLY : lhook, dr_hook
14 USE parkind1
,ONLY : jprb
22 kdimx,kdimy,pxall,pyall )
50 INTEGER,
INTENT(IN) :: klambert
57 REAL,
DIMENSION(:),
INTENT(IN) :: px
58 REAL,
DIMENSION(:),
INTENT(IN) :: py
59 REAL,
DIMENSION(:),
INTENT(IN) :: pdx
60 REAL,
DIMENSION(:),
INTENT(IN) :: pdy
61 INTEGER,
INTENT(IN) :: kdimx
62 INTEGER,
INTENT(IN) :: kdimy
63 REAL,
DIMENSION(KDIMX),
INTENT(IN) :: pxall
64 REAL,
DIMENSION(KDIMY),
INTENT(IN) :: pyall
65 REAL,
DIMENSION(:),
POINTER :: pgrid_par
72 REAL(KIND=JPRB) :: zhook_handle
74 IF (lhook) CALL dr_hook(
'MODE_GRIDTYPE_IGN:PUT_GRIDTYPE_IGN',0,zhook_handle)
76 ALLOCATE(pgrid_par(4*il+4+kdimx+kdimy))
77 pgrid_par(1) = float(klambert)
78 pgrid_par(2) = float(il)
79 pgrid_par(3:il+2) = px(:)
80 pgrid_par(il+3:2*il+2) = py(:)
81 pgrid_par(2*il+3:3*il+2) = pdx(:)
82 pgrid_par(3*il+3:4*il+2) = pdy(:)
83 pgrid_par(4*il+3) = float(kdimx)
84 pgrid_par(4*il+4) = float(kdimy)
85 pgrid_par(4*il+5:4*il+4+kdimx) = pxall(:)
86 pgrid_par(4*il+5+kdimx:4*il+4+kdimx+kdimy) = pyall(:)
87 IF (lhook) CALL dr_hook(
'MODE_GRIDTYPE_IGN:PUT_GRIDTYPE_IGN',1,zhook_handle)
96 kdimx,kdimy,pxall,pyall )
120 INTEGER,
INTENT(OUT),
OPTIONAL :: kl
121 INTEGER,
INTENT(OUT),
OPTIONAL :: klambert
128 REAL,
DIMENSION(:),
INTENT(OUT),
OPTIONAL :: px
129 REAL,
DIMENSION(:),
INTENT(OUT),
OPTIONAL :: py
130 REAL,
DIMENSION(:),
INTENT(OUT),
OPTIONAL :: pdx
131 REAL,
DIMENSION(:),
INTENT(OUT),
OPTIONAL :: pdy
132 INTEGER,
INTENT(OUT),
OPTIONAL :: kdimx
133 INTEGER,
INTENT(OUT),
OPTIONAL :: kdimy
134 REAL,
DIMENSION(:),
INTENT(OUT),
OPTIONAL :: pxall
135 REAL,
DIMENSION(:),
INTENT(OUT),
OPTIONAL :: pyall
137 REAL,
DIMENSION(:),
INTENT(IN) :: pgrid_par
143 INTEGER :: il, idimx, idimy
145 REAL(KIND=JPRB) :: zhook_handle
147 IF (lhook) CALL dr_hook(
'MODE_GRIDTYPE_IGN:GET_GRIDTYPE_IGN',0,zhook_handle)
148 IF (present(klambert)) klambert = nint(pgrid_par(1))
149 IF (present(kl)) kl = nint(pgrid_par(2))
151 il = nint(pgrid_par(2))
153 IF (present(px)) px(:) = pgrid_par(2+1:2+il)
155 IF (present(py)) py(:) = pgrid_par(2+il+1:2+2*il)
157 IF (present(pdx)) pdx(:) = pgrid_par(2+2*il+1:2+3*il)
159 IF (present(pdy)) pdy(:) = pgrid_par(2+3*il+1:2+4*il)
161 IF (present(kdimx)) kdimx = nint(pgrid_par(3+4*il))
163 IF (present(kdimy)) kdimy = nint(pgrid_par(4+4*il))
165 IF (present(pxall))
THEN
166 idimx= nint(pgrid_par(3+4*il))
167 pxall(:)= pgrid_par(5+4*il:4+4*il+idimx)
170 IF (present(pyall))
THEN
171 idimx= nint(pgrid_par(3+4*il))
172 idimy= nint(pgrid_par(4+4*il))
173 pyall(:)= pgrid_par(5+4*il+idimx:4+4*il+idimx+idimy)
176 IF (lhook) CALL dr_hook(
'MODE_GRIDTYPE_IGN:GET_GRIDTYPE_IGN',1,zhook_handle)
228 INTEGER,
INTENT(IN) :: klambert
229 REAL,
DIMENSION(:),
INTENT(IN) :: px,py
232 REAL,
DIMENSION(:),
INTENT(OUT):: plat,plon
238 REAL,
DIMENSION(SIZE(PX)) :: zgamma
239 REAL,
DIMENSION(SIZE(PX)) :: zr
240 REAL,
DIMENSION(SIZE(PX)) :: zlatiso
244 REAL(KIND=JPRB) :: zhook_handle
250 IF (lhook) CALL dr_hook(
'MODE_GRIDTYPE_IGN:LATLON_IGN',0,zhook_handle)
251 zr(:) =sqrt( (px(:)-xxs(klambert))**2 + (py(:)-xys(klambert))**2 )
252 zgamma(:)= atan( (px(:)-xxs(klambert)) / (xys(klambert)-py(:)) )
256 plon(:)=xlonp(klambert) +zgamma(:)/xn(klambert) *180./xpi
260 zlatiso(:)=-1./xn(klambert) * alog(abs(zr(:)/xc(klambert)))
264 zlat0 =2. * atan(exp(zlatiso(jj))) - xpi/2.
266 plat(jj) = 2. * atan( &
267 ( (1+xecc(klambert)*sin(zlat0))/(1-xecc(klambert)*sin(zlat0)) )**(xecc(klambert)/2.) &
268 *exp(zlatiso(jj)) ) -xpi/2.
270 IF (abs(plat(jj) - zlat0) < xcvglat )
EXIT
276 plat(:)=plat(:) *180./xpi
278 IF (lhook) CALL dr_hook(
'MODE_GRIDTYPE_IGN:LATLON_IGN',1,zhook_handle)
288 SUBROUTINE xy_ign(KLAMBERT,PX,PY,PLAT,PLON)
335 INTEGER,
INTENT(IN) :: klambert
336 REAL,
DIMENSION(:),
INTENT(IN) :: plat,plon
340 REAL,
DIMENSION(:),
INTENT(OUT):: px,py
346 REAL :: zpi180, zpi4, zecc2
348 REAL :: zlatrad, zlonrad
353 REAL(KIND=JPRB) :: zhook_handle
361 IF (lhook) CALL dr_hook(
'MODE_GRIDTYPE_IGN:XY_IGN',0,zhook_handle)
365 zecc2 = xecc(klambert) / 2.
370 IF (plon(jj) > 180.)
THEN
371 zlonrad = (plon(jj) - 360. - xlonp(klambert)) * zpi180
373 zlonrad = (plon(jj) - xlonp(klambert)) * zpi180
376 zlatrad = plat(jj) * zpi180
381 zwrk = sin(zlatrad) * xecc(klambert)
383 zlatfi = log(tan(zpi4 + zlatrad / 2.)) + ( (log(1-zwrk)-log(1+zwrk)) * zecc2)
388 zr = exp(- xn(klambert) * zlatfi) * xc(klambert)
390 zgamma = xn(klambert) * zlonrad
392 px(jj) = xxs(klambert) + sin(zgamma) * zr
393 py(jj) = xys(klambert) - cos(zgamma) * zr
398 IF (lhook) CALL dr_hook(
'MODE_GRIDTYPE_IGN:XY_IGN',1,zhook_handle)
444 INTEGER,
INTENT(IN) :: klambert
445 REAL,
DIMENSION(:),
INTENT(IN) :: px
446 REAL,
DIMENSION(:),
INTENT(IN) :: py
448 REAL,
DIMENSION(:),
INTENT(OUT):: pmap
453 REAL,
DIMENSION(SIZE(PX)) :: zlat0
454 REAL,
DIMENSION(SIZE(PX)) :: zlat
455 REAL,
DIMENSION(SIZE(PX)) :: zlatiso
456 REAL,
DIMENSION(SIZE(PX)) :: zr
457 REAL,
DIMENSION(SIZE(PX)) :: zgrandn
460 REAL(KIND=JPRB) :: zhook_handle
467 IF (lhook) CALL dr_hook(
'MODE_GRIDTYPE_IGN:MAP_FACTOR_IGN',0,zhook_handle)
468 zr(:) =sqrt( (px(:)-xxs(klambert))**2 + (py(:)-xys(klambert))**2 )
469 zlatiso(:)=-1./xn(klambert) * alog(abs(zr(:)/xc(klambert)))
470 zlat0(:) =2. * atan(exp(zlatiso(:))) - xpi/2.
473 zlat(:) = 2. * atan( &
474 ( (1+xecc(klambert)*sin(zlat0(:)))/(1-xecc(klambert)*sin(zlat0(:))) )**(xecc(klambert)/2.) &
475 *exp(zlatiso(:)) ) -xpi/2.
477 IF (maxval(abs(zlat(:) - zlat0(:))) < xcvglat )
EXIT
485 zgrandn = xa(klambert) / sqrt(1-(xecc(klambert)*sin(zlat(:)))**2)
486 pmap(:)=xn(klambert)* zr(:) / ( zgrandn(:)*cos(zlat(:)) )
487 IF (lhook) CALL dr_hook(
'MODE_GRIDTYPE_IGN:MAP_FACTOR_IGN',1,zhook_handle)
subroutine xy_ign(KLAMBERT, PX, PY, PLAT, PLON)
subroutine get_gridtype_ign(PGRID_PAR, KLAMBERT, KL, PX, PY, PDX, PDY, KDIMX, KDIMY, PXALL, PYALL)
subroutine latlon_ign(KLAMBERT, PX, PY, PLAT, PLON)
subroutine map_factor_ign(KLAMBERT, PX, PY, PMAP)
subroutine put_gridtype_ign(PGRID_PAR, KLAMBERT, PX, PY, PDX, PDY, KDIMX, KDIMY, PXALL, PYALL)