/[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 180 by guez, Tue Mar 15 17:07:47 2016 UTC revision 182 by guez, Wed Mar 16 11:11:27 2016 UTC
# Line 14  contains Line 14  contains
14    
15      ! Several modules corresponding to different physical processes      ! Several modules corresponding to different physical processes
16    
     ! Several versions of convect may be used:  
     ! - iflag_con = 3: version lmd  
     ! - iflag_con = 4: version 4.3b  
   
     use clesphys2, only: iflag_con  
17      use cv3_compress_m, only: cv3_compress      use cv3_compress_m, only: cv3_compress
18      use cv3_feed_m, only: cv3_feed      use cv3_feed_m, only: cv3_feed
19      use cv3_mixing_m, only: cv3_mixing      use cv3_mixing_m, only: cv3_mixing
# Line 28  contains Line 23  contains
23      use cv3_uncompress_m, only: cv3_uncompress      use cv3_uncompress_m, only: cv3_uncompress
24      use cv3_unsat_m, only: cv3_unsat      use cv3_unsat_m, only: cv3_unsat
25      use cv3_yield_m, only: cv3_yield      use cv3_yield_m, only: cv3_yield
     use cv_feed_m, only: cv_feed  
     use cv_uncompress_m, only: cv_uncompress  
26      USE dimphy, ONLY: klev, klon      USE dimphy, ONLY: klev, klon
27    
28      real, intent(in):: t1(klon, klev) ! temperature      real, intent(in):: t1(klon, klev) ! temperature
# Line 210  contains Line 203  contains
203      integer icbs(klon)      integer icbs(klon)
204      integer inb(klon), inbis(klon)      integer inb(klon), inbis(klon)
205    
206      real cbmf(klon), 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)
208      real u(klon, klev), v(klon, klev)      real u(klon, klev), v(klon, klev)
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)
# Line 259  contains Line 252  contains
252      ! control the rate of approach to quasi-equilibrium)      ! control the rate of approach to quasi-equilibrium)
253      ! (common cvparam)      ! (common cvparam)
254    
255      if (iflag_con == 3) CALL cv3_param(klev, delt)      CALL cv3_param(klev, delt)
256    
257      ! INITIALIZE OUTPUT ARRAYS AND PARAMETERS      ! INITIALIZE OUTPUT ARRAYS AND PARAMETERS
258    
# Line 292  contains Line 285  contains
285         VPrecip1(i, klev + 1) = 0.0         VPrecip1(i, klev + 1) = 0.0
286      end do      end do
287    
288      if (iflag_con == 3) then      do il = 1, klon
289         do il = 1, klon         sig1(il, klev) = sig1(il, klev) + 1.
290            sig1(il, klev) = sig1(il, klev) + 1.         sig1(il, klev) = min(sig1(il, klev), 12.1)
291            sig1(il, klev) = min(sig1(il, klev), 12.1)      enddo
        enddo  
     endif  
292    
293      ! CALCULATE ARRAYS OF GEOPOTENTIAL, HEAT CAPACITY & STATIC ENERGY      ! CALCULATE ARRAYS OF GEOPOTENTIAL, HEAT CAPACITY & STATIC ENERGY
294    
295      if (iflag_con == 3) then      CALL cv3_prelim(klon, klev, klev + 1, t1, q1, p1, ph1, lv1, cpn1, tv1, &
296         CALL cv3_prelim(klon, klev, klev + 1, t1, q1, p1, ph1, lv1, cpn1, tv1, &           gz1, h1, hm1, th1)
             gz1, h1, hm1, th1)  
     else  
        ! iflag_con == 4  
        CALL cv_prelim(klon, klev, klev + 1, t1, q1, p1, ph1, lv1, cpn1, tv1, &  
             gz1, h1, hm1)  
     endif  
297    
298      ! CONVECTIVE FEED      ! CONVECTIVE FEED
299    
300      if (iflag_con == 3) then      CALL cv3_feed(klon, klev, t1, q1, qs1, p1, ph1, gz1, nk1, icb1, &
301         CALL cv3_feed(klon, klev, t1, q1, qs1, p1, ph1, gz1, nk1, icb1, &           icbmax, iflag1, tnk1, qnk1, gznk1, plcl1) ! klev->na
             icbmax, iflag1, tnk1, qnk1, gznk1, plcl1) ! klev->na  
     else  
        ! iflag_con == 4  
        CALL cv_feed(klon, klev, t1, q1, qs1, p1, hm1, gz1, nk1, icb1, icbmax, &  
             iflag1, tnk1, qnk1, gznk1, plcl1)  
     endif  
302    
303      ! UNDILUTE (ADIABATIC) UPDRAFT / 1st part      ! UNDILUTE (ADIABATIC) UPDRAFT / 1st part
304      ! (up through ICB for convect4, up through ICB + 1 for convect3)      ! (up through ICB for convect4, up through ICB + 1 for convect3)
305      ! Calculates the lifted parcel virtual temperature at nk, the      ! Calculates the lifted parcel virtual temperature at nk, the
306      ! actual temperature, and the adiabatic liquid water content.      ! actual temperature, and the adiabatic liquid water content.
307    
308      if (iflag_con == 3) then      CALL cv3_undilute1(klon, klev, t1, q1, qs1, gz1, plcl1, p1, nk1, icb1, &
309         CALL cv3_undilute1(klon, klev, t1, q1, qs1, gz1, plcl1, p1, nk1, icb1, &           tp1, tvp1, clw1, icbs1) ! klev->na
             tp1, tvp1, clw1, icbs1) ! klev->na  
     else  
        ! iflag_con == 4  
        CALL cv_undilute1(klon, klev, t1, q1, qs1, gz1, p1, nk1, icb1, icbmax, &  
             tp1, tvp1, clw1)  
     endif  
310    
311      ! TRIGGERING      ! TRIGGERING
312    
313      if (iflag_con == 3) then      CALL cv3_trigger(klon, klev, icb1, plcl1, p1, th1, tv1, tvp1, pbase1, &
314         CALL cv3_trigger(klon, klev, icb1, plcl1, p1, th1, tv1, tvp1, pbase1, &           buoybase1, iflag1, sig1, w01) ! klev->na
             buoybase1, iflag1, sig1, w01) ! klev->na  
     else  
        ! iflag_con == 4  
        CALL cv_trigger(klon, klev, icb1, cbmf1, tv1, tvp1, iflag1)  
     end if  
315    
316      ! Moist convective adjustment is necessary      ! Moist convective adjustment is necessary
317    
# Line 359  contains Line 327  contains
327         ! COMPRESS THE FIELDS         ! COMPRESS THE FIELDS
328         ! (-> vectorization over convective gridpoints)         ! (-> vectorization over convective gridpoints)
329    
330         if (iflag_con == 3) then         CALL cv3_compress(klon, klon, ncum, klev, iflag1, nk1, icb1, icbs1, &
331            CALL cv3_compress(klon, klon, ncum, klev, iflag1, nk1, icb1, icbs1, &              plcl1, tnk1, qnk1, gznk1, pbase1, buoybase1, t1, q1, qs1, u1, &
332                 plcl1, tnk1, qnk1, gznk1, pbase1, buoybase1, t1, q1, qs1, u1, &              v1, gz1, th1, h1, lv1, cpn1, p1, ph1, tv1, tp1, tvp1, clw1, &
333                 v1, gz1, th1, h1, lv1, cpn1, p1, ph1, tv1, tp1, tvp1, clw1, &              sig1, w01, iflag, nk, icb, icbs, plcl, tnk, qnk, gznk, pbase, &
334                 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, &
335                 buoybase, t, q, qs, u, v, gz, th, h, lv, cpn, p, ph, tv, tp, &              tvp, clw, sig, w0)
                tvp, clw, sig, w0)  
        else  
           ! iflag_con == 4  
           CALL cv_compress(klon, klon, ncum, klev, iflag1, nk1, icb1, cbmf1, &  
                plcl1, tnk1, qnk1, gznk1, t1, q1, qs1, u1, v1, gz1, h1, lv1, &  
                cpn1, p1, ph1, tv1, tp1, tvp1, clw1, iflag, nk, icb, cbmf, &  
                plcl, tnk, qnk, gznk, t, q, qs, u, v, gz, h, lv, cpn, p, ph, &  
                tv, tp, tvp, clw, dph)  
        endif  
336    
337         ! UNDILUTE (ADIABATIC) UPDRAFT / second part :         ! UNDILUTE (ADIABATIC) UPDRAFT / second part :
338         ! FIND THE REST OF THE LIFTED PARCEL TEMPERATURES         ! FIND THE REST OF THE LIFTED PARCEL TEMPERATURES
# Line 383  contains Line 342  contains
342         ! &         ! &
343         ! FIND THE LEVEL OF NEUTRAL BUOYANCY         ! FIND THE LEVEL OF NEUTRAL BUOYANCY
344    
345         if (iflag_con == 3) then         CALL cv3_undilute2(klon, ncum, klev, icb, icbs, nk, tnk, qnk, gznk, &
346            CALL cv3_undilute2(klon, ncum, klev, icb, icbs, nk, tnk, qnk, gznk, &              t, qs, gz, p, h, tv, lv, pbase, buoybase, plcl, inb, tp, &
347                 t, qs, gz, p, h, tv, lv, pbase, buoybase, plcl, inb, tp, &              tvp, clw, hp, ep, sigp, buoy) !na->klev
                tvp, clw, hp, ep, sigp, buoy) !na->klev  
        else  
           ! iflag_con == 4  
           CALL cv_undilute2(klon, ncum, klev, icb, nk, tnk, qnk, gznk, t, &  
                qs, gz, p, dph, h, tv, lv, inb, inbis, tp, tvp, clw, hp, ep, &  
                sigp, frac)  
        endif  
348    
349         ! CLOSURE         ! CLOSURE
350    
351         if (iflag_con == 3) then         CALL cv3_closure(klon, ncum, klev, icb, inb, pbase, p, ph, tv, &
352            CALL cv3_closure(klon, ncum, klev, icb, inb, pbase, p, ph, tv, &              buoy, sig, w0, cape, m) ! na->klev
                buoy, sig, w0, cape, m) ! na->klev  
        else  
           ! iflag_con == 4  
           CALL cv_closure(klon, ncum, klev, nk, icb, tv, tvp, p, ph, dph, &  
                plcl, cpn, iflag, cbmf)  
        endif  
353    
354         ! MIXING         ! MIXING
355    
356         if (iflag_con == 3) then         CALL cv3_mixing(klon, ncum, klev, klev, icb, nk, inb, t, q, qs, u, &
357            CALL cv3_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, &
358                 v, h, lv, hp, ep, clw, m, sig, ment, qent, uent, vent, nent, &              sij, elij, ments, qents)
                sij, elij, ments, qents)  
        else  
           ! iflag_con == 4  
           CALL cv_mixing(klon, ncum, klev, icb, nk, inb, inbis, ph, t, q, qs, &  
                u, v, h, lv, qnk, hp, tv, tvp, ep, clw, cbmf, m, ment, qent, &  
                uent, vent, nent, sij, elij)  
        endif  
359    
360         ! UNSATURATED (PRECIPITATING) DOWNDRAFTS         ! UNSATURATED (PRECIPITATING) DOWNDRAFTS
361    
362         if (iflag_con == 3) then         CALL cv3_unsat(klon, ncum, klev, klev, icb, inb, t, q, qs, gz, u, &
363            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, &
364                 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
                plcl, mp, qp, up, vp, wt, water, evap, b)! na->klev  
        else  
           ! iflag_con == 4  
           CALL cv_unsat(klon, ncum, klev, inb, t, q, qs, gz, u, v, p, ph, h, &  
                lv, ep, sigp, clw, m, ment, elij, iflag, mp, qp, up, vp, wt, &  
                water, evap)  
        endif  
365    
366         ! YIELD         ! YIELD
367         ! (tendencies, precipitation, variables of interface with other         ! (tendencies, precipitation, variables of interface with other
368         ! processes, etc)         ! processes, etc)
369    
370         if (iflag_con == 3) then         CALL cv3_yield(klon, ncum, klev, klev, icb, inb, delt, t, q, u, v, &
371            CALL cv3_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, &
372                 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, &
373                 wt, water, evap, b, ment, qent, uent, vent, nent, elij, sig, &              tv, tvp, iflag, precip, VPrecip, ft, fq, fu, fv, upwd, dnwd, &
374                 tv, tvp, iflag, precip, VPrecip, ft, fq, fu, fv, upwd, dnwd, &              dnwd0, ma, mike, tls, tps, qcondc, wd)! na->klev
                dnwd0, ma, mike, tls, tps, qcondc, wd)! na->klev  
        else  
           ! iflag_con == 4  
           CALL cv_yield(klon, ncum, klev, nk, icb, inb, delt, t, q, u, v, gz, &  
                p, ph, h, hp, lv, cpn, ep, clw, frac, m, mp, qp, up, vp, wt, &  
                water, evap, ment, qent, uent, vent, nent, elij, tv, tvp, &  
                iflag, wd, qprime, tprime, precip, cbmf, ft, fq, fu, fv, Ma, &  
                qcondc)  
        endif  
375    
376         ! passive tracers         ! passive tracers
377    
378         if (iflag_con == 3) CALL cv3_tracer(klon, ncum, klev, ment, sij, da, phi)         CALL cv3_tracer(klon, ncum, klev, ment, sij, da, phi)
379    
380         ! UNCOMPRESS THE FIELDS         ! UNCOMPRESS THE FIELDS
381    
# Line 461  contains Line 384  contains
384            iflag1(i) = 42            iflag1(i) = 42
385         end do         end do
386    
387         if (iflag_con == 3) then         CALL cv3_uncompress(idcum(:ncum), iflag, precip, VPrecip, sig, w0, &
388            CALL cv3_uncompress(idcum(:ncum), iflag, precip, VPrecip, sig, w0, &              ft, fq, fu, fv, inb, Ma, upwd, dnwd, dnwd0, qcondc, wd, cape, &
389                 ft, fq, fu, fv, inb, Ma, upwd, dnwd, dnwd0, qcondc, wd, cape, &              da, phi, mp, iflag1, precip1, VPrecip1, sig1, w01, ft1, fq1, &
390                 da, phi, mp, iflag1, precip1, VPrecip1, sig1, w01, ft1, fq1, &              fu1, fv1, inb1, Ma1, upwd1, dnwd1, dnwd01, qcondc1, wd1, &
391                 fu1, fv1, inb1, Ma1, upwd1, dnwd1, dnwd01, qcondc1, wd1, &              cape1, da1, phi1, mp1)
                cape1, da1, phi1, mp1)  
        else  
           ! iflag_con == 4  
           CALL cv_uncompress(idcum(:ncum), iflag, precip, cbmf, ft, fq, fu, &  
                fv, Ma, qcondc, iflag1, precip1, cbmf1, ft1, fq1, fu1, fv1, &  
                Ma1, qcondc1)  
        endif  
392      ENDIF ! ncum>0      ENDIF ! ncum>0
393    
394    end SUBROUTINE cv_driver    end SUBROUTINE cv_driver

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

  ViewVC Help
Powered by ViewVC 1.1.21