/[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 181 by guez, Tue Mar 15 17:51:30 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 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.181

  ViewVC Help
Powered by ViewVC 1.1.21