/[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 182 by guez, Wed Mar 16 11:11:27 2016 UTC revision 186 by guez, Mon Mar 21 15:36:26 2016 UTC
# Line 4  module cv_driver_m Line 4  module cv_driver_m
4    
5  contains  contains
6    
7    SUBROUTINE cv_driver(t1, q1, qs1, u1, v1, p1, ph1, iflag1, ft1, &    SUBROUTINE cv_driver(t1, q1, qs1, u1, v1, p1, ph1, iflag1, ft1, fq1, fu1, &
8         fq1, fu1, fv1, precip1, VPrecip1, cbmf1, sig1, w01, icb1, inb1, delt, &         fv1, precip1, VPrecip1, sig1, w01, icb1, inb1, delt, Ma1, upwd1, &
9         Ma1, upwd1, dnwd1, dnwd01, qcondc1, wd1, cape1, da1, phi1, mp1)         dnwd1, dnwd01, qcondc1, wd1, 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 14  contains Line 14  contains
14    
15      ! Several modules corresponding to different physical processes      ! Several modules corresponding to different physical processes
16    
17      use cv3_compress_m, only: cv3_compress      use cv30_compress_m, only: cv30_compress
18      use cv3_feed_m, only: cv3_feed      use cv30_feed_m, only: cv30_feed
19      use cv3_mixing_m, only: cv3_mixing      use cv30_mixing_m, only: cv30_mixing
20      use cv3_param_m, only: cv3_param      use cv30_param_m, only: cv30_param
21      use cv3_prelim_m, only: cv3_prelim      use cv30_prelim_m, only: cv30_prelim
22      use cv3_tracer_m, only: cv3_tracer      use cv30_tracer_m, only: cv30_tracer
23      use cv3_uncompress_m, only: cv3_uncompress      use cv30_uncompress_m, only: cv30_uncompress
24      use cv3_unsat_m, only: cv3_unsat      use cv30_undilute2_m, only: cv30_undilute2
25      use cv3_yield_m, only: cv3_yield      use cv30_unsat_m, only: cv30_unsat
26        use cv30_yield_m, only: cv30_yield
27      USE dimphy, ONLY: klev, klon      USE dimphy, ONLY: klev, klon
28    
29      real, intent(in):: t1(klon, klev) ! temperature      real, intent(in):: t1(klon, klev) ! temperature
# Line 42  contains Line 43  contains
43      real, intent(out):: VPrecip1(klon, klev + 1)      real, intent(out):: VPrecip1(klon, klev + 1)
44      ! vertical profile of precipitation      ! vertical profile of precipitation
45    
     real, intent(inout):: cbmf1(klon) ! cloud base mass flux  
46      real, intent(inout):: sig1(klon, klev) ! section adiabatic updraft      real, intent(inout):: sig1(klon, klev) ! section adiabatic updraft
47    
48      real, intent(inout):: w01(klon, klev)      real, intent(inout):: w01(klon, klev)
# Line 201  contains Line 201  contains
201      integer iflag(klon), nk(klon), icb(klon)      integer iflag(klon), nk(klon), icb(klon)
202      integer nent(klon, klev)      integer nent(klon, klev)
203      integer icbs(klon)      integer icbs(klon)
204      integer inb(klon), inbis(klon)      integer inb(klon)
205    
206      real plcl(klon), tnk(klon), qnk(klon), gznk(klon)      real plcl(klon), tnk(klon), qnk(klon), gznk(klon)
207      real t(klon, klev), q(klon, klev), qs(klon, klev)      real t(klon, klev), q(klon, klev), qs(klon, klev)
# Line 209  contains Line 209  contains
209      real gz(klon, klev), h(klon, klev), lv(klon, klev), cpn(klon, klev)      real gz(klon, klev), h(klon, klev), lv(klon, klev), cpn(klon, klev)
210      real p(klon, klev), ph(klon, klev + 1), tv(klon, klev), tp(klon, klev)      real p(klon, klev), ph(klon, klev + 1), tv(klon, klev), tp(klon, klev)
211      real clw(klon, klev)      real clw(klon, klev)
     real dph(klon, klev)  
212      real pbase(klon), buoybase(klon), th(klon, klev)      real pbase(klon), buoybase(klon), th(klon, klev)
213      real tvp(klon, klev)      real tvp(klon, klev)
214      real sig(klon, klev), w0(klon, klev)      real sig(klon, klev), w0(klon, klev)
215      real hp(klon, klev), ep(klon, klev), sigp(klon, klev)      real hp(klon, klev), ep(klon, klev), sigp(klon, klev)
216      real frac(klon), buoy(klon, klev)      real buoy(klon, klev)
217      real cape(klon)      real cape(klon)
218      real m(klon, klev), ment(klon, klev, klev), qent(klon, klev, klev)      real m(klon, klev), ment(klon, klev, klev), qent(klon, klev, klev)
219      real uent(klon, klev, klev), vent(klon, klev, klev)      real uent(klon, klev, klev), vent(klon, klev, klev)
# Line 226  contains Line 225  contains
225      real fu(klon, klev), fv(klon, klev)      real fu(klon, klev), fv(klon, klev)
226      real upwd(klon, klev), dnwd(klon, klev), dnwd0(klon, klev)      real upwd(klon, klev), dnwd(klon, klev), dnwd0(klon, klev)
227      real Ma(klon, klev), mike(klon, klev), tls(klon, klev)      real Ma(klon, klev), mike(klon, klev), tls(klon, klev)
228      real tps(klon, klev), qprime(klon), tprime(klon)      real tps(klon, klev)
229      real precip(klon)      real precip(klon)
230      real VPrecip(klon, klev + 1)      real VPrecip(klon, klev + 1)
231      real qcondc(klon, klev) ! cld      real qcondc(klon, klev) ! cld
# Line 236  contains Line 235  contains
235    
236      ! SET CONSTANTS AND PARAMETERS      ! SET CONSTANTS AND PARAMETERS
237    
     ! set simulation flags:  
     ! (common cvflag)  
   
     CALL cv_flag  
   
238      ! set thermodynamical constants:      ! set thermodynamical constants:
239      ! (common cvthermo)      ! (common cvthermo)
   
240      CALL cv_thermo      CALL cv_thermo
241    
242      ! set convect parameters      ! set convect parameters
   
243      ! includes microphysical parameters and parameters that      ! includes microphysical parameters and parameters that
244      ! control the rate of approach to quasi-equilibrium)      ! control the rate of approach to quasi-equilibrium)
245      ! (common cvparam)      ! (common cvparam)
246    
247      CALL cv3_param(klev, delt)      CALL cv30_param(delt)
248    
249      ! INITIALIZE OUTPUT ARRAYS AND PARAMETERS      ! INITIALIZE OUTPUT ARRAYS AND PARAMETERS
250    
# Line 265  contains Line 257  contains
257            tvp1(i, k) = 0.0            tvp1(i, k) = 0.0
258            tp1(i, k) = 0.0            tp1(i, k) = 0.0
259            clw1(i, k) = 0.0            clw1(i, k) = 0.0
           !ym  
260            clw(i, k) = 0.0            clw(i, k) = 0.0
261            gz1(i, k) = 0.            gz1(i, k) = 0.
262            VPrecip1(i, k) = 0.            VPrecip1(i, k) = 0.
# Line 291  contains Line 282  contains
282      enddo      enddo
283    
284      ! CALCULATE ARRAYS OF GEOPOTENTIAL, HEAT CAPACITY & STATIC ENERGY      ! CALCULATE ARRAYS OF GEOPOTENTIAL, HEAT CAPACITY & STATIC ENERGY
285        CALL cv30_prelim(klon, klev, klev + 1, t1, q1, p1, ph1, lv1, cpn1, tv1, &
     CALL cv3_prelim(klon, klev, klev + 1, t1, q1, p1, ph1, lv1, cpn1, tv1, &  
286           gz1, h1, hm1, th1)           gz1, h1, hm1, th1)
287    
288      ! CONVECTIVE FEED      ! CONVECTIVE FEED
289        CALL cv30_feed(klon, klev, t1, q1, qs1, p1, ph1, gz1, nk1, icb1, &
     CALL cv3_feed(klon, klev, t1, q1, qs1, p1, ph1, gz1, nk1, icb1, &  
290           icbmax, iflag1, tnk1, qnk1, gznk1, plcl1) ! klev->na           icbmax, iflag1, tnk1, qnk1, gznk1, plcl1) ! klev->na
291    
292      ! UNDILUTE (ADIABATIC) UPDRAFT / 1st part      ! UNDILUTE (ADIABATIC) UPDRAFT / 1st part
293      ! (up through ICB for convect4, up through ICB + 1 for convect3)      ! (up through ICB for convect4, up through ICB + 1 for convect3)
294      ! Calculates the lifted parcel virtual temperature at nk, the      ! Calculates the lifted parcel virtual temperature at nk, the
295      ! actual temperature, and the adiabatic liquid water content.      ! actual temperature, and the adiabatic liquid water content.
296        CALL cv30_undilute1(klon, klev, t1, q1, qs1, gz1, plcl1, p1, nk1, icb1, &
     CALL cv3_undilute1(klon, klev, t1, q1, qs1, gz1, plcl1, p1, nk1, icb1, &  
297           tp1, tvp1, clw1, icbs1) ! klev->na           tp1, tvp1, clw1, icbs1) ! klev->na
298    
299      ! TRIGGERING      ! TRIGGERING
300        CALL cv30_trigger(klon, klev, icb1, plcl1, p1, th1, tv1, tvp1, pbase1, &
     CALL cv3_trigger(klon, klev, icb1, plcl1, p1, th1, tv1, tvp1, pbase1, &  
301           buoybase1, iflag1, sig1, w01) ! klev->na           buoybase1, iflag1, sig1, w01) ! klev->na
302    
303      ! Moist convective adjustment is necessary      ! Moist convective adjustment is necessary
# Line 326  contains Line 313  contains
313      IF (ncum > 0) THEN      IF (ncum > 0) THEN
314         ! COMPRESS THE FIELDS         ! COMPRESS THE FIELDS
315         ! (-> vectorization over convective gridpoints)         ! (-> vectorization over convective gridpoints)
316           CALL cv30_compress(klon, klon, ncum, klev, iflag1, nk1, icb1, icbs1, &
        CALL cv3_compress(klon, klon, ncum, klev, iflag1, nk1, icb1, icbs1, &  
317              plcl1, tnk1, qnk1, gznk1, pbase1, buoybase1, t1, q1, qs1, u1, &              plcl1, tnk1, qnk1, gznk1, pbase1, buoybase1, t1, q1, qs1, u1, &
318              v1, gz1, th1, h1, lv1, cpn1, p1, ph1, tv1, tp1, tvp1, clw1, &              v1, gz1, th1, h1, lv1, cpn1, p1, ph1, tv1, tp1, tvp1, clw1, &
319              sig1, w01, iflag, nk, icb, icbs, plcl, tnk, qnk, gznk, pbase, &              sig1, w01, iflag, nk, icb, icbs, plcl, tnk, qnk, gznk, pbase, &
320              buoybase, t, q, qs, u, v, gz, th, h, lv, cpn, p, ph, tv, tp, &              buoybase, t, q, qs, u, v, gz, th, h, lv, cpn, p, ph, tv, tp, &
321              tvp, clw, sig, w0)              tvp, clw, sig, w0)
322    
323         ! UNDILUTE (ADIABATIC) UPDRAFT / second part :         ! Undilute (adiabatic) updraft, second part: find the rest of
324         ! FIND THE REST OF THE LIFTED PARCEL TEMPERATURES         ! the lifted parcel temperatures; compute the precipitation
325         ! &         ! efficiencies and the fraction of precipitation falling
326         ! COMPUTE THE PRECIPITATION EFFICIENCIES AND THE         ! outside of cloud; find the level of neutral buoyancy.
327         ! FRACTION OF PRECIPITATION FALLING OUTSIDE OF CLOUD         CALL cv30_undilute2(klon, ncum, klev, icb, icbs, nk, tnk, qnk, gznk, &
        ! &  
        ! FIND THE LEVEL OF NEUTRAL BUOYANCY  
   
        CALL cv3_undilute2(klon, ncum, klev, icb, icbs, nk, tnk, qnk, gznk, &  
328              t, qs, gz, p, h, tv, lv, pbase, buoybase, plcl, inb, tp, &              t, qs, gz, p, h, tv, lv, pbase, buoybase, plcl, inb, tp, &
329              tvp, clw, hp, ep, sigp, buoy) !na->klev              tvp, clw, hp, ep, sigp, buoy) !na->klev
330    
331         ! CLOSURE         ! CLOSURE
332           CALL cv30_closure(klon, ncum, klev, icb, inb, pbase, p, ph, tv, &
        CALL cv3_closure(klon, ncum, klev, icb, inb, pbase, p, ph, tv, &  
333              buoy, sig, w0, cape, m) ! na->klev              buoy, sig, w0, cape, m) ! na->klev
334    
335         ! MIXING         ! MIXING
336           CALL cv30_mixing(klon, ncum, klev, klev, icb, nk, inb, t, q, qs, u, &
        CALL cv3_mixing(klon, ncum, klev, klev, icb, nk, inb, t, q, qs, u, &  
337              v, h, lv, hp, ep, clw, m, sig, ment, qent, uent, vent, nent, &              v, h, lv, hp, ep, clw, m, sig, ment, qent, uent, vent, nent, &
338              sij, elij, ments, qents)              sij, elij, ments, qents)
339    
340         ! UNSATURATED (PRECIPITATING) DOWNDRAFTS         ! Unsaturated (precipitating) downdrafts
341           CALL cv30_unsat(klon, ncum, klev, klev, icb(:ncum), inb(:ncum), t, q, &
342         CALL cv3_unsat(klon, ncum, klev, klev, icb, inb, t, q, qs, gz, u, &              qs, gz, u, v, p, ph, th, tv, lv, cpn, ep, sigp, clw, m, ment, &
343              v, p, ph, th, tv, lv, cpn, ep, sigp, clw, m, ment, elij, delt, &              elij, delt, plcl, mp, qp, up, vp, wt, water, evap, b)! na->klev
344              plcl, mp, qp, up, vp, wt, water, evap, b)! na->klev  
345           ! Yield (tendencies, precipitation, variables of interface with
346         ! YIELD         ! other processes, etc)
347         ! (tendencies, precipitation, variables of interface with other         CALL cv30_yield(klon, ncum, klev, klev, icb, inb, delt, t, q, u, v, &
        ! processes, etc)  
   
        CALL cv3_yield(klon, ncum, klev, klev, icb, inb, delt, t, q, u, v, &  
348              gz, p, ph, h, hp, lv, cpn, th, ep, clw, m, tp, mp, qp, up, vp, &              gz, p, ph, h, hp, lv, cpn, th, ep, clw, m, tp, mp, qp, up, vp, &
349              wt, water, evap, b, ment, qent, uent, vent, nent, elij, sig, &              wt, water, evap, b, ment, qent, uent, vent, nent, elij, sig, &
350              tv, tvp, iflag, precip, VPrecip, ft, fq, fu, fv, upwd, dnwd, &              tv, tvp, iflag, precip, VPrecip, ft, fq, fu, fv, upwd, dnwd, &
351              dnwd0, ma, mike, tls, tps, qcondc, wd)! na->klev              dnwd0, ma, mike, tls, tps, qcondc, wd)! na->klev
352    
353         ! passive tracers         ! passive tracers
354           CALL cv30_tracer(klon, ncum, klev, ment, sij, da, phi)
        CALL cv3_tracer(klon, ncum, klev, ment, sij, da, phi)  
355    
356         ! UNCOMPRESS THE FIELDS         ! UNCOMPRESS THE FIELDS
357    
358         ! set iflag1 = 42 for non convective points         ! set iflag1 = 42 for non convective points
359         do i = 1, klon         iflag1 = 42
           iflag1(i) = 42  
        end do  
360    
361         CALL cv3_uncompress(idcum(:ncum), iflag, precip, VPrecip, sig, w0, &         CALL cv30_uncompress(idcum(:ncum), iflag, precip, VPrecip, sig, w0, &
362              ft, fq, fu, fv, inb, Ma, upwd, dnwd, dnwd0, qcondc, wd, cape, &              ft, fq, fu, fv, inb, Ma, upwd, dnwd, dnwd0, qcondc, wd, cape, &
363              da, phi, mp, iflag1, precip1, VPrecip1, sig1, w01, ft1, fq1, &              da, phi, mp, iflag1, precip1, VPrecip1, sig1, w01, ft1, fq1, &
364              fu1, fv1, inb1, Ma1, upwd1, dnwd1, dnwd01, qcondc1, wd1, &              fu1, fv1, inb1, Ma1, upwd1, dnwd1, dnwd01, qcondc1, wd1, &
365              cape1, da1, phi1, mp1)              cape1, da1, phi1, mp1)
366      ENDIF ! ncum>0      ENDIF
367    
368    end SUBROUTINE cv_driver    end SUBROUTINE cv_driver
369    

Legend:
Removed from v.182  
changed lines
  Added in v.186

  ViewVC Help
Powered by ViewVC 1.1.21