13 USE yomhook
,ONLY : lhook, dr_hook
14 USE parkind1
,ONLY : jprb
22 plator,plonor,kimax,kjmax, &
48 REAL,
INTENT(IN) :: plat0
49 REAL,
INTENT(IN) :: plon0
50 REAL,
INTENT(IN) :: prpk
56 REAL,
INTENT(IN) :: pbeta
57 REAL,
INTENT(IN) :: plator
58 REAL,
INTENT(IN) :: plonor
59 INTEGER,
INTENT(IN) :: kimax
60 INTEGER,
INTENT(IN) :: kjmax
61 REAL,
DIMENSION(:),
INTENT(IN) :: px
62 REAL,
DIMENSION(:),
INTENT(IN) :: py
63 REAL,
DIMENSION(:),
INTENT(IN) :: pdx
64 REAL,
DIMENSION(:),
INTENT(IN) :: pdy
65 REAL,
DIMENSION(:),
POINTER :: pgrid_par
74 REAL(KIND=JPRB) :: zhook_handle
76 IF (lhook) CALL dr_hook(
'MODE_GRIDTYPE_CONF_PROJ:PUT_GRIDTYPE_CONF_PROJ',0,zhook_handle)
78 gfull = (kimax*kjmax==
SIZE(px))
84 ALLOCATE(pgrid_par(12+kimax+kjmax))
87 ALLOCATE(pgrid_par(12+2*il))
96 pgrid_par(7) = float(kimax)
97 pgrid_par(8) = float(kjmax)
100 pgrid_par(10)= pdy(1)
102 pgrid_par(9) = xundef
103 pgrid_par(10)= xundef
105 pgrid_par(11) =
SIZE(px)
113 pgrid_par(12 +1:12+kimax) = px(1:kimax)
115 pgrid_par(12+kimax+jj) = py(1+(jj-1)*kimax)
119 pgrid_par(12 +1:12+ il) = px(:)
120 pgrid_par(12+ il+1:12+2*il) = py(:)
123 IF (lhook) CALL dr_hook(
'MODE_GRIDTYPE_CONF_PROJ:PUT_GRIDTYPE_CONF_PROJ',1,zhook_handle)
131 plator,plonor,kimax,kjmax, &
155 REAL,
DIMENSION(:),
INTENT(IN) :: pgrid_par
156 REAL,
INTENT(OUT),
OPTIONAL :: plat0
157 REAL,
INTENT(OUT),
OPTIONAL :: plon0
158 REAL,
INTENT(OUT),
OPTIONAL :: prpk
164 REAL,
INTENT(OUT),
OPTIONAL :: pbeta
165 REAL,
INTENT(OUT),
OPTIONAL :: plator
166 REAL,
INTENT(OUT),
OPTIONAL :: plonor
167 INTEGER,
INTENT(OUT),
OPTIONAL :: kimax
168 INTEGER,
INTENT(OUT),
OPTIONAL :: kjmax
169 REAL,
DIMENSION(:),
INTENT(OUT),
OPTIONAL :: px
170 REAL,
DIMENSION(:),
INTENT(OUT),
OPTIONAL :: py
171 REAL,
DIMENSION(:),
INTENT(OUT),
OPTIONAL :: pdx
172 REAL,
DIMENSION(:),
INTENT(OUT),
OPTIONAL :: pdy
173 INTEGER,
INTENT(OUT),
OPTIONAL :: kl
179 INTEGER :: il, iimax, ijmax
183 REAL(KIND=JPRB) :: zhook_handle
185 IF (lhook) CALL dr_hook(
'MODE_GRIDTYPE_CONF_PROJ:GET_GRIDTYPE_CONF_PROJ',0,zhook_handle)
188 iimax = nint(pgrid_par(7))
189 ijmax = nint(pgrid_par(8))
191 IF (present(plat0)) plat0 = pgrid_par(1)
192 IF (present(plon0)) plon0 = pgrid_par(2)
193 IF (present(prpk )) prpk = pgrid_par(3)
194 IF (present(pbeta)) pbeta = pgrid_par(4)
195 IF (present(plator)) plator= pgrid_par(5)
196 IF (present(plonor)) plonor= pgrid_par(6)
197 IF (present(kimax)) kimax = iimax
198 IF (present(kjmax)) kjmax = ijmax
199 IF (present(pdx)) pdx(:)= pgrid_par(9)
200 IF (present(pdy)) pdy(:)= pgrid_par(10)
201 IF (present(kl)) kl = il
203 gfull = (pgrid_par(12)==1)
205 IF (present(px))
THEN
209 px(ji+(jj-1)*iimax) = pgrid_par(12+ji)
213 px(:) = pgrid_par(12+1:12+il)
217 IF (present(py))
THEN
221 py(ji+(jj-1)*iimax) = pgrid_par(12+iimax+jj)
225 py(:) = pgrid_par(12+il+1:12+2*il)
229 IF (lhook) CALL dr_hook(
'MODE_GRIDTYPE_CONF_PROJ:GET_GRIDTYPE_CONF_PROJ',1,zhook_handle)
303 REAL,
INTENT(IN) :: plat0
304 REAL,
INTENT(IN) :: plon0
305 REAL,
INTENT(IN) :: prpk
311 REAL,
INTENT(IN) :: pbeta
312 REAL,
INTENT(IN) :: plator
313 REAL,
INTENT(IN) :: plonor
314 REAL,
DIMENSION(:),
INTENT(IN) :: px,py
317 REAL,
DIMENSION(:),
INTENT(OUT):: plat,plon
324 REAL,
DIMENSION(SIZE(PX)) :: zy
325 REAL :: zrpk,zbeta,zlat0,zlon0,zlator,zlonor
326 REAL :: zrdsdg,zclat0,zslat0,zclator,zslator
327 REAL :: zxbm0,zybm0,zro0,zga0
328 REAL :: zxp,zyp,zepsi,zt1,zcgam,zsgam,zraclat0
330 REAL,
DIMENSION(SIZE(PX)) :: zata,zro2,zt2,zxmi0,zymi0
331 REAL(KIND=JPRB) :: zhook_handle
338 IF (lhook) CALL dr_hook(
'MODE_GRIDTYPE_CONF_PROJ:LATLON_CONF_PROJ',0,zhook_handle)
340 zepsi = 10.*epsilon(1.)
378 zclat0 = cos(zrdsdg*zlat0)
379 zslat0 = sin(zrdsdg*zlat0)
380 zclator = cos(zrdsdg*zlator)
381 zslator = sin(zrdsdg*zlator)
382 zro0 = (xradius/zrpk)*(abs(zclat0))**(1.-zrpk) &
383 * ((1.+zslat0)*abs(zclator)/(1.+zslator))**zrpk
384 zga0 = (zrpk*(zlonor-zlon0)-zbeta)*zrdsdg
385 zxp = zxbm0-zro0*sin(zga0)
386 zyp = zybm0+zro0*cos(zga0)
390 WHERE (abs(zy(:)-zyp) < zepsi &
391 .AND.abs(px(:)-zxp) < zepsi)
394 zata(:) = atan2(-(zxp-px(:)),(zyp-zy(:)))/zrdsdg
397 plon(:) = (zbeta+zata(:))/zrpk+zlon0
401 zro2(:) = (px(:)-zxp)**2+(zy(:)-zyp)**2
402 zt1 = (xradius*(abs(zclat0))**(1.-zrpk))**(2./zrpk) &
404 zt2(:) = (zrpk**2*zro2(:))**(1./zrpk)
406 plat(:) = (xpi/2.-acos((zt1-zt2(:))/(zt1+zt2(:))))/zrdsdg
423 zcgam = cos(-zrdsdg*pbeta)
424 zsgam = sin(-zrdsdg*pbeta)
425 zraclat0 = xradius*cos(zrdsdg*plat0)
429 zxmi0(:) = px(:)-zxbm0
430 zymi0(:) = py(:)-zybm0
432 plon(:) = (zxmi0(:)*zcgam+zymi0(:)*zsgam) &
433 / (zraclat0*zrdsdg)+plonor
437 zt1 = alog(tan(xpi/4.+plator*zrdsdg/2.))
438 zt2(:) = (-zxmi0(:)*zsgam+zymi0(:)*zcgam)/zraclat0
440 plat(:) = (-xpi/2.+2.*atan(exp(zt1+zt2(:))))/zrdsdg
448 plon(:)=plon(:)+nint((plon0-plon(:))/360.)*360.
449 IF (lhook) CALL dr_hook(
'MODE_GRIDTYPE_CONF_PROJ:LATLON_CONF_PROJ',1,zhook_handle)
525 REAL,
INTENT(IN) :: plat0
526 REAL,
INTENT(IN) :: plon0
527 REAL,
INTENT(IN) :: prpk
533 REAL,
INTENT(IN) :: pbeta
534 REAL,
INTENT(IN) :: plator
535 REAL,
INTENT(IN) :: plonor
536 REAL,
DIMENSION(:),
INTENT(OUT):: px,py
539 REAL,
DIMENSION(:),
INTENT(IN) :: plat,plon
546 REAL,
DIMENSION(SIZE(PLAT)) :: zlat,zlon
547 REAL :: zrpk,zbeta,zlat0,zlon0,zlator,zlonor
548 REAL :: zrdsdg,zclat0,zslat0,zclator,zslator
549 REAL :: zxbm0,zybm0,zro0,zga0
550 REAL :: zxp,zyp,zcgam,zsgam,zraclat0,zxe,zye
552 REAL,
DIMENSION(SIZE(PLAT)) :: zclat,zslat,zro,zga,zxpr,zypr
553 REAL(KIND=JPRB) :: zhook_handle
561 IF (lhook) CALL dr_hook(
'MODE_GRIDTYPE_CONF_PROJ:XY_CONF_PROJ',0,zhook_handle)
572 zlon(:)=zlon(:)+nint((plon0-zlon(:))/360.)*360.
575 zlonor=zlonor+nint((plon0-zlonor)/360.)*360.
607 zclat0 = cos(zrdsdg*zlat0)
608 zslat0 = sin(zrdsdg*zlat0)
609 zclator = cos(zrdsdg*zlator)
610 zslator = sin(zrdsdg*zlator)
611 zro0 = (xradius/zrpk)*(abs(zclat0))**(1.-zrpk) &
612 * ((1.+zslat0)*abs(zclator)/(1.+zslator))**zrpk
613 zga0 = (zrpk*(zlonor-zlon0)-zbeta)*zrdsdg
614 zxp = zxbm0-zro0*sin(zga0)
615 zyp = zybm0+zro0*cos(zga0)
619 zclat(:) = cos(zrdsdg*zlat(:))
620 zslat(:) = sin(zrdsdg*zlat(:))
621 zro(:) = (xradius/zrpk)*(abs(zclat0))**(1.-zrpk) &
622 * ((1.+zslat0)*abs(zclat(:))/(1.+zslat(:)))**zrpk
623 zga(:) = (zrpk*(zlon(:)-zlon0)-zbeta)*zrdsdg
625 px(:) = zxp+zro(:)*sin(zga(:))
626 py(:) = zyp-zro(:)*cos(zga(:))
642 zcgam = cos(-zrdsdg*pbeta)
643 zsgam = sin(-zrdsdg*pbeta)
644 zraclat0 = xradius*cos(zrdsdg*plat0)
645 zxe = zxbm0*zcgam+zybm0*zsgam &
646 - zraclat0*(plonor-plon0)*zrdsdg
647 zye =-zxbm0*zsgam+zybm0*zcgam &
648 - zraclat0*log(tan(xpi/4.+plator*zrdsdg/2.))
652 zxpr(:) = zraclat0*(zlon(:)-plon0)*zrdsdg+zxe
653 zypr(:) = zraclat0*log(tan(xpi/4.+plat(:)*zrdsdg/2.))+zye
655 px(:) = zxpr(:)*zcgam-zypr(:)*zsgam
656 py(:) = zxpr(:)*zsgam+zypr(:)*zcgam
664 IF (lhook) CALL dr_hook(
'MODE_GRIDTYPE_CONF_PROJ:XY_CONF_PROJ',1,zhook_handle)
719 REAL,
INTENT(IN) :: plat0
720 REAL,
INTENT(IN) :: prpk
726 REAL,
DIMENSION(:),
INTENT(IN) :: plat
728 REAL,
DIMENSION(:),
INTENT(OUT):: pmap
740 REAL,
DIMENSION(SIZE(PLAT)) :: zlat
745 LOGICAL :: gnorthproj
746 REAL(KIND=JPRB) :: zhook_handle
753 IF (lhook) CALL dr_hook(
'MODE_GRIDTYPE_CONF_PROJ:MAP_FACTOR_CONF_PROJ',0,zhook_handle)
756 gnorthproj = prpk < 0.
768 zclat0 = cos(zrdsdg*zlat0)
769 zslat0 = sin(zrdsdg*zlat0)
771 IF (abs(zclat0)<1.e-10 .AND. (abs(zrpk-1.)<1.e-10))
THEN
772 pmap(:) = (1.+zslat0)/(1.+sin(zrdsdg*zlat(:)))
774 WHERE (abs(cos(zrdsdg*zlat(:)))>1.e-10)
775 pmap(:) = ((zclat0/cos(zrdsdg*zlat(:)))**(1.-zrpk)) &
776 * ((1.+zslat0)/(1.+sin(zrdsdg*zlat(:))))**zrpk
778 pmap(:) = (1.+zslat0)/(1.+sin(zrdsdg*zlat(:)))
781 IF (lhook) CALL dr_hook(
'MODE_GRIDTYPE_CONF_PROJ:MAP_FACTOR_CONF_PROJ',1,zhook_handle)
subroutine map_factor_conf_proj(PLAT0, PRPK, PLAT, PMAP)
subroutine put_gridtype_conf_proj(PGRID_PAR, PLAT0, PLON0, PRPK, PBETA, PLATOR, PLONOR, KIMAX, KJMAX, PX, PY, PDX, PDY)
subroutine latlon_conf_proj(PLAT0, PLON0, PRPK, PBETA, PLATOR, PLONOR, PX, PY, PLAT, PLON)
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, PLATOR, PLONOR, KIMAX, KJMAX, PX, PY, PDX, PDY, KL)