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
 
   63        REAL(KIND=8) heavyside
 
   68        xzoom    = xzoomdeg * pi/180. 
 
   76           rlonm025(2)=rlonm025(1)+depi
 
   77           rlonv(2)=rlonv(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 
  101          WRITE(6,*) 
' Le param. dzoomx pour fxhyp est trop petit ! L aug 
  102      ,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 
  176         WRITE(6,*) 
' **  Attention ! La valeur beta calculee dans la rou 
  177      ,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
 
  284        CALL coefpoly ( xf(it),xf(it+1),xprimt(it),xprimt(it+1),
 
  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
 
  309        IF(ik.EQ.1.and.grossism.EQ.1.)  
THEN 
  310          xvrai(1)    = xvrai(iip1)-depi
 
  311          xxprim(1)   = xxprim(iip1)
 
  316         xprimm(i)   = xxprim(i)
 
  319         IF( xvrai(i+1). lt. xvrai(i) )  
THEN 
  320          WRITE(6,*) 
' PBS. avec rlonu(',i+1,
') plus petit que rlonu(',i,
 
  332         champmin = min( champmin,xvrai(i) )
 
  333         champmax = max( champmax,xvrai(i) )
 
  336       IF(champmin .GE.-pi-0.10.and.champmax.LE.pi+0.10 )  
THEN 
  339        WRITE(6,*) 
'Reorganisation des longitudes pour avoir entre - pi',
 
  342         IF( xzoom.LE.0.)  
THEN 
  345            IF( xvrai(i).GE. - pi )  
GO TO 80
 
  347             WRITE(6,*)  
' PBS. 1 !  Xvrai plus petit que  - pi ! ' 
  355              xlon(ii-is2+1) = xvrai(ii)
 
  356              xprimm(ii-is2+1) = xxprim(ii)
 
  359              xlon(ii+
iim-is2+1) = xvrai(ii) + depi
 
  360              xprimm(ii+
iim-is2+1) = xxprim(ii) 
 
  366              IF( xvrai(i).LE. pi ) 
GO TO 90
 
  368              WRITE(6,*) 
' PBS.  2 ! Xvrai plus grand  que   pi ! ' 
  375             xlon(ii+idif) = xvrai(ii)
 
  376             xprimm(ii+idif) = xxprim(ii)
 
  379             xlon(ii)  = xvrai(ii+is2) - depi
 
  380             xprimm(ii) = xxprim(ii+is2) 
 
  390          xlon( iip1)  = xlon(1) + depi
 
  391          xprimm( iip1 ) = xprimm(1 )
 
  394          xvrai(i) = xlon(i)*180./pi
 
  405              rlonm025(i) = xlon( i )
 
  406             xprimm025(i) = xprimm(i)
 
  408          ELSE IF( ik.EQ.2 )  
THEN 
  417             xprimv(i) = xprimm(i)
 
  420          ELSE IF( ik.EQ.3)   
THEN 
  432          ELSE IF( ik.EQ.4 )  
THEN 
  440              rlonp025(i) = xlon( i )
 
  441             xprimp025(i) = xprimm(i)
 
  453          xlon(i) = rlonv(i+1) - rlonv(i)
 
  458          champmin = min( champmin, xlon(i) )
 
  459          champmax = max( champmax, xlon(i) )
 
  461          champmin = champmin * 180./pi
 
  462          champmax = champmax * 180./pi
 
  465 24     
FORMAT(2
x,
'Parametres xzoom,gross,tau ,dzoom pour fxhyp ',4f8.3)
 
!$Header!CDK comgeom COMMON comgeom xprimv(iip1)!REAL &&cu
 
subroutine abort_gcm(modname, message, ierr)
 
!$Header!CDK comgeom2 COMMON comgeom unsaire xprimu
 
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
 
!$Header!CDK comgeom COMMON comgeom rlonu
 
!$Header!c c INCLUDE fxyprim h c c c Fonctions in line c c REAL fyprim REAL rj c c il faut la calculer avant d appeler ces fonctions c c c Fonctions a changer selon x(x) et y(y) choisis.c-----------------------------------------------------------------c c.....ici
 
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
 
c c zjulian c cym CALL iim cym klev iim
 
!$Header!CDK comgeom COMMON comgeom rlonv
 
subroutine fxhyp(xzoomdeg, grossism, dzooma, tau, rlonm025, xprimm025, rlonv, xprimv, rlonu, xprimu, rlonp025, xprimp025, champmin, champmax)