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*8 xlon(iip1),xprimm(iip1),xuv
52 REAL*8 fhyp(0:nmax2),ffdx,
beta,xprimt(0:nmax2)
53 REAL*8 xf(0:nmax2),xxpr(0:nmax2)
54 REAL*8 xvrai(iip1),xxprim(iip1)
55 REAL*8 pi,depi,epsilon,xzoom,fa,fb
56 REAL*8 xf1, xfi , a0,a1,a2,a3,xi2
57 INTEGER i,
it,ik,iter,
ii,idif,ii1,ii2
58 REAL*8 xi,xo1,xmoy,xlon2,fxm,xprimin
59 REAL*8 champmin,champmax,decalx
68 xzoom = xzoomdeg *
pi/180.
71 IF( grossism.EQ.1..AND.scal180 )
THEN
75 WRITE(6,*)
'FXHYP scal180,decalx', scal180,decalx
77 IF( dzooma.LT.1.)
THEN
79 ELSEIF( dzooma.LT. 25. )
THEN
81 ' Le param. dzoomx pour fxhyp est trop petit ! L aug ,menter et relancer ! '
84 dzoom = dzooma *
pi/180.
87 WRITE(6,*)
' xzoom( rad.),grossism,tau,dzoom (radians)'
88 WRITE(6,24) xzoom,grossism,
tau,dzoom
91 xtild(
i) = -
pi +
REAL(i) * depi /nmax2
96 fa =
tau* ( dzoom/2. - xtild(
i) )
97 fb = xtild(
i) * (
pi - xtild(
i) )
99 IF( 200.* fb .LT. - fa )
THEN
101 ELSEIF( 200. * fb .LT. fa )
THEN
104 IF( abs(fa).LT.1.e-13.AND.abs(fb).LT.1.e-13)
THEN
105 IF( 200.*fb + fa.LT.1.e-10 )
THEN
107 ELSEIF( 200.*fb - fa.LT.1.e-10 )
THEN
111 fhyp(
i ) = tanh( fa/fb )
114 IF ( xtild(
i).EQ. 0. ) fhyp(
i) = 1.
115 IF ( xtild(
i).EQ.
pi ) fhyp(
i) = -1.
125 xmoy = 0.5 * ( xtild(
i-1) + xtild(
i ) )
126 fa =
tau* ( dzoom/2. - xmoy )
127 fb = xmoy * (
pi - xmoy )
129 IF( 200.* fb .LT. - fa )
THEN
131 ELSEIF( 200. * fb .LT. fa )
THEN
134 IF( abs(fa).LT.1.e-13.AND.abs(fb).LT.1.e-13)
THEN
135 IF( 200.*fb + fa.LT.1.e-10 )
THEN
137 ELSEIF( 200.*fb - fa.LT.1.e-10 )
THEN
145 IF ( xmoy.EQ. 0. ) fxm = 1.
146 IF ( xmoy.EQ.
pi ) fxm = -1.
148 ffdx = ffdx + fxm * ( xtild(
i) - xtild(
i-1) )
152 beta = ( grossism * ffdx -
pi ) / ( ffdx -
pi )
154 IF( 2.*
beta - grossism.LE. 0.)
THEN
156 ' ** Attention ! La valeur beta calculee dans la rou ,tine fxhyp est mauvaise ! '
157 WRITE(6,*)
'Modifier les valeurs de grossismx ,tau ou dzoomx ',
158 ,
' et relancer ! *** '
166 xprimt(
i) =
beta + ( grossism -
beta ) * fhyp(
i)
170 xprimt( nmax2 -
i ) = xprimt(
i )
178 DO i = nmax +1, nmax2
180 xmoy = 0.5 * ( xtild(
i-1) + xtild(
i ) )
181 fa =
tau* ( dzoom/2. - xmoy )
182 fb = xmoy * (
pi - xmoy )
184 IF( 200.* fb .LT. - fa )
THEN
186 ELSEIF( 200. * fb .LT. fa )
THEN
192 IF ( xmoy.EQ. 0. ) fxm = 1.
193 IF ( xmoy.EQ.
pi ) fxm = -1.
194 xxpr(
i) =
beta + ( grossism -
beta ) * fxm
199 xxpr(nmax2-
i+1) = xxpr(
i)
203 xf(
i) = xf(
i-1) + xxpr(
i) * ( xtild(
i) - xtild(
i-1) )
219 ELSE IF ( ik.EQ.2 )
THEN
221 ELSE IF ( ik.EQ.3 )
THEN
223 ELSE IF ( ik.EQ.4 )
THEN
231 IF(ik.EQ.1.and.grossism.EQ.1.)
THEN
237 xlon2 = -
pi + (
REAL(i) + xuv - decalx) * depi /
REAL(iim)
241 DO 250
it = nmax2,0,-1
242 IF( xfi.GE.xf(
it)) go to 350
264 , xtild(
it),xtild(
it+1), a0, a1, a2, a3 )
267 xprimin = a1 + 2.* a2 * xi + 3.*a3 * xi *xi
270 xi = xi - ( xf1 - xfi )/ xprimin
272 IF( abs(xi-xo1).LE.epsilon) go to 550
275 xf1 = a0 + a1 * xi + a2 * xi2 + a3 * xi2 * xi
276 xprimin = a1 + 2.* a2 * xi + 3.* a3 * xi2
278 WRITE(6,*)
' Pas de solution ***** ',
i,xlon2,iter
282 xxprim(
i) = depi/ (
REAL(iim) * xprimin )
283 xvrai(
i) = xi + xzoom
288 IF(ik.EQ.1.and.grossism.EQ.1.)
THEN
289 xvrai(1) = xvrai(iip1)-depi
290 xxprim(1) = xxprim(iip1)
294 xprimm(
i) = xxprim(
i)
297 IF( xvrai(
i+1). lt. xvrai(
i) )
THEN
298 WRITE(6,*)
' PBS. avec rlonu(',
i+1,
') plus petit que rlonu(',
i,
310 champmin = min( champmin,xvrai(
i) )
311 champmax = max( champmax,xvrai(
i) )
314 IF(champmin .GE.-
pi-0.10.and.champmax.LE.
pi+0.10 )
THEN
317 WRITE(6,*)
'Reorganisation des longitudes pour avoir entre - pi',
320 IF( xzoom.LE.0.)
THEN
323 IF( xvrai(
i).GE. -
pi ) go to 80
325 WRITE(6,*)
' PBS. 1 ! Xvrai plus petit que - pi ! '
334 xprimm(
ii-is2+1) = xxprim(
ii)
338 xprimm(
ii+
iim-is2+1) = xxprim(
ii)
344 IF( xvrai(
i).LE.
pi ) go to 90
346 WRITE(6,*)
' PBS. 2 ! Xvrai plus grand que pi ! '
354 xprimm(
ii+idif) = xxprim(
ii)
358 xprimm(
ii) = xxprim(
ii+is2)
369 xprimm( iip1 ) = xprimm(1 )
384 xprimm025(
i) = xprimm(
i)
386 ELSE IF( ik.EQ.2 )
THEN
398 ELSE IF( ik.EQ.3)
THEN
410 ELSE IF( ik.EQ.4 )
THEN
419 xprimp025(
i) = xprimm(
i)
436 champmin = min( champmin,
xlon(
i) )
437 champmax = max( champmax,
xlon(
i) )
439 champmin = champmin * 180./
pi
440 champmax = champmax * 180./
pi
443 24
FORMAT(2
x,
'Parametres xzoom,gross,tau ,dzoom pour fxhyp ',4f8.3)