source: trunk/LMDZ.GENERIC/libf/phystd/thermcell_env.F90 @ 2937

Last change on this file since 2937 was 2230, checked in by aboissinot, 5 years ago

A bug in thermcell_dq is fixed. Now zqt is correctly initialized when tracer h2o_vap
is missing (consistency with flag water is assumed).

File size: 4.0 KB
RevLine 
[2060]1!
2!
3!
[2127]4SUBROUTINE thermcell_env(ngrid,nlay,nq,pq,pt,pu,pv,pplay,pplev,               &
5                         zqt,zql,zt,ztv,zhl,zu,zv,zpopsk,zqs)
6     
7     
8!===============================================================================
9!  Purpose: calcul des caracteristiques de l'environnement necessaires au calcul
10!           des proprietes dans le thermique.
11
12!  Modif 2019/04 (AB alexandre.boissinot@lmd.jussieu.fr)
13
14!  Nota Bene
15!     ql   means "non-gaseous water mass mixing ratio" (liquid and solid)
16!     qv   means "vapor mass mixing ratio"
17!     qt   means "total water mass mixing ratio"
18!     TP   means "potential temperature"
19!     TRPV means "virtual potential temperature with latent heat release" 
20!     TPV  means "virtual potential temperature"
21!     TR   means "temperature with latent heat release"
22!===============================================================================
23     
[2060]24      USE print_control_mod, ONLY: prt_level
25      USE thermcell_mod, ONLY: RKAPPA
[2071]26      USE watercommon_h, ONLY: RLvCp, RETV, Psat_water
[2127]27      USE tracer_h, ONLY: igcm_h2o_vap, igcm_h2o_ice
28      USE callkeys_mod, ONLY: water
[2060]29     
[2127]30      IMPLICIT NONE
[2060]31     
[2127]32     
33!===============================================================================
[2060]34! Declaration
[2127]35!===============================================================================
[2060]36     
[2127]37!     Inputs:
38!     -------
[2060]39     
[2177]40      INTEGER, INTENT(in) :: ngrid
41      INTEGER, INTENT(in) :: nlay
42      INTEGER, INTENT(in) :: nq
[2060]43     
[2177]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
[2060]51     
[2127]52!     Outputs:
53!     --------
[2060]54     
[2177]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
[2060]63     
[2127]64!     Local:
65!     ------
[2060]66     
[2177]67      INTEGER ig, k
[2060]68     
[2177]69      REAL psat                                       ! Dummy argument for Psat_water()
[2060]70     
[2127]71!===============================================================================
[2060]72! Initialization
[2127]73!===============================================================================
[2060]74     
[2127]75      zu(:,:) = pu(:,:)
76      zv(:,:) = pv(:,:)
[2060]77     
[2127]78      zhl(:,:) = pt(:,:) / zpopsk(:,:)
[2060]79     
[2230]80      zqt(:,:) = 0.
[2143]81      zql(:,:) = 0.
82     
[2127]83!===============================================================================
84! Condensation and latent heat release
85!===============================================================================
86     
87      IF (water) THEN
88         
[2230]89         zqt(:,:) = pq(:,:,igcm_h2o_vap)
90         
[2177]91         DO k=1,nlay
[2127]92            DO ig=1,ngrid
[2177]93               CALL Psat_water(pt(ig,k), pplev(ig,k), psat, zqs(ig,k))
[2127]94            ENDDO
[2060]95         ENDDO
[2127]96         
[2177]97         DO k=1,nlay
[2127]98            DO ig=1,ngrid
[2177]99               zql(ig,k) = max(0.,pq(ig,k,igcm_h2o_vap) - zqs(ig,k))
100               zt(ig,k) = pt(ig,k) + RLvCp * zql(ig,k)
101               ztv(ig,k) = zt(ig,k) / zpopsk(ig,k)                            &
102               &         * (1. + RETV * (zqt(ig,k)-zql(ig,k)) - zql(ig,k))
[2127]103            ENDDO
104         ENDDO
105         
106      ELSE
107         
108         zt(:,:) = pt(:,:)
[2143]109         ztv(:,:) = pt(:,:) / zpopsk(:,:)
[2127]110         
111      ENDIF
[2060]112     
113     
114RETURN
115END
Note: See TracBrowser for help on using the repository browser.