/[lmdze]/trunk/phylmd/concvl.f
ViewVC logotype

Diff of /trunk/phylmd/concvl.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 91 by guez, Wed Mar 26 17:18:58 2014 UTC revision 103 by guez, Fri Aug 29 13:00:05 2014 UTC
# Line 4  module concvl_m Line 4  module concvl_m
4    
5  contains  contains
6    
7    SUBROUTINE concvl(dtime, paprs, play, t, q, u, v, tra, sig1, w01, &    SUBROUTINE concvl(dtime, paprs, play, t, q, u, v, sig1, w01, d_t, d_q, d_u, &
8         d_t, d_q, d_u, d_v, d_tra, rain, snow, kbas, ktop, upwd, dnwd, dnwd0, &         d_v, rain, snow, kbas, ktop, upwd, dnwd, dnwd0, ma, cape, iflag, &
9         ma, cape, tvp, iflag, pbase, bbase, dtvpdt1, dtvpdq1, dplcldt, &         qcondc, wd, pmflxr, pmflxs, da, phi, mp)
        dplcldr, qcondc, wd, pmflxr, pmflxs, da, phi, mp, ntra)  
10    
11      ! From phylmd/concvl.F, version 1.3 2005/04/15 12:36:17      ! From phylmd/concvl.F, version 1.3 2005/04/15 12:36:17
12      ! Author: Z. X. Li (LMD/CNRS)      ! Author: Z. X. Li (LMD/CNRS)
13      ! Date: 1993/08/18      ! Date: 1993 August 18
14      ! Objet : schéma de convection d'Emanuel (1991), interface      ! Objet : schéma de convection d'Emanuel (1991), interface
15      ! (driver commun aux versions 3 et 4)      ! (driver commun aux versions 3 et 4)
16    
# Line 23  contains Line 22  contains
22      USE suphec_m, ONLY: retv, rtt      USE suphec_m, ONLY: retv, rtt
23      USE yoethf_m, ONLY: r2es      USE yoethf_m, ONLY: r2es
24    
     INTEGER, PARAMETER:: ntrac = nqmx - 2  
   
25      REAL, INTENT (IN):: dtime ! pas d'integration (s)      REAL, INTENT (IN):: dtime ! pas d'integration (s)
26      REAL, INTENT (IN):: paprs(klon, klev+1)      REAL, INTENT (IN):: paprs(klon, klev+1)
27      REAL, INTENT (IN):: play(klon, klev)      REAL, INTENT (IN):: play(klon, klev)
28      REAL, intent(in):: t(klon, klev)      REAL, intent(in):: t(klon, klev)
29      real q(klon, klev) ! input vapeur d'eau (en kg/kg)      real, intent(in):: q(klon, klev) ! vapeur d'eau (en kg/kg)
30      real, INTENT (IN):: u(klon, klev), v(klon, klev)      real, INTENT (IN):: u(klon, klev), v(klon, klev)
     REAL, INTENT (IN):: tra(klon, klev, ntrac)  
     INTEGER, intent(in):: ntra ! number of tracers  
31      REAL, intent(inout):: sig1(klon, klev), w01(klon, klev)      REAL, intent(inout):: sig1(klon, klev), w01(klon, klev)
32      REAL pmflxr(klon, klev+1), pmflxs(klon, klev+1)      REAL, intent(out):: d_t(klon, klev)
33        REAL, intent(out):: d_q(klon, klev) ! increment de la vapeur d'eau
34      REAL d_t(klon, klev), d_q(klon, klev), d_u(klon, klev), d_v(klon, &      REAL, intent(out):: d_u(klon, klev), d_v(klon, klev)
35           klev)      REAL, intent(out):: rain(klon) ! pluie (mm/s)
36      ! d_q-----output-R-increment de la vapeur d'eau      REAL, intent(out):: snow(klon) ! neige (mm/s)
     REAL d_tra(klon, klev, ntrac)  
     REAL rain(klon), snow(klon)  
     ! rain----output-R-la pluie (mm/s)  
     ! snow----output-R-la neige (mm/s)  
   
37      INTEGER kbas(klon), ktop(klon)      INTEGER kbas(klon), ktop(klon)
     REAL em_ph(klon, klev+1), em_p(klon, klev)  
38    
39      REAL, intent(out):: upwd(klon, klev)      REAL, intent(out):: upwd(klon, klev)
40      ! saturated updraft mass flux (kg/m**2/s)      ! saturated updraft mass flux (kg/m**2/s)
# Line 56  contains Line 45  contains
45      real, intent(out):: dnwd0(klon, klev)      real, intent(out):: dnwd0(klon, klev)
46      ! unsaturated downdraft mass flux (kg/m**2/s)      ! unsaturated downdraft mass flux (kg/m**2/s)
47    
48      REAL ma(klon, klev), cape(klon), tvp(klon, klev)      REAL ma(klon, klev), cape(klon)
49      ! Cape----output-R-CAPE (J/kg)      ! Cape----output-R-CAPE (J/kg)
50      ! Tvp-----output-R-Temperature virtuelle d'une parcelle soulevee  
     !                  adiabatiquement a partir du niveau 1 (K)  
     REAL da(klon, klev), phi(klon, klev, klev), mp(klon, klev)  
51      INTEGER iflag(klon)      INTEGER iflag(klon)
     REAL pbase(klon), bbase(klon)  
     REAL dtvpdt1(klon, klev), dtvpdq1(klon, klev)  
     REAL dplcldt(klon), dplcldr(klon)  
52      REAL qcondc(klon, klev)      REAL qcondc(klon, klev)
53      REAL wd(klon)      REAL wd(klon)
54        REAL pmflxr(klon, klev+1), pmflxs(klon, klev+1)
55        REAL, intent(inout):: da(klon, klev), phi(klon, klev, klev), mp(klon, klev)
56    
57      REAL zx_t, zdelta, zx_qs, zcor      ! Local:
58    
59      INTEGER i, k, itra      REAL em_ph(klon, klev+1), em_p(klon, klev)
60        REAL zx_t, zx_qs, zcor
61        INTEGER i, k
62      REAL qs(klon, klev)      REAL qs(klon, klev)
63      REAL, save:: cbmf(klon)      REAL, save:: cbmf(klon)
64      INTEGER:: ifrst = 0      INTEGER:: ifrst = 0
# Line 104  contains Line 92  contains
92         DO k = 1, klev         DO k = 1, klev
93            DO i = 1, klon            DO i = 1, klon
94               zx_t = t(i, k)               zx_t = t(i, k)
95               zdelta = max(0., sign(1., rtt-zx_t))               zx_qs = min(0.5, r2es*foeew(zx_t, rtt >= zx_t)/em_p(i, k)/100.0)
              zx_qs = min(0.5, r2es*foeew(zx_t, zdelta)/em_p(i, k)/100.0)  
96               zcor = 1./(1.-retv*zx_qs)               zcor = 1./(1.-retv*zx_qs)
97               qs(i, k) = zx_qs*zcor               qs(i, k) = zx_qs*zcor
98            END DO            END DO
# Line 116  contains Line 103  contains
103         DO k = 1, klev         DO k = 1, klev
104            DO i = 1, klon            DO i = 1, klon
105               zx_t = t(i, k)               zx_t = t(i, k)
106               zdelta = max(0., sign(1., rtt-zx_t))               zx_qs = r2es*foeew(zx_t, rtt >= zx_t)/em_p(i, k)/100.0
              zx_qs = r2es*foeew(zx_t, zdelta)/em_p(i, k)/100.0  
107               zx_qs = min(0.5, zx_qs)               zx_qs = min(0.5, zx_qs)
108               zcor = 1./(1.-retv*zx_qs)               zcor = 1./(1.-retv*zx_qs)
109               zx_qs = zx_qs*zcor               zx_qs = zx_qs*zcor
# Line 126  contains Line 112  contains
112         END DO         END DO
113      END IF      END IF
114    
115      CALL cv_driver(klon, klev, klev+1, ntra, t, q, qs, u, v, tra, em_p, &      CALL cv_driver(t, q, qs, u, v, em_p, em_ph, iflag, d_t, d_q, &
116           em_ph, iflag, d_t, d_q, d_u, d_v, d_tra, rain, pmflxr, cbmf, sig1, &           d_u, d_v, rain, pmflxr, cbmf, sig1, w01, kbas, ktop, dtime, ma, &
117           w01, kbas, ktop, dtime, ma, upwd, dnwd, dnwd0, qcondc, wd, cape, &           upwd, dnwd, dnwd0, qcondc, wd, cape, da, phi, mp)
          da, phi, mp)  
118    
119      DO i = 1, klon      DO i = 1, klon
120         rain(i) = rain(i)/86400.         rain(i) = rain(i)/86400.
# Line 143  contains Line 128  contains
128            d_v(i, k) = dtime*d_v(i, k)            d_v(i, k) = dtime*d_v(i, k)
129         END DO         END DO
130      END DO      END DO
     DO itra = 1, ntra  
        DO k = 1, klev  
           DO i = 1, klon  
              d_tra(i, k, itra) = dtime*d_tra(i, k, itra)  
           END DO  
        END DO  
     END DO  
     ! les traceurs ne sont pas mis dans cette version de convect4:  
     IF (iflag_con==4) THEN  
        DO itra = 1, ntra  
           DO k = 1, klev  
              DO i = 1, klon  
                 d_tra(i, k, itra) = 0.  
              END DO  
           END DO  
        END DO  
     END IF  
131    
132    END SUBROUTINE concvl    END SUBROUTINE concvl
133    

Legend:
Removed from v.91  
changed lines
  Added in v.103

  ViewVC Help
Powered by ViewVC 1.1.21