Changeset 330


Ignore:
Timestamp:
Feb 6, 2002, 3:53:54 PM (23 years ago)
Author:
lmdzadmin
Message:

Pour avoir des longitudes commencant a -180 degres
LF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ.3.3/branches/rel-LF/libf/dyn3d/fxhyp.F

    r242 r330  
     1c
     2c $Header$
     3c
    14       SUBROUTINE fxhyp ( xzoomdeg,grossism,dzoom,tau ,
    25     , rlonm025,xprimm025,rlonv,xprimv,rlonu,xprimu,rlonp025,xprimp025,
     
    2023       INTEGER nmax, nmax2
    2124       PARAMETER (  nmax = 30000, nmax2 = 2*nmax )
     25c
     26       LOGICAL scal180
     27       PARAMETER ( scal180 = .TRUE. )
     28
     29c      scal180 = .TRUE.  si on veut avoir le premier point scalaire pour   
     30c      une grille reguliere ( grossism = 1.,tau=0.,clon=0. ) a -180. degres.
     31c      sinon scal180 = .FALSE.
    2232
    2333#include "dimensions.h"
     
    4252       REAL*8 pi,depi,epsilon,xzoom,fa,fb
    4353       REAL*8 Xf1, Xfi , a0,a1,a2,a3,xi2
    44        INTEGER i,it,ik,iter,ii,idif
     54       INTEGER i,it,ik,iter,ii,idif,ii1,ii2
    4555       REAL*8 xi,xo1,xmoy,xlon2,fxm,Xprimin
    46        REAL*8 champmin,champmax
     56       REAL*8 champmin,champmax,decalx
    4757       INTEGER is2
    4858       SAVE is2
     
    5565       epsilon  = 1.e-3
    5666       xzoom    = xzoomdeg * pi/180.
    57 
     67c
     68           decalx   = .75
     69       IF( grossism.EQ.1..AND.scal180 )  THEN
     70           decalx   = 1.
     71       ENDIF
     72
     73       WRITE(6,*) 'FXHYP scal180,decalx', scal180,decalx
     74c
    5875       IF( dzoom.LT.1.)  THEN
    5976         dzoom = dzoom * depi
     
    7390       ENDDO
    7491
    75        DO i = 0, nmax2
     92       DO i = nmax, nmax2
    7693
    7794       fa  = tau*  ( dzoom/2.  - xtild(i) )
    7895       fb  = xtild(i) *  ( pi - xtild(i) )
    7996
    80 
    81        if ( xtild(i) .ne. 0. .and. xtild(i) .ne. pi) then
    8297         IF( 200.* fb .LT. - fa )   THEN
    8398           fhyp ( i) = - 1.
     
    85100           fhyp ( i) =   1.
    86101         ELSE
    87            fhyp(i) =  TANH ( fa/fb )
     102            IF( ABS(fa).LT.1.e-13.AND.ABS(fb).LT.1.e-13)  THEN
     103                IF(   200.*fb + fa.LT.1.e-10 )  THEN
     104                    fhyp ( i ) = - 1.
     105                ELSEIF( 200.*fb - fa.LT.1.e-10 )  THEN
     106                    fhyp ( i )  =   1.
     107                ENDIF
     108            ELSE
     109                    fhyp ( i )  =  TANH ( fa/fb )
     110            ENDIF
    88111         ENDIF
    89        endif
    90 
    91        IF ( xtild(i).EQ. 0. )  fhyp(i) =  1.
    92        IF ( xtild(i).EQ. pi )  fhyp(i) = -1.
     112        IF ( xtild(i).EQ. 0. )  fhyp(i) =  1.
     113        IF ( xtild(i).EQ. pi )  fhyp(i) = -1.
    93114
    94115       ENDDO
    95116
    96117cc  ....  Calcul  de  beta  ....
    97 c   ............................
    98118
    99119       ffdx = 0.
    100120
    101121       DO i = nmax +1,nmax2
     122
     123       xmoy    = 0.5 * ( xtild(i-1) + xtild( i ) )
     124       fa  = tau*  ( dzoom/2.  - xmoy )
     125       fb  = xmoy *  ( pi - xmoy )
     126
     127       IF( 200.* fb .LT. - fa )   THEN
     128         fxm = - 1.
     129       ELSEIF( 200. * fb .LT. fa ) THEN
     130         fxm =   1.
     131       ELSE
     132            IF( ABS(fa).LT.1.e-13.AND.ABS(fb).LT.1.e-13)  THEN
     133                IF(   200.*fb + fa.LT.1.e-10 )  THEN
     134                    fxm   = - 1.
     135                ELSEIF( 200.*fb - fa.LT.1.e-10 )  THEN
     136                    fxm   =   1.
     137                ENDIF
     138            ELSE
     139                    fxm   =  TANH ( fa/fb )
     140            ENDIF
     141       ENDIF
     142
     143       IF ( xmoy.EQ. 0. )  fxm  =  1.
     144       IF ( xmoy.EQ. pi )  fxm  = -1.
     145
     146       ffdx = ffdx + fxm * ( xtild(i) - xtild(i-1) )
     147
     148       ENDDO
     149
     150        beta  = ( grossism * ffdx - pi ) / ( ffdx - pi )
     151
     152       IF( 2.*beta - grossism.LE. 0.)  THEN
     153        WRITE(6,*) ' **  Attention ! La valeur beta calculee dans la rou
     154     ,tine fxhyp est mauvaise ! '
     155        WRITE(6,*)'Modifier les valeurs de  grossismx ,tau ou dzoomx ',
     156     , ' et relancer ! ***  '
     157        CALL ABORT
     158       ENDIF
     159c
     160c   .....  calcul  de  Xprimt   .....
     161c
     162       
     163       DO i = nmax, nmax2
     164        Xprimt(i) = beta  + ( grossism - beta ) * fhyp(i)
     165       ENDDO
     166c   
     167       DO i =  nmax+1, nmax2
     168        Xprimt( nmax2 - i ) = Xprimt( i )
     169       ENDDO
     170c
     171
     172c   .....  Calcul  de  Xf     ........
     173
     174       Xf(0) = - pi
     175
     176       DO i =  nmax +1, nmax2
    102177
    103178       xmoy    = 0.5 * ( xtild(i-1) + xtild( i ) )
     
    113188       ENDIF
    114189
    115        IF ( xmoy.EQ. 0. )  fhyp(i) =  1.
    116        IF ( xmoy.EQ. pi )  fhyp(i) = -1.
    117        ffdx = ffdx + fxm * ( xtild(i) - xtild(i-1) )
    118 
    119        ENDDO
    120 
    121         beta  = ( grossism * ffdx - pi ) / ( ffdx - pi )
    122 
    123        IF( 2.*beta - grossism.LE. 0.)  THEN
    124         WRITE(6,*) ' **  Attention ! La valeur beta calculee dans la rou
    125      ,tine fxhyp est mauvaise ! '
    126         WRITE(6,*)'Modifier les valeurs de  grossismx ,tau ou dzoomx ',
    127      , ' et relancer ! ***  '
    128         CALL ABORT
    129        ENDIF
    130 c
    131 c   .....  calcul  de  Xprimt   .....
    132 c
    133        
    134        DO i = nmax, nmax2
    135         Xprimt(i) = beta  + ( grossism - beta ) * fhyp(i)
    136        ENDDO
    137 c   
    138        DO i =  nmax+1, nmax2
    139         Xprimt( nmax2 - i ) = Xprimt( i )
    140        ENDDO
    141 c
    142 
    143 c   .....  Calcul  de  Xf     ........
    144 
    145        Xf(0) = - pi
    146 
    147        DO i =  nmax +1, nmax2
    148 
    149        xmoy    = 0.5 * ( xtild(i-1) + xtild( i ) )
    150        fa  = tau*  ( dzoom/2.  - xmoy )
    151        fb  = xmoy *  ( pi - xmoy )
    152 
    153        IF( 200.* fb .LT. - fa )   THEN
    154          fxm = - 1.
    155        ELSEIF( 200. * fb .LT. fa ) THEN
    156          fxm =   1.
    157        ELSE
    158          fxm =  TANH ( fa/fb )
    159        ENDIF
    160 
    161190       IF ( xmoy.EQ. 0. )  fxm =  1.
    162191       IF ( xmoy.EQ. pi )  fxm = -1.
     
    185214
    186215       IF( ik.EQ.1 )        THEN
    187          xuv = - 0.25
     216         xuv =  -0.25
    188217       ELSE IF ( ik.EQ.2 )  THEN
    189218         xuv =   0.
    190219       ELSE IF ( ik.EQ.3 )  THEN
    191          xuv =   0.5
     220         xuv =   0.50
    192221       ELSE IF ( ik.EQ.4 )  THEN
    193222         xuv =   0.25
     
    196225      xo1   = 0.
    197226
    198       DO 1500 i = 1, iim
    199 
    200       xlon2 = - pi + (FLOAT(i) + xuv - 0.75) * depi / FLOAT(iim)
     227      ii1=1
     228      ii2=iim
     229      IF(ik.EQ.1.and.grossism.EQ.1.) THEN
     230        ii1 = 2
     231        ii2 = iim+1
     232      ENDIF
     233      DO 1500 i = ii1, ii2
     234
     235      xlon2 = - pi + (FLOAT(i) + xuv - decalx) * depi / FLOAT(iim)
    201236
    202237      Xfi    = xlon2
     
    2482831500   CONTINUE
    249284
     285
     286       IF(ik.EQ.1.and.grossism.EQ.1.)  THEN
     287         xvrai(1)    = xvrai(iip1)-depi
     288         xxprim(1)   = xxprim(iip1)
     289       ENDIF
    250290       DO i = 1 , iim
    251291        xlon(i)     = xvrai(i)
    252292        xprimm(i)   = xxprim(i)
    253293       ENDDO
    254        
    255294       DO i = 1, iim -1
    256295        IF( xvrai(i+1). LT. xvrai(i) )  THEN
     
    271310       ENDDO
    272311
    273       IF(champmin .GE. - pi .AND. champmax.LE. pi )  THEN
     312      IF(champmin .GE.-pi-0.10.and.champmax.LE.pi+0.10 )  THEN
    274313                GO TO 1600
    275314      ELSE
     
    301340          IF( ik.EQ.1 )  THEN
    302341           DO i = iim,1,-1
    303             IF( xvrai(i).LE. pi ) GO TO 90
     342             IF( xvrai(i).LE. pi ) GO TO 90
    304343           ENDDO
    305344             WRITE(6,*) ' PBS.  2 ! Xvrai plus grand  que   pi ! '
     
    336375c          WRITE(6,18)
    337376c          WRITE(6,68) xvrai
    338 ccc          WRITE(6,*) ' XPRIM k ',ik
    339 ccc          WRITE(6,566)  xprimm
    340 
    341            DO i = 1,iim + 1
     377c          WRITE(6,*) ' XPRIM k ',ik
     378c          WRITE(6,566)  xprimm
     379
     380           DO i = 1,iim +1
    342381             rlonm025(i) = xlon( i )
    343382            xprimm025(i) = xprimm(i)
    344383           ENDDO
    345 
    346384         ELSE IF( ik.EQ.2 )  THEN
    347385c          WRITE(6,18)
    348386c          WRITE(6,*)  ' XLON aux pts. V   apres ( en  deg. ) '
    349387c          WRITE(6,68) xvrai
    350 ccc          WRITE(6,*) ' XPRIM k ',ik
    351 ccc          WRITE(6,566)  xprimm
     388c          WRITE(6,*) ' XPRIM k ',ik
     389c          WRITE(6,566)  xprimm
    352390
    353391           DO i = 1,iim + 1
     
    360398c          WRITE(6,*)  ' XLON aux pts. U   apres ( en  deg. ) '
    361399c          WRITE(6,68) xvrai
    362 ccc          WRITE(6,*) ' XPRIM ik ',ik
    363 ccc          WRITE(6,566)  xprimm
     400c          WRITE(6,*) ' XPRIM ik ',ik
     401c          WRITE(6,566)  xprimm
    364402
    365403           DO i = 1,iim + 1
     
    372410c          WRITE(6,*)  ' XLON aux pts. V+0.25   apres ( en  deg. ) '
    373411c          WRITE(6,68) xvrai
    374 ccc          WRITE(6,*) ' XPRIM ik ',ik
    375 ccc          WRITE(6,566)  xprimm
     412c          WRITE(6,*) ' XPRIM ik ',ik
     413c          WRITE(6,566)  xprimm
    376414
    377415           DO i = 1,iim + 1
     
    40344124     FORMAT(2x,'Parametres xzoom,gross,tau ,dzoom pour fxhyp ',4f8.3)
    40444268     FORMAT(1x,7f9.2)
     443566    FORMAT(1x,7f9.4)
    405444
    406445       RETURN
Note: See TracChangeset for help on using the changeset viewer.