
 ..  Version  du 28/12/1998  , avec  nouveau fxyhyper appele par inigeom ...
c
c
 
   La dynamique  de LMDZ.3.2  est pratiquement identique  a celle de 
                    LMDZ.3   .

  Elle ne differe , en gros , que par   :

 a ) etat0_lmd   ( on doit introduire , en plus de dayref qui est le jour
     -----------
      de l'etat initial cree ,  anneeref  , qui est l'annee correspondante
      et qui servira eventuellement  a lire la bonne annee pour le fichier
      limit.dat , dic  ) . Il y a aussi le  stockage des coefficients pour
      l'orographie  de Francois Lott , sur startphy .  

 b ) calfis  qui prepare l'interface avec la physique  qui a ete restruc-
     -------
     turee  par Laurent Li , dans ses grandes lignes , et qui est maintenant

     adaptee pour les traceurs avec l'ajout du shema de convection de Tiedtke. 
   
     Pour plus de details concernant le cote pratique des simulations avec
     cette bib.  , priere de se reporter a la fin  de ce  LISEZMOI .


 **************************************************************************

 1) Le gcm LMDZ.3.2  a des coordonnees  hybrides  verticalement ,c.a.d  des
          ********
   coordonnees equivalentes a sigma pres de la surface et a  P plus haut .     

   Les pressions  p(ij,l) aux differents interfaces des  llm  couches verti- 
   cales sont donnees  par   :

    p( ij,l ) = ap(l) + bp(l) * ps(ij)    ,    1 << l << llm + 1    . 

                  avec   bp(l) =  EXP ( 1. - 1./ sigma(l) ** 2 )
                         ap(l) =  pa * (  sigma(l) -  bp(l)  )

                    pa   est actuellement mis a  50 000.  Pascals .
            
   La fonction d'Exner  est calculee aux milieux des llm couches vertic.

     pk(ij,l) = cp * ( p(ij,l)/preff ) ** kappa   ,  1 << l <<  llm

   Les pressions  PLS(ij,l)  definies aux milieux des couches sont egales a :

     pls(ij,l) = preff * ( pk(ij,l) /cp ) ** 1./kappa

   (  preff = 101 325. Pascals  dans  etat0_lmd.F  actuellement  )
   

 2) Une des variables prognostiques de LMDZ.3  est   teta  , temperature 
     potentielle  :    

                 teta (ij,l) = temperature(ij,l) * cp/ pk(ij,l)
 
N.b : Les parametres  PA et PREFF  figurent dans l'entete des fichiers
***   start ( et restart) et histphy ,  ainsi que  AP(l) et BP(l)  .

    Y figurent aussi  PRESNIVS(l) qui donnent les valeurs approximatives
    des pressions aux milieux des couches , ainsi que  SIG_S(l) qui donnent
    simplement les indices des llm couches et dont  la presence  permet 
    d'utiliser tel quel  le logiciel ' wrctl '  de LMDZ.2.2 qui permet de  
    fabriquer a partir du fichier ' histphy' ( dat et dic ) le  histphy.ctl  
    pret a etre exploite  par  GrADS .

   Les pressions PLS(ij,l)  sont stockees sur le fichier ' histphy ' car
   elles sont indispensables quand on veut faire une interpolation des varia-
   bles d'analyse comme  u, v ,teta  a des valeurs determinees de la pression.
   Elles figurent aussi eventuellement sur le fichier histins.gdat (.ctl ) 
   qui renferme des etats instantanes .
   Voir le parametre ok_inst dans physiq.f  ( L.Li ) .

   Un exemple d'interpolation de u,v, et teta  se trouve  dans le fichier 
   'analyse_lmdz_hyb' du repertoire de la dynamique , analyse_hyb etant 
   adapte d'un fichier d'analyse de histphy  de  Laurent Li .
    
 3) Dans  le programme principal gcm.F , il faut definir , au debut ,les para-
    metres  IADV ,pour choisir le shema d'advection pour l'eau et les traceurs
               :    IADV = 1    , humidite specifique
                    IADV = 2    , shema    amont
                    IADV = 3    , Van-Leer

 4) Il y a 2 shemas de dissipation   ( diffusion laterale )  :

 a) La dissipation star ( qui ne fait pas intervenir la geometrie de la     
    grille et qui est utilisee quand il y a un zoom ) 

    Par expl . la diffusion d'un scalaire  comme  teta est formulee ( en 
     appelant l'operateur  DIVGRAD2 )   comme :

    d( ro * teta ) = (-1)**(it-1) *cdiv * Lap * ro**1/2 * Lap_gam** (it-2 ) *
                           ro**1/2 * Lap * teta
 avec  :
 Lap     = 1/aire * Filt[ dx ( coefx*dx ) + dy( coefy*dy ) ] Filt
       
 Lap_gam = (1./aire)** -gam { dx[ coefx**(-gam) dx] + dy[ coefy**(-gam) dy ] } 


  Filt est l'operateur  filtre 
  ro   est la densite dp  de chaque couche
  it   = nombre d'iterations de l'operateur de dissipation ( ici divgrad2 )
  gam  = coefdis /( it -2 ) , coefdis = 0. si it = 2 , sinon = 1. habituellem.
  dx   = operateur difference finie :
    dx(A) = A( X +1/2 , Y, z ) - A( X -1/2, Y, z ) , dans le systeme de 
  travail  (X,Y) , avec l'increment DX = 1.

  Idem pour dy .

  coefx = beta(ij) / alpha(ij)  , coefy = alpha(ij)/beta(ij)
     avec    u_covariant(ij) = alpha(ij)* u_nat(ij) 
             v_covariant(ij) = beta(ij) * v_nat(ij) 

 Cette dissipation star est choisie en mettant le parametre lstardis a .TRUE.
  dans le fichier run.def  lu  par le gcm en entree .

 b) La dissipation ' non star '  fait intervenir les operateurs elementaires
   diverg,grad,rotat .   Elle est choisie  avec lstardis = .FALSE.

N.B : Dans les 2 shemas de dissipation , le gcm est plus stable  quand on
     n'itere pas l'operateur ' GRADIV ' ou ' GRADIV2 " .            
     
 5) Les constantes thermodynamiques Cp et kappa = R/Cp   utilisees dans la
   partie dynamique ont ete mises , ce qui est normal, aux memes valeurs
   qu'elles ont dans la partie ' physique ' , en changeant INICONST et en 
   les mettant dans l'entete de controle de start et startphy ,en changeant
   etat0_lmd , par rapport  a LMDZ.2.2 
       
 6) Pour finir , quelques commentaires sur les parametres qui figurent sur
    le fichier  run.def qui commandent le gcm .

  Dans le run.def donne en exemple dans /users/SOURCES/LMDZ.3/libf/dyn3d  ,

 a) day_step  correspond a un  dt  de  2 minutes .

 b) idissip correspond a a un appel de la dissipation toutes les 30 minutes.

N.B : Maintenant la routine inidissip calcule la meilleure valeur pour
  idissip , en fonction des valeurs de tetagdiv , tetagrot et tetatemp qui
  representent les temps de dissipation desirees pour dissiper les plus peti-
  tes longueurs d'ondes pour u ,v et teta  dans le cas, respectivement des 
  operateurs gradiv (gradiv2) , nxgrarot (nxgraro2) et divgrad ( divgrad2) .

 c) coefdis , coefficient qui intervient dans le calcul de gam  , utilise 
   dans les routines de dissipation star , vus plus haut .

 d) iphysiq correspond ici a un appel de la physique toutes les 30 minutes.

 e) alphax et alphay correspondent au grossissement pour le zoom dans la
   direction X et Y .
   En fait , les facteurs de grossissement sont egaux a  1./ ( 1.- alphax )
     et 1./( 1.- alphay )  .

 f) fxyhypb  est egal a .TRUE. si on choisit  pour la fonction f(x,y) qui 
   definit la grille du modele  une fonction a tangente hyperbolique , un peu
   adaptee pour le zoom , que la fonction sinusoidale , definie par fxy_new.h 
   dans /..../gcm/libf/grid  et lu par  makegcm  lors de la compilation du 
   code .


N.B: Pour l'instant , cette fonction hyperbolique n'est activee eventuellement
****            que pour  un zoom  latitudinal . 
   Pour un zoom longitudinal , la fonction sinusoidale precisee dans fxy_new.h
       est  choisie automatiquement .

 g) psi0 et delta sont des parametres  pour cette fonction hyberbolique .
   Ces valeurs de 0.3 et 0.5  ont ete adaptees pour 96x72  .
  


 7) La partie 'physique'  est quasiment  identique a celle de  LMDZ.2.2 
             ***********
    ( /users/lmdz/SOURCES/LMDZ.2.2/libf/phylmd ) geree par  Laurent Li

    sauf  PHYSIQ.F ( ou il y a l'ecriture en plus de pls  sur 'histphy' et 
    histins  ) et   PHYETAT0.F et PHYREDEM.F  ou il y a l'argument  RLON
    en plus  dans le tableau des aurguments  et WRITEFIA  ou nivsigs rempla-
    sig_s  pour les niveaux verticaux .   


 ****************************************************************************

 
 AA) Choisir les options du run  , avec   le fichier  run.def   .

     Il y a entre autres choses , le nombre de jours qu'on veut integrer lors 
       d'un run .
     Il y a le nombre de pas a faire pour 1 jour , ce qui calcule donc le dt
       temporel ( en secondes ) pour un pas dynamique .
     Iperiod  est conseille  d'etre a 5 pas ( mais non obligatoiremnet = 5 ) . 
     Idissip  peut etre mis a n'importe quelle valeur . Il est maintenant
     calcule dans inidissip de telle facon a optimiser  sa valeur .

     Les parametres( la plupart des cles ) pour la physique commencent avec
      la var. logique         **  physic  **

           entiere( en pas )  ** iphysiq  ** qui est calculee de telle facon a
                              appeler la physique tous les  30 minutes .

           ( en jours )       ** ecritphy ** qui indique la frequence en jours
                                du stockage   sur   histphy .  

      les variables logiques  ** cycle_diurne **  pour le cycle diurne

                              ** soil_model  **   pour un modele pour le sol

                              ** new_oliq   **  pour une nouvelle formulation
            pour l'eau liquide nuageuse , utilisee dans les rayonnements .

                              ** ok_orodr **   si on appelle l'orographie
                              ** ok_orolf **        IDEM

                              ** ok_limitvrai ** si on veut lire la bonne
                          annee  du fichier limit .


 Si ok_limitvrai = .TRUE.  , la routine  condsurf  de la physique  va lire

 la bonne annee  des conditions limites et il faut , dans le script qui lance

 le run , faire figurer  les fichiers limites attendus par le gcm .


 PLus clairement , si on lance un run  de 30 jours ,  du 25 Decembre 1986 au

 25 Janvier  1987  ,  ( actuellement dans le Gcm , il n'y a que des mois de

 30 jours ) ,   des que le  modele  arrive au jour 360 (qui correspond au

 30 Decembre) pour aller au jour 361  ( qui correspond au 1 Janvier 1987 ) ,

 il s'attend a lire le fichier  limit1987 ( avec 4 chiffres  pour l'an 2000).

 Donc , dans le script du run , on devra avoir, grosso modo  :

***********************************************************************
cd $TMPDIR
#
cp $workdir/mod/limit86.dat limit1986.dat
cp $workdir/mod/limit86.dic limit1986.dic
cp $workdir/mod/limit87.dat limit1987.dat
cp $workdir/mod/limit87.dic limit1987.dic
#
gcm.e < run.def
**********************************************************************

      la variable entiere   ** nbapp_rad ** qui est le nombre d'appels /jour
                  des routines de rayonnements .

      la variable entiere   ** iflag_con ** qui indique le shema de convection
        choisi  :     1   >  LMD ,   2  > Tiedtke  ,   3  >  CCM  .
    
                       

 BB) Creer l'etat initial , avec les donnees de l'ECMWF , en compilant 
     etat0_lmd  , en precisant auparavant  dayref  et anneeref .


 CC) Creer le fichier des conditions aux limites ( SST, Albedo, Rugosite,
     Nature du sol  ) avec  si possible la concordance entre l'annee des
     donnees des sst, albedo, etc ..  avec  les donnees pour l'etat initial .

 DD)  Compiler  le Gcm , lancer le run , prendre un bon verre et attendre
      la sortie  des resultats .



                 Phu  Le Van  .

                 E.N.S , 24 Rue Lhomond  , PARIS  5 ieme .
                 Tel :  01 44 32 22 67

                 4 Place Jussieu         , PARIS  5 ieme .
                 TEL :  01 44 27 47 72

                 Email :  levan@lmd.ens.fr


