Ignore:
Timestamp:
Nov 12, 2019, 11:55:58 AM (5 years ago)
Author:
aboissinot
Message:

Cleanup thermal plums model subroutines
In thermcell_flux, "bidouilles" are modified:

  • now the plumes stop when the updraft fraction is greater than alpha_max
  • e > e_max is no longer permitted
  • b <= incoming mass flux is checked last
File:
1 edited

Legend:

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

    r2143 r2177  
    3838!     -------
    3939     
    40       INTEGER ngrid, nlay, nq
     40      INTEGER, INTENT(in) :: ngrid
     41      INTEGER, INTENT(in) :: nlay
     42      INTEGER, INTENT(in) :: nq
    4143     
    42       REAL pq(ngrid,nlay,nq)                    ! Large scale water
    43       REAL pt(ngrid,nlay)                       ! Large scale temperature
    44       REAL pu(ngrid,nlay)                       ! Large scale zonal wind
    45       REAL pv(ngrid,nlay)                       ! Large scale meridional wind
    46       REAL pplay(ngrid,nlay)                    ! Layers pressure
    47       REAL pplev(ngrid,nlay+1)                  ! Levels pressure
    48       REAL zpopsk(ngrid,nlay)                   ! Exner function
     44      REAL, INTENT(in) :: pq(ngrid,nlay,nq)           ! Large scale water
     45      REAL, INTENT(in) :: pt(ngrid,nlay)              ! Large scale temperature
     46      REAL, INTENT(in) :: pu(ngrid,nlay)              ! Large scale zonal wind
     47      REAL, INTENT(in) :: pv(ngrid,nlay)              ! Large scale meridional wind
     48      REAL, INTENT(in) :: pplay(ngrid,nlay)           ! Layers pressure
     49      REAL, INTENT(in) :: pplev(ngrid,nlay+1)         ! Levels pressure
     50      REAL, INTENT(in) :: zpopsk(ngrid,nlay)          ! Exner function
    4951     
    5052!     Outputs:
    5153!     --------
    5254     
    53       REAL zqt(ngrid,nlay)                      ! qt   environment
    54       REAL zql(ngrid,nlay)                      ! ql  environment
    55       REAL zt(ngrid,nlay)                       ! T    environment
    56       REAL ztv(ngrid,nlay)                      ! TRPV environment
    57       REAL zhl(ngrid,nlay)                      ! TP   environment
    58       REAL zu(ngrid,nlay)                       ! u    environment
    59       REAL zv(ngrid,nlay)                       ! v    environment
    60       REAL zqs(ngrid,nlay)                      ! qsat environment
     55      REAL, INTENT(out) :: zt(ngrid,nlay)             ! T    environment
     56      REAL, INTENT(out) :: ztv(ngrid,nlay)            ! TRPV environment
     57      REAL, INTENT(out) :: zhl(ngrid,nlay)            ! TP   environment
     58      REAL, INTENT(out) :: zu(ngrid,nlay)             ! u    environment
     59      REAL, INTENT(out) :: zv(ngrid,nlay)             ! v    environment
     60      REAL, INTENT(out) :: zqt(ngrid,nlay)            ! qt   environment
     61      REAL, INTENT(out) :: zql(ngrid,nlay)            ! ql   environment
     62      REAL, INTENT(out) :: zqs(ngrid,nlay)            ! qsat environment
    6163     
    6264!     Local:
    6365!     ------
    6466     
    65       INTEGER ig, l
     67      INTEGER ig, k
    6668     
    67       REAL psat                                 ! Dummy argument for Psat_water()
     69      REAL psat                                       ! Dummy argument for Psat_water()
    6870     
    6971!===============================================================================
     
    8587      IF (water) THEN
    8688         
    87          DO l=1,nlay
     89         DO k=1,nlay
    8890            DO ig=1,ngrid
    89                CALL Psat_water(pt(ig,l), pplev(ig,l), psat, zqs(ig,l))
     91               CALL Psat_water(pt(ig,k), pplev(ig,k), psat, zqs(ig,k))
    9092            ENDDO
    9193         ENDDO
    9294         
    93          DO l=1,nlay
     95         DO k=1,nlay
    9496            DO ig=1,ngrid
    95                zql(ig,l) = max(0.,pq(ig,l,igcm_h2o_vap) - zqs(ig,l))
    96                zt(ig,l) = pt(ig,l) + RLvCp * zql(ig,l)
    97                ztv(ig,l) = zt(ig,l) / zpopsk(ig,l)                            &
    98                &         * (1. + RETV * (zqt(ig,l)-zql(ig,l)) - zql(ig,l))
     97               zql(ig,k) = max(0.,pq(ig,k,igcm_h2o_vap) - zqs(ig,k))
     98               zt(ig,k) = pt(ig,k) + RLvCp * zql(ig,k)
     99               ztv(ig,k) = zt(ig,k) / zpopsk(ig,k)                            &
     100               &         * (1. + RETV * (zqt(ig,k)-zql(ig,k)) - zql(ig,k))
    99101            ENDDO
    100102         ENDDO
Note: See TracChangeset for help on using the changeset viewer.