Ignore:
Timestamp:
Jan 30, 2020, 10:15:32 AM (5 years ago)
Author:
aboissinot
Message:

Fix a bug in thermcell_dv2: now the plume height (zmin-zmax) is used for computations
instead of maximal altitude (zmax).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.GENERIC/libf/phystd/thermcell_dv2.F90

    r2177 r2231  
    88!===============================================================================
    99!
    10 !   Calcul du transport verticale dans la couche limite en presence
     10!   Calcul du transport vertical dans la couche limite en presence
    1111!   de "thermiques" explicitement representes
    12 !   calcul du dq/dt une fois qu'on connait les ascendances
     12!   Calcul du dq/dt une fois qu'on connait les ascendances
    1313!
    1414! Vectorisation, FH : 2010/03/08
    1515!
    1616!===============================================================================
    17      
    18       USE print_control_mod, ONLY: prt_level, lunout
    1917     
    2018      IMPLICIT none
     
    4543!     --------
    4644     
    47       REAL, INTENT(out) :: ua(ngrid,nlay)
    48       REAL, INTENT(out) :: va(ngrid,nlay)
    49       REAL, INTENT(out) :: du(ngrid,nlay)
    50       REAL, INTENT(out) :: dv(ngrid,nlay)
     45      REAL, INTENT(out) :: ua(ngrid,nlay)       ! u in the plume
     46      REAL, INTENT(out) :: va(ngrid,nlay)       ! v in the plume
     47      REAL, INTENT(out) :: du(ngrid,nlay)       ! large scale u variation
     48      REAL, INTENT(out) :: dv(ngrid,nlay)       ! large scale v variation
    5149     
    5250!     Local:
     
    9189         DO ig=1,ngrid
    9290            ltherm(ig,l) = (fm(ig,l+1) + detr(ig,l)) * ptimestep > 1.e-5 * masse(ig,l)
    93             IF (ltherm(ig,l).and.(zmax(ig) > 0.)) THEN
    94                gamma0(ig,l) = masse(ig,l) * 0.5 / zmax(ig)                    &
     91!            IF (ltherm(ig,l).and.(zmax(ig) > 0.)) THEN
     92            IF (ltherm(ig,l).and.(plume_height(ig) > 0.)) THEN
     93!               gamma0(ig,l) = masse(ig,l) * 0.5 / zmax(ig)                    &
     94               gamma0(ig,l) = masse(ig,l) * 0.5 / plume_height(ig)            &
    9595               &            * sqrt(0.5 * (fraca(ig,l+1) + fraca(ig,l)))
    9696            ELSE
     
    110110         DO ig=1,ngrid
    111111            IF (ltherm(ig,l)) THEN
    112                dua(ig,l)=ua(ig,l-1)-u(ig,l-1)
    113                dva(ig,l)=va(ig,l-1)-v(ig,l-1)
     112               dua(ig,l) = ua(ig,l-1) - u(ig,l-1)
     113               dva(ig,l) = va(ig,l-1) - v(ig,l-1)
    114114            ELSE
    115                ua(ig,l)=u(ig,l)
    116                va(ig,l)=v(ig,l)
    117                ue(ig,l)=u(ig,l)
    118                ve(ig,l)=v(ig,l)
     115               ua(ig,l) = u(ig,l)
     116               va(ig,l) = v(ig,l)
     117               ue(ig,l) = u(ig,l)
     118               ve(ig,l) = v(ig,l)
    119119            ENDIF
    120120         ENDDO
     
    169169      DO ig=1,ngrid
    170170         wud(ig,1) = 0.
     171         wvd(ig,1) = 0.
    171172         wud(ig,nlay+1) = 0.
    172          wvd(ig,1) = 0.
    173173         wvd(ig,nlay+1) = 0.
    174174      ENDDO
Note: See TracChangeset for help on using the changeset viewer.