69 USE yomhook
,ONLY : lhook, dr_hook
70 USE parkind1
,ONLY : jprb
76 REAL,
INTENT(IN) :: plat0
77 REAL,
INTENT(IN) :: plon0
78 REAL,
INTENT(IN) :: prpk
84 REAL,
INTENT(IN) :: pbeta
85 REAL,
INTENT(IN) :: plator
86 REAL,
INTENT(IN) :: plonor
87 REAL,
DIMENSION(NDIM),
INTENT(IN) :: px,py
90 REAL,
DIMENSION(NDIM),
INTENT(OUT):: plat,plon
94 INTEGER,
INTENT(IN) :: ndim
98 REAL,
DIMENSION(NDIM) :: zy
99 REAL :: zrpk,zbeta,zlat0,zlon0,zlator,zlonor
100 REAL :: zrdsdg,zclat0,zslat0,zclator,zslator
101 REAL :: zxbm0,zybm0,zro0,zga0
102 REAL :: zxp,zyp,zepsi,zt1,zcgam,zsgam,zraclat0
104 REAL,
DIMENSION(NDIM) :: zata,zro2,zt2,zxmi0,zymi0
105 REAL(KIND=JPRB) :: zhook_handle
112 IF (lhook) CALL dr_hook(
'OI_LATLON_CONF_PROJ',0,zhook_handle)
114 zepsi = 10.*epsilon(1.)
152 zclat0 = cos(zrdsdg*zlat0)
153 zslat0 = sin(zrdsdg*zlat0)
154 zclator = cos(zrdsdg*zlator)
155 zslator = sin(zrdsdg*zlator)
156 zro0 = (xradius/zrpk)*(abs(zclat0))**(1.-zrpk) &
157 * ((1.+zslat0)*abs(zclator)/(1.+zslator))**zrpk
158 zga0 = (zrpk*(zlonor-zlon0)-zbeta)*zrdsdg
159 zxp = zxbm0-zro0*sin(zga0)
160 zyp = zybm0+zro0*cos(zga0)
164 WHERE (abs(zy(:)-zyp) < zepsi &
165 .AND.abs(px(:)-zxp) < zepsi)
168 zata(:) = atan2(-(zxp-px(:)),(zyp-zy(:)))/zrdsdg
171 plon(:) = (zbeta+zata(:))/zrpk+zlon0
175 zro2(:) = (px(:)-zxp)**2+(zy(:)-zyp)**2
176 zt1 = (xradius*(abs(zclat0))**(1.-zrpk))**(2./zrpk) &
178 zt2(:) = (zrpk**2*zro2(:))**(1./zrpk)
180 plat(:) = (xpi/2.-acos((zt1-zt2(:))/(zt1+zt2(:))))/zrdsdg
197 zcgam = cos(-zrdsdg*pbeta)
198 zsgam = sin(-zrdsdg*pbeta)
199 zraclat0 = xradius*cos(zrdsdg*plat0)
203 zxmi0(:) = px(:)-zxbm0
204 zymi0(:) = py(:)-zybm0
206 plon(:) = (zxmi0(:)*zcgam+zymi0(:)*zsgam) &
207 / (zraclat0*zrdsdg)+plonor
211 zt1 = alog(tan(xpi/4.+plator*zrdsdg/2.))
212 zt2(:) = (-zxmi0(:)*zsgam+zymi0(:)*zcgam)/zraclat0
214 plat(:) = (-xpi/2.+2.*atan(exp(zt1+zt2(:))))/zrdsdg
222 plon(:)=plon(:)+nint((plon0-plon(:))/360.)*360.
223 IF (lhook) CALL dr_hook(
'OI_LATLON_CONF_PROJ',1,zhook_handle)
subroutine oi_latlon_conf_proj(NDIM, PLAT0, PLON0, PRPK, PBETA, PLATOR, PLONOR, PX, PY, PLAT, PLON)