Changeset 1987


Ignore:
Timestamp:
Feb 24, 2014, 4:05:47 PM (11 years ago)
Author:
Ehouarn Millour
Message:

Add updating pressure, mass and Exner function (ie: all variables which depend on surface pressure) after adding physics tendencies (which include a surface pressure tendency).
Note that this change induces slight changes in GCM results with respect to previous svn version of the code, even if surface pressure tendency is zero (because of recomputation of polar values as an average over polar points on the dynamics grid).
EM

Location:
LMDZ5/trunk/libf
Files:
22 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/dyn3d/addfi.F

    r1907 r1987  
    5555c    -----------
    5656c
    57       REAL pdt
     57      REAL,INTENT(IN) :: pdt ! time step for the integration (s)
    5858c
    59       REAL pvcov(ip1jm,llm),pucov(ip1jmp1,llm)
    60       REAL pteta(ip1jmp1,llm),pq(ip1jmp1,llm,nqtot),pps(ip1jmp1)
     59      REAL,INTENT(INOUT) :: pvcov(ip1jm,llm) ! covariant meridional wind
     60      REAL,INTENT(INOUT) :: pucov(ip1jmp1,llm) ! covariant zonal wind
     61      REAL,INTENT(INOUT) :: pteta(ip1jmp1,llm) ! potential temperature
     62      REAL,INTENT(INOUT) :: pq(ip1jmp1,llm,nqtot) ! tracers
     63      REAL,INTENT(INOUT) :: pps(ip1jmp1) ! surface pressure (Pa)
     64c respective tendencies (.../s) to add
     65      REAL,INTENT(IN) :: pdvfi(ip1jm,llm)
     66      REAL,INTENT(IN) :: pdufi(ip1jmp1,llm)
     67      REAL,INTENT(IN) :: pdqfi(ip1jmp1,llm,nqtot)
     68      REAL,INTENT(IN) :: pdhfi(ip1jmp1,llm)
     69      REAL,INTENT(IN) :: pdpfi(ip1jmp1)
    6170c
    62       REAL pdvfi(ip1jm,llm),pdufi(ip1jmp1,llm)
    63       REAL pdqfi(ip1jmp1,llm,nqtot),pdhfi(ip1jmp1,llm),pdpfi(ip1jmp1)
    64 c
    65       LOGICAL leapf,forward
     71      LOGICAL,INTENT(IN) :: leapf,forward ! not used
    6672c
    6773c
     
    7177      REAL xpn(iim),xps(iim),tpn,tps
    7278      INTEGER j,k,iq,ij
    73       REAL qtestw, qtestt
    74       PARAMETER ( qtestw = 1.0e-15 )
    75       PARAMETER ( qtestt = 1.0e-40 )
     79      REAL,PARAMETER :: qtestw = 1.0e-15
     80      REAL,PARAMETER :: qtestt = 1.0e-40
    7681
    7782      REAL SSUM
  • LMDZ5/trunk/libf/dyn3d/advtrac.F90

    r1907 r1987  
    99  !            M.A Filiberti (04/2002)
    1010  !
    11   USE infotrac
    12   USE control_mod
     11  USE infotrac, ONLY: nqtot, iadv
     12  USE control_mod, ONLY: iapp_tracvl, day_step
    1313
    1414
     
    3030  !     Arguments
    3131  !-------------------------------------------------------------------
     32  INTEGER,INTENT(OUT) :: iapptrac
     33  REAL,INTENT(IN) :: pbaru(ip1jmp1,llm)
     34  REAL,INTENT(IN) :: pbarv(ip1jm,llm)
     35  REAL,INTENT(INOUT) :: q(ip1jmp1,llm,nqtot)
     36  REAL,INTENT(IN) :: masse(ip1jmp1,llm)
     37  REAL,INTENT(IN) :: p( ip1jmp1,llmp1 )
     38  REAL,INTENT(IN) :: teta(ip1jmp1,llm)
     39  REAL,INTENT(IN) :: pk(ip1jmp1,llm)
     40  REAL,INTENT(OUT) :: flxw(ip1jmp1,llm)
     41  !-------------------------------------------------------------------
    3242  !     Ajout PPM
    3343  !--------------------------------------------------------
    3444  REAL massebx(ip1jmp1,llm),masseby(ip1jm,llm)
    35   !--------------------------------------------------------
    36   INTEGER iapptrac
    37   REAL pbaru(ip1jmp1,llm),pbarv(ip1jm,llm)
    38   REAL q(ip1jmp1,llm,nqtot),masse(ip1jmp1,llm)
    39   REAL p( ip1jmp1,llmp1 ),teta(ip1jmp1,llm)
    40   REAL pk(ip1jmp1,llm)
    41   REAL flxw(ip1jmp1,llm)
    42 
    4345  !-------------------------------------------------------------
    4446  !     Variables locales
  • LMDZ5/trunk/libf/dyn3d/caldyn.F

    r1907 r1987  
    11!
    2 ! $Header$
     2! $Id$
    33!
    4 c
    5 c
    64      SUBROUTINE caldyn
    75     $ (itau,ucov,vcov,teta,ps,masse,pk,pkf,phis ,
     
    108      IMPLICIT NONE
    119
    12 c=======================================================================
    13 c
    14 c  Auteur :  P. Le Van
    15 c
    16 c   Objet:
    17 c   ------
    18 c
    19 c   Calcul des tendances dynamiques.
    20 c
    21 c Modif 04/93 F.Forget
    22 c=======================================================================
     10!=======================================================================
     11!
     12!  Auteur :  P. Le Van
     13!
     14!   Objet:
     15!   ------
     16!
     17!   Calcul des tendances dynamiques.
     18!
     19! Modif 04/93 F.Forget
     20!=======================================================================
    2321
    24 c-----------------------------------------------------------------------
    25 c   0. Declarations:
    26 c   ----------------
     22!-----------------------------------------------------------------------
     23!   0. Declarations:
     24!   ----------------
    2725
    2826#include "dimensions.h"
     
    3230#include "comgeom.h"
    3331
    34 c   Arguments:
    35 c   ----------
     32!   Arguments:
     33!   ----------
    3634
    37       LOGICAL conser
     35      LOGICAL,INTENT(IN) :: conser ! triggers printing some diagnostics
     36      INTEGER,INTENT(IN) :: itau ! time step index
     37      REAL,INTENT(IN) :: vcov(ip1jm,llm) ! covariant meridional wind
     38      REAL,INTENT(IN) :: ucov(ip1jmp1,llm) ! covariant zonal wind
     39      REAL,INTENT(IN) :: teta(ip1jmp1,llm) ! potential temperature
     40      REAL,INTENT(IN) :: ps(ip1jmp1) ! surface pressure
     41      REAL,INTENT(IN) :: phis(ip1jmp1) ! geopotential at the surface
     42      REAL,INTENT(IN) :: pk(ip1jmp1,llm) ! Exner at mid-layer
     43      REAL,INTENT(IN) :: pkf(ip1jmp1,llm) ! filtered Exner
     44      REAL,INTENT(IN) :: phi(ip1jmp1,llm) ! geopotential
     45      REAL,INTENT(OUT) :: masse(ip1jmp1,llm) ! air mass
     46      REAL,INTENT(OUT) :: dv(ip1jm,llm) ! tendency on vcov
     47      REAL,INTENT(OUT) :: du(ip1jmp1,llm) ! tendency on ucov
     48      REAL,INTENT(OUT) :: dteta(ip1jmp1,llm) ! tenddency on teta
     49      REAL,INTENT(OUT) :: dp(ip1jmp1) ! tendency on ps
     50      REAL,INTENT(OUT) :: w(ip1jmp1,llm) ! vertical velocity
     51      REAL,INTENT(OUT) :: pbaru(ip1jmp1,llm) ! mass flux in the zonal direction
     52      REAL,INTENT(OUT) :: pbarv(ip1jm,llm) ! mass flux in the meridional direction
     53      REAL,INTENT(IN) :: time ! current time
    3854
    39       INTEGER itau
    40       REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm)
    41       REAL ps(ip1jmp1),phis(ip1jmp1)
    42       REAL pk(iip1,jjp1,llm),pkf(ip1jmp1,llm)
     55!   Local:
     56!   ------
     57
    4358      REAL vcont(ip1jm,llm),ucont(ip1jmp1,llm)
    44       REAL phi(ip1jmp1,llm),masse(ip1jmp1,llm)
    45       REAL dv(ip1jm,llm),du(ip1jmp1,llm)
    46       REAL dteta(ip1jmp1,llm),dp(ip1jmp1)
    47       REAL pbaru(ip1jmp1,llm),pbarv(ip1jm,llm)
    48       REAL time
    49 
    50 c   Local:
    51 c   ------
    52 
    5359      REAL ang(ip1jmp1,llm),p(ip1jmp1,llmp1)
    5460      REAL massebx(ip1jmp1,llm),masseby(ip1jm,llm),psexbarxy(ip1jm)
    5561      REAL vorpot(ip1jm,llm)
    56       REAL w(ip1jmp1,llm),ecin(ip1jmp1,llm),convm(ip1jmp1,llm)
     62      REAL ecin(ip1jmp1,llm),convm(ip1jmp1,llm)
    5763      REAL bern(ip1jmp1,llm)
    5864      REAL massebxy(ip1jm,llm)
     
    6167      INTEGER   ij,l
    6268
    63 c-----------------------------------------------------------------------
    64 c   Calcul des tendances dynamiques:
    65 c   --------------------------------
     69!-----------------------------------------------------------------------
     70!   Compute dynamical tendencies:
     71!--------------------------------
    6672
     73      ! compute contravariant winds ucont() and vcont
    6774      CALL covcont  ( llm    , ucov    , vcov , ucont, vcont        )
     75      ! compute pressure p()
    6876      CALL pression ( ip1jmp1, ap      , bp   ,  ps  , p            )
     77      ! compute psexbarxy() XY-area weighted-averaged surface pressure (what for?)
    6978      CALL psextbar (   ps   , psexbarxy                            )
     79      ! compute mass in each atmospheric mesh: masse()
    7080      CALL massdair (    p   , masse                                )
     81      ! compute X and Y-averages of mass, massebx() and masseby()
    7182      CALL massbar  (   masse, massebx , masseby                    )
     83      ! compute XY-average of mass, massebxy()
    7284      call massbarxy(   masse, massebxy                             )
     85      ! compute mass fluxes pbaru() and pbarv()
    7386      CALL flumass  ( massebx, masseby , vcont, ucont ,pbaru, pbarv )
     87      ! compute dteta() , horizontal converging flux of theta
    7488      CALL dteta1   (   teta , pbaru   , pbarv, dteta               )
     89      ! compute convm(), horizontal converging flux of mass
    7590      CALL convmas  (   pbaru, pbarv   , convm                      )
    7691
     92      ! compute pressure variation due to mass convergence
    7793      DO ij =1, ip1jmp1
    7894         dp( ij ) = convm( ij,1 ) / airesurg( ij )
    7995      ENDDO
    8096
     97      ! compute vertical velocity w()
    8198      CALL vitvert ( convm  , w                                  )
     99      ! compute potential vorticity vorpot()
    82100      CALL tourpot ( vcov   , ucov  , massebxy  , vorpot         )
     101      ! compute rotation induced du() and dv()
    83102      CALL dudv1   ( vorpot , pbaru , pbarv     , du     , dv    )
     103      ! compute kinetic energy ecin()
    84104      CALL enercin ( vcov   , ucov  , vcont     , ucont  , ecin  )
     105      ! compute Bernouilli function bern()
    85106      CALL bernoui ( ip1jmp1, llm   , phi       , ecin   , bern  )
     107      ! compute and add du() and dv() contributions from Bernouilli and pressure
    86108      CALL dudv2   ( teta   , pkf   , bern      , du     , dv    )
    87109
     
    90112         DO ij=1,ip1jmp1
    91113            ang(ij,l) = ucov(ij,l) + constang(ij)
    92       ENDDO
     114         ENDDO
    93115      ENDDO
    94116
    95 
     117      ! compute vertical advection contributions to du(), dv() and dteta()
    96118      CALL advect( ang, vcov, teta, w, massebx, masseby, du, dv,dteta )
    97119
    98 C  WARNING probleme de peridocite de dv sur les PC/linux. Pb d'arrondi
    99 C          probablement. Observe sur le code compile avec pgf90 3.0-1
     120!  WARNING probleme de peridocite de dv sur les PC/linux. Pb d'arrondi
     121!          probablement. Observe sur le code compile avec pgf90 3.0-1
    100122
    101123      DO l = 1, llm
    102124         DO ij = 1, ip1jm, iip1
    103125           IF( dv(ij,l).NE.dv(ij+iim,l) )  THEN
    104 c         PRINT *,'!!!ATTENTION!!! probleme de periodicite sur vcov', 
    105 c    ,   ' dans caldyn'
    106 c         PRINT *,' l,  ij = ', l, ij, ij+iim,dv(ij+iim,l),dv(ij,l)
     126!         PRINT *,'!!!ATTENTION!!! probleme de periodicite sur vcov', 
     127!    ,   ' dans caldyn'
     128!         PRINT *,' l,  ij = ', l, ij, ij+iim,dv(ij+iim,l),dv(ij,l)
    107129          dv(ij+iim,l) = dv(ij,l)
    108           endif
    109          enddo
    110       enddo
    111 c-----------------------------------------------------------------------
    112 c   Sorties eventuelles des variables de controle:
    113 c   ----------------------------------------------
     130           ENDIF
     131         ENDDO
     132      ENDDO
     133
     134!-----------------------------------------------------------------------
     135!   Output some control variables:
     136!---------------------------------
    114137
    115138      IF( conser )  THEN
    116139        CALL sortvarc
    117      $ ( itau,ucov,teta,ps,masse,pk,phis,vorpot,phi,bern,dp,time,vcov )
    118 
     140     & ( itau,ucov,teta,ps,masse,pk,phis,vorpot,phi,bern,dp,time,vcov )
    119141      ENDIF
    120142
    121       RETURN
    122143      END
  • LMDZ5/trunk/libf/dyn3d/calfis.F

    r1907 r1987  
    3030c    Auteur :  P. Le Van, F. Hourdin
    3131c   .........
    32       USE infotrac
    33       USE control_mod
     32      USE infotrac, ONLY: nqtot, niadv, tname
     33      USE control_mod, ONLY: planet_type, nsplit_phys
    3434 
    3535
     
    102102c    Arguments :
    103103c    -----------
    104       LOGICAL  lafin
    105 
    106 
    107       REAL pvcov(iip1,jjm,llm)
    108       REAL pucov(iip1,jjp1,llm)
    109       REAL pteta(iip1,jjp1,llm)
    110       REAL pmasse(iip1,jjp1,llm)
    111       REAL pq(iip1,jjp1,llm,nqtot)
    112       REAL pphis(iip1,jjp1)
    113       REAL pphi(iip1,jjp1,llm)
    114 c
    115       REAL pdvcov(iip1,jjm,llm)
    116       REAL pducov(iip1,jjp1,llm)
    117       REAL pdteta(iip1,jjp1,llm)
    118       REAL pdq(iip1,jjp1,llm,nqtot)
    119 c
    120       REAL pps(iip1,jjp1)
    121       REAL pp(iip1,jjp1,llmp1)
    122       REAL ppk(iip1,jjp1,llm)
    123 c
    124       REAL pdvfi(iip1,jjm,llm)
    125       REAL pdufi(iip1,jjp1,llm)
    126       REAL pdhfi(iip1,jjp1,llm)
    127       REAL pdqfi(iip1,jjp1,llm,nqtot)
    128       REAL pdpsfi(iip1,jjp1)
    129 
    130       INTEGER        longcles
    131       PARAMETER    ( longcles = 20 )
    132       REAL clesphy0( longcles )
     104      LOGICAL,INTENT(IN) ::  lafin ! .true. for the very last call to physics
     105      REAL,INTENT(IN):: jD_cur, jH_cur
     106      REAL,INTENT(IN) :: pvcov(iip1,jjm,llm) ! covariant meridional velocity
     107      REAL,INTENT(IN) :: pucov(iip1,jjp1,llm) ! covariant zonal velocity
     108      REAL,INTENT(IN) :: pteta(iip1,jjp1,llm) ! potential temperature
     109      REAL,INTENT(IN) :: pmasse(iip1,jjp1,llm) ! mass in each cell ! not used
     110      REAL,INTENT(IN) :: pq(iip1,jjp1,llm,nqtot) ! tracers
     111      REAL,INTENT(IN) :: pphis(iip1,jjp1) ! surface geopotential
     112      REAL,INTENT(IN) :: pphi(iip1,jjp1,llm) ! geopotential
     113
     114      REAL,INTENT(IN) :: pdvcov(iip1,jjm,llm) ! dynamical tendency on vcov
     115      REAL,INTENT(IN) :: pducov(iip1,jjp1,llm) ! dynamical tendency on ucov
     116      REAL,INTENT(IN) :: pdteta(iip1,jjp1,llm) ! dynamical tendency on teta
     117      ! NB: pdteta is used only to compute pcvgt which is in fact not used...
     118      REAL,INTENT(IN) :: pdq(iip1,jjp1,llm,nqtot) ! dynamical tendency on tracers
     119      ! NB: pdq is only used to compute pcvgq which is in fact not used...
     120
     121      REAL,INTENT(IN) :: pps(iip1,jjp1) ! surface pressure (Pa)
     122      REAL,INTENT(IN) :: pp(iip1,jjp1,llmp1) ! pressure at mesh interfaces (Pa)
     123      REAL,INTENT(IN) :: ppk(iip1,jjp1,llm) ! Exner at mid-layer
     124      REAL,INTENT(IN) :: flxw(iip1,jjp1,llm)  ! Vertical mass flux on dynamics grid
     125
     126      ! tendencies (in */s) from the physics
     127      REAL,INTENT(OUT) :: pdvfi(iip1,jjm,llm) ! tendency on covariant meridional wind
     128      REAL,INTENT(OUT) :: pdufi(iip1,jjp1,llm) ! tendency on covariant zonal wind
     129      REAL,INTENT(OUT) :: pdhfi(iip1,jjp1,llm) ! tendency on potential temperature (K/s)
     130      REAL,INTENT(OUT) :: pdqfi(iip1,jjp1,llm,nqtot) ! tendency on tracers
     131      REAL,INTENT(OUT) :: pdpsfi(iip1,jjp1) ! tendency on surface pressure (Pa/s)
     132
     133      INTEGER,PARAMETER :: longcles = 20
     134      REAL,INTENT(IN) :: clesphy0( longcles ) ! unused
    133135
    134136
     
    162164c
    163165cIM diagnostique PVteta, Amip2
    164       INTEGER ntetaSTD
    165       PARAMETER(ntetaSTD=3)
    166       REAL rtetaSTD(ntetaSTD)
    167       DATA rtetaSTD/350., 380., 405./ ! Earth-specific values, beware !!
     166      INTEGER,PARAMETER :: ntetaSTD=3
     167      REAL,SAVE :: rtetaSTD(ntetaSTD)=(/350.,380.,405./) ! Earth-specific, beware !!
    168168      REAL PVteta(ngridmx,ntetaSTD)
    169169c
    170       REAL flxw(iip1,jjp1,llm)  ! Flux de masse verticale sur la grille dynamique
    171170      REAL flxwfi(ngridmx,llm)  ! Flux de masse verticale sur la grille physiq
    172171c
     
    174173      REAL SSUM
    175174
    176       LOGICAL firstcal, debut
    177       DATA firstcal/.true./
    178       SAVE firstcal,debut
     175      LOGICAL,SAVE :: firstcal=.true., debut=.true.
    179176!      REAL rdayvrai
    180       REAL, intent(in):: jD_cur, jH_cur
    181177
    182178      LOGICAL tracerdyn
  • LMDZ5/trunk/libf/dyn3d/dissip.F

    r1907 r1987  
    11!
    2 ! $Header$
     2! $Id$
    33!
    44      SUBROUTINE dissip( vcov,ucov,teta,p, dv,du,dh )
     
    3535c   ----------
    3636
    37       REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm)
    38       REAL  p( ip1jmp1,llmp1 )
    39       REAL dv(ip1jm,llm),du(ip1jmp1,llm),dh(ip1jmp1,llm)
     37      REAL,INTENT(IN) :: vcov(ip1jm,llm) ! covariant meridional wind
     38      REAL,INTENT(IN) :: ucov(ip1jmp1,llm) ! covariant zonal wind
     39      REAL,INTENT(IN) :: teta(ip1jmp1,llm) ! potential temperature
     40      REAL,INTENT(IN) :: p(ip1jmp1,llmp1) ! pressure
     41      ! tendencies (.../s) on covariant winds and potential temperature
     42      REAL,INTENT(OUT) :: dv(ip1jm,llm)
     43      REAL,INTENT(OUT) :: du(ip1jmp1,llm)
     44      REAL,INTENT(OUT) :: dh(ip1jmp1,llm)
    4045
    4146c   Local:
  • LMDZ5/trunk/libf/dyn3d/leapfrog.F

    r1907 r1987  
    1212      use IOIPSL
    1313#endif
    14       USE infotrac
     14      USE infotrac, ONLY: nqtot
    1515      USE guide_mod, ONLY : guide_main
    16       USE write_field
    17       USE control_mod
     16      USE write_field, ONLY: writefield
     17      USE control_mod, ONLY: nday, day_step, planet_type, offline,
     18     &                       iconser, iphysiq, iperiod, dissip_period,
     19     &                       iecri, ip_ebil_dyn, ok_dynzon, ok_dyn_ins,
     20     &                       periodav, ok_dyn_ave, output_grads_dyn
    1821      IMPLICIT NONE
    1922
     
    6770! #include "clesphys.h"
    6871
    69       INTEGER         longcles
    70       PARAMETER     ( longcles = 20 )
    71       REAL  clesphy0( longcles )
     72      INTEGER,PARAMETER :: longcles = 20
     73      REAL,INTENT(IN) :: clesphy0( longcles ) ! not used
     74      REAL,INTENT(IN) :: time_0 ! not used
     75
     76c   dynamical variables:
     77      REAL,INTENT(INOUT) :: ucov(ip1jmp1,llm)    ! zonal covariant wind
     78      REAL,INTENT(INOUT) :: vcov(ip1jm,llm)      ! meridional covariant wind
     79      REAL,INTENT(INOUT) :: teta(ip1jmp1,llm)    ! potential temperature
     80      REAL,INTENT(INOUT) :: ps(ip1jmp1)          ! surface pressure (Pa)
     81      REAL,INTENT(INOUT) :: masse(ip1jmp1,llm)   ! air mass
     82      REAL,INTENT(INOUT) :: phis(ip1jmp1)        ! geopotentiat at the surface
     83      REAL,INTENT(INOUT) :: q(ip1jmp1,llm,nqtot) ! advected tracers
     84
     85      REAL p (ip1jmp1,llmp1  )               ! interlayer pressure
     86      REAL pks(ip1jmp1)                      ! exner at the surface
     87      REAL pk(ip1jmp1,llm)                   ! exner at mid-layer
     88      REAL pkf(ip1jmp1,llm)                  ! filtered exner at mid-layer
     89      REAL phi(ip1jmp1,llm)                  ! geopotential
     90      REAL w(ip1jmp1,llm)                    ! vertical velocity
    7291
    7392      real zqmin,zqmax
    74 
    75 c   variables dynamiques
    76       REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) ! vents covariants
    77       REAL teta(ip1jmp1,llm)                 ! temperature potentielle
    78       REAL q(ip1jmp1,llm,nqtot)               ! champs advectes
    79       REAL ps(ip1jmp1)                       ! pression  au sol
    80       REAL p (ip1jmp1,llmp1  )               ! pression aux interfac.des couches
    81       REAL pks(ip1jmp1)                      ! exner au  sol
    82       REAL pk(ip1jmp1,llm)                   ! exner au milieu des couches
    83       REAL pkf(ip1jmp1,llm)                  ! exner filt.au milieu des couches
    84       REAL masse(ip1jmp1,llm)                ! masse d'air
    85       REAL phis(ip1jmp1)                     ! geopotentiel au sol
    86       REAL phi(ip1jmp1,llm)                  ! geopotentiel
    87       REAL w(ip1jmp1,llm)                    ! vitesse verticale
    8893
    8994c variables dynamiques intermediaire pour le transport
     
    117122
    118123      REAL  SSUM
    119       REAL time_0
    120124!     REAL finvmaold(ip1jmp1,llm)
    121125
     
    319323
    320324      IF( forward. OR . leapf )  THEN
    321 ! Ehouarn: NB: at this point p with ps are not synchronized
    322 !              (whereas mass and ps are...)
     325! Ehouarn: NB: fields sent to advtrac are those at the beginning of the time step
    323326         CALL caladvtrac(q,pbaru,pbarv,
    324327     *        p, masse, dq,  teta,
     
    441444     $                  ucov, vcov, teta , q   ,ps ,
    442445     $                 dufi, dvfi, dtetafi , dqfi ,dpfi  )
     446          ! since addfi updates ps(), also update p(), masse() and pk()
     447          CALL pression (ip1jmp1,ap,bp,ps,p)
     448          CALL massdair(p,masse)
     449          if (pressure_exner) then
     450            CALL exner_hyb(ip1jmp1,ps,p,alpha,beta,pks,pk,pkf)
     451          else
     452            CALL exner_milieu(ip1jmp1,ps,p,beta,pks,pk,pkf)
     453          endif
    443454
    444455         IF (ok_strato) THEN
     
    499510          CALL exner_milieu( ip1jmp1, ps, p, beta, pks, pk, pkf )
    500511        endif
     512        CALL massdair(p,masse)
    501513
    502514
  • LMDZ5/trunk/libf/dyn3dmem/addfi_loc.F

    r1907 r1987  
    5555c    -----------
    5656c
    57       REAL pdt
    58 c
    59       REAL pvcov(ijb_v:ije_v,llm),pucov(ijb_u:ije_u,llm)
    60       REAL pteta(ijb_u:ije_u,llm),pq(ijb_u:ije_u,llm,nqtot)
    61       REAL pps(ijb_u:ije_u)
    62 c
    63       REAL pdvfi(ijb_v:ije_v,llm),pdufi(ijb_u:ije_u,llm)
    64       REAL pdqfi(ijb_u:ije_u,llm,nqtot),pdhfi(ijb_u:ije_u,llm)
    65       REAL pdpfi(ijb_u:ije_u)
    66 c
    67       LOGICAL leapf,forward
     57      REAL,INTENT(IN) :: pdt ! time step for the integration (s)
     58c
     59      REAL,INTENT(INOUT) :: pvcov(ijb_v:ije_v,llm) ! covariant meridional wind
     60      REAL,INTENT(INOUT) :: pucov(ijb_u:ije_u,llm) ! covariant zonal wind
     61      REAL,INTENT(INOUT) :: pteta(ijb_u:ije_u,llm) ! potential temperature
     62      REAL,INTENT(INOUT) :: pq(ijb_u:ije_u,llm,nqtot) ! tracers
     63      REAL,INTENT(INOUT) :: pps(ijb_u:ije_u) ! surface pressure (Pa)
     64c respective tendencies (.../s) to add
     65      REAL,INTENT(IN) :: pdvfi(ijb_v:ije_v,llm)
     66      REAL,INTENT(IN) :: pdufi(ijb_u:ije_u,llm)
     67      REAL,INTENT(IN) :: pdqfi(ijb_u:ije_u,llm,nqtot)
     68      REAL,INTENT(IN) :: pdhfi(ijb_u:ije_u,llm)
     69      REAL,INTENT(IN) :: pdpfi(ijb_u:ije_u)
     70c
     71      LOGICAL,INTENT(IN) :: leapf,forward ! not used
    6872c
    6973c
     
    7377      REAL xpn(iim),xps(iim),tpn,tps
    7478      INTEGER j,k,iq,ij
    75       REAL qtestw, qtestt
    76       PARAMETER ( qtestw = 1.0e-15 )
    77       PARAMETER ( qtestt = 1.0e-40 )
     79      REAL,PARAMETER :: qtestw = 1.0e-15
     80      REAL,PARAMETER :: qtestt = 1.0e-40
    7881
    7982      REAL SSUM
  • LMDZ5/trunk/libf/dyn3dmem/advtrac_loc.F

    r1907 r1987  
    2424      USE Vampir
    2525      USE times
    26       USE infotrac
    27       USE control_mod
    28       USE advtrac_mod
     26      USE infotrac, ONLY: nqtot, iadv
     27      USE control_mod, ONLY: iapp_tracvl, day_step, planet_type
     28      USE advtrac_mod, ONLY: finmasse
    2929      IMPLICIT NONE
    3030c
  • LMDZ5/trunk/libf/dyn3dmem/caldyn_loc.F

    r1907 r1987  
    11!
    2 ! $Header$
     2! $Id: $
    33!
    4 c
    5 c
    64#undef DEBUG_IO
    75!#define DEBUG_IO
     
    1210      USE parallel_lmdz
    1311      USE Write_Field_loc
    14       USE caldyn_mod
     12      USE caldyn_mod, ONLY: vcont, ucont, ang, p, massebx, masseby,
     13     &                      vorpot, ecin, bern, massebxy, convm
    1514     
    1615      IMPLICIT NONE
    1716
    18 c=======================================================================
    19 c
    20 c  Auteur :  P. Le Van
    21 c
    22 c   Objet:
    23 c   ------
    24 c
    25 c   Calcul des tendances dynamiques.
    26 c
    27 c Modif 04/93 F.Forget
    28 c=======================================================================
     17!=======================================================================
     18!
     19!  Auteur :  P. Le Van
     20!
     21!   Objet:
     22!   ------
     23!
     24!   Calcul des tendances dynamiques.
     25!
     26! Modif 04/93 F.Forget
     27!=======================================================================
    2928
    30 c-----------------------------------------------------------------------
    31 c   0. Declarations:
    32 c   ----------------
     29!-----------------------------------------------------------------------
     30!   0. Declarations:
     31!   ----------------
    3332
    3433#include "dimensions.h"
     
    3837#include "comgeom.h"
    3938
    40 c   Arguments:
    41 c   ----------
     39!   Arguments:
     40!   ----------
    4241
    43       LOGICAL conser
     42      LOGICAL,INTENT(IN) :: conser ! triggers printing some diagnostics ! not used
     43      INTEGER,INTENT(IN) :: itau ! time step index ! not used
     44      REAL,INTENT(IN) :: vcov(ijb_v:ije_v,llm) ! covariant meridional wind
     45      REAL,INTENT(IN) :: ucov(ijb_u:ije_u,llm) ! covariant zonal wind
     46      REAL,INTENT(IN) :: teta(ijb_u:ije_u,llm) ! potential temperature
     47      REAL,INTENT(IN) :: ps(ijb_u:ije_u) ! surface pressure
     48      REAL,INTENT(IN) :: phis(ijb_u:ije_u) ! geopotential at the surface
     49      REAL,INTENT(IN) :: pk(iip1,jjb_u:jje_u,llm) ! Exner at mid-layer
     50      REAL,INTENT(IN) :: pkf(ijb_u:ije_u,llm) ! filtered Exner
     51      REAL,INTENT(IN) :: phi(ijb_u:ije_u,llm) ! geopotential
     52      REAL,INTENT(OUT) :: masse(ijb_u:ije_u,llm) ! air mass
     53      REAL,INTENT(OUT) :: dv(ijb_v:ije_v,llm) ! tendency on vcov
     54      REAL,INTENT(OUT) :: du(ijb_u:ije_u,llm) ! tendency on ucov
     55      REAL,INTENT(OUT) :: dteta(ijb_u:ije_u,llm) ! tenddency on teta
     56      REAL,INTENT(OUT) :: dp(ijb_u:ije_u) ! tendency on ps
     57      REAL,INTENT(OUT) :: w(ijb_u:ije_u,llm) ! vertical velocity
     58      REAL,INTENT(OUT) :: pbaru(ijb_u:ije_u,llm) ! mass flux in the zonal direction
     59      REAL,INTENT(OUT) :: pbarv(ijb_v:ije_v,llm) ! mass flux in the meridional direction
     60      REAL,INTENT(IN) :: time ! current time
    4461
    45       INTEGER itau
    46       REAL vcov(ijb_v:ije_v,llm),ucov(ijb_u:ije_u,llm)
    47       REAL teta(ijb_u:ije_u,llm)
    48       REAL ps(ijb_u:ije_u),phis(ijb_u:ije_u)
    49       REAL pk(iip1,jjb_u:jje_u,llm),pkf(ijb_u:ije_u,llm)
    50       REAL phi(ijb_u:ije_u,llm),masse(ijb_u:ije_u,llm)
    51       REAL dv(ijb_v:ije_v,llm),du(ijb_u:ije_u,llm)
    52       REAL dteta(ijb_u:ije_u,llm),dp(ijb_u:ije_u)
    53       REAL w(ijb_u:ije_u,llm)
    54       REAL pbaru(ijb_u:ije_u,llm),pbarv(ijb_v:ije_v,llm)
    55       REAL time
    56 
    57 c   Local:
    58 c   ------
     62!   Local:
     63!   ------
    5964
    6065      INTEGER   ij,l,ijb,ije,ierr
    6166
    6267
    63 c-----------------------------------------------------------------------
    64 c   Calcul des tendances dynamiques:
    65 c   --------------------------------
     68!-----------------------------------------------------------------------
     69!   Compute dynamical tendencies:
     70!--------------------------------
     71
     72      ! compute contravariant winds ucont() and vcont
    6673      CALL covcont_loc  ( llm    , ucov    , vcov , ucont, vcont     )
     74      ! compute pressure p()
    6775      CALL pression_loc ( ip1jmp1, ap      , bp   ,  ps  , p         )
    6876cym      CALL psextbar (   ps   , psexbarxy                          )
    6977c$OMP BARRIER
     78      ! compute mass in each atmospheric mesh: masse()
    7079      CALL massdair_loc (    p   , masse                             )
     80      ! compute X and Y-averages of mass, massebx() and masseby()
    7181      CALL massbar_loc  (   masse, massebx , masseby                 )
     82      ! compute XY-average of mass, massebxy()
    7283      call massbarxy_loc(   masse, massebxy                          )
     84      ! compute mass fluxes pbaru() and pbarv()
    7385      CALL flumass_loc  ( massebx, masseby,vcont,ucont,pbaru,pbarv   )
     86      ! compute dteta() , horizontal converging flux of theta
    7487      CALL dteta1_loc   (   teta , pbaru   , pbarv, dteta            )
     88      ! compute convm(), horizontal converging flux of mass
    7589      CALL convmas1_loc  (   pbaru, pbarv   , convm                  )
    7690c$OMP BARRIER     
     
    95109      ijb=ij_begin
    96110      ije=ij_end
    97            
     111      ! compute pressure variation due to mass convergence
    98112      DO ij =ijb, ije
    99113         dp( ij ) = convm( ij,1 ) / airesurg( ij )
     
    101115c$OMP END MASTER
    102116c$OMP BARRIER
     117     
     118      ! compute vertical velocity w()
    103119      CALL vitvert_loc ( convm  , w                                )
     120      ! compute potential vorticity vorpot()
    104121      CALL tourpot_loc ( vcov   , ucov  , massebxy  , vorpot       )
     122      ! compute rotation induced du() and dv()
    105123      CALL dudv1_loc   ( vorpot , pbaru , pbarv     , du     , dv  )
    106124
     
    111129      call WriteField_v('dv',dv)
    112130#endif     
     131     
     132      ! compute kinetic energy ecin()
    113133      CALL enercin_loc ( vcov   , ucov  , vcont   , ucont  , ecin  )
     134      ! compute Bernouilli function bern()
    114135      CALL bernoui_loc ( ip1jmp1, llm   , phi       , ecin   , bern)
     136      ! compute and add du() and dv() contributions from Bernouilli and pressure
    115137      CALL dudv2_loc   ( teta   , pkf   , bern      , du     , dv  )
    116138
     
    137159c$OMP END DO
    138160
     161      ! compute vertical advection contributions to du(), dv() and dteta()
    139162      CALL advect_new_loc(ang,vcov,teta,w,massebx,masseby,du,dv,dteta)
    140163
     
    158181c$OMP END DO NOWAIT     
    159182
     183! Ehouarn: NB: output of control variables not implemented...
    160184
    161185      RETURN
  • LMDZ5/trunk/libf/dyn3dmem/calfis_loc.F

    r1907 r1987  
    4141      Use Write_field_p
    4242      USE Times
    43       USE infotrac
    44       USE control_mod
     43      USE infotrac, ONLY: nqtot, niadv, tname
     44      USE control_mod, ONLY: planet_type, nsplit_phys
    4545
    4646      IMPLICIT NONE
     
    115115c    Arguments :
    116116c    -----------
    117       LOGICAL  lafin
    118 !      REAL heure
    119       REAL, intent(in):: jD_cur, jH_cur
    120       REAL pvcov(iip1,jjb_v:jje_v,llm)
    121       REAL pucov(iip1,jjb_u:jje_u,llm)
    122       REAL pteta(iip1,jjb_u:jje_u,llm)
    123       REAL pmasse(iip1,jjb_u:jje_u,llm)
    124       REAL pq(iip1,jjb_u:jje_u,llm,nqtot)
    125       REAL pphis(iip1,jjb_u:jje_u)
    126       REAL pphi(iip1,jjb_u:jje_u,llm)
    127 c
    128       REAL pdvcov(iip1,jjb_v:jje_v,llm)
    129       REAL pducov(iip1,jjb_u:jje_u,llm)
    130       REAL pdteta(iip1,jjb_u:jje_u,llm)
    131       REAL pdq(iip1,jjb_u:jje_u,llm,nqtot)
    132       REAL flxw(iip1,jjb_u:jje_u,llm)  ! Flux de masse verticale sur la grille dynamique
    133 c
    134       REAL pps(iip1,jjb_u:jje_u)
    135       REAL pp(iip1,jjb_u:jje_u,llmp1)
    136       REAL ppk(iip1,jjb_u:jje_u,llm)
    137 c
    138       REAL pdvfi(iip1,jjb_v:jje_v,llm)
    139       REAL pdufi(iip1,jjb_u:jje_u,llm)
    140       REAL pdhfi(iip1,jjb_u:jje_u,llm)
    141       REAL pdqfi(iip1,jjb_u:jje_u,llm,nqtot)
    142       REAL pdpsfi(iip1,jjb_u:jje_u)
    143 
    144       INTEGER        longcles
    145       PARAMETER    ( longcles = 20 )
    146       REAL clesphy0( longcles )
     117      LOGICAL,INTENT(IN) ::  lafin ! .true. for the very last call to physics
     118      REAL,INTENT(IN):: jD_cur, jH_cur
     119      REAL,INTENT(IN):: pvcov(iip1,jjb_v:jje_v,llm) ! covariant meridional velocity
     120      REAL,INTENT(IN):: pucov(iip1,jjb_u:jje_u,llm) ! covariant zonal velocity
     121      REAL,INTENT(IN):: pteta(iip1,jjb_u:jje_u,llm) ! potential temperature
     122      REAL,INTENT(IN):: pmasse(iip1,jjb_u:jje_u,llm) ! mass in each cell ! not used
     123      REAL,INTENT(IN):: pq(iip1,jjb_u:jje_u,llm,nqtot) ! tracers
     124      REAL,INTENT(IN):: pphis(iip1,jjb_u:jje_u) ! surface geopotential
     125      REAL,INTENT(IN):: pphi(iip1,jjb_u:jje_u,llm) ! geopotential
     126
     127      REAL,INTENT(IN) :: pdvcov(iip1,jjb_v:jje_v,llm) ! dynamical tendency on vcov ! not used
     128      REAL,INTENT(IN) :: pducov(iip1,jjb_u:jje_u,llm) ! dynamical tendency on ucov
     129      REAL,INTENT(IN) :: pdteta(iip1,jjb_u:jje_u,llm) ! dynamical tendency on teta ! not used
     130      REAL,INTENT(IN) :: pdq(iip1,jjb_u:jje_u,llm,nqtot) ! dynamical tendency on tracers ! not used
     131
     132      REAL,INTENT(IN) :: pps(iip1,jjb_u:jje_u) ! surface pressure (Pa)
     133      REAL,INTENT(IN) :: pp(iip1,jjb_u:jje_u,llmp1) ! pressure at mesh interfaces (Pa)
     134      REAL,INTENT(IN) :: ppk(iip1,jjb_u:jje_u,llm) ! Exner at mid-layer
     135      REAL,INTENT(IN) :: flxw(iip1,jjb_u:jje_u,llm)  ! Vertical mass flux on dynamics grid
     136
     137      ! tendencies (in */s) from the physics
     138      REAL,INTENT(OUT) :: pdvfi(iip1,jjb_v:jje_v,llm) ! tendency on covariant meridional wind
     139      REAL,INTENT(OUT) :: pdufi(iip1,jjb_u:jje_u,llm) ! tendency on covariant zonal wind
     140      REAL,INTENT(OUT) :: pdhfi(iip1,jjb_u:jje_u,llm) ! tendency on potential temperature (K/s)
     141      REAL,INTENT(OUT) :: pdqfi(iip1,jjb_u:jje_u,llm,nqtot) ! tendency on tracers
     142      REAL,INTENT(OUT) :: pdpsfi(iip1,jjb_u:jje_u) ! tendency on surface pressure (Pa/s)
     143
     144      INTEGER,PARAMETER :: longcles = 20
     145      REAL,INTENT(IN) :: clesphy0( longcles ) ! unused
    147146
    148147
     
    221220c
    222221cIM diagnostique PVteta, Amip2
    223       INTEGER ntetaSTD
    224       PARAMETER(ntetaSTD=3)
    225       REAL rtetaSTD(ntetaSTD)
    226       DATA rtetaSTD/350., 380., 405./ ! Earth-specific values, beware !!
     222      INTEGER,PARAMETER :: ntetaSTD=3
     223      REAL,SAVE :: rtetaSTD(ntetaSTD)=(/350.,380.,405./) ! Earth-specific, beware !!
    227224      REAL PVteta(klon,ntetaSTD)
    228225     
     
    230227      REAL SSUM
    231228
    232       LOGICAL firstcal, debut
    233       DATA firstcal/.true./
    234       SAVE firstcal,debut
     229      LOGICAL,SAVE :: firstcal=.true., debut=.true.
    235230c$OMP THREADPRIVATE(firstcal,debut)
    236231     
  • LMDZ5/trunk/libf/dyn3dmem/call_calfis_mod.F90

    r1907 r1987  
    9191    INCLUDE "iniprint.h"
    9292
    93     REAL    :: clesphy0( : )   
    94     INTEGER :: itau
    95     LOGICAL :: lafin
    96     REAL :: ucov_dyn(ijb_u:ije_u,llm)
    97     REAL :: vcov_dyn(ijb_v:ije_v,llm)
    98     REAL :: teta_dyn(ijb_u:ije_u,llm)
    99     REAL :: masse_dyn(ijb_u:ije_u,llm)
    100     REAL :: ps_dyn(ijb_u:ije_u)
    101     REAL :: phis_dyn(ijb_u:ije_u)
    102     REAL :: q_dyn(ijb_u:ije_u,llm,nqtot)
    103     REAL :: flxw_dyn(ijb_u:ije_u,llm)
     93    INTEGER,INTENT(IN) :: itau ! (time) iteration step number
     94    LOGICAL,INTENT(IN) :: lafin ! .true. if final time step
     95    REAL,INTENT(IN) :: clesphy0( : ) ! not used   
     96    REAL,INTENT(INOUT) :: ucov_dyn(ijb_u:ije_u,llm) ! covariant zonal wind
     97    REAL,INTENT(INOUT) :: vcov_dyn(ijb_v:ije_v,llm) ! covariant meridional wind
     98    REAL,INTENT(INOUT) :: teta_dyn(ijb_u:ije_u,llm) ! potential temperature
     99    REAL,INTENT(INOUT) :: masse_dyn(ijb_u:ije_u,llm) ! air mass
     100    REAL,INTENT(INOUT) :: ps_dyn(ijb_u:ije_u) ! surface pressure
     101    REAL,INTENT(INOUT) :: phis_dyn(ijb_u:ije_u) ! surface geopotential
     102    REAL,INTENT(INOUT) :: q_dyn(ijb_u:ije_u,llm,nqtot) ! advected tracers
     103    REAL,INTENT(INOUT) :: flxw_dyn(ijb_u:ije_u,llm) ! vertical mass flux
    104104
    105105    REAL :: dufi_tmp(iip1,llm)   
     
    134134  !$OMP MASTER
    135135    CALL suspend_timer(timer_caldyn)
    136     WRITE(lunout,*) 'leapfrog_p: Entree dans la physique : Iteration No ',itau
     136    IF (prt_level >= 10) THEN
     137      WRITE(lunout,*) 'leapfrog_p: Entree dans la physique : Iteration No ',itau
     138    ENDIF
    137139  !$OMP END MASTER
    138140   
     
    335337                    ucov, vcov, teta , q   ,ps ,            &
    336338                    dufi, dvfi, dtetafi , dqfi ,dpfi  )
     339    ! since addfi updates ps(), also update p(), masse() and pk()
     340    CALL pression_loc(ip1jmp1,ap,bp,ps,p)
     341!$OMP BARRIER
     342    CALL massdair_loc(p,masse)
     343!$OMP BARRIER
     344    if (pressure_exner) then
     345      CALL exner_hyb_loc(ijnb_u,ps,p,alpha,beta,pks,pk,pkf)
     346    else
     347      CALL exner_milieu_loc(ijnb_u,ps,p,beta,pks,pk,pkf)
     348    endif
     349!$OMP BARRIER
    337350
    338351#ifdef DEBUG_IO   
  • LMDZ5/trunk/libf/dyn3dmem/call_dissip_mod.F90

    r1907 r1987  
    8787  IMPLICIT NONE
    8888    INCLUDE 'comgeom.h'
    89     REAL :: ucov_dyn(ijb_u:ije_u,llm)
    90     REAL :: vcov_dyn(ijb_v:ije_v,llm)
    91     REAL :: teta_dyn(ijb_u:ije_u,llm)
    92     REAL :: p_dyn(ijb_u:ije_u,llmp1 )
    93     REAL :: pk_dyn(ijb_u:ije_u,llm)
    94     REAL :: ps_dyn(ijb_u:ije_u)
     89    REAL,INTENT(INOUT) :: ucov_dyn(ijb_u:ije_u,llm) ! covariant zonal wind
     90    REAL,INTENT(INOUT) :: vcov_dyn(ijb_v:ije_v,llm) ! covariant meridional wind
     91    REAL,INTENT(INOUT) :: teta_dyn(ijb_u:ije_u,llm) ! covariant meridional wind
     92    REAL,INTENT(INOUT) :: p_dyn(ijb_u:ije_u,llmp1 ) ! pressure at interlayer
     93    REAL,INTENT(INOUT) :: pk_dyn(ijb_u:ije_u,llm) ! Exner at midlayer
     94    REAL,INTENT(INOUT) :: ps_dyn(ijb_u:ije_u) ! surface pressure
    9595    REAL :: tppn(iim),tpps(iim)
    9696    REAL :: tpn,tps
  • LMDZ5/trunk/libf/dyn3dmem/dissip_loc.F

    r1907 r1987  
     1!
     2! $Id: $
     3!
    14      SUBROUTINE dissip_loc( vcov,ucov,teta,p, dv,du,dh )
    25c
    36      USE parallel_lmdz
    47      USE write_field_loc
    5       USE dissip_mod
     8      USE dissip_mod, ONLY: dissip_allocate
    69      IMPLICIT NONE
    710
     
    3538c   ----------
    3639
    37       REAL vcov(ijb_v:ije_v,llm),ucov(ijb_u:ije_u,llm)
    38       REAL teta(ijb_u:ije_u,llm)
    39       REAL  p( ijb_u:ije_u,llmp1 )
    40       REAL dv(ijb_v:ije_v,llm),du(ijb_u:ije_u,llm),dh(ijb_u:ije_u,llm)
     40      REAL,INTENT(IN) :: vcov(ijb_v:ije_v,llm) ! covariant meridional wind
     41      REAL,INTENT(IN) :: ucov(ijb_u:ije_u,llm) ! covariant zonal wind
     42      REAL,INTENT(IN) :: teta(ijb_u:ije_u,llm) ! potential temperature
     43      REAL,INTENT(IN) :: p(ijb_u:ije_u,llmp1) ! interlayer pressure
     44      ! tendencies (.../s) on covariant winds and potential temperature
     45      REAL,INTENT(OUT) :: dv(ijb_v:ije_v,llm)
     46      REAL,INTENT(OUT) :: du(ijb_u:ije_u,llm)
     47      REAL,INTENT(OUT) :: dh(ijb_u:ije_u,llm)
    4148
    4249c   Local:
  • LMDZ5/trunk/libf/dyn3dmem/leapfrog_loc.F

    r1907 r1987  
    8080!      include "mpif.h"
    8181     
    82       INTEGER         longcles
    83       PARAMETER     ( longcles = 20 )
    84       REAL  clesphy0( longcles )
     82      INTEGER,PARAMETER :: longcles = 20
     83      REAL,INTENT(IN) :: clesphy0( longcles ) ! not used
     84      REAL,INTENT(IN) :: time_0 ! not used
     85
     86c   dynamical variables:
     87      REAL,INTENT(IN) :: ucov0(ijb_u:ije_u,llm)    ! zonal covariant wind
     88      REAL,INTENT(IN) :: vcov0(ijb_v:ije_v,llm)    ! meridional covariant wind
     89      REAL,INTENT(IN) :: teta0(ijb_u:ije_u,llm)    ! potential temperature
     90      REAL,INTENT(IN) :: q0(ijb_u:ije_u,llm,nqtot) ! advected tracers
     91      REAL,INTENT(IN) :: ps0(ijb_u:ije_u)          ! surface pressure (Pa)
     92      REAL,INTENT(IN) :: masse0(ijb_u:ije_u,llm)   ! air mass
     93      REAL,INTENT(IN) :: phis0(ijb_u:ije_u)        ! geopotentiat at the surface
    8594
    8695      real zqmin,zqmax
    87 
    88 c   variables dynamiques
    89       REAL :: vcov0(ijb_v:ije_v,llm),ucov0(ijb_u:ije_u,llm) ! vents covariants
    90       REAL :: teta0(ijb_u:ije_u,llm)                 ! temperature potentielle
    91       REAL :: q0(ijb_u:ije_u,llm,nqtot)              ! champs advectes
    92       REAL :: ps0(ijb_u:ije_u)                       ! pression  au sol
    93       REAL :: masse0(ijb_u:ije_u,llm)                ! masse d'air
    94       REAL :: phis0(ijb_u:ije_u)                     ! geopotentiel au sol
    9596
    9697!      REAL,SAVE,ALLOCATABLE :: p (:,:  )               ! pression aux interfac.des couches
     
    133134      REAL       time
    134135
    135       REAL  SSUM
    136       REAL time_0
     136      REAL  SSUM
    137137!      REAL,SAVE,ALLOCATABLE :: finvmaold(:,:)
    138138
     
    670670     
    671671      IF( forward. OR . leapf )  THEN
    672  
    673  
     672! Ehouarn: NB: fields sent to advtrac are those at the beginning of the time step
    674673         CALL caladvtrac_loc(q,pbaru,pbarv,
    675674     *        p, masse, dq,  teta,
     
    680679!      enddo
    681680
    682 c
     681! Ehouarn: Storage of mass flux for off-line tracers... not implemented...
     682
    683683      ENDIF ! of IF( forward. OR . leapf )
    684684
     
    11401140        endif
    11411141c$OMP BARRIER
     1142        CALL massdair_loc(p,masse)
     1143c$OMP BARRIER
    11421144
    11431145cc$OMP END PARALLEL
  • LMDZ5/trunk/libf/dyn3dmem/leapfrog_mod.F90

    r1907 r1987  
    11MODULE leapfrog_mod
    22
    3   REAL,POINTER,SAVE :: ucov(:,:)
    4   REAL,POINTER,SAVE :: vcov(:,:)
    5   REAL,POINTER,SAVE :: teta(:,:)
    6   REAL,POINTER,SAVE :: ps(:)
    7   REAL,POINTER,SAVE :: masse(:,:)
    8   REAL,POINTER,SAVE :: phis(:)
    9   REAL,POINTER,SAVE :: q(:,:,:)
    10   REAL,POINTER,SAVE :: p(:,:)
    11   REAL,POINTER,SAVE :: pks(:)
    12   REAL,POINTER,SAVE :: pk(:,:)
    13   REAL,POINTER,SAVE :: pkf(:,:)
    14   REAL,POINTER,SAVE :: phi(:,:)
    15   REAL,POINTER,SAVE :: w(:,:)
     3  REAL,POINTER,SAVE :: ucov(:,:) ! zonal covariant wind
     4  REAL,POINTER,SAVE :: vcov(:,:) ! meridional covariant wind
     5  REAL,POINTER,SAVE :: teta(:,:) ! potential temperature
     6  REAL,POINTER,SAVE :: ps(:) ! surface pressure
     7  REAL,POINTER,SAVE :: masse(:,:) ! air mass
     8  REAL,POINTER,SAVE :: phis(:) ! geopotential at the surface
     9  REAL,POINTER,SAVE :: q(:,:,:) ! advected tracers
     10  REAL,POINTER,SAVE :: p(:,:) ! interlayer pressure
     11  REAL,POINTER,SAVE :: pks(:) ! Exner at the surface
     12  REAL,POINTER,SAVE :: pk(:,:) ! Exner at mid-layer
     13  REAL,POINTER,SAVE :: pkf(:,:) ! filtered Exner
     14  REAL,POINTER,SAVE :: phi(:,:) ! geopotential
     15  REAL,POINTER,SAVE :: w(:,:) ! vertical velocity
    1616  REAL,POINTER,SAVE :: pbaru(:,:)
    1717  REAL,POINTER,SAVE :: pbarv(:,:)
  • LMDZ5/trunk/libf/dyn3dmem/pression_loc.F

    r1907 r1987  
    11      SUBROUTINE pression_loc( ngrid, ap, bp, ps, p )
    2       USE parallel_lmdz
     2      USE parallel_lmdz, ONLY: ij_begin, ij_end, ijb_u, ije_u,
     3     &                         pole_nord, pole_sud, omp_chunk
    34c
    45
     
    1617#include "paramet.h"
    1718c
    18       INTEGER ngrid
     19      INTEGER,INTENT(IN) :: ngrid ! not used
    1920      INTEGER l,ij
    2021 
    21       REAL ap( llmp1 ), bp( llmp1 ), ps( ijb_u:ije_u )
    22       REAL p( ijb_u:ije_u,llmp1 )
     22      REAL,INTENT(IN) :: ap( llmp1 ), bp( llmp1 ), ps( ijb_u:ije_u )
     23      REAL,INTENT(OUT) :: p( ijb_u:ije_u,llmp1 )
    2324     
    2425      INTEGER ijb,ije
  • LMDZ5/trunk/libf/dyn3dpar/addfi_p.F

    r1907 r1987  
    5555c    -----------
    5656c
    57       REAL pdt
    58 c
    59       REAL pvcov(ip1jm,llm),pucov(ip1jmp1,llm)
    60       REAL pteta(ip1jmp1,llm),pq(ip1jmp1,llm,nqtot),pps(ip1jmp1)
    61 c
    62       REAL pdvfi(ip1jm,llm),pdufi(ip1jmp1,llm)
    63       REAL pdqfi(ip1jmp1,llm,nqtot),pdhfi(ip1jmp1,llm),pdpfi(ip1jmp1)
    64 c
    65       LOGICAL leapf,forward
     57      REAL,INTENT(IN) :: pdt ! time step for the integration (s)
     58c
     59      REAL,INTENT(INOUT) :: pvcov(ip1jm,llm) ! covariant meridional wind
     60      REAL,INTENT(INOUT) :: pucov(ip1jmp1,llm) ! covariant zonal wind
     61      REAL,INTENT(INOUT) :: pteta(ip1jmp1,llm) ! potential temperature
     62      REAL,INTENT(INOUT) :: pq(ip1jmp1,llm,nqtot) ! tracers
     63      REAL,INTENT(INOUT) :: pps(ip1jmp1) ! surface pressure (Pa)
     64c respective tendencies (.../s) to add
     65      REAL,INTENT(IN) :: pdvfi(ip1jm,llm)
     66      REAL,INTENT(IN) :: pdufi(ip1jmp1,llm)
     67      REAL,INTENT(IN) :: pdqfi(ip1jmp1,llm,nqtot)
     68      REAL,INTENT(IN) :: pdhfi(ip1jmp1,llm)
     69      REAL,INTENT(IN) :: pdpfi(ip1jmp1)
     70c
     71      LOGICAL,INTENT(IN) :: leapf,forward ! not used
    6672c
    6773c
     
    7177      REAL xpn(iim),xps(iim),tpn,tps
    7278      INTEGER j,k,iq,ij
    73       REAL qtestw, qtestt
    74       PARAMETER ( qtestw = 1.0e-15 )
    75       PARAMETER ( qtestt = 1.0e-40 )
     79      REAL,PARAMETER :: qtestw = 1.0e-15
     80      REAL,PARAMETER :: qtestt = 1.0e-40
    7681
    7782      REAL SSUM
  • LMDZ5/trunk/libf/dyn3dpar/advtrac_p.F90

    r1907 r1987  
    1616  USE Vampir
    1717  USE times
    18   USE infotrac
    19   USE control_mod
     18  USE infotrac, ONLY: nqtot, iadv
     19  USE control_mod, ONLY: iapp_tracvl, day_step, planet_type
    2020  IMPLICIT NONE
    2121  !
     
    3434  !     Arguments
    3535  !-------------------------------------------------------------------
     36  INTEGER,INTENT(OUT) :: iapptrac
     37  REAL,INTENT(IN) :: pbaru(ip1jmp1,llm)
     38  REAL,INTENT(IN) :: pbarv(ip1jm,llm)
     39  REAL,INTENT(INOUT) :: q(ip1jmp1,llm,nqtot)
     40  REAL,INTENT(IN) :: masse(ip1jmp1,llm)
     41  REAL,INTENT(IN) :: p( ip1jmp1,llmp1 )
     42  REAL,INTENT(IN) :: teta(ip1jmp1,llm)
     43  REAL,INTENT(IN) :: pk(ip1jmp1,llm)
     44  REAL,INTENT(OUT) :: flxw(ip1jmp1,llm)
     45  !-------------------------------------------------------------------
    3646  !     Ajout PPM
    3747  !--------------------------------------------------------
    3848  REAL massebx(ip1jmp1,llm),masseby(ip1jm,llm)
    39   !--------------------------------------------------------
    40   INTEGER iapptrac
    41   REAL pbaru(ip1jmp1,llm),pbarv(ip1jm,llm)
    42   REAL q(ip1jmp1,llm,nqtot),masse(ip1jmp1,llm)
    43   REAL p( ip1jmp1,llmp1 ),teta(ip1jmp1,llm)
    44   REAL pk(ip1jmp1,llm)
    45   REAL               :: flxw(ip1jmp1,llm)
    46 
    4749  !-------------------------------------------------------------
    4850  !     Variables locales
  • LMDZ5/trunk/libf/dyn3dpar/caldyn_p.F

    r1907 r1987  
    11!
    2 ! $Header$
    3 !
    4 c
    5 c
     2! $Id$
     3!
    64#undef DEBUG_IO
    7 c#define DEBUG_IO
     5!#define DEBUG_IO
    86
    97      SUBROUTINE caldyn_p
     
    1513      IMPLICIT NONE
    1614
    17 c=======================================================================
    18 c
    19 c  Auteur :  P. Le Van
    20 c
    21 c   Objet:
    22 c   ------
    23 c
    24 c   Calcul des tendances dynamiques.
    25 c
    26 c Modif 04/93 F.Forget
    27 c=======================================================================
    28 
    29 c-----------------------------------------------------------------------
    30 c   0. Declarations:
    31 c   ----------------
     15!=======================================================================
     16!
     17!  Auteur :  P. Le Van
     18!
     19!   Objet:
     20!   ------
     21!
     22!   Calcul des tendances dynamiques.
     23!
     24! Modif 04/93 F.Forget
     25!=======================================================================
     26
     27!-----------------------------------------------------------------------
     28!   0. Declarations:
     29!   ----------------
    3230
    3331#include "dimensions.h"
     
    3735#include "comgeom.h"
    3836
    39 c   Arguments:
    40 c   ----------
    41 
    42       LOGICAL conser
    43 
    44       INTEGER itau
    45       REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm)
    46       REAL ps(ip1jmp1),phis(ip1jmp1)
    47       REAL pk(iip1,jjp1,llm),pkf(ip1jmp1,llm)
     37!   Arguments:
     38!   ----------
     39
     40      LOGICAL,INTENT(IN) :: conser ! triggers printing some diagnostics
     41      INTEGER,INTENT(IN) :: itau ! time step index
     42      REAL,INTENT(IN) :: vcov(ip1jm,llm) ! covariant meridional wind
     43      REAL,INTENT(IN) :: ucov(ip1jmp1,llm) ! covariant zonal wind
     44      REAL,INTENT(IN) :: teta(ip1jmp1,llm) ! potential temperature
     45      REAL,INTENT(IN) :: ps(ip1jmp1) ! surface pressure
     46      REAL,INTENT(IN) :: phis(ip1jmp1) ! geopotential at the surface
     47      REAL,INTENT(IN) :: pk(ip1jmp1,llm) ! Exner at mid-layer
     48      REAL,INTENT(IN) :: pkf(ip1jmp1,llm) ! filtered Exner
     49      REAL,INTENT(IN) :: phi(ip1jmp1,llm) ! geopotential
     50      REAL,INTENT(OUT) :: masse(ip1jmp1,llm) ! air mass
     51      REAL,INTENT(OUT) :: dv(ip1jm,llm) ! tendency on vcov
     52      REAL,INTENT(OUT) :: du(ip1jmp1,llm) ! tendency on ucov
     53      REAL,INTENT(OUT) :: dteta(ip1jmp1,llm) ! tenddency on teta
     54      REAL,INTENT(OUT) :: dp(ip1jmp1) ! tendency on ps
     55      REAL,INTENT(OUT) :: w(ip1jmp1,llm) ! vertical velocity
     56      REAL,INTENT(OUT) :: pbaru(ip1jmp1,llm) ! mass flux in the zonal direction
     57      REAL,INTENT(OUT) :: pbarv(ip1jm,llm) ! mass flux in the meridional direction
     58      REAL,INTENT(IN) :: time ! current time
     59
     60!   Local:
     61!   ------
     62
    4863      REAL,SAVE :: vcont(ip1jm,llm),ucont(ip1jmp1,llm)
    49       REAL phi(ip1jmp1,llm),masse(ip1jmp1,llm)
    50       REAL dv(ip1jm,llm),du(ip1jmp1,llm)
    51       REAL dteta(ip1jmp1,llm),dp(ip1jmp1)
    52       REAL w(ip1jmp1,llm)
    53       REAL pbaru(ip1jmp1,llm),pbarv(ip1jm,llm)
    54       REAL time
    55 
    56 c   Local:
    57 c   ------
    58 
    5964      REAL,SAVE :: ang(ip1jmp1,llm)
    6065      REAL,SAVE :: p(ip1jmp1,llmp1)
     
    6873      INTEGER   ij,l,ijb,ije,ierr
    6974
    70 c-----------------------------------------------------------------------
    71 c   Calcul des tendances dynamiques:
    72 c   --------------------------------
     75!-----------------------------------------------------------------------
     76!   Compute dynamical tendencies:
     77!--------------------------------
     78
     79      ! compute contravariant winds ucont() and vcont
    7380      CALL covcont_p  ( llm    , ucov    , vcov , ucont, vcont        )
     81      ! compute pressure p()
    7482      CALL pression_p ( ip1jmp1, ap      , bp   ,  ps  , p            )
    75 cym      CALL psextbar (   ps   , psexbarxy                          )
    76 c$OMP BARRIER
     83!ym      CALL psextbar (   ps   , psexbarxy                          )
     84!$OMP BARRIER
     85      ! compute mass in each atmospheric mesh: masse()
    7786      CALL massdair_p (    p   , masse                                )
     87      ! compute X and Y-averages of mass, massebx() and masseby()
    7888      CALL massbar_p  (   masse, massebx , masseby                    )
     89      ! compute XY-average of mass, massebxy()
    7990      call massbarxy_p(   masse, massebxy                             )
     91      ! compute mass fluxes pbaru() and pbarv()
    8092      CALL flumass_p  ( massebx, masseby , vcont, ucont ,pbaru, pbarv )
     93      ! compute dteta() , horizontal converging flux of theta
    8194      CALL dteta1_p   (   teta , pbaru   , pbarv, dteta               )
     95      ! compute convm(), horizontal converging flux of mass
    8296      CALL convmas1_p  (   pbaru, pbarv   , convm                      )
    83 c$OMP BARRIER     
     97!$OMP BARRIER     
    8498      CALL convmas2_p  (   convm                      )
    85 c$OMP BARRIER
     99!$OMP BARRIER
    86100#ifdef DEBUG_IO
    87 c$OMP BARRIER
    88 c$OMP MASTER
     101!$OMP BARRIER
     102!$OMP MASTER
    89103      call WriteField_p('ucont',reshape(ucont,(/iip1,jmp1,llm/)))
    90104      call WriteField_p('vcont',reshape(vcont,(/iip1,jjm,llm/)))
     
    98112      call WriteField_p('dteta',reshape(dteta,(/iip1,jmp1,llm/)))
    99113      call WriteField_p('convm',reshape(convm,(/iip1,jmp1,llm/)))
    100 c$OMP END MASTER
    101 c$OMP BARRIER
     114!$OMP END MASTER
     115!$OMP BARRIER
    102116#endif     
    103117
    104 c$OMP BARRIER
    105 c$OMP MASTER
     118!$OMP BARRIER
     119!$OMP MASTER
    106120      ijb=ij_begin
    107121      ije=ij_end
    108            
     122      ! compute pressure variation due to mass convergence
    109123      DO ij =ijb, ije
    110124         dp( ij ) = convm( ij,1 ) / airesurg( ij )
    111125      ENDDO
    112 c$OMP END MASTER
    113 c$OMP BARRIER
    114 c$OMP FLUSH
     126!$OMP END MASTER
     127!$OMP BARRIER
     128!$OMP FLUSH
     129     
     130      ! compute vertical velocity w()
    115131      CALL vitvert_p ( convm  , w                                  )
     132      ! compute potential vorticity vorpot()
    116133      CALL tourpot_p ( vcov   , ucov  , massebxy  , vorpot         )
     134      ! compute rotation induced du() and dv()
    117135      CALL dudv1_p   ( vorpot , pbaru , pbarv     , du     , dv    )
    118136
    119137#ifdef DEBUG_IO     
    120 c$OMP BARRIER
    121 c$OMP MASTER
     138!$OMP BARRIER
     139!$OMP MASTER
    122140      call WriteField_p('w',reshape(w,(/iip1,jmp1,llm/)))
    123141      call WriteField_p('vorpot',reshape(vorpot,(/iip1,jjm,llm/)))
    124142      call WriteField_p('du',reshape(du,(/iip1,jmp1,llm/)))
    125143      call WriteField_p('dv',reshape(dv,(/iip1,jjm,llm/)))
    126 c$OMP END MASTER
    127 c$OMP BARRIER
     144!$OMP END MASTER
     145!$OMP BARRIER
    128146#endif     
     147     
     148      ! compute kinetic energy ecin()
    129149      CALL enercin_p ( vcov   , ucov  , vcont     , ucont  , ecin  )
     150      ! compute Bernouilli function bern()
    130151      CALL bernoui_p ( ip1jmp1, llm   , phi       , ecin   , bern  )
     152      ! compute and add du() and dv() contributions from Bernouilli and pressure
    131153      CALL dudv2_p   ( teta   , pkf   , bern      , du     , dv    )
    132154
    133155#ifdef DEBUG_IO
    134 c$OMP BARRIER
    135 c$OMP MASTER
     156!$OMP BARRIER
     157!$OMP MASTER
    136158      call WriteField_p('ecin',reshape(ecin,(/iip1,jmp1,llm/)))
    137159      call WriteField_p('bern',reshape(bern,(/iip1,jmp1,llm/)))
     
    139161      call WriteField_p('dv',reshape(dv,(/iip1,jjm,llm/)))
    140162      call WriteField_p('pkf',reshape(pkf,(/iip1,jmp1,llm/)))
    141 c$OMP END MASTER
    142 c$OMP BARRIER
     163!$OMP END MASTER
     164!$OMP BARRIER
    143165#endif
    144166     
     
    149171      if (pole_sud) ije=ij_end
    150172
    151 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)       
     173!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)       
    152174      DO l=1,llm
    153175         DO ij=ijb,ije
     
    155177        ENDDO
    156178      ENDDO
    157 c$OMP END DO
    158 
     179!$OMP END DO
     180
     181      ! compute vertical advection contributions to du(), dv() and dteta()
    159182      CALL advect_new_p(ang,vcov,teta,w,massebx,masseby,du,dv,dteta)
    160183
    161 C  WARNING probleme de peridocite de dv sur les PC/linux. Pb d'arrondi
    162 C          probablement. Observe sur le code compile avec pgf90 3.0-1
     184!  WARNING probleme de peridocite de dv sur les PC/linux. Pb d'arrondi
     185!          probablement. Observe sur le code compile avec pgf90 3.0-1
    163186      ijb=ij_begin
    164187      ije=ij_end
    165188      if (pole_sud) ije=ij_end-iip1
    166189
    167 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     190!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    168191      DO l = 1, llm
    169192         DO ij = ijb, ije, iip1
    170193           IF( dv(ij,l).NE.dv(ij+iim,l) )  THEN
    171 c         PRINT *,'!!!ATTENTION!!! probleme de periodicite sur vcov', 
    172 c    ,   ' dans caldyn'
    173 c         PRINT *,' l,  ij = ', l, ij, ij+iim,dv(ij+iim,l),dv(ij,l)
     194!         PRINT *,'!!!ATTENTION!!! probleme de periodicite sur vcov', 
     195!    ,   ' dans caldyn'
     196!         PRINT *,' l,  ij = ', l, ij, ij+iim,dv(ij+iim,l),dv(ij,l)
    174197          dv(ij+iim,l) = dv(ij,l)
    175198          endif
    176199         enddo
    177200      enddo
    178 c$OMP END DO NOWAIT     
    179 c-----------------------------------------------------------------------
    180 c   Sorties eventuelles des variables de controle:
    181 c   ----------------------------------------------
     201!$OMP END DO NOWAIT     
     202!-----------------------------------------------------------------------
     203!   Output some control variables:
     204!---------------------------------
    182205
    183206      IF( conser )  THEN
    184 c ym ---> exige communication collective ( aussi dans advect)
     207! ym ---> exige communication collective ( aussi dans advect)
    185208        CALL sortvarc
    186      $ ( itau,ucov,teta,ps,masse,pk,phis,vorpot,phi,bern,dp,time,vcov )
     209     & ( itau,ucov,teta,ps,masse,pk,phis,vorpot,phi,bern,dp,time,vcov )
    187210
    188211      ENDIF
    189212
    190       RETURN
    191213      END
  • LMDZ5/trunk/libf/dyn3dpar/calfis_p.F

    r1907 r1987  
    3838      Use Write_field_p
    3939      USE Times
    40       USE infotrac
    41       USE control_mod
     40      USE infotrac, ONLY: nqtot, niadv, tname
     41      USE control_mod, ONLY: planet_type, nsplit_phys
    4242
    4343      IMPLICIT NONE
     
    112112c    Arguments :
    113113c    -----------
    114       LOGICAL  lafin
    115 !      REAL heure
    116       REAL, intent(in):: jD_cur, jH_cur
    117       REAL pvcov(iip1,jjm,llm)
    118       REAL pucov(iip1,jjp1,llm)
    119       REAL pteta(iip1,jjp1,llm)
    120       REAL pmasse(iip1,jjp1,llm)
    121       REAL pq(iip1,jjp1,llm,nqtot)
    122       REAL pphis(iip1,jjp1)
    123       REAL pphi(iip1,jjp1,llm)
    124 c
    125       REAL pdvcov(iip1,jjm,llm)
    126       REAL pducov(iip1,jjp1,llm)
    127       REAL pdteta(iip1,jjp1,llm)
    128       REAL pdq(iip1,jjp1,llm,nqtot)
    129       REAL flxw(iip1,jjp1,llm)  ! Flux de masse verticale sur la grille dynamique
    130 c
    131       REAL pps(iip1,jjp1)
    132       REAL pp(iip1,jjp1,llmp1)
    133       REAL ppk(iip1,jjp1,llm)
    134 c
    135       REAL pdvfi(iip1,jjm,llm)
    136       REAL pdufi(iip1,jjp1,llm)
    137       REAL pdhfi(iip1,jjp1,llm)
    138       REAL pdqfi(iip1,jjp1,llm,nqtot)
    139       REAL pdpsfi(iip1,jjp1)
    140 
    141       INTEGER        longcles
    142       PARAMETER    ( longcles = 20 )
    143       REAL clesphy0( longcles )
     114      LOGICAL,INTENT(IN) ::  lafin ! .true. for the very last call to physics
     115      REAL,INTENT(IN) :: jD_cur, jH_cur
     116      REAL,INTENT(IN) :: pvcov(iip1,jjm,llm) ! covariant meridional velocity
     117      REAL,INTENT(IN) :: pucov(iip1,jjp1,llm) ! covariant zonal velocity
     118      REAL,INTENT(IN) :: pteta(iip1,jjp1,llm) ! potential temperature
     119      REAL,INTENT(IN) :: pmasse(iip1,jjp1,llm) ! mass in each cell ! not used
     120      REAL,INTENT(IN) :: pq(iip1,jjp1,llm,nqtot) ! tracers
     121      REAL,INTENT(IN) :: pphis(iip1,jjp1) ! surface geopotential
     122      REAL,INTENT(IN) :: pphi(iip1,jjp1,llm) ! geopotential
     123
     124      REAL,INTENT(IN) :: pdvcov(iip1,jjm,llm) ! dynamical tendency on vcov ! not used
     125      REAL,INTENT(IN) :: pducov(iip1,jjp1,llm) ! dynamical tendency on ucov
     126      REAL,INTENT(IN) :: pdteta(iip1,jjp1,llm) ! dynamical tendency on teta
     127      ! NB: pdteta is used only to compute pcvgt which is in fact not used...
     128      REAL,INTENT(IN) :: pdq(iip1,jjp1,llm,nqtot) ! dynamical tendency on tracers
     129      ! NB: pdq is only used to compute pcvgq which is in fact not used...
     130
     131      REAL,INTENT(IN) :: pps(iip1,jjp1) ! surface pressure (Pa)
     132      REAL,INTENT(IN) :: pp(iip1,jjp1,llmp1) ! pressure at mesh interfaces (Pa)
     133      REAL,INTENT(IN) :: ppk(iip1,jjp1,llm) ! Exner at mid-layer
     134      REAL,INTENT(IN) :: flxw(iip1,jjp1,llm)  ! Vertical mass flux on dynamics grid
     135
     136      ! tendencies (in */s) from the physics
     137      REAL,INTENT(OUT) :: pdvfi(iip1,jjm,llm) ! tendency on covariant meridional wind
     138      REAL,INTENT(OUT) :: pdufi(iip1,jjp1,llm) ! tendency on covariant zonal wind
     139      REAL,INTENT(OUT) :: pdhfi(iip1,jjp1,llm) ! tendency on potential temperature (K/s)
     140      REAL,INTENT(OUT) :: pdqfi(iip1,jjp1,llm,nqtot) ! tendency on tracers
     141      REAL,INTENT(OUT) :: pdpsfi(iip1,jjp1) ! tendency on surface pressure (Pa/s)
     142
     143      INTEGER,PARAMETER :: longcles = 20
     144      REAL,INTENT(IN) :: clesphy0( longcles ) ! unused
    144145
    145146#ifdef CPP_PHYS
     
    217218c
    218219cIM diagnostique PVteta, Amip2
    219       INTEGER ntetaSTD
    220       PARAMETER(ntetaSTD=3)
    221       REAL rtetaSTD(ntetaSTD)
    222       DATA rtetaSTD/350., 380., 405./ ! Earth-specific values, beware !!
     220      INTEGER,PARAMETER :: ntetaSTD=3
     221      REAL,SAVE :: rtetaSTD(ntetaSTD)=(/350.,380.,405./) ! Earth-specific, beware !!
    223222      REAL PVteta(klon,ntetaSTD)
    224223     
    225      
    226224      REAL SSUM
    227225
    228       LOGICAL firstcal, debut
    229       DATA firstcal/.true./
    230       SAVE firstcal,debut
     226      LOGICAL,SAVE :: firstcal=.true., debut=.true.
    231227c$OMP THREADPRIVATE(firstcal,debut)
    232228     
  • LMDZ5/trunk/libf/dyn3dpar/dissip_p.F

    r1907 r1987  
     1!
     2! $Id$
     3!
    14      SUBROUTINE dissip_p( vcov,ucov,teta,p, dv,du,dh )
    25c
     
    3437c   ----------
    3538
    36       REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm)
    37       REAL  p( ip1jmp1,llmp1 )
    38       REAL dv(ip1jm,llm),du(ip1jmp1,llm),dh(ip1jmp1,llm)
     39      REAL,INTENT(IN) :: vcov(ip1jm,llm) ! covariant meridional wind
     40      REAL,INTENT(IN) :: ucov(ip1jmp1,llm) ! covariant zonal wind
     41      REAL,INTENT(IN) :: teta(ip1jmp1,llm) ! potentail temperature
     42      REAL,INTENT(IN) :: p(ip1jmp1,llmp1) ! pressure
     43      ! tendencies (.../s) on covariant winds and potential temperature
     44      REAL,INTENT(OUT) :: dv(ip1jm,llm)
     45      REAL,INTENT(OUT) :: du(ip1jmp1,llm)
     46      REAL,INTENT(OUT) :: dh(ip1jmp1,llm)
    3947
    4048c   Local:
  • LMDZ5/trunk/libf/dyn3dpar/leapfrog_p.F

    r1907 r1987  
    1717       USE vampir
    1818       USE timer_filtre, ONLY : print_filtre_timer
    19        USE infotrac
     19       USE infotrac, ONLY: nqtot
    2020       USE guide_p_mod, ONLY : guide_main
    2121       USE getparam
    22        USE control_mod
    23 
     22       USE control_mod, ONLY: nday, day_step, planet_type, offline,
     23     &                       iconser, iphysiq, iperiod, dissip_period,
     24     &                       iecri, ip_ebil_dyn, ok_dynzon, ok_dyn_ins,
     25     &                       periodav, ok_dyn_ave, output_grads_dyn,
     26     &                       iapp_tracvl
    2427      IMPLICIT NONE
    2528
     
    7073#include "academic.h"
    7174     
    72       INTEGER         longcles
    73       PARAMETER     ( longcles = 20 )
    74       REAL  clesphy0( longcles )
     75      INTEGER,PARAMETER :: longcles = 20
     76      REAL,INTENT(IN) :: clesphy0( longcles ) ! not used
     77      REAL,INTENT(IN) :: time_0 ! not used
     78
     79c   dynamical variables:
     80      REAL,INTENT(INOUT) :: ucov(ip1jmp1,llm)    ! zonal covariant wind
     81      REAL,INTENT(INOUT) :: vcov(ip1jm,llm)      ! meridional covariant wind
     82      REAL,INTENT(INOUT) :: teta(ip1jmp1,llm)    ! potential temperature
     83      REAL,INTENT(INOUT) :: ps(ip1jmp1)          ! surface pressure (Pa)
     84      REAL,INTENT(INOUT) :: masse(ip1jmp1,llm)   ! air mass
     85      REAL,INTENT(INOUT) :: phis(ip1jmp1)        ! geopotentiat at the surface
     86      REAL,INTENT(INOUT) :: q(ip1jmp1,llm,nqtot) ! advected tracers
     87
     88      REAL,SAVE :: p (ip1jmp1,llmp1  )       ! interlayer pressure
     89      REAL,SAVE :: pks(ip1jmp1)              ! exner at the surface
     90      REAL,SAVE :: pk(ip1jmp1,llm)           ! exner at mid-layer
     91      REAL,SAVE :: pkf(ip1jmp1,llm)          ! filtered exner at mid-layer
     92      REAL,SAVE :: phi(ip1jmp1,llm)          ! geopotential
     93      REAL,SAVE :: w(ip1jmp1,llm)            ! vertical velocity
    7594
    7695      real zqmin,zqmax
    77 
    78 c   variables dynamiques
    79       REAL :: vcov(ip1jm,llm),ucov(ip1jmp1,llm) ! vents covariants
    80       REAL :: teta(ip1jmp1,llm)                 ! temperature potentielle
    81       REAL :: q(ip1jmp1,llm,nqtot)              ! champs advectes
    82       REAL :: ps(ip1jmp1)                       ! pression  au sol
    83       REAL,SAVE :: p (ip1jmp1,llmp1  )               ! pression aux interfac.des couches
    84       REAL,SAVE :: pks(ip1jmp1)                      ! exner au  sol
    85       REAL,SAVE :: pk(ip1jmp1,llm)                   ! exner au milieu des couches
    86       REAL,SAVE :: pkf(ip1jmp1,llm)                  ! exner filt.au milieu des couches
    87       REAL :: masse(ip1jmp1,llm)                ! masse d'air
    88       REAL :: phis(ip1jmp1)                     ! geopotentiel au sol
    89       REAL,SAVE :: phi(ip1jmp1,llm)                  ! geopotentiel
    90       REAL,SAVE :: w(ip1jmp1,llm)                    ! vitesse verticale
    9196
    9297c variables dynamiques intermediaire pour le transport
     
    123128
    124129      REAL  SSUM
    125       REAL time_0
    126130!      REAL,SAVE :: finvmaold(ip1jmp1,llm)
    127131
     
    603607
    604608      IF( forward. OR . leapf )  THEN
    605 cc$OMP PARALLEL DEFAULT(SHARED)
    606 c
     609! Ehouarn: NB: fields sent to advtrac are those at the beginning of the time step
    607610         CALL caladvtrac_p(q,pbaru,pbarv,
    608611     *        p, masse, dq,  teta,
     
    616619
    617620      ENDIF ! of IF( forward. OR . leapf )
    618 cc$OMP END PARALLEL
    619621
    620622c-----------------------------------------------------------------------
     
    907909     $                  ucov, vcov, teta , q   ,ps ,
    908910     $                 dufi, dvfi, dtetafi , dqfi ,dpfi  )
    909 
     911          ! since addfi updates ps(), also update p(), masse() and pk()
     912          CALL pression_p(ip1jmp1,ap,bp,ps,p)
     913c$OMP BARRIER
     914          CALL massdair_p(p,masse)
     915c$OMP BARRIER
     916          if (pressure_exner) then
     917            CALL exner_hyb_p(ip1jmp1,ps,p,alpha,beta,pks,pk,pkf)
     918          else
     919            CALL exner_milieu_p(ip1jmp1,ps,p,beta,pks,pk,pkf)
     920          endif
     921c$OMP BARRIER
     922         
    910923         IF (ok_strato) THEN
    911924           CALL top_bound_p(vcov,ucov,teta,masse,dtphys)
     
    10441057          CALL exner_milieu_p( ip1jmp1, ps, p, beta, pks, pk, pkf )
    10451058        endif
     1059c$OMP BARRIER
     1060        CALL massdair_p(p,masse)
    10461061c$OMP BARRIER
    10471062
Note: See TracChangeset for help on using the changeset viewer.