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

Diff of /trunk/phylmd/concvl.f

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

trunk/libf/phylmd/concvl.f90 revision 52 by guez, Fri Sep 23 12:28:01 2011 UTC trunk/phylmd/concvl.f revision 99 by guez, Wed Jul 2 18:39:15 2014 UTC
# Line 4  module concvl_m Line 4  module concvl_m
4    
5  contains  contains
6    
7    SUBROUTINE concvl(iflag_con, dtime, paprs, pplay, t, q, u, v, tra, &    SUBROUTINE concvl(dtime, paprs, play, t, q, u, v, sig1, w01, d_t, d_q, d_u, &
8         ntra, work1, work2, d_t, d_q, d_u, d_v, d_tra, rain, snow, kbas, &         d_v, rain, snow, kbas, ktop, upwd, dnwd, dnwd0, ma, cape, iflag, &
9         ktop, upwd, dnwd, dnwdbis, ma, cape, tvp, iflag, pbase, bbase, &         qcondc, wd, pmflxr, pmflxs, da, phi, mp)
        dtvpdt1, dtvpdq1, dplcldt, dplcldr, qcondc, wd, pmflxr, pmflxs, &  
        da, phi, mp)  
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/08/18
14      ! Objet: schéma de convection de Emanuel (1991) interface      ! Objet : schéma de convection d'Emanuel (1991), interface
15        ! (driver commun aux versions 3 et 4)
     USE dimens_m, ONLY : nqmx  
     USE dimphy, ONLY : klev, klon  
     USE suphec_m, ONLY : retv, rtt  
     USE yoethf_m, ONLY : r2es  
     USE fcttre, ONLY : foeew  
     use cv_driver_m, only: cv_driver  
   
     ! Arguments:  
     ! dtime--input-R-pas d'integration (s)  
     ! s-------input-R-la valeur "s" pour chaque couche  
     ! sigs----input-R-la valeur "sigma" de chaque couche  
     ! sig-----input-R-la valeur de "sigma" pour chaque niveau  
     ! psolpa--input-R-la pression au sol (en Pa)  
     ! pskapa--input-R-exponentiel kappa de psolpa  
     ! h-------input-R-enthalpie potentielle (Cp*T/P**kappa)  
     ! q-------input-R-vapeur d'eau (en kg/kg)  
   
     ! work*: input et output: deux variables de travail,  
     !                            on peut les mettre a 0 au debut  
     ! ALE-----input-R-energie disponible pour soulevement  
16    
17      ! d_h-----output-R-increment de l'enthalpie potentielle (h)      use clesphys2, only: iflag_con
18      ! d_q-----output-R-increment de la vapeur d'eau      use cv_driver_m, only: cv_driver
19      ! rain----output-R-la pluie (mm/s)      USE dimens_m, ONLY: nqmx
20      ! snow----output-R-la neige (mm/s)      USE dimphy, ONLY: klev, klon
21      ! upwd----output-R-saturated updraft mass flux (kg/m**2/s)      USE fcttre, ONLY: foeew
22      ! dnwd----output-R-saturated downdraft mass flux (kg/m**2/s)      USE suphec_m, ONLY: retv, rtt
23      ! dnwd0---output-R-unsaturated downdraft mass flux (kg/m**2/s)      USE yoethf_m, ONLY: r2es
24      ! Cape----output-R-CAPE (J/kg)  
25      ! Tvp-----output-R-Temperature virtuelle d'une parcelle soulevee      REAL, INTENT (IN):: dtime ! pas d'integration (s)
26      !                  adiabatiquement a partir du niveau 1 (K)      REAL, INTENT (IN):: paprs(klon, klev+1)
27      ! deltapb-output-R-distance entre LCL et base de la colonne (<0 ;      REAL, INTENT (IN):: play(klon, klev)
     !  Pa)  
     ! Ice_flag-input-L-TRUE->prise en compte de la thermodynamique de  
     !  la glace  
   
     INTEGER ntrac  
     PARAMETER (ntrac=nqmx-2)  
   
     INTEGER, INTENT (IN) :: iflag_con  
   
     REAL, INTENT (IN) :: dtime  
     REAL, INTENT (IN) :: paprs(klon, klev+1)  
     REAL, INTENT (IN) :: pplay(klon, klev)  
28      REAL, intent(in):: t(klon, klev)      REAL, intent(in):: t(klon, klev)
29      real q(klon, klev), u(klon, klev), v(klon, klev)      real q(klon, klev) ! input vapeur d'eau (en kg/kg)
30      REAL, INTENT (IN):: tra(klon, klev, ntrac)      real, INTENT (IN):: u(klon, klev), v(klon, klev)
31      INTEGER ntra      REAL, intent(inout):: sig1(klon, klev), w01(klon, klev)
     REAL work1(klon, klev), work2(klon, klev)  
     REAL pmflxr(klon, klev+1), pmflxs(klon, klev+1)  
32    
33      REAL d_t(klon, klev), d_q(klon, klev), d_u(klon, klev), d_v(klon, &      REAL d_t(klon, klev), d_q(klon, klev), d_u(klon, klev), d_v(klon, &
34           klev)           klev)
35      REAL d_tra(klon, klev, ntrac)      ! d_q-----output-R-increment de la vapeur d'eau
36    
37      REAL rain(klon), snow(klon)      REAL rain(klon), snow(klon)
38        ! rain----output-R-la pluie (mm/s)
39        ! snow----output-R-la neige (mm/s)
40    
41      INTEGER kbas(klon), ktop(klon)      INTEGER kbas(klon), ktop(klon)
42      REAL em_ph(klon, klev+1), em_p(klon, klev)  
43      REAL upwd(klon, klev), dnwd(klon, klev), dnwdbis(klon, klev)      REAL, intent(out):: upwd(klon, klev)
44      REAL ma(klon, klev), cape(klon), tvp(klon, klev)      ! saturated updraft mass flux (kg/m**2/s)
45      REAL da(klon, klev), phi(klon, klev, klev), mp(klon, klev)  
46        real, intent(out):: dnwd(klon, klev)
47        ! saturated downdraft mass flux (kg/m**2/s)
48    
49        real, intent(out):: dnwd0(klon, klev)
50        ! unsaturated downdraft mass flux (kg/m**2/s)
51    
52        REAL ma(klon, klev), cape(klon)
53        ! Cape----output-R-CAPE (J/kg)
54    
55      INTEGER iflag(klon)      INTEGER iflag(klon)
     REAL pbase(klon), bbase(klon)  
     REAL dtvpdt1(klon, klev), dtvpdq1(klon, klev)  
     REAL dplcldt(klon), dplcldr(klon)  
56      REAL qcondc(klon, klev)      REAL qcondc(klon, klev)
57      REAL wd(klon)      REAL wd(klon)
58        REAL pmflxr(klon, klev+1), pmflxs(klon, klev+1)
59        REAL, intent(inout):: da(klon, klev), phi(klon, klev, klev), mp(klon, klev)
60    
61      REAL zx_t, zdelta, zx_qs, zcor      ! Local:
62    
63      INTEGER i, k, itra      REAL em_ph(klon, klev+1), em_p(klon, klev)
64        REAL zx_t, zdelta, zx_qs, zcor
65        INTEGER i, k
66      REAL qs(klon, klev)      REAL qs(klon, klev)
67      REAL cbmf(klon)      REAL, save:: cbmf(klon)
68      SAVE cbmf      INTEGER:: ifrst = 0
     INTEGER ifrst  
     SAVE ifrst  
     DATA ifrst/0/  
69    
70      !-----------------------------------------------------------------      !-----------------------------------------------------------------
71    
72      snow(:) = 0      snow = 0
73    
74      IF (ifrst==0) THEN      IF (ifrst==0) THEN
75         ifrst = 1         ifrst = 1
# Line 113  contains Line 87  contains
87    
88      DO k = 1, klev      DO k = 1, klev
89         DO i = 1, klon         DO i = 1, klon
90            em_p(i, k) = pplay(i, k)/100.0            em_p(i, k) = play(i, k)/100.0
91         END DO         END DO
92      END DO      END DO
93    
# Line 144  contains Line 118  contains
118         END DO         END DO
119      END IF      END IF
120    
121      ! Main driver for convection:      CALL cv_driver(klon, klev, t, q, qs, u, v, em_p, em_ph, iflag, d_t, d_q, &
122      !           iflag_con = 3  -> equivalent to convect3           d_u, d_v, rain, pmflxr, cbmf, sig1, w01, kbas, ktop, dtime, ma, &
123      !           iflag_con = 4  -> equivalent to convect1/2           upwd, dnwd, dnwd0, qcondc, wd, cape, da, phi, mp)
   
     CALL cv_driver(klon, klev, klev+1, ntra, iflag_con, t, q, qs, u, v, &  
          tra, em_p, em_ph, iflag, d_t, d_q, d_u, d_v, d_tra, rain, &  
          pmflxr, cbmf, work1, work2, kbas, ktop, dtime, ma, upwd, dnwd, &  
          dnwdbis, qcondc, wd, cape, da, phi, mp)  
124    
125      DO i = 1, klon      DO i = 1, klon
126         rain(i) = rain(i)/86400.         rain(i) = rain(i)/86400.
# Line 165  contains Line 134  contains
134            d_v(i, k) = dtime*d_v(i, k)            d_v(i, k) = dtime*d_v(i, k)
135         END DO         END DO
136      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  
137    
138    END SUBROUTINE concvl    END SUBROUTINE concvl
139    

Legend:
Removed from v.52  
changed lines
  Added in v.99

  ViewVC Help
Powered by ViewVC 1.1.21