Changeset 78 for LMDZ.3.3/trunk


Ignore:
Timestamp:
Apr 17, 2000, 4:23:44 PM (25 years ago)
Author:
lmdz
Message:

Modification de F.Codron pour le schema d'advection de l'eau

Location:
LMDZ.3.3/trunk/libf/dyn3d
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • LMDZ.3.3/trunk/libf/dyn3d/gcm.F

    r57 r78  
    2222c
    2323c=======================================================================
    24 
    25 c   ...  Dans inigeom , nouveaux calculs pour les elongations  cu , cv
    26 c        et possibilite d'appeler une fonction f(y)  a derivee tangente
    27 c        hyperbolique a la  place de la fonction a derivee sinusoidale.         
    28 
    29 c   ...  Possibilite de choisir le shema de Van-leer pour l'advection de
    30 c         q  , en faisant iadv = 3  dans   traceur  (29/04/97) .
     24c
     25c  ... Dans inigeom , nouveaux calculs pour les elongations  cu , cv
     26c      et possibilite d'appeler une fonction f(y)  a derivee tangente
     27c      hyperbolique a la  place de la fonction a derivee sinusoidale.
     28
     29c  ... Possibilite de choisir le shema de Van-leer pour l'advection de
     30c        q  , en faisant iadv = 3  dans   traceur  (29/04/97) .
     31c
     32c      Pour Van-Leer + Vapeur d'eau saturee, iadv(1)=4. (F.Codron,10/99)
    3133c
    3234c-----------------------------------------------------------------------
     
    159161c     iadv = 2    shema   amont
    160162c     iadv = 3    shema  Van-leer
     163c     iadv = 4    schema  Van-leer + humidite specifique
     164c                        Modif F.Codron
    161165c
    162166c     dans le tableau q(ij,l,iq) , iq = 1  pour l'eau vapeur
     
    170174      ENDDO
    171175c
    172       DO  iq = 1, nqmx
     176       IF( iadv(1).EQ.1 ) PRINT *,' Choix du shema humidite specifique'
     177     * ,' pour la vapeur d''eau'
     178       IF( iadv(1).EQ.2 ) PRINT *,' Choix du shema  amont',' pour la'
     179     * ,' vapeur d''eau '
     180       IF( iadv(1).EQ.3 ) PRINT *,' Choix du shema  Van-Leer ',' pour'
     181     * ,'la vapeur d''eau'
     182       IF( iadv(1).EQ.4 ) PRINT *,' Choix du shema  Van-Leer + humidite'
     183     * ,' specifique pour la vapeur d''eau'
     184c
     185       IF( iadv(1).LE.0.OR.iadv(1).GT.4 )   THEN
     186        PRINT *,' Erreur dans le choix de iadv (1).Corriger et repasser
     187     * ,  car  iadv(1) = ', iadv(1)
     188         CALL ABORT
     189       ENDIF
     190
     191      DO  iq = 2, nqmx
    173192       IF( iadv(iq).EQ.1 ) PRINT *,' Choix du shema humidite specifique'
    174193     * ,' pour le traceur no ', iq
     
    177196       IF( iadv(iq).EQ.3 ) PRINT *,' Choix du shema  Van-Leer ',' pour'
    178197     * ,'le traceur no ', iq
    179        IF( iadv(iq).LE.0.OR.iadv(iq).GT.3 )   THEN
     198
     199       IF( iadv(iq).EQ.4 )  THEN
     200         PRINT *,' Le shema  Van-Leer + humidite specifique ',
     201     * ' est  uniquement pour la vapeur d eau .'
     202         PRINT *,' Corriger iadv( ',iq, ')  et repasser ! '
     203         CALL ABORT
     204       ENDIF
     205
     206       IF( iadv(iq).LE.0.OR.iadv(iq).GT.4 )   THEN
    180207       PRINT *,' Erreur dans le  choix de  iadv . Corriger et repasser
    181208     * . '
    182          STOP
     209         CALL ABORT
    183210       ENDIF
    184211      ENDDO
     
    187214      numvanle = nqmx + 1
    188215      DO  iq = 1, nqmx
    189         IF( iadv(iq).EQ.3.AND.first ) THEN
     216        IF((iadv(iq).EQ.3.OR.iadv(iq).EQ.4).AND.first ) THEN
    190217          numvanle = iq
    191218          first    = .FALSE.
     
    194221c
    195222      DO  iq = 1, nqmx
    196         IF( iadv(iq).NE.3.AND.iq.GT.numvanle )   THEN
     223      IF( (iadv(iq).NE.3.AND.iadv(iq).NE.4).AND.iq.GT.numvanle )  THEN
    197224          PRINT *,' Il y a discontinuite dans le choix du shema de ',
    198225     *    'Van-leer pour les traceurs . Corriger et repasser . '
    199            STOP
    200         ENDIF
    201         IF( iadv(iq).LT.1.OR.iadv(iq).GT.3 )    THEN
     226           CALL ABORT
     227      ENDIF
     228        IF( iadv(iq).LT.1.OR.iadv(iq).GT.4 )    THEN
    202229          PRINT *,' Le choix de  iadv  est errone pour le traceur ',
    203230     *    iq
     
    377404c
    378405            CALL vanleer(numvanle,iapp_tracvl,nqmx,q,pbaru,pbarv,
    379      *                             p,  masse, dq                  )
     406     *                      p, masse, dq,  iadv(1), teta, pk     )
     407c
     408c                   ...  Modif  F.Codron  ....
    380409c
    381410         ENDIF
  • LMDZ.3.3/trunk/libf/dyn3d/tracvl.F

    r2 r78  
    11      SUBROUTINE tracvl(numvanle,iapp_tracvl,nq,pbaru,pbarv ,
    2      *                            p,  masse , q, iapptrac    )
     2     *                    p, masse , q, iapptrac, iadv1, teta, pk  )
    33c
    44c     Auteur :  F. Hourdin
     
    66c
    77ccc   ..   Modif. P. Le Van  ( 20/12/97 )  ...
     8c                 F. Codron     (10/99)
     9
    810c
    911      IMPLICIT NONE
     
    1517#include "comgeom.h"
    1618
    17       INTEGER nq,iapp_tracvl
     19c     .... Arguments  ....
     20c
     21      INTEGER numvanle, nq, iapp_tracvl, iapptrac, iadv1
    1822
    1923      REAL pbaru(ip1jmp1,llm),pbarv(ip1jm,llm)
    2024      REAL q(ip1jmp1,llm,nq),masse(ip1jmp1,llm)
    21       REAL p( ip1jmp1,llmp1 )
     25      REAL p( ip1jmp1,llmp1 ),teta(ip1jmp1,llm)
     26      REAL pk(ip1jmp1,llm)
    2227
     28c     ....  var. locales  .....
     29c
    2330      REAL pbaruc(ip1jmp1,llm),pbarvc(ip1jm,llm)
    2431      REAL massem(ip1jmp1,llm),zdp(ip1jmp1)
     
    2633      REAL pbarug(ip1jmp1,llm),pbarvg(ip1jm,llm),wg(ip1jmp1,llm)
    2734
    28       INTEGER iapptrac
    2935
    30       INTEGER iadvtr, numvanle
     36      INTEGER iadvtr, numvan
    3137      INTEGER ij,l,iq
    3238      REAL zdpmin, zdpmax
    3339      EXTERNAL  minmax
    34  
    35       SAVE iadvtr, massem,pbaruc,pbarvc
     40      SAVE iadvtr, massem, pbaruc, pbarvc, numvan
    3641      DATA iadvtr/0/
     42
     43      numvan = numvanle
    3744
    3845      IF(iadvtr.EQ.0) THEN
     
    99106
    100107c   Advection proprement dite.
    101          DO iq = numvanle, nq
     108c
     109c   test sur iadv1 pour le schema de vapeur d'eau
     110c
     111         IF (numvanle.EQ.1.AND.iadv1.EQ.4) THEN
     112           CALL vlspltqs( q(1,1,1), 2., massem, wg ,
     113     *                 pbarug,pbarvg,dtvr,p,pk,teta )
     114           numvan = 2
     115         ENDIF
     116
     117         DO iq = numvan, nq
    102118          CALL vlsplt( q(1,1,iq), 2. ,massem,wg,pbarug,pbarvg,dtvr )
    103119         ENDDO
  • LMDZ.3.3/trunk/libf/dyn3d/vanleer.F

    r2 r78  
    11      SUBROUTINE vanleer(numvanle,iapp_tracvl,nq,q,pbaru,pbarv ,
    2      *                                    p ,masse,  dq          )
     2     *                     p ,masse, dq ,  iadv1, teta, pk      )
    33c
    44      IMPLICIT NONE
    55c
    6 c     Auteurs:   F.Hourdin , P.Le Van, F.Forget
     6c     Auteurs:   F.Hourdin , P.Le Van, F.Forget, F.Codron 
     7c
     8c     F.Codron (10/99) : ajout humidite specifique pour eau vapeur
    79c=======================================================================
    810c
     
    1820c   Arguments:
    1921c   ----------
    20       INTEGER nq,numvanle,iapp_tracvl
     22      INTEGER nq, numvanle, iapp_tracvl, iadv1
    2123      REAL pbaru( ip1jmp1,llm ),pbarv( ip1jm,llm),masse(ip1jmp1,llm)
    2224      REAL p( ip1jmp1,llmp1),q( ip1jmp1,llm,nq),dq( ip1jmp1,llm,nq )
    23 
     25      REAL teta( ip1jmp1,llm),pk( ip1jmp1,llm)
    2426c  ..................................................................
    2527c
     
    2830c     numvanle est le numero du premier traceur qui appelle le
    2931c       shema de Van-Leer  (  1<=  numvanle <=  nqmx )  .
     32c     si numvanle=1, iadv1=3 si Van-Leer seul, iadv1=4 si
     33c     Van-Leer+humidite specifique.
    3034c  ..................................................................
    3135c
     
    6165
    6266      CALL tracvl( numvanle,iapp_tracvl,nq,pbaru,pbarv,p , masse,q  ,
    63      *                                iapptrac                       )
     67     *                      iapptrac, iadv1, teta ,pk              )
    6468
    6569      IF( numvanle.EQ.1 ) THEN
Note: See TracChangeset for help on using the changeset viewer.