Ignore:
Timestamp:
Aug 2, 2024, 9:58:25 PM (7 weeks ago)
Author:
abarral
Message:

Put dimensions.h and paramet.h into modules

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/inigeom.f90

    r5136 r5159  
    22! $Id$
    33
    4 !
    5 !
     4
     5
    66SUBROUTINE inigeom
    7   !
     7
    88  ! Auteur :  P. Le Van
    9   !
     9
    1010  !   ............      Version  du 01/04/2001     ........................
    11   !
     11
    1212  !  Calcul des elongations cuij1,.cuij4 , cvij1,..cvij4  aux memes en-
    1313  ! endroits que les aires aireij1,..aireij4 .
    1414
    1515  !  Choix entre f(y) a derivee sinusoid. ou a derivee tangente hyperbol.
    16   !
    17   !
     16
     17
    1818  USE fxhyp_m, ONLY: fxhyp
    1919  USE fyhyp_m, ONLY: fyhyp
     
    2727  USE lmdz_comgeom2
    2828
     29USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm
     30  USE lmdz_paramet
    2931  IMPLICIT NONE
    3032  !
    31   INCLUDE "dimensions.h"
    32   INCLUDE "paramet.h"
     33
     34
    3335
    3436  !-----------------------------------------------------------------------
    3537  !   ....  Variables  locales   ....
    36   !
     38
    3739  INTEGER :: i,j,itmax,itmay,iter
    3840  REAL :: cvu(iip1,jjp1),cuv(iip1,jjm)
     
    5355  SAVE rlatu1,yprimu1,rlatu2,yprimu2,yprimv,yprimu
    5456  SAVE rlonm025,xprimm025,rlonp025,xprimp025
    55   !
    56   !
     57
     58
    5759  !   ------------------------------------------------------------------
    5860  !   -                                                                -
     
    6062  !   -                                                                -
    6163  !   ------------------------------------------------------------------
    62   !
     64
    6365  !  les coef. ( cu, cv ) permettent de passer des vitesses naturelles
    6466  !  aux vitesses covariantes et contravariantes , ou vice-versa ...
    65   !
    66   !
     67
     68
    6769  ! on a :  u (covariant) = cu * u (naturel)   , u(contrav)= u(nat)/cu
    6870  !         v (covariant) = cv * v (naturel)   , v(contrav)= v(nat)/cv
    69   !
     71
    7072  !   on en tire :  u(covariant) = cu * cu * u(contravariant)
    7173  !                 v(covariant) = cv * cv * v(contravariant)
    72   !
    73   !
     74
     75
    7476  ! on a l'application (  x(X) , y(Y) )   avec - im/2 +1 <  X  < im/2
    7577  !                                                      =     =
    7678  !                                       et   - jm/2    <  Y  < jm/2
    7779  !                                                      =     =
    78   !
     80
    7981  !  ...................................................
    8082  !  ...................................................
     
    9092  !  ...................................................
    9193  !  ...................................................
    92   !
    93   !
    94   !
     94
     95
     96
    9597  !                                                       ,
    9698  !    cv , bien que dependant de j uniquement,sera ici indice aussi en i
    9799  !      pour un adressage plus facile en  ij  .
    98   !
    99   !
    100   !
     100
     101
     102
    101103  !  **************  aux points  u  et  v ,           *****************
    102104  !  xprimu et xprimv sont respectivement les valeurs de  dx/dX
     
    104106  !  rlatu  et  rlatv    .  .  .  .  .  .  .  .  .  .  .la latitude
    105107  !  cvu    et   cv      .  .  .  .  .  .  .  .  .  .  .    cv
    106   !
     108
    107109  !  **************  aux points u, v, scalaires, et z  ****************
    108110  !  cu, cuv, cuscal, cuz sont respectiv. les valeurs de    cu
    109   !
    110   !
    111   !
     111
     112
     113
    112114  !     Exemple de distribution de variables sur la grille dans le
    113115  !         domaine de travail ( X,Y ) .
    114116  ! ................................................................
    115117  !              DX=DY= 1
    116   !
    117   !
     118
     119
    118120  !    +     represente  un  point scalaire ( p.exp  la pression )
    119121  !    >     represente  la composante zonale du  vent
    120122  !    V     represente  la composante meridienne du vent
    121123  !    o     represente  la  vorticite
    122   !
     124
    123125  !   ----  , car aux poles , les comp.zonales covariantes sont nulles
    124   !
    125   !
    126   !
     126
     127
     128
    127129  !     i ->
    128   !
     130
    129131  !     1      2      3      4      5      6      7      8
    130132  !  j
    131133  !  v  1   + ---- + ---- + ---- + ---- + ---- + ---- + ---- + --
    132   !
     134
    133135  !     V   o  V   o  V   o  V   o  V   o  V   o  V   o  V  o
    134   !
     136
    135137  ! 2   +   >  +   >  +   >  +   >  +   >  +   >  +   >  +  >
    136   !
     138
    137139  !     V   o  V   o  V   o  V   o  V   o  V   o  V   o  V  o
    138   !
     140
    139141  ! 3   +   >  +   >  +   >  +   >  +   >  +   >  +   >  +  >
    140   !
     142
    141143  !     V   o  V   o  V   o  V   o  V   o  V   o  V   o  V  o
    142   !
     144
    143145  ! 4   +   >  +   >  +   >  +   >  +   >  +   >  +   >  +  >
    144   !
     146
    145147  !     V   o  V   o  V   o  V   o  V   o  V   o  V   o  V  o
    146   !
     148
    147149  ! 5   + ---- + ---- + ---- + ---- + ---- + ---- + ---- + --
    148   !
    149   !
     150
     151
    150152  !  Ci-dessus,  on voit que le nombre de pts.en longitude est egal
    151153  !             a   IM = 8
    152154  !  De meme ,   le nombre d'intervalles entre les 2 poles est egal
    153155  !             a   JM = 4
    154   !
     156
    155157  !  Les points scalaires ( + ) correspondent donc a des valeurs
    156158  !   entieres  de  i ( 1 a IM )   et  de  j ( 1 a  JM +1 )   .
    157   !
     159
    158160  !  Les vents    U       ( > ) correspondent a des valeurs  semi-
    159161  !   entieres  de i ( 1+ 0.5 a IM+ 0.5) et entieres de j ( 1 a JM+1)
    160   !
     162
    161163  !  Les vents    V       ( V ) correspondent a des valeurs entieres
    162164  !   de     i ( 1 a  IM ) et semi-entieres de  j ( 1 +0.5  a JM +0.5)
    163   !
    164   !
    165   !
     165
     166
     167
    166168  WRITE(6,3)
    167169 3   FORMAT( // 10x,' ....  INIGEOM  date du 01/06/98   ..... ', &
     
    169171         5  x,' elong. cuij1, .. 4  , cvij1,.. 4  qui les entourent , aux&
    170172           & '/ 5x,' memes endroits que les aires aireij1,...j4   . ' / )
    171   !
    172   !
     173
     174
    173175  IF( nitergdiv/=2 ) THEN
    174176    gamdi_gdiv = coefdis/ ( REAL(nitergdiv) -2. )
     
    189191  WRITE(6,*) ' gamdi_gd ',gamdi_gdiv,gamdi_grot,gamdi_h,coefdis, &
    190192        nitergdiv,nitergrot,niterh
    191   !
     193
    192194  pi    = 2.* ASIN(1.)
    193   !
     195
    194196  WRITE(6,990)
    195197
    196198  ! ----------------------------------------------------------------
    197   !
     199
    198200  IF( .NOT.fxyhypb )   THEN
    199   !
    200   !
     201
     202
    201203   IF( ysinus )  THEN
    202   !
     204
    203205    WRITE(6,*) ' ***  Inigeom ,  Y = Sinus ( Latitude ) *** '
    204   !
     206
    205207  !   .... utilisation de f(x,y )  avec  y  =  sinus de la latitude  .....
    206208
     
    210212
    211213   ELSE
    212   !
     214
    213215    WRITE(6,*) '*** Inigeom ,  Y = Latitude  , der. sinusoid . ***'
    214216
     
    218220    pxo   = clon *pi /180.
    219221    pyo   = 2.* clat* pi /180.
    220   !
     222
    221223  !  ....  determination de  transx ( pour le zoom ) par Newton-Raphson ...
    222   !
     224
    223225    itmax = 10
    224226    eps   = .1e-7
    225   !
     227
    226228    xo1 = 0.
    227229    DO iter = 1, itmax
     
    235237  END DO
    236238 11   CONTINUE
    237   !
     239
    238240    transx = xo1
    239241
    240242    itmay = 10
    241243    eps   = .1e-7
    242   !
     244
    243245    yo1  = 0.
    244246    DO iter = 1,itmay
     
    251253    yo1  = y1
    252254  END DO
    253   !
     255
    254256 17   CONTINUE
    255257    transy = yo1
     
    260262
    261263   ENDIF
    262   !
     264
    263265  ELSE
    264   !
     266
    265267  !   ....  Utilisation  de fxyhyper , f(x,y) a derivee tangente hyperbol.
    266268  !   .....................................................................
     
    272274
    273275  ENDIF
    274   !
     276
    275277  !  -------------------------------------------------------------------
    276278
    277   !
     279
    278280  rlatu(1)    =     ASIN(1.)
    279281  rlatu(jjp1) =  - rlatu(1)
    280   !
    281   !
     282
     283
    282284  !   ....  calcul  aux  poles  ....
    283   !
     285
    284286  yprimu(1)      = 0.
    285287  yprimu(jjp1)   = 0.
    286   !
    287   !
     288
     289
    288290  un4rad2 = 0.25 * rad * rad
    289   !
     291
    290292  !   --------------------------------------------------------------------
    291293  !   --------------------------------------------------------------------
     
    296298  !   --------------------------------------------------------------------
    297299  !   --------------------------------------------------------------------
    298   !
    299   !
    300   !
     300
     301
     302
    301303  !   A 1 point scalaire P (i,j) de la grille, reguliere en (X,Y) , sont
    302304  !   affectees 4 aires entourant P , calculees respectivement aux points
     
    305307  !        ( i - 1/4, j + 1/4 )    :    aireij3 (i,j)
    306308  !        ( i - 1/4, j - 1/4 )    :    aireij4 (i,j)
    307   !
     309
    308310  !       ,
    309311  !   Les cotes de chacun de ces 4 carres etant egaux a 1/2 suivant (X,Y).
     
    313315  !   On definit en outre les coefficients  alpha comme etant egaux a
    314316  !    (aireij / aire), c.a.d par exp.  alpha1(i,j)=aireij1(i,j)/aire(i,j)
    315   !
     317
    316318  !   De meme, toute aire centree en 1 point U est egale a la somme des
    317319  !   4 aires aireij1,aireij2,aireij3,aireij4 entourant le point U .
    318320  !    Idem pour  airev, airez .
    319   !
     321
    320322  !   On a ,pour chaque maille :    dX = dY = 1
    321   !
    322   !
     323
     324
    323325  !                         . V
    324   !
     326
    325327  !             aireij4 .        . aireij1
    326   !
     328
    327329  !               U .       . P      . U
    328   !
     330
    329331  !             aireij3 .        . aireij2
    330   !
     332
    331333  !                         . V
    332   !
    333   !
    334   !
    335   !
    336   !
     334
     335
     336
     337
     338
    337339  !   ....................................................................
    338   !
     340
    339341  !    Calcul des 4 aires elementaires aireij1,aireij2,aireij3,aireij4
    340342  !   qui entourent chaque aire(i,j) , ainsi que les 4 elongations elemen
    341343  !   taires cuij et les 4 elongat. cvij qui sont calculees aux memes
    342344  ! endroits  que les aireij   .
    343   !
     345
    344346  !   ....................................................................
    345   !
     347
    346348  ! .......  do 35  :   boucle sur les  jjm + 1  latitudes   .....
    347   !
    348   !
     349
     350
    349351  DO j = 1, jjp1
    350   !
     352
    351353  IF ( j == 1 )  THEN
    352   !
     354
    353355  yprm           = yprimu1(j)
    354356  rlatm          = rlatu1(j)
    355   !
     357
    356358  coslatm        = COS( rlatm )
    357359  radclatm       = 0.5* rad * coslatm
    358   !
     360
    359361  DO i = 1, iim
    360362  xprp           = xprimp025( i )
     
    367369  cvij3  ( i,1 ) = cvij2(i,1)
    368370  END DO
    369   !
     371
    370372  DO  i = 1, iim
    371373  aireij1( i,1 ) = 0.
     
    376378  cvij4  ( i,1 ) = 0.
    377379  ENDDO
    378   !
     380
    379381  END IF
    380   !
     382
    381383  IF ( j == jjp1 )  THEN
    382384   yprp               = yprimu2(j-1)
     
    384386  !cc       yprp             = fyprim( REAL(j) - 0.25 )
    385387  !cc       rlatp            = fy    ( REAL(j) - 0.25 )
    386   !
     388
    387389  coslatp             = COS( rlatp )
    388390  radclatp            = 0.5* rad * coslatp
    389   !
     391
    390392  DO i = 1,iim
    391393    xprp              = xprimp025( i )
     
    398400    cvij4(i,jjp1)     = cvij1(i,jjp1)
    399401  END DO
    400   !
     402
    401403   DO   i    = 1, iim
    402404    aireij2( i,jjp1 ) = 0.
     
    407409    cuij3  ( i,jjp1 ) = 0.
    408410   ENDDO
    409   !
     411
    410412  END IF
    411413  !
    412414
    413415  IF ( j > 1 .AND. j < jjp1 )  THEN
    414   !
     416
    415417    rlatp    = rlatu2 ( j-1 )
    416418    yprp     = yprimu2( j-1 )
     
    426428     radclatp = 0.5* rad * coslatp
    427429     radclatm = 0.5* rad * coslatm
    428   !
     430
    429431     ai14            = un4rad2 * coslatp * yprp
    430432     ai23            = un4rad2 * coslatm * yprm
     
    446448     cvij4   ( i,j ) = cvij1(i,j)
    447449  END DO
    448   !
     450
    449451  END IF
    450   !
     452
    451453  !    ........       periodicite   ............
    452   !
     454
    453455     cvij1   (iip1,j) = cvij1   (1,j)
    454456     cvij2   (iip1,j) = cvij2   (1,j)
     
    465467
    466468  END DO
    467   !
     469
    468470  !    ..............................................................
    469   !
     471
    470472  DO j = 1, jjp1
    471473  DO i = 1, iim
     
    481483  alpha3p4( i,j )  = alpha3 (i,j) + alpha4 (i,j)
    482484  END DO
    483   !
    484   !
     485
     486
    485487  aire    (iip1,j) = aire    (1,j)
    486488  alpha1  (iip1,j) = alpha1  (1,j)
     
    510512  airesurg   (iip1,j) = airesurg(1,j)
    511513  END DO
    512   !
    513   !
     514
     515
    514516  DO j = 1,jjm
    515   !
     517
    516518    DO i=1,iim
    517519     airev     (i,j) = aireij2(i,j)+ aireij3(i,j)+ aireij1(i,j+1) + &
     
    529531    fext      (iip1,j)  = fext(1,j)
    530532    unsairz_gam(iip1,j) = unsairz_gam(1,j)
    531   !
    532   END DO
    533   !
    534   !
     533
     534  END DO
     535
     536
    535537  !    .....      Calcul  des elongations cu,cv, cvu     .........
    536   !
     538
    537539  DO    j   = 1, jjm
    538540   DO   i  = 1, iim
     
    579581  ENDDO
    580582
    581   !
     583
    582584  !   ....  calcul aux  poles  ....
    583   !
     585
    584586  DO    i      =  1, iip1
    585587    cu    ( i, 1 )  =   0.
    586588    unscu2( i, 1 )  =   0.
    587589    cvu   ( i, 1 )  =   0.
    588   !
     590
    589591    cu    (i, jjp1) =   0.
    590592    unscu2(i, jjp1) =   0.
    591593    cvu   (i, jjp1) =   0.
    592594  ENDDO
    593   !
     595
    594596  !    ..............................................................
    595   !
     597
    596598  DO j = 1, jjm
    597599    DO i= 1, iim
     
    612614  ENDDO
    613615
    614   !
     616
    615617  !   calcul des aires aux  poles :
    616618  !   -----------------------------
    617   !
     619
    618620  apoln       = SSUM(iim,aire(1,1),1)
    619621  apols       = SSUM(iim,aire(1,jjp1),1)
     
    622624  unsapolnga2 = 1./ ( apoln ** ( - gamdi_h    ) )
    623625  unsapolsga2 = 1./ ( apols ** ( - gamdi_h    ) )
    624   !
     626
    625627  !-----------------------------------------------------------------------
    626628  ! gtitre='Coriolis version ancienne'
    627629  ! gfichier='fext1'
    628630  ! CALL writestd(fext,iip1*jjm)
    629   !
     631
    630632  !   changement F. Hourdin calcul conservatif pour fext
    631633  !   constang contient le produit a * cos ( latitude ) * omega
    632   !
     634
    633635  DO i=1,iim
    634636     constang(i,1) = 0.
     
    642644     constang(i,jjp1) = 0.
    643645  ENDDO
    644   !
     646
    645647  !   periodicite en longitude
    646   !
     648
    647649  DO j=1,jjm
    648650    fext(iip1,j)     = fext(1,j)
     
    654656  ! fin du changement
    655657
    656   !
     658
    657659  !-----------------------------------------------------------------------
    658   !
     660
    659661   WRITE(6,*) '   ***  Coordonnees de la grille  *** '
    660662   WRITE(6,995)
    661   !
     663
    662664   WRITE(6,*) '   LONGITUDES  aux pts.   V  ( degres )  '
    663665   WRITE(6,995)
     
    666668    ENDDO
    667669   WRITE(6,400) rlonvv
    668   !
     670
    669671   WRITE(6,995)
    670672   WRITE(6,*) '   LATITUDES   aux pts.   V  ( degres )  '
     
    674676    ENDDO
    675677   WRITE(6,400) (rlatuu(i),i=1,jjm)
    676   !
     678
    677679    DO i=1,iip1
    678680      rlonvv(i)=rlonu(i)*180./pi
     
    691693   WRITE(6,400) (rlatuu(i),i=1,jjp1)
    692694   WRITE(6,995)
    693   !
     695
    694696444   format(f10.3,f6.0)
    695697400   FORMAT(1x,8f8.2)
    696698990   FORMAT(//)
    697699995   FORMAT(/)
    698   !
     700
    699701  RETURN
    700702END SUBROUTINE inigeom
Note: See TracChangeset for help on using the changeset viewer.