6 SUBROUTINE fxhyp ( xzoomdeg,grossism,dzooma,tau ,
35 #include "dimensions.h"
40 REAL xzoomdeg,dzooma,
tau,grossism
44 REAL rlonm025(iip1),xprimm025(iip1),
rlonv(iip1),
xprimv(iip1),
45 ,
rlonu(iip1),
xprimu(iip1),rlonp025(iip1),xprimp025(iip1)
50 REAL(KIND=8) xlon(iip1),xprimm(iip1),xuv
51 REAL(KIND=8) xtild(0:nmax2)
52 REAL(KIND=8) fhyp(0:nmax2),ffdx,
beta,xprimt(0:nmax2)
53 REAL(KIND=8) xf(0:nmax2),xxpr(0:nmax2)
54 REAL(KIND=8) xvrai(iip1),xxprim(iip1)
55 REAL(KIND=8) pi,depi,epsilon,xzoom,fa,fb
56 REAL(KIND=8) xf1, xfi , a0,a1,a2,a3,xi2
57 INTEGER i,
it,ik,iter,
ii,idif,ii1,ii2
58 REAL(KIND=8) xi,xo1,xmoy,xlon2,fxm,xprimin
59 REAL(KIND=8) champmin,champmax,decalx
68 xzoom = xzoomdeg *
pi/180.
76 rlonm025(2)=rlonm025(1)+depi
79 rlonp025(2)=rlonp025(1)+depi
92 IF( grossism.EQ.1..AND.scal180 )
THEN
96 WRITE(6,*)
'FXHYP scal180,decalx', scal180,decalx
98 IF( dzooma.LT.1.)
THEN
100 ELSEIF( dzooma.LT. 25. )
THEN
102 ' Le param. dzoomx pour fxhyp est trop petit ! L aug ,menter et relancer ! '
105 dzoom = dzooma *
pi/180.
108 WRITE(6,*)
' xzoom( rad.),grossism,tau,dzoom (radians)'
109 WRITE(6,24) xzoom,grossism,
tau,dzoom
112 xtild(
i) = -
pi +
REAL(i) * depi /nmax2
117 fa =
tau* ( dzoom/2. - xtild(
i) )
118 fb = xtild(
i) * (
pi - xtild(
i) )
120 IF( 200.* fb .LT. - fa )
THEN
122 ELSEIF( 200. * fb .LT. fa )
THEN
125 IF( abs(fa).LT.1.e-13.AND.abs(fb).LT.1.e-13)
THEN
126 IF( 200.*fb + fa.LT.1.e-10 )
THEN
128 ELSEIF( 200.*fb - fa.LT.1.e-10 )
THEN
132 fhyp(
i ) = tanh( fa/fb )
135 IF ( xtild(
i).EQ. 0. ) fhyp(
i) = 1.
136 IF ( xtild(
i).EQ.
pi ) fhyp(
i) = -1.
146 xmoy = 0.5 * ( xtild(
i-1) + xtild(
i ) )
147 fa =
tau* ( dzoom/2. - xmoy )
148 fb = xmoy * (
pi - xmoy )
150 IF( 200.* fb .LT. - fa )
THEN
152 ELSEIF( 200. * fb .LT. fa )
THEN
155 IF( abs(fa).LT.1.e-13.AND.abs(fb).LT.1.e-13)
THEN
156 IF( 200.*fb + fa.LT.1.e-10 )
THEN
158 ELSEIF( 200.*fb - fa.LT.1.e-10 )
THEN
166 IF ( xmoy.EQ. 0. ) fxm = 1.
167 IF ( xmoy.EQ.
pi ) fxm = -1.
169 ffdx = ffdx + fxm * ( xtild(
i) - xtild(
i-1) )
173 beta = ( grossism * ffdx -
pi ) / ( ffdx -
pi )
175 IF( 2.*
beta - grossism.LE. 0.)
THEN
177 ' ** Attention ! La valeur beta calculee dans la rou ,tine fxhyp est mauvaise ! '
178 WRITE(6,*)
'Modifier les valeurs de grossismx ,tau ou dzoomx ',
179 ,
' et relancer ! *** '
187 xprimt(
i) =
beta + ( grossism -
beta ) * fhyp(
i)
191 xprimt( nmax2 -
i ) = xprimt(
i )
199 DO i = nmax +1, nmax2
201 xmoy = 0.5 * ( xtild(
i-1) + xtild(
i ) )
202 fa =
tau* ( dzoom/2. - xmoy )
203 fb = xmoy * (
pi - xmoy )
205 IF( 200.* fb .LT. - fa )
THEN
207 ELSEIF( 200. * fb .LT. fa )
THEN
213 IF ( xmoy.EQ. 0. ) fxm = 1.
214 IF ( xmoy.EQ.
pi ) fxm = -1.
215 xxpr(
i) =
beta + ( grossism -
beta ) * fxm
220 xxpr(nmax2-
i+1) = xxpr(
i)
224 xf(
i) = xf(
i-1) + xxpr(
i) * ( xtild(
i) - xtild(
i-1) )
240 ELSE IF ( ik.EQ.2 )
THEN
242 ELSE IF ( ik.EQ.3 )
THEN
244 ELSE IF ( ik.EQ.4 )
THEN
252 IF(ik.EQ.1.and.grossism.EQ.1.)
THEN
258 xlon2 = -
pi + (
REAL(i) + xuv - decalx) * depi /
REAL(iim)
262 DO 250
it = nmax2,0,-1
263 IF( xfi.GE.xf(
it)) go to 350
285 , xtild(
it),xtild(
it+1), a0, a1, a2, a3 )
288 xprimin = a1 + 2.* a2 * xi + 3.*a3 * xi *xi
291 xi = xi - ( xf1 - xfi )/ xprimin
293 IF( abs(xi-xo1).LE.epsilon) go to 550
296 xf1 = a0 + a1 * xi + a2 * xi2 + a3 * xi2 * xi
297 xprimin = a1 + 2.* a2 * xi + 3.* a3 * xi2
299 WRITE(6,*)
' Pas de solution ***** ',
i,xlon2,iter
303 xxprim(
i) = depi/ (
REAL(iim) * xprimin )
304 xvrai(
i) = xi + xzoom
310 IF(ik.EQ.1.and.grossism.EQ.1.)
THEN
311 xvrai(1) = xvrai(iip1)-depi
312 xxprim(1) = xxprim(iip1)
317 xprimm(
i) = xxprim(
i)
320 IF( xvrai(
i+1). lt. xvrai(
i) )
THEN
321 WRITE(6,*)
' PBS. avec rlonu(',
i+1,
') plus petit que rlonu(',
i,
333 champmin = min( champmin,xvrai(
i) )
334 champmax = max( champmax,xvrai(
i) )
337 IF(champmin .GE.-
pi-0.10.and.champmax.LE.
pi+0.10 )
THEN
340 WRITE(6,*)
'Reorganisation des longitudes pour avoir entre - pi',
343 IF( xzoom.LE.0.)
THEN
346 IF( xvrai(
i).GE. -
pi ) go to 80
348 WRITE(6,*)
' PBS. 1 ! Xvrai plus petit que - pi ! '
357 xprimm(
ii-is2+1) = xxprim(
ii)
361 xprimm(
ii+
iim-is2+1) = xxprim(
ii)
367 IF( xvrai(
i).LE.
pi ) go to 90
369 WRITE(6,*)
' PBS. 2 ! Xvrai plus grand que pi ! '
377 xprimm(
ii+idif) = xxprim(
ii)
381 xprimm(
ii) = xxprim(
ii+is2)
392 xprimm( iip1 ) = xprimm(1 )
407 xprimm025(
i) = xprimm(
i)
409 ELSE IF( ik.EQ.2 )
THEN
421 ELSE IF( ik.EQ.3)
THEN
433 ELSE IF( ik.EQ.4 )
THEN
442 xprimp025(
i) = xprimm(
i)
459 champmin = min( champmin,
xlon(
i) )
460 champmax = max( champmax,
xlon(
i) )
462 champmin = champmin * 180./
pi
463 champmax = champmax * 180./
pi
466 24
FORMAT(2
x,
'Parametres xzoom,gross,tau ,dzoom pour fxhyp ',4f8.3)