/[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 178 by guez, Fri Mar 11 18:47:26 2016 UTC revision 180 by guez, Tue Mar 15 17:07:47 2016 UTC
# Line 5  module concvl_m Line 5  module concvl_m
5  contains  contains
6    
7    SUBROUTINE concvl(dtime, paprs, play, t, q, u, v, sig1, w01, d_t, d_q, d_u, &    SUBROUTINE concvl(dtime, paprs, play, t, q, u, v, sig1, w01, d_t, d_q, d_u, &
8         d_v, rain, snow, kbas, ktop, upwd, dnwd, dnwd0, ma, cape, iflag, &         d_v, rain, snow_con, kbas, itop_con, upwd, dnwd, dnwd0, ma, cape, &
9         qcondc, wd, pmflxr, pmflxs, da, phi, mp)         iflag, qcondc, wd, pmflxr, 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 August 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    
     use clesphys2, only: iflag_con  
17      use cv_driver_m, only: cv_driver      use cv_driver_m, only: cv_driver
18      USE dimphy, ONLY: klev, klon      USE dimphy, ONLY: klev, klon
19      USE fcttre, ONLY: foeew      USE fcttre, ONLY: foeew
# Line 22  contains Line 21  contains
21      USE yoethf_m, ONLY: r2es      USE yoethf_m, ONLY: r2es
22    
23      REAL, INTENT (IN):: dtime ! pas d'integration (s)      REAL, INTENT (IN):: dtime ! pas d'integration (s)
24      REAL, INTENT (IN):: paprs(klon, klev+1)      REAL, INTENT (IN):: paprs(klon, klev + 1)
25      REAL, INTENT (IN):: play(klon, klev)      REAL, INTENT (IN):: play(klon, klev)
26      REAL, intent(in):: t(klon, klev)      REAL, intent(in):: t(klon, klev)
27      real, intent(in):: q(klon, klev) ! vapeur d'eau (en kg/kg)      real, intent(in):: q(klon, klev) ! vapeur d'eau (en kg / kg)
28      real, INTENT (IN):: u(klon, klev), v(klon, klev)      real, INTENT (IN):: u(klon, klev), v(klon, klev)
29      REAL, intent(inout):: sig1(klon, klev), w01(klon, klev)      REAL, intent(inout):: sig1(klon, klev), w01(klon, klev)
30      REAL, intent(out):: d_t(klon, klev)      REAL, intent(out):: d_t(klon, klev)
31      REAL, intent(out):: d_q(klon, klev) ! increment de la vapeur d'eau      REAL, intent(out):: d_q(klon, klev) ! increment de la vapeur d'eau
32      REAL, intent(out):: d_u(klon, klev), d_v(klon, klev)      REAL, intent(out):: d_u(klon, klev), d_v(klon, klev)
33      REAL, intent(out):: rain(klon) ! pluie (mm/s)      REAL, intent(out):: rain(klon) ! pluie (mm / s)
34      REAL, intent(out):: snow(klon) ! neige (mm/s)      REAL, intent(out):: snow_con(klon) ! neige (mm / s)
35      INTEGER kbas(klon), ktop(klon)      INTEGER, intent(out):: kbas(klon)
36        integer itop_con(klon)
37    
38      REAL, intent(out):: upwd(klon, klev)      REAL, intent(out):: upwd(klon, klev)
39      ! saturated updraft mass flux (kg/m**2/s)      ! saturated updraft mass flux (kg / m2 / s)
40    
41      real, intent(out):: dnwd(klon, klev)      real, intent(out):: dnwd(klon, klev)
42      ! saturated downdraft mass flux (kg/m**2/s)      ! saturated downdraft mass flux (kg / m2 / s)
43    
44      real, intent(out):: dnwd0(klon, klev)      real, intent(out):: dnwd0(klon, klev)
45      ! unsaturated downdraft mass flux (kg/m**2/s)      ! unsaturated downdraft mass flux (kg / m2 / s)
   
     REAL ma(klon, klev), cape(klon)  
     ! Cape----output-R-CAPE (J/kg)  
46    
47        REAL ma(klon, klev)
48        real cape(klon) ! output (J / kg)
49      INTEGER iflag(klon)      INTEGER iflag(klon)
50      REAL qcondc(klon, klev)      REAL qcondc(klon, klev)
51      REAL wd(klon)      REAL wd(klon)
52      REAL pmflxr(klon, klev+1), pmflxs(klon, klev+1)      REAL pmflxr(klon, klev + 1)
53      REAL, intent(inout):: da(klon, klev), phi(klon, klev, klev), mp(klon, klev)      REAL, intent(inout):: da(klon, klev), phi(klon, klev, klev), mp(klon, klev)
54    
55      ! Local:      ! Local:
56        REAL zx_qs, cor
     REAL em_ph(klon, klev+1), em_p(klon, klev)  
     REAL zx_t, zx_qs, zcor  
57      INTEGER i, k      INTEGER i, k
58      REAL qs(klon, klev)      REAL qs(klon, klev)
59      REAL, save:: cbmf(klon)      REAL, save:: cbmf(klon)
# Line 64  contains Line 61  contains
61    
62      !-----------------------------------------------------------------      !-----------------------------------------------------------------
63    
64      snow = 0      snow_con = 0.
65    
66      IF (ifrst==0) THEN      IF (ifrst == 0) THEN
67         ifrst = 1         ifrst = 1
68         DO i = 1, klon         cbmf = 0.
           cbmf(i) = 0.  
        END DO  
69      END IF      END IF
70    
     DO k = 1, klev + 1  
        DO i = 1, klon  
           em_ph(i, k) = paprs(i, k)/100.0  
           pmflxs(i, k) = 0.  
        END DO  
     END DO  
   
71      DO k = 1, klev      DO k = 1, klev
72         DO i = 1, klon         DO i = 1, klon
73            em_p(i, k) = play(i, k)/100.0            zx_qs = min(0.5, r2es * foeew(t(i, k), rtt >= t(i, k)) / play(i, k))
74         END DO            cor = 1. / (1. - retv * zx_qs)
75      END DO            qs(i, k) = zx_qs * cor
   
   
     IF (iflag_con==4) THEN  
        DO k = 1, klev  
           DO i = 1, klon  
              zx_t = t(i, k)  
              zx_qs = min(0.5, r2es*foeew(zx_t, rtt >= zx_t)/em_p(i, k)/100.0)  
              zcor = 1./(1.-retv*zx_qs)  
              qs(i, k) = zx_qs*zcor  
           END DO  
        END DO  
     ELSE  
        ! iflag_con=3 (modification de puristes qui fait la  
        ! diff\'erence pour la convergence numerique)  
        DO k = 1, klev  
           DO i = 1, klon  
              zx_t = t(i, k)  
              zx_qs = r2es*foeew(zx_t, rtt >= zx_t)/em_p(i, k)/100.0  
              zx_qs = min(0.5, zx_qs)  
              zcor = 1./(1.-retv*zx_qs)  
              zx_qs = zx_qs*zcor  
              qs(i, k) = zx_qs  
           END DO  
76         END DO         END DO
     END IF  
   
     CALL cv_driver(t, q, qs, u, v, em_p, em_ph, iflag, d_t, d_q, d_u, d_v, &  
          rain, pmflxr, cbmf, sig1, w01, kbas, ktop, dtime, ma, upwd, dnwd, &  
          dnwd0, qcondc, wd, cape, da, phi, mp)  
   
     DO i = 1, klon  
        rain(i) = rain(i)/86400.  
77      END DO      END DO
78    
79      DO k = 1, klev      CALL cv_driver(t, q, qs, u, v, play / 100., paprs / 100., iflag, d_t, &
80         DO i = 1, klon           d_q, d_u, d_v, rain, pmflxr, cbmf, sig1, w01, kbas, itop_con, dtime, &
81            d_t(i, k) = dtime*d_t(i, k)           ma, upwd, dnwd, dnwd0, qcondc, wd, cape, da, phi, mp)
82            d_q(i, k) = dtime*d_q(i, k)  
83            d_u(i, k) = dtime*d_u(i, k)      rain = rain / 86400.
84            d_v(i, k) = dtime*d_v(i, k)      d_t = dtime * d_t
85         END DO      d_q = dtime * d_q
86      END DO      d_u = dtime * d_u
87        d_v = dtime * d_v
88    
89    END SUBROUTINE concvl    END SUBROUTINE concvl
90    

Legend:
Removed from v.178  
changed lines
  Added in v.180

  ViewVC Help
Powered by ViewVC 1.1.21