Ignore:
Timestamp:
Nov 29, 2001, 1:15:59 PM (23 years ago)
Author:
lmdz
Message:

Probleme de decalage de grille par rapport a 180 degres regle (Levan)
LF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ.3.3/branches/rel-1-0-patch/libf/dyn3d/fxhyp.F

    r253 r298  
    2020       INTEGER nmax, nmax2
    2121       PARAMETER (  nmax = 30000, nmax2 = 2*nmax )
     22c
     23       LOGICAL scal180
     24       PARAMETER ( scal180 = .TRUE. )
     25
     26c      scal180 = .TRUE.  si on veut avoir le premier point scalaire pour   
     27c      une grille reguliere ( grossism = 1.,tau=0.,clon=0. ) a -180. degres.
     28c      sinon scal180 = .FALSE.
    2229
    2330#include "dimensions.h"
     
    4249       REAL*8 pi,depi,epsilon,xzoom,fa,fb
    4350       REAL*8 Xf1, Xfi , a0,a1,a2,a3,xi2
    44        INTEGER i,it,ik,iter,ii,idif
     51       INTEGER i,it,ik,iter,ii,idif,ii1,ii2
    4552       REAL*8 xi,xo1,xmoy,xlon2,fxm,Xprimin
    46        REAL*8 champmin,champmax
     53       REAL*8 champmin,champmax,decalx
    4754       INTEGER is2
    4855       SAVE is2
     
    5562       epsilon  = 1.e-3
    5663       xzoom    = xzoomdeg * pi/180.
    57 
     64c
     65           decalx   = .75
     66       IF( grossism.EQ.1..AND.scal180 )  THEN
     67           decalx   = 1.
     68       ENDIF
     69
     70       WRITE(6,*) 'FXHYP scal180,decalx', scal180,decalx
     71c
    5872       IF( dzoom.LT.1.)  THEN
    5973         dzoom = dzoom * depi
     
    7387       ENDDO
    7488
    75        DO i = 0, nmax2
     89       DO i = nmax, nmax2
    7690
    7791       fa  = tau*  ( dzoom/2.  - xtild(i) )
    7892       fb  = xtild(i) *  ( pi - xtild(i) )
    7993
    80 
    81        if ( xtild(i) .ne. 0. .and. xtild(i) .ne. pi) then
    8294         IF( 200.* fb .LT. - fa )   THEN
    8395           fhyp ( i) = - 1.
     
    8597           fhyp ( i) =   1.
    8698         ELSE
    87            fhyp(i) =  TANH ( fa/fb )
     99            IF( ABS(fa).LT.1.e-13.AND.ABS(fb).LT.1.e-13)  THEN
     100                IF(   200.*fb + fa.LT.1.e-10 )  THEN
     101                    fhyp ( i ) = - 1.
     102                ELSEIF( 200.*fb - fa.LT.1.e-10 )  THEN
     103                    fhyp ( i )  =   1.
     104                ENDIF
     105            ELSE
     106                    fhyp ( i )  =  TANH ( fa/fb )
     107            ENDIF
    88108         ENDIF
    89        endif
    90 
    91        IF ( xtild(i).EQ. 0. )  fhyp(i) =  1.
    92        IF ( xtild(i).EQ. pi )  fhyp(i) = -1.
     109
     110        IF ( xtild(i).EQ. 0. )  fhyp(i) =  1.
     111        IF ( xtild(i).EQ. pi )  fhyp(i) = -1.
    93112
    94113       ENDDO
     
    100119
    101120       DO i = nmax +1,nmax2
     121
     122       xmoy    = 0.5 * ( xtild(i-1) + xtild( i ) )
     123       fa  = tau*  ( dzoom/2.  - xmoy )
     124       fb  = xmoy *  ( pi - xmoy )
     125
     126       IF( 200.* fb .LT. - fa )   THEN
     127         fxm = - 1.
     128       ELSEIF( 200. * fb .LT. fa ) THEN
     129         fxm =   1.
     130       ELSE
     131            IF( ABS(fa).LT.1.e-13.AND.ABS(fb).LT.1.e-13)  THEN
     132                IF(   200.*fb + fa.LT.1.e-10 )  THEN
     133                    fxm   = - 1.
     134                ELSEIF( 200.*fb - fa.LT.1.e-10 )  THEN
     135                    fxm   =   1.
     136                ENDIF
     137            ELSE
     138                    fxm   =  TANH ( fa/fb )
     139            ENDIF
     140       ENDIF
     141
     142       IF ( xmoy.EQ. 0. )  fxm  =  1.
     143       IF ( xmoy.EQ. pi )  fxm  = -1.
     144
     145       ffdx = ffdx + fxm * ( xtild(i) - xtild(i-1) )
     146
     147       ENDDO
     148
     149        beta  = ( grossism * ffdx - pi ) / ( ffdx - pi )
     150
     151       IF( 2.*beta - grossism.LE. 0.)  THEN
     152        WRITE(6,*) ' **  Attention ! La valeur beta calculee dans la rou
     153     ,tine fxhyp est mauvaise ! '
     154        WRITE(6,*)'Modifier les valeurs de  grossismx ,tau ou dzoomx ',
     155     , ' et relancer ! ***  '
     156        CALL ABORT
     157       ENDIF
     158c
     159c   .....  calcul  de  Xprimt   .....
     160c
     161       
     162       DO i = nmax, nmax2
     163        Xprimt(i) = beta  + ( grossism - beta ) * fhyp(i)
     164       ENDDO
     165c   
     166       DO i =  nmax+1, nmax2
     167        Xprimt( nmax2 - i ) = Xprimt( i )
     168       ENDDO
     169c
     170
     171c   .....  Calcul  de  Xf     ........
     172
     173       Xf(0) = - pi
     174
     175       DO i =  nmax +1, nmax2
    102176
    103177       xmoy    = 0.5 * ( xtild(i-1) + xtild( i ) )
     
    113187       ENDIF
    114188
    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 
    161189       IF ( xmoy.EQ. 0. )  fxm =  1.
    162190       IF ( xmoy.EQ. pi )  fxm = -1.
     
    185213
    186214       IF( ik.EQ.1 )        THEN
    187          xuv = - 0.25
     215         xuv =  -0.25
    188216       ELSE IF ( ik.EQ.2 )  THEN
    189217         xuv =   0.
    190218       ELSE IF ( ik.EQ.3 )  THEN
    191          xuv =   0.5
     219         xuv =   0.50
    192220       ELSE IF ( ik.EQ.4 )  THEN
    193221         xuv =   0.25
     
    196224      xo1   = 0.
    197225
    198       DO 1500 i = 1, iim
    199 
    200       xlon2 = - pi + (FLOAT(i) + xuv - 0.75) * depi / FLOAT(iim)
     226      ii1=1
     227      ii2=iim
     228      IF(ik.EQ.1.and.grossism.EQ.1.) THEN
     229        ii1 = 2
     230        ii2 = iim+1
     231      ENDIF
     232
     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        
     294 
    255295       DO i = 1, iim -1
    256296        IF( xvrai(i+1). LT. xvrai(i) )  THEN
     
    271311       ENDDO
    272312
    273       IF(champmin .GE. - pi .AND. champmax.LE. pi )  THEN
     313      IF(champmin .GE.-pi-0.10.and.champmax.LE.pi+0.10 )  THEN
    274314                GO TO 1600
    275315      ELSE
     
    301341          IF( ik.EQ.1 )  THEN
    302342           DO i = iim,1,-1
    303             IF( xvrai(i).LE. pi ) GO TO 90
     343             IF( xvrai(i).LE. pi ) GO TO 90
    304344           ENDDO
    305345             WRITE(6,*) ' PBS.  2 ! Xvrai plus grand  que   pi ! '
     
    336376c          WRITE(6,18)
    337377c          WRITE(6,68) xvrai
    338 ccc          WRITE(6,*) ' XPRIM k ',ik
    339 ccc          WRITE(6,566)  xprimm
    340 
    341            DO i = 1,iim + 1
     378c          WRITE(6,*) ' XPRIM k ',ik
     379c          WRITE(6,566)  xprimm
     380
     381           DO i = 1,iim +1
    342382             rlonm025(i) = xlon( i )
    343383            xprimm025(i) = xprimm(i)
    344384           ENDDO
    345 
     385           
    346386         ELSE IF( ik.EQ.2 )  THEN
    347387c          WRITE(6,18)
    348388c          WRITE(6,*)  ' XLON aux pts. V   apres ( en  deg. ) '
    349389c          WRITE(6,68) xvrai
    350 ccc          WRITE(6,*) ' XPRIM k ',ik
    351 ccc          WRITE(6,566)  xprimm
     390c          WRITE(6,*) ' XPRIM k ',ik
     391c          WRITE(6,566)  xprimm
    352392
    353393           DO i = 1,iim + 1
     
    360400c          WRITE(6,*)  ' XLON aux pts. U   apres ( en  deg. ) '
    361401c          WRITE(6,68) xvrai
    362 ccc          WRITE(6,*) ' XPRIM ik ',ik
    363 ccc          WRITE(6,566)  xprimm
     402c          WRITE(6,*) ' XPRIM ik ',ik
     403c          WRITE(6,566)  xprimm
    364404
    365405           DO i = 1,iim + 1
     
    372412c          WRITE(6,*)  ' XLON aux pts. V+0.25   apres ( en  deg. ) '
    373413c          WRITE(6,68) xvrai
    374 ccc          WRITE(6,*) ' XPRIM ik ',ik
    375 ccc          WRITE(6,566)  xprimm
     414c          WRITE(6,*) ' XPRIM ik ',ik
     415c          WRITE(6,566)  xprimm
    376416
    377417           DO i = 1,iim + 1
     
    40344324     FORMAT(2x,'Parametres xzoom,gross,tau ,dzoom pour fxhyp ',4f8.3)
    40444468     FORMAT(1x,7f9.2)
     445566    FORMAT(1x,7f9.4)
    405446
    406447       RETURN
Note: See TracChangeset for help on using the changeset viewer.