1 SUBROUTINE eggrvs (PRPI, PRA, PDELX, PDELY, KPROF,&
2 & KBEG, KEND, KULOUT, PGELAM, PGELAT, PGM, PGNORX, PGNORY)
76 INTEGER(KIND=JPIM),
INTENT(IN) :: KPROF
77 REAL(KIND=JPRB) ,
INTENT(IN) :: PRPI
78 REAL(KIND=JPRB) ,
INTENT(IN) :: PRA
79 REAL(KIND=JPRB) ,
INTENT(IN) :: PDELX
80 REAL(KIND=JPRB) ,
INTENT(IN) :: PDELY
81 INTEGER(KIND=JPIM),
INTENT(IN) :: KBEG
82 INTEGER(KIND=JPIM),
INTENT(IN) :: KEND
83 INTEGER(KIND=JPIM),
INTENT(IN) :: KULOUT
84 REAL(KIND=JPRB) ,
INTENT(INOUT) :: PGELAM(kprof)
85 REAL(KIND=JPRB) ,
INTENT(INOUT) :: PGELAT(kprof)
86 REAL(KIND=JPRB) ,
INTENT(OUT) :: PGM(kprof)
87 REAL(KIND=JPRB) ,
INTENT(OUT) :: PGNORX(kprof)
88 REAL(KIND=JPRB) ,
INTENT(OUT) :: PGNORY(kprof)
92 INTEGER(KIND=JPIM) :: JJ
94 LOGICAL :: LLGWH, LLSTOP
96 REAL(KIND=JPRB) :: Z2PIPK, ZCOBETA, ZCOLA, ZCOSA, ZCOSOG, ZDIST,&
97 & ZFUN, ZGAM, ZGM, ZKDL, ZLAT, ZLATG, ZLON, &
98 & ZLONG, ZNORX, ZNORXP, ZNORY, ZNORYP, ZPIS2, &
99 & ZPIS4, ZRPKSM2, ZSECAN, ZSECUR, ZSIBETA, &
100 & ZSINAG, ZSINOG, ZURA2, ZX, ZY
101 REAL(KIND=JPRB) :: ZHOOK_HANDLE
105 #include "abor1.intfb.h" 113 WRITE (kulout,*)
'*** EGGRVS *** UNINITIALISED MODULE ' 114 CALL abor1(
' EGGRVS: NYMGGI /= 10 ')
119 zpis2 = prpi*0.5_jprb
120 zpis4 = prpi*0.25_jprb
124 IF (
nymggwh == 1 ) llgwh = .true.
128 pgnorx(jj) = 0.0_jprb
129 pgnory(jj) = 1.0_jprb
135 IF (
xggpk < 0.0_jprb )
THEN 137 pgelam(jj) =
xlon1u + pgelam(jj)
138 IF ( pgelam(jj) >= 2.0_jprb*prpi )pgelam(jj) = pgelam(jj) - 2.0_jprb*prpi
139 pgelat(jj) =
xlat1r + pgelat(jj)
147 IF (
xggpk > 0.0_jprb )
THEN 149 zura2 = 1.0_jprb/( pra*pra )
150 z2pipk = 2.0_jprb*prpi*
xggpk 153 zx = pgelam(jj) -
xipore*pdelx
154 zy = pgelat(jj) -
xjpore*pdely
155 zdist = (zrpksm2*( zx*zx + zy*zy )*zura2)**(1.0_jprb/(2.0_jprb*
xggpk))
157 zlat = zpis2 - 2.0_jprb*atan( zdist )
159 IF ( zdist < zsecur )
THEN 162 IF (
xggpk /= 1.0_jprb ) llstop=.true.
164 zgm = ( 1.0_jprb + sin(
xlat0r ) )/( 1.0_jprb + sin( zlat ) )
166 IF (
hsud > 0.0_jprb )
THEN 167 zkdl = atan2( zx,-zy )
169 zkdl = atan2( zx,zy )
172 IF ( zlon < 0.0_jprb ) zlon = 2.0_jprb*prpi + zlon
173 zgm =
xggm0*( cos( zlat )**(
xggpk-1.0_jprb) )*&
174 & ( ( 1.0_jprb + sin( zlat ) )**(-
xggpk) )
178 pgelat(jj) =
hsud*zlat
181 IF ( llgwh ) zlon = zlon + 2.0_jprb*prpi
182 IF (
xggpk < 1.0_jprb .AND. (zlon-
xlon0u) > z2pipk )&
183 & zlon = zlon - 2.0_jprb*prpi
185 pgnorx(jj) = -sin( zgam )
186 pgnory(jj) = cos( zgam )
189 WRITE (kulout,*)
' POLE WITHIN LAMBERT DOMAIN ' 190 CALL abor1(
' EGGRVS: POLE WITHIN LAMBERT DOMAIN ')
198 IF (
xggpk == 0.0_jprb )
THEN 199 zsibeta = sin(
xbeta )
200 zcobeta = cos(
xbeta )
202 zy = pgelam(jj)*zsibeta + pgelat(jj)*zcobeta -
xjpore*pdely
203 zdist = exp( -zy/( pra*cos(
xlat0r) ) )
204 zlat = zpis2 - 2.0_jprb*atan( zdist )
206 zgm = cos(
xlat0r )/cos( zlat )
208 zx = pgelam(jj)*zcobeta - pgelat(jj)*zsibeta -
xipore*pdelx
210 IF ( zlon >= 2.0_jprb*prpi ) zlon = zlon - 2.0_jprb*prpi
229 zsinag = sin(
xlatr )*cos( zlat )*cos( zlon ) +cos(
xlatr )*sin( zlat )
230 zsinag = min(1.0_jprb,max(-1.0_jprb,zsinag))
231 zlatg = asin( zsinag )
232 IF ( abs( zlatg ) >= zpis2 )
THEN 236 zfun = cos(
xlatr )*cos( zlat )*cos( zlon ) -sin(
xlatr )*sin( zlat )
237 zcosog = ( cos(
xlonr )*zfun - sin(
xlonr )*cos( zlat )*&
238 & sin( zlon ) )/zcosa
239 zcosog = min(1.0_jprb,max(-1.0_jprb,zcosog))
240 zsinog = ( sin(
xlonr )*zfun + cos(
xlonr )*cos( zlat )*&
241 & sin( zlon ) )/zcosa
242 zsinog = min(1.0_jprb,max(-1.0_jprb,zsinog))
243 zlong = acos( zcosog )
244 IF ( asin(zsinog) < 0.0_jprb ) zlong = 2.0_jprb*prpi - zlong
249 zcola = sqrt( abs( 1.0_jprb - (cos(
xlatr )*sin( zlatg )-&
250 & sin(
xlatr )*cos( zlatg )*cos( zlong-
xlonr ))**2 ) )
251 IF ( zcola < zsecur )
THEN 252 WRITE (kulout,*)
' *** EGGX QUASI ERROR ***',&
253 &
' DOMAIN EXTENDS UP TO NEW POLE : IT IS PROBABLY TOO LARGE' 257 znory = ( cos(
xlatr )*cos( zlatg ) + sin(
xlatr )*&
258 & sin( zlatg )*cos( zlong-
xlonr ) )/zcola
259 znorx = - sin(
xlatr )*sin( zlong-
xlonr )/zcola
264 pgnory(jj) = znory*znoryp - znorx*znorxp
265 pgnorx(jj) = znorx*znoryp + znory*znorxp
integer(kind=jpim) nymggr
integer(kind=jpim) nymggi
integer(kind=jpim) nymggwh
subroutine eggrvs(PRPI, PRA, PDELX, PDELY, KPROF, KBEG, KEND, KULOUT, PGELAM, PGELAT, PGM, PGNORX, PGNORY)