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.
72 print*,
'Longitudes calculees a la main pour iim=1'
78 rlonm025(2)=rlonm025(1)+depi
81 rlonp025(2)=rlonp025(1)+depi
94 IF( grossism.EQ.1..AND.scal180 )
THEN
98 WRITE(6,*)
'FXHYP scal180,decalx', scal180,decalx
100 IF( dzooma.LT.1.)
THEN
101 dzoom = dzooma * depi
102 ELSEIF( dzooma.LT. 25. )
THEN
104 ' Le param. dzoomx pour fxhyp est trop petit ! L aug ,menter et relancer ! '
107 dzoom = dzooma *
pi/180.
110 WRITE(6,*)
' xzoom( rad.),grossism,tau,dzoom (radians)'
111 WRITE(6,24) xzoom,grossism,
tau,dzoom
114 xtild(
i) = -
pi +
REAL(i) * depi /nmax2
119 fa =
tau* ( dzoom/2. - xtild(
i) )
120 fb = xtild(
i) * (
pi - xtild(
i) )
122 IF( 200.* fb .LT. - fa )
THEN
124 ELSEIF( 200. * fb .LT. fa )
THEN
127 IF( abs(fa).LT.1.e-13.AND.abs(fb).LT.1.e-13)
THEN
128 IF( 200.*fb + fa.LT.1.e-10 )
THEN
130 ELSEIF( 200.*fb - fa.LT.1.e-10 )
THEN
134 fhyp(
i ) = tanh( fa/fb )
137 IF ( xtild(
i).EQ. 0. ) fhyp(
i) = 1.
138 IF ( xtild(
i).EQ.
pi ) fhyp(
i) = -1.
148 xmoy = 0.5 * ( xtild(
i-1) + xtild(
i ) )
149 fa =
tau* ( dzoom/2. - xmoy )
150 fb = xmoy * (
pi - xmoy )
152 IF( 200.* fb .LT. - fa )
THEN
154 ELSEIF( 200. * fb .LT. fa )
THEN
157 IF( abs(fa).LT.1.e-13.AND.abs(fb).LT.1.e-13)
THEN
158 IF( 200.*fb + fa.LT.1.e-10 )
THEN
160 ELSEIF( 200.*fb - fa.LT.1.e-10 )
THEN
168 IF ( xmoy.EQ. 0. ) fxm = 1.
169 IF ( xmoy.EQ.
pi ) fxm = -1.
171 ffdx = ffdx + fxm * ( xtild(
i) - xtild(
i-1) )
175 beta = ( grossism * ffdx -
pi ) / ( ffdx -
pi )
177 IF( 2.*
beta - grossism.LE. 0.)
THEN
179 ' ** Attention ! La valeur beta calculee dans la rou ,tine fxhyp est mauvaise ! '
180 WRITE(6,*)
'Modifier les valeurs de grossismx ,tau ou dzoomx ',
181 ,
' et relancer ! *** '
189 xprimt(
i) =
beta + ( grossism -
beta ) * fhyp(
i)
193 xprimt( nmax2 -
i ) = xprimt(
i )
201 DO i = nmax +1, nmax2
203 xmoy = 0.5 * ( xtild(
i-1) + xtild(
i ) )
204 fa =
tau* ( dzoom/2. - xmoy )
205 fb = xmoy * (
pi - xmoy )
207 IF( 200.* fb .LT. - fa )
THEN
209 ELSEIF( 200. * fb .LT. fa )
THEN
215 IF ( xmoy.EQ. 0. ) fxm = 1.
216 IF ( xmoy.EQ.
pi ) fxm = -1.
217 xxpr(
i) =
beta + ( grossism -
beta ) * fxm
222 xxpr(nmax2-
i+1) = xxpr(
i)
226 xf(
i) = xf(
i-1) + xxpr(
i) * ( xtild(
i) - xtild(
i-1) )
242 ELSE IF ( ik.EQ.2 )
THEN
244 ELSE IF ( ik.EQ.3 )
THEN
246 ELSE IF ( ik.EQ.4 )
THEN
254 IF(ik.EQ.1.and.grossism.EQ.1.)
THEN
260 xlon2 = -
pi + (
REAL(i) + xuv - decalx) * depi /
REAL(iim)
264 DO 250
it = nmax2,0,-1
265 IF( xfi.GE.xf(
it)) go to 350
287 , xtild(
it),xtild(
it+1), a0, a1, a2, a3 )
290 xprimin = a1 + 2.* a2 * xi + 3.*a3 * xi *xi
293 xi = xi - ( xf1 - xfi )/ xprimin
295 IF( abs(xi-xo1).LE.epsilon) go to 550
298 xf1 = a0 + a1 * xi + a2 * xi2 + a3 * xi2 * xi
299 xprimin = a1 + 2.* a2 * xi + 3.* a3 * xi2
301 WRITE(6,*)
' Pas de solution ***** ',
i,xlon2,iter
305 xxprim(
i) = depi/ (
REAL(iim) * xprimin )
306 xvrai(
i) = xi + xzoom
312 IF(ik.EQ.1.and.grossism.EQ.1.)
THEN
313 xvrai(1) = xvrai(iip1)-depi
314 xxprim(1) = xxprim(iip1)
319 xprimm(
i) = xxprim(
i)
322 IF( xvrai(
i+1). lt. xvrai(
i) )
THEN
323 WRITE(6,*)
' PBS. avec rlonu(',
i+1,
') plus petit que rlonu(',
i,
335 champmin = min( champmin,xvrai(
i) )
336 champmax = max( champmax,xvrai(
i) )
339 IF(champmin .GE.-
pi-0.10.and.champmax.LE.
pi+0.10 )
THEN
342 WRITE(6,*)
'Reorganisation des longitudes pour avoir entre - pi',
345 IF( xzoom.LE.0.)
THEN
348 IF( xvrai(
i).GE. -
pi ) go to 80
350 WRITE(6,*)
' PBS. 1 ! Xvrai plus petit que - pi ! '
359 xprimm(
ii-is2+1) = xxprim(
ii)
363 xprimm(
ii+
iim-is2+1) = xxprim(
ii)
369 IF( xvrai(
i).LE.
pi ) go to 90
371 WRITE(6,*)
' PBS. 2 ! Xvrai plus grand que pi ! '
379 xprimm(
ii+idif) = xxprim(
ii)
383 xprimm(
ii) = xxprim(
ii+is2)
394 xprimm( iip1 ) = xprimm(1 )
409 xprimm025(
i) = xprimm(
i)
411 ELSE IF( ik.EQ.2 )
THEN
423 ELSE IF( ik.EQ.3)
THEN
435 ELSE IF( ik.EQ.4 )
THEN
444 xprimp025(
i) = xprimm(
i)
461 champmin = min( champmin,
xlon(
i) )
462 champmax = max( champmax,
xlon(
i) )
464 champmin = champmin * 180./
pi
465 champmax = champmax * 180./
pi
468 24
FORMAT(2
x,
'Parametres xzoom,gross,tau ,dzoom pour fxhyp ',4f8.3)