6 SUBROUTINE fyhyp ( yzoomdeg, grossism, dzooma,tau ,
7 , rrlatu,yyprimu,rrlatv,yyprimv,rlatu2,yprimu2,rlatu1,yprimu1 ,
30 #include "dimensions.h"
39 REAL yzoomdeg, grossism,dzooma,
tau
44 REAL rrlatu(
jjp1), yyprimu(
jjp1),rrlatv(jjm), yyprimv(jjm),
45 , rlatu1(jjm), yprimu1(jjm), rlatu2(jjm), yprimu2(jjm)
54 REAL(KIND=8) yt(0:nmax2)
55 REAL(KIND=8) fhyp(0:nmax2),
beta,ytprim(0:nmax2),fxm(0:nmax2)
57 REAL(KIND=8) yf(0:nmax2),yypr(0:nmax2)
59 REAL(KIND=8) pi,depi,pis2,epsilon,y0,pisjm
60 REAL(KIND=8) yo1,yi,ylon2,ymoy,yprimin,champmin,champmax
61 REAL(KIND=8) yfi,yf1,ffdy
62 REAL(KIND=8) ypn,deply,y00
65 INTEGER i,
j,
it,ik,iter,jlat
68 REAL(KIND=8) a0,a1,a2,a3,yi2,heavyy0,heavyy0m
69 REAL(KIND=8) fa(0:nmax2),fb(0:nmax2)
79 y0 = yzoomdeg *
pi/180.
81 IF( dzooma.LT.1.)
THEN
83 ELSEIF( dzooma.LT. 12. )
THEN
85 ' Le param. dzoomy pour fyhyp est trop petit ! L aug ,menter et relancer ! '
88 dzoom = dzooma *
pi/180.
92 WRITE(6,*)
' yzoom( rad.),grossism,tau,dzoom (radians)'
93 WRITE(6,24) y0,grossism,
tau,dzoom
96 yt(
i) = - pis2 +
REAL(
i)*
pi /nmax2
101 y0min = 2.*y0*heavyy0m - pis2
102 y0max = 2.*y0*heavyy0 + pis2
108 IF( yt(
i).LT.y0 )
THEN
109 fa(
i) =
tau* (yt(
i)-y0+dzoom/2. )
110 fb(
i) = (yt(
i)-2.*y0*heavyy0m +pis2) * ( y0 - yt(
i) )
111 ELSEIF ( yt(
i).GT.y0 )
THEN
112 fa(
i) =
tau *(y0-yt(
i)+dzoom/2. )
113 fb(
i) = (2.*y0*heavyy0 -yt(
i)+pis2) * ( yt(
i) - y0 )
116 IF( 200.* fb(
i) .LT. - fa(
i) )
THEN
118 ELSEIF( 200. * fb(
i) .LT. fa(
i) )
THEN
121 fhyp(
i) = tanh( fa(
i)/fb(
i) )
124 IF( yt(
i).EQ.y0 ) fhyp(
i) = 1.
125 IF(yt(
i).EQ. y0min. or.yt(
i).EQ. y0max ) fhyp(
i) = -1.
134 ymoy = 0.5 * ( yt(
i-1) + yt(
i ) )
135 IF( ymoy.LT.y0 )
THEN
136 fa(
i)=
tau * ( ymoy-y0+dzoom/2.)
137 fb(
i) = (ymoy-2.*y0*heavyy0m +pis2) * ( y0 - ymoy )
138 ELSEIF ( ymoy.GT.y0 )
THEN
139 fa(
i)=
tau * ( y0-ymoy+dzoom/2. )
140 fb(
i) = (2.*y0*heavyy0 -ymoy+pis2) * ( ymoy - y0 )
143 IF( 200.* fb(
i) .LT. - fa(
i) )
THEN
145 ELSEIF( 200. * fb(
i) .LT. fa(
i) )
THEN
148 fxm(
i) = tanh( fa(
i)/fb(
i) )
150 IF( ymoy.EQ.y0 ) fxm(
i) = 1.
151 IF (ymoy.EQ. y0min. or.yt(
i).EQ. y0max ) fxm(
i) = -1.
152 ffdy = ffdy + fxm(
i) * ( yt(
i) - yt(
i-1) )
156 beta = ( grossism * ffdy -
pi ) / ( ffdy -
pi )
158 IF( 2.*
beta - grossism.LE. 0.)
THEN
161 ' ** Attention ! La valeur beta calculee dans la rou ,tine fyhyp est mauvaise ! '
162 WRITE(6,*)
'Modifier les valeurs de grossismy ,tauy ou dzoomy',
163 ,
' et relancer ! *** '
172 ytprim(
i) =
beta + ( grossism -
beta ) * fhyp(
i)
183 yf(
i) = yf(
i-1) + yypr(
i) * ( yt(
i) - yt(
i-1) )
198 ELSE IF ( ik.EQ.2 )
THEN
201 ELSE IF ( ik.EQ.3 )
THEN
204 ELSE IF ( ik.EQ.4 )
THEN
212 ylon2 = - pis2 + pisjm * (
REAL(j) + yuv -1.)
215 DO 250
it = nmax2,0,-1
216 IF( yfi.GE.yf(
it)) go to 350
232 , yt(
it),yt(
it+1) , a0,a1,a2,a3 )
235 yprimin = a1 + 2.* a2 * yi + 3.*a3 * yi *yi
238 yi = yi - ( yf1 - yfi )/ yprimin
240 IF( abs(yi-yo1).LE.epsilon) go to 550
243 yf1 = a0 + a1 * yi + a2 * yi2 + a3 * yi2 * yi
244 yprimin = a1 + 2.* a2 * yi + 3.* a3 * yi2
246 WRITE(6,*)
' Pas de solution ***** ',
j,ylon2,iter
250 yprimin = a1 + 2.* a2 * yi + 3.* a3 * yi* yi
251 yprim(
j) =
pi / ( jjm * yprimin )
257 IF( yvrai(
j+1). lt. yvrai(
j) )
THEN
258 WRITE(6,*)
' PBS. avec rlat(',
j+1,
') plus petit que rlat(',
j,
264 WRITE(6,*)
'Reorganisation des latitudes pour avoir entre - pi/2'
270 IF( yvrai(
j).LE. ypn ) go to 1502
279 DO j = 1, jjm +1 - jpn
280 ylatt(
j) = -pis2 - y00 + yvrai(jpn+
j-1)
281 yprimm(
j) = yprim(jpn+
j-1)
285 IF( jlat.EQ. jjm ) jjpn = jpn -1
288 ylatt(
j + jjm+1 -jpn) = yvrai(
j) + deply
289 yprimm(
j + jjm+1 -jpn) = yprim(
j)
297 ylat(
j) = ylatt( jlat +1 -
j )
298 yprim(
j) = yprimm( jlat +1 -
j )
302 yvrai(
j) = ylat(
j)*180./
pi
313 rrlatu(
j) = ylat(
j )
314 yyprimu(
j) = yprim(
j )
317 ELSE IF ( ik.EQ. 2 )
THEN
325 rrlatv(
j) = ylat(
j )
326 yyprimv(
j) = yprim(
j )
329 ELSE IF ( ik.EQ. 3 )
THEN
337 rlatu2(
j) = ylat(
j )
338 yprimu2(
j) = yprim(
j )
341 ELSE IF ( ik.EQ. 4 )
THEN
349 rlatu1(
j) = ylat(
j )
350 yprimu1(
j) = yprim(
j )
362 ylat(
j) = rrlatu(
j) - rrlatu(
j+1)
367 champmin = min( champmin, ylat(
j) )
368 champmax = max( champmax, ylat(
j) )
370 champmin = champmin * 180./
pi
371 champmax = champmax * 180./
pi
373 24
FORMAT(2
x,
'Parametres yzoom,gross,tau ,dzoom pour fyhyp ',4f8.3)