/[lmdze]/trunk/Sources/phylmd/cv_driver.f
ViewVC logotype

Diff of /trunk/Sources/phylmd/cv_driver.f

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

revision 198 by guez, Tue May 31 16:17:35 2016 UTC revision 205 by guez, Tue Jun 21 15:16:03 2016 UTC
# Line 6  contains Line 6  contains
6    
7    SUBROUTINE cv_driver(t1, q1, qs1, u1, v1, p1, ph1, iflag1, ft1, fq1, fu1, &    SUBROUTINE cv_driver(t1, q1, qs1, u1, v1, p1, ph1, iflag1, ft1, fq1, fu1, &
8         fv1, precip1, VPrecip1, sig1, w01, icb1, inb1, Ma1, upwd1, dnwd1, &         fv1, precip1, VPrecip1, sig1, w01, icb1, inb1, Ma1, upwd1, dnwd1, &
9         dnwd01, qcondc1, cape1, da1, phi1, mp1)         qcondc1, cape1, da1, phi1, mp1)
10    
11      ! From LMDZ4/libf/phylmd/cv_driver.F, version 1.3, 2005/04/15 12:36:17      ! From LMDZ4/libf/phylmd/cv_driver.F, version 1.3, 2005/04/15 12:36:17
12      ! Main driver for convection      ! Main driver for convection
# Line 28  contains Line 28  contains
28      use cv30_undilute2_m, only: cv30_undilute2      use cv30_undilute2_m, only: cv30_undilute2
29      use cv30_unsat_m, only: cv30_unsat      use cv30_unsat_m, only: cv30_unsat
30      use cv30_yield_m, only: cv30_yield      use cv30_yield_m, only: cv30_yield
     use cv_thermo_m, only: cv_thermo  
31      USE dimphy, ONLY: klev, klon      USE dimphy, ONLY: klev, klon
32    
33      real, intent(in):: t1(klon, klev) ! temperature (K)      real, intent(in):: t1(klon, klev) ! temperature, in K
34      real, intent(in):: q1(klon, klev) ! specific humidity      real, intent(in):: q1(klon, klev) ! specific humidity
35      real, intent(in):: qs1(klon, klev) ! saturation specific humidity      real, intent(in):: qs1(klon, klev) ! saturation specific humidity
36    
37      real, intent(in):: u1(klon, klev), v1(klon, klev)      real, intent(in):: u1(klon, klev), v1(klon, klev)
38      ! zonal wind and meridional velocity (m/s)      ! zonal wind and meridional velocity (m/s)
39    
40      real, intent(in):: p1(klon, klev) ! full level pressure (hPa)      real, intent(in):: p1(klon, klev) ! full level pressure, in hPa
41    
42      real, intent(in):: ph1(klon, klev + 1)      real, intent(in):: ph1(klon, klev + 1)
43      ! Half level pressure (hPa). These pressures are defined at levels      ! Half level pressure, in hPa. These pressures are defined at levels
44      ! intermediate between those of P1, T1, Q1 and QS1. The first      ! intermediate between those of P1, T1, Q1 and QS1. The first
45      ! value of PH should be greater than (i.e. at a lower level than)      ! value of PH should be greater than (i.e. at a lower level than)
46      ! the first value of the array P1.      ! the first value of the array P1.
# Line 95  contains Line 94  contains
94      ! total upward mass flux (adiabatic + mixed)      ! total upward mass flux (adiabatic + mixed)
95    
96      real, intent(out):: dnwd1(klon, klev) ! saturated downward mass flux (mixed)      real, intent(out):: dnwd1(klon, klev) ! saturated downward mass flux (mixed)
     real, intent(out):: dnwd01(klon, klev) ! unsaturated downward mass flux  
97    
98      real, intent(out):: qcondc1(klon, klev)      real, intent(out):: qcondc1(klon, klev)
99      ! in-cloud mixing ratio of condensed water      ! in-cloud mixing ratio of condensed water
100    
101      real, intent(out):: cape1(klon)      real, intent(out):: cape1(klon)
102      real, intent(inout):: da1(klon, klev), phi1(klon, klev, klev)      real, intent(out):: da1(:, :) ! (klon, klev)
103      real, intent(inout):: mp1(klon, klev)      real, intent(out):: phi1(:, :, :) ! (klon, klev, klev)
104    
105        real, intent(out):: mp1(:, :) ! (klon, klev) Mass flux of the
106        ! unsaturated downdraft, defined positive downward, in kg m-2
107        ! s-1. M_p in Emanuel (1991 928).
108    
109      ! Local:      ! Local:
110    
111      real da(klon, klev), phi(klon, klev, klev), mp(klon, klev)      real da(klon, klev), phi(klon, klev, klev)
112    
113        real, allocatable:: mp(:, :) ! (ncum, nl) Mass flux of the
114        ! unsaturated downdraft, defined positive downward, in kg m-2
115        ! s-1. M_p in Emanuel (1991 928).
116    
117      integer i, k, il      integer i, k, il
118      integer icbs1(klon)      integer icbs1(klon)
119      real plcl1(klon)      real plcl1(klon)
# Line 115  contains Line 122  contains
122      real gznk1(klon)      real gznk1(klon)
123      real pbase1(klon)      real pbase1(klon)
124      real buoybase1(klon)      real buoybase1(klon)
125      real lv1(klon, klev)  
126      real cpn1(klon, klev)      real lv1(klon, nl)
127        ! specific latent heat of vaporization of water, in J kg-1
128    
129        real cpn1(klon, nl)
130        ! specific heat capacity at constant pressure of humid air, in J K-1 kg-1
131    
132      real tv1(klon, klev)      real tv1(klon, klev)
133      real gz1(klon, klev)      real gz1(klon, klev)
134      real hm1(klon, klev)      real hm1(klon, klev)
# Line 124  contains Line 136  contains
136      real tp1(klon, klev)      real tp1(klon, klev)
137      real tvp1(klon, klev)      real tvp1(klon, klev)
138      real clw1(klon, klev)      real clw1(klon, klev)
139      real th1(klon, klev)      real th1(klon, nl) ! potential temperature, in K
140      integer ncum      integer ncum
141    
142      ! Compressed fields:      ! Compressed fields:
# Line 132  contains Line 144  contains
144      integer, allocatable:: icb(:) ! (ncum)      integer, allocatable:: icb(:) ! (ncum)
145      integer nent(klon, klev)      integer nent(klon, klev)
146      integer icbs(klon)      integer icbs(klon)
147      integer inb(klon)  
148        integer, allocatable:: inb(:) ! (ncum)
149        ! first model level above the level of neutral buoyancy of the
150        ! parcel (1 <= inb <= nl - 1)
151    
152      real, allocatable:: plcl(:) ! (ncum)      real, allocatable:: plcl(:) ! (ncum)
153      real tnk(klon), qnk(klon), gznk(klon)      real tnk(klon), qnk(klon), gznk(klon)
154      real t(klon, klev), q(klon, klev), qs(klon, klev)      real t(klon, klev), q(klon, klev), qs(klon, klev)
155      real u(klon, klev), v(klon, klev)      real u(klon, klev), v(klon, klev)
156      real gz(klon, klev), h(klon, klev), lv(klon, klev), cpn(klon, klev)      real gz(klon, klev), h(klon, klev)
157    
158        real, allocatable:: lv(:, :) ! (ncum, nl)
159        ! specific latent heat of vaporization of water, in J kg-1
160    
161        real, allocatable:: cpn(:, :) ! (ncum, nl)
162        ! specific heat capacity at constant pressure of humid air, in J K-1 kg-1
163    
164      real p(klon, klev) ! pressure at full level, in hPa      real p(klon, klev) ! pressure at full level, in hPa
165      real ph(klon, klev + 1), tv(klon, klev), tp(klon, klev)      real ph(klon, klev + 1), tv(klon, klev), tp(klon, klev)
166      real clw(klon, klev)      real clw(klon, klev)
167      real pbase(klon), buoybase(klon), th(klon, klev)      real pbase(klon), buoybase(klon)
168        real, allocatable:: th(:, :) ! (ncum, nl)
169      real tvp(klon, klev)      real tvp(klon, klev)
170      real sig(klon, klev), w0(klon, klev)      real sig(klon, klev), w0(klon, klev)
171      real hp(klon, klev), ep(klon, klev)      real hp(klon, klev), ep(klon, klev)
# Line 157  contains Line 181  contains
181      real, allocatable:: b(:, :) ! (ncum, nl - 1)      real, allocatable:: b(:, :) ! (ncum, nl - 1)
182      real ft(klon, klev), fq(klon, klev)      real ft(klon, klev), fq(klon, klev)
183      real fu(klon, klev), fv(klon, klev)      real fu(klon, klev), fv(klon, klev)
184      real upwd(klon, klev), dnwd(klon, klev), dnwd0(klon, klev)      real upwd(klon, klev), dnwd(klon, klev)
185      real Ma(klon, klev), mike(klon, klev), tls(klon, klev)      real Ma(klon, klev), mike(klon, klev), tls(klon, klev)
186      real tps(klon, klev)      real tps(klon, klev)
187      real precip(klon)      real precip(klon)
# Line 167  contains Line 191  contains
191      !-------------------------------------------------------------------      !-------------------------------------------------------------------
192    
193      ! SET CONSTANTS AND PARAMETERS      ! SET CONSTANTS AND PARAMETERS
     CALL cv_thermo  
194      CALL cv30_param      CALL cv30_param
195    
196      ! INITIALIZE OUTPUT ARRAYS AND PARAMETERS      ! INITIALIZE OUTPUT ARRAYS AND PARAMETERS
197    
198        da1 = 0.
199        mp1 = 0.
200        phi1 = 0.
201    
202      do k = 1, klev      do k = 1, klev
203         do i = 1, klon         do i = 1, klon
204            ft1(i, k) = 0.            ft1(i, k) = 0.
# Line 187  contains Line 214  contains
214            Ma1(i, k) = 0.            Ma1(i, k) = 0.
215            upwd1(i, k) = 0.            upwd1(i, k) = 0.
216            dnwd1(i, k) = 0.            dnwd1(i, k) = 0.
           dnwd01(i, k) = 0.  
217            qcondc1(i, k) = 0.            qcondc1(i, k) = 0.
218         end do         end do
219      end do      end do
# Line 213  contains Line 239  contains
239    
240      IF (ncum > 0) THEN      IF (ncum > 0) THEN
241         ! Moist convective adjustment is necessary         ! Moist convective adjustment is necessary
242         allocate(idcum(ncum), plcl(ncum))         allocate(idcum(ncum), plcl(ncum), inb(ncum))
243         allocate(b(ncum, nl - 1), evap(ncum, nl), icb(ncum), iflag(ncum))         allocate(b(ncum, nl - 1), evap(ncum, nl), icb(ncum), iflag(ncum))
244           allocate(th(ncum, nl), lv(ncum, nl), cpn(ncum, nl), mp(ncum, nl))
245         idcum = pack((/(i, i = 1, klon)/), iflag1 == 0)         idcum = pack((/(i, i = 1, klon)/), iflag1 == 0)
246         CALL cv30_compress(iflag1, icb1, icbs1, plcl1, tnk1, qnk1, gznk1, &         CALL cv30_compress(idcum, iflag1, icb1, icbs1, plcl1, tnk1, qnk1, &
247              pbase1, buoybase1, t1, q1, qs1, u1, v1, gz1, th1, h1, lv1, cpn1, &              gznk1, pbase1, buoybase1, t1, q1, qs1, u1, v1, gz1, th1, h1, lv1, &
248              p1, ph1, tv1, tp1, tvp1, clw1, sig1, w01, icb, icbs, plcl, tnk, &              cpn1, p1, ph1, tv1, tp1, tvp1, clw1, sig1, w01, icb, icbs, plcl, &
249              qnk, gznk, pbase, buoybase, t, q, qs, u, v, gz, th, h, lv, cpn, &              tnk, qnk, gznk, pbase, buoybase, t, q, qs, u, v, gz, th, h, lv, &
250              p, ph, tv, tp, tvp, clw, sig, w0)              cpn, p, ph, tv, tp, tvp, clw, sig, w0)
251         CALL cv30_undilute2(icb, icbs(:ncum), tnk, qnk, gznk, t, qs, gz, p, h, &         CALL cv30_undilute2(icb, icbs(:ncum), tnk, qnk, gznk, t, qs, gz, p, h, &
252              tv, lv, pbase(:ncum), buoybase(:ncum), plcl, inb(:ncum), tp, tvp, &              tv, lv, pbase(:ncum), buoybase(:ncum), plcl, inb, tp, tvp, &
253              clw, hp, ep, buoy)              clw, hp, ep, buoy)
254         CALL cv30_closure(icb, inb(:ncum), pbase, p, ph(:ncum, :), tv, buoy, &         CALL cv30_closure(icb, inb, pbase, p, ph(:ncum, :), tv, buoy, &
255              sig, w0, cape, m)              sig, w0, cape, m)
256         CALL cv30_mixing(icb, inb(:ncum), t, q, qs, u, v, h, lv, hp, ep, clw, &         CALL cv30_mixing(icb, inb, t, q, qs, u, v, h, lv, &
257              m, sig, ment, qent, uent, vent, nent, sij, elij, ments, qents)              hp, ep, clw, m, sig, ment, qent, uent, vent, nent, sij, elij, &
258         CALL cv30_unsat(icb, inb(:ncum), t(:ncum, :nl), q(:ncum, :nl), &              ments, qents)
259           CALL cv30_unsat(icb, inb, t(:ncum, :nl), q(:ncum, :nl), &
260              qs(:ncum, :nl), gz, u(:ncum, :nl), v(:ncum, :nl), p, &              qs(:ncum, :nl), gz, u(:ncum, :nl), v(:ncum, :nl), p, &
261              ph(:ncum, :), th(:ncum, :nl - 1), tv, lv(:ncum, :), &              ph(:ncum, :), th(:ncum, :nl - 1), tv, lv, cpn, ep(:ncum, :), &
262              cpn(:ncum, :nl), ep(:ncum, :), clw(:ncum, :), m(:ncum, :), &              clw(:ncum, :), m(:ncum, :), ment(:ncum, :, :), elij(:ncum, :, :), &
263              ment(:ncum, :, :), elij(:ncum, :, :), dtphys, plcl, mp, &              dtphys, plcl, mp, qp(:ncum, :nl), up(:ncum, :nl), vp(:ncum, :nl), &
264              qp(:ncum, :nl), up(:ncum, :nl), vp(:ncum, :nl), wt(:ncum, :nl), &              wt(:ncum, :nl), water(:ncum, :nl), evap, b)
265              water(:ncum, :nl), evap, b)         CALL cv30_yield(icb, inb, dtphys, t, q, u, v, gz, p, ph, h, hp, &
        CALL cv30_yield(icb, inb(:ncum), dtphys, t, q, u, v, gz, p, ph, h, hp, &  
266              lv, cpn, th, ep, clw, m, tp, mp, qp, up, vp(:ncum, 2:nl), &              lv, cpn, th, ep, clw, m, tp, mp, qp, up, vp(:ncum, 2:nl), &
267              wt(:ncum, :nl - 1), water(:ncum, :nl), evap, b, ment, qent, uent, &              wt(:ncum, :nl - 1), water(:ncum, :nl), evap, b, ment, qent, uent, &
268              vent, nent, elij, sig, tv, tvp, iflag, precip, VPrecip, ft, fq, &              vent, nent, elij, sig, tv, tvp, iflag, precip, VPrecip, ft, fq, &
269              fu, fv, upwd, dnwd, dnwd0, ma, mike, tls, tps, qcondc)              fu, fv, upwd, dnwd, ma, mike, tls, tps, qcondc)
270         CALL cv30_tracer(klon, ncum, klev, ment, sij, da, phi)         CALL cv30_tracer(klon, ncum, klev, ment, sij, da, phi)
271         CALL cv30_uncompress(idcum, iflag, precip, VPrecip, sig, w0, ft, fq, &         CALL cv30_uncompress(idcum, iflag, precip, VPrecip, sig, w0, ft, fq, &
272              fu, fv, inb, Ma, upwd, dnwd, dnwd0, qcondc, cape, da, phi, mp, &              fu, fv, inb, Ma, upwd, dnwd, qcondc, cape, da, phi, mp, iflag1, &
273              iflag1, precip1, VPrecip1, sig1, w01, ft1, fq1, fu1, fv1, inb1, &              precip1, VPrecip1, sig1, w01, ft1, fq1, fu1, fv1, inb1, Ma1, &
274              Ma1, upwd1, dnwd1, dnwd01, qcondc1, cape1, da1, phi1, mp1)              upwd1, dnwd1, qcondc1, cape1, da1, phi1, mp1)
275      ENDIF      ENDIF
276    
277    end SUBROUTINE cv_driver    end SUBROUTINE cv_driver

Legend:
Removed from v.198  
changed lines
  Added in v.205

  ViewVC Help
Powered by ViewVC 1.1.21