--- trunk/Sources/phylmd/cv_driver.f 2016/03/15 17:51:30 181 +++ trunk/Sources/phylmd/cv_driver.f 2016/03/21 15:36:26 186 @@ -4,9 +4,9 @@ contains - SUBROUTINE cv_driver(t1, q1, qs1, u1, v1, p1, ph1, iflag1, ft1, & - fq1, fu1, fv1, precip1, VPrecip1, cbmf1, sig1, w01, icb1, inb1, delt, & - Ma1, upwd1, dnwd1, dnwd01, qcondc1, wd1, cape1, da1, phi1, mp1) + SUBROUTINE cv_driver(t1, q1, qs1, u1, v1, p1, ph1, iflag1, ft1, fq1, fu1, & + fv1, precip1, VPrecip1, sig1, w01, icb1, inb1, delt, Ma1, upwd1, & + dnwd1, dnwd01, qcondc1, wd1, cape1, da1, phi1, mp1) ! From LMDZ4/libf/phylmd/cv_driver.F, version 1.3, 2005/04/15 12:36:17 ! Main driver for convection @@ -14,15 +14,16 @@ ! Several modules corresponding to different physical processes - use cv3_compress_m, only: cv3_compress - use cv3_feed_m, only: cv3_feed - use cv3_mixing_m, only: cv3_mixing - use cv3_param_m, only: cv3_param - use cv3_prelim_m, only: cv3_prelim - use cv3_tracer_m, only: cv3_tracer - use cv3_uncompress_m, only: cv3_uncompress - use cv3_unsat_m, only: cv3_unsat - use cv3_yield_m, only: cv3_yield + use cv30_compress_m, only: cv30_compress + use cv30_feed_m, only: cv30_feed + use cv30_mixing_m, only: cv30_mixing + use cv30_param_m, only: cv30_param + use cv30_prelim_m, only: cv30_prelim + use cv30_tracer_m, only: cv30_tracer + use cv30_uncompress_m, only: cv30_uncompress + use cv30_undilute2_m, only: cv30_undilute2 + use cv30_unsat_m, only: cv30_unsat + use cv30_yield_m, only: cv30_yield USE dimphy, ONLY: klev, klon real, intent(in):: t1(klon, klev) ! temperature @@ -42,7 +43,6 @@ real, intent(out):: VPrecip1(klon, klev + 1) ! vertical profile of precipitation - real, intent(inout):: cbmf1(klon) ! cloud base mass flux real, intent(inout):: sig1(klon, klev) ! section adiabatic updraft real, intent(inout):: w01(klon, klev) @@ -201,20 +201,19 @@ integer iflag(klon), nk(klon), icb(klon) integer nent(klon, klev) integer icbs(klon) - integer inb(klon), inbis(klon) + integer inb(klon) - real cbmf(klon), plcl(klon), tnk(klon), qnk(klon), gznk(klon) + real plcl(klon), tnk(klon), qnk(klon), gznk(klon) real t(klon, klev), q(klon, klev), qs(klon, klev) real u(klon, klev), v(klon, klev) real gz(klon, klev), h(klon, klev), lv(klon, klev), cpn(klon, klev) real p(klon, klev), ph(klon, klev + 1), tv(klon, klev), tp(klon, klev) real clw(klon, klev) - real dph(klon, klev) real pbase(klon), buoybase(klon), th(klon, klev) real tvp(klon, klev) real sig(klon, klev), w0(klon, klev) real hp(klon, klev), ep(klon, klev), sigp(klon, klev) - real frac(klon), buoy(klon, klev) + real buoy(klon, klev) real cape(klon) real m(klon, klev), ment(klon, klev, klev), qent(klon, klev, klev) real uent(klon, klev, klev), vent(klon, klev, klev) @@ -226,7 +225,7 @@ real fu(klon, klev), fv(klon, klev) real upwd(klon, klev), dnwd(klon, klev), dnwd0(klon, klev) real Ma(klon, klev), mike(klon, klev), tls(klon, klev) - real tps(klon, klev), qprime(klon), tprime(klon) + real tps(klon, klev) real precip(klon) real VPrecip(klon, klev + 1) real qcondc(klon, klev) ! cld @@ -236,23 +235,16 @@ ! SET CONSTANTS AND PARAMETERS - ! set simulation flags: - ! (common cvflag) - - CALL cv_flag - ! set thermodynamical constants: ! (common cvthermo) - CALL cv_thermo ! set convect parameters - ! includes microphysical parameters and parameters that ! control the rate of approach to quasi-equilibrium) ! (common cvparam) - CALL cv3_param(klev, delt) + CALL cv30_param(delt) ! INITIALIZE OUTPUT ARRAYS AND PARAMETERS @@ -265,7 +257,6 @@ tvp1(i, k) = 0.0 tp1(i, k) = 0.0 clw1(i, k) = 0.0 - !ym clw(i, k) = 0.0 gz1(i, k) = 0. VPrecip1(i, k) = 0. @@ -291,26 +282,22 @@ enddo ! CALCULATE ARRAYS OF GEOPOTENTIAL, HEAT CAPACITY & STATIC ENERGY - - CALL cv3_prelim(klon, klev, klev + 1, t1, q1, p1, ph1, lv1, cpn1, tv1, & + CALL cv30_prelim(klon, klev, klev + 1, t1, q1, p1, ph1, lv1, cpn1, tv1, & gz1, h1, hm1, th1) ! CONVECTIVE FEED - - CALL cv3_feed(klon, klev, t1, q1, qs1, p1, ph1, gz1, nk1, icb1, & + CALL cv30_feed(klon, klev, t1, q1, qs1, p1, ph1, gz1, nk1, icb1, & icbmax, iflag1, tnk1, qnk1, gznk1, plcl1) ! klev->na ! UNDILUTE (ADIABATIC) UPDRAFT / 1st part ! (up through ICB for convect4, up through ICB + 1 for convect3) ! Calculates the lifted parcel virtual temperature at nk, the ! actual temperature, and the adiabatic liquid water content. - - CALL cv3_undilute1(klon, klev, t1, q1, qs1, gz1, plcl1, p1, nk1, icb1, & + CALL cv30_undilute1(klon, klev, t1, q1, qs1, gz1, plcl1, p1, nk1, icb1, & tp1, tvp1, clw1, icbs1) ! klev->na ! TRIGGERING - - CALL cv3_trigger(klon, klev, icb1, plcl1, p1, th1, tv1, tvp1, pbase1, & + CALL cv30_trigger(klon, klev, icb1, plcl1, p1, th1, tv1, tvp1, pbase1, & buoybase1, iflag1, sig1, w01) ! klev->na ! Moist convective adjustment is necessary @@ -326,70 +313,57 @@ IF (ncum > 0) THEN ! COMPRESS THE FIELDS ! (-> vectorization over convective gridpoints) - - CALL cv3_compress(klon, klon, ncum, klev, iflag1, nk1, icb1, icbs1, & + CALL cv30_compress(klon, klon, ncum, klev, iflag1, nk1, icb1, icbs1, & plcl1, tnk1, qnk1, gznk1, pbase1, buoybase1, t1, q1, qs1, u1, & v1, gz1, th1, h1, lv1, cpn1, p1, ph1, tv1, tp1, tvp1, clw1, & sig1, w01, iflag, nk, icb, icbs, plcl, tnk, qnk, gznk, pbase, & buoybase, t, q, qs, u, v, gz, th, h, lv, cpn, p, ph, tv, tp, & tvp, clw, sig, w0) - ! UNDILUTE (ADIABATIC) UPDRAFT / second part : - ! FIND THE REST OF THE LIFTED PARCEL TEMPERATURES - ! & - ! COMPUTE THE PRECIPITATION EFFICIENCIES AND THE - ! FRACTION OF PRECIPITATION FALLING OUTSIDE OF CLOUD - ! & - ! FIND THE LEVEL OF NEUTRAL BUOYANCY - - CALL cv3_undilute2(klon, ncum, klev, icb, icbs, nk, tnk, qnk, gznk, & + ! Undilute (adiabatic) updraft, second part: find the rest of + ! the lifted parcel temperatures; compute the precipitation + ! efficiencies and the fraction of precipitation falling + ! outside of cloud; find the level of neutral buoyancy. + CALL cv30_undilute2(klon, ncum, klev, icb, icbs, nk, tnk, qnk, gznk, & t, qs, gz, p, h, tv, lv, pbase, buoybase, plcl, inb, tp, & tvp, clw, hp, ep, sigp, buoy) !na->klev ! CLOSURE - - CALL cv3_closure(klon, ncum, klev, icb, inb, pbase, p, ph, tv, & + CALL cv30_closure(klon, ncum, klev, icb, inb, pbase, p, ph, tv, & buoy, sig, w0, cape, m) ! na->klev ! MIXING - - CALL cv3_mixing(klon, ncum, klev, klev, icb, nk, inb, t, q, qs, u, & + CALL cv30_mixing(klon, ncum, klev, klev, icb, nk, inb, t, q, qs, u, & v, h, lv, hp, ep, clw, m, sig, ment, qent, uent, vent, nent, & sij, elij, ments, qents) - ! UNSATURATED (PRECIPITATING) DOWNDRAFTS - - CALL cv3_unsat(klon, ncum, klev, klev, icb, inb, t, q, qs, gz, u, & - v, p, ph, th, tv, lv, cpn, ep, sigp, clw, m, ment, elij, delt, & - plcl, mp, qp, up, vp, wt, water, evap, b)! na->klev - - ! YIELD - ! (tendencies, precipitation, variables of interface with other - ! processes, etc) - - CALL cv3_yield(klon, ncum, klev, klev, icb, inb, delt, t, q, u, v, & + ! Unsaturated (precipitating) downdrafts + CALL cv30_unsat(klon, ncum, klev, klev, icb(:ncum), inb(:ncum), t, q, & + qs, gz, u, v, p, ph, th, tv, lv, cpn, ep, sigp, clw, m, ment, & + elij, delt, plcl, mp, qp, up, vp, wt, water, evap, b)! na->klev + + ! Yield (tendencies, precipitation, variables of interface with + ! other processes, etc) + CALL cv30_yield(klon, ncum, klev, klev, icb, inb, delt, t, q, u, v, & gz, p, ph, h, hp, lv, cpn, th, ep, clw, m, tp, mp, qp, up, vp, & wt, water, evap, b, ment, qent, uent, vent, nent, elij, sig, & tv, tvp, iflag, precip, VPrecip, ft, fq, fu, fv, upwd, dnwd, & dnwd0, ma, mike, tls, tps, qcondc, wd)! na->klev ! passive tracers - - CALL cv3_tracer(klon, ncum, klev, ment, sij, da, phi) + CALL cv30_tracer(klon, ncum, klev, ment, sij, da, phi) ! UNCOMPRESS THE FIELDS ! set iflag1 = 42 for non convective points - do i = 1, klon - iflag1(i) = 42 - end do + iflag1 = 42 - CALL cv3_uncompress(idcum(:ncum), iflag, precip, VPrecip, sig, w0, & + CALL cv30_uncompress(idcum(:ncum), iflag, precip, VPrecip, sig, w0, & ft, fq, fu, fv, inb, Ma, upwd, dnwd, dnwd0, qcondc, wd, cape, & da, phi, mp, iflag1, precip1, VPrecip1, sig1, w01, ft1, fq1, & fu1, fv1, inb1, Ma1, upwd1, dnwd1, dnwd01, qcondc1, wd1, & cape1, da1, phi1, mp1) - ENDIF ! ncum>0 + ENDIF end SUBROUTINE cv_driver