4 SUBROUTINE cvltr(pdtime, da, phi,phi2,d1a,dam, mpIN,epIN, &
5 sigd,sij,clw,elij,epmlmmm,eplamm, &
6 pmflxrin,pmflxsin,ev,te,wdtraina,wdtrainm, &
7 paprs,
it,tr,upd,dnd,inb,icb, &
8 dtrcv,trsptd,dtrsscav,dtrsat,dtruscav,qdi,qpr, &
9 qpa,qmel,qtrdi,dtrcvma,mint, &
10 zmfd1a,zmfphi2,zmfdam)
26 REAL,
INTENT(IN) :: pdtime
27 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: da
28 REAL,
DIMENSION(klon,klev,klev),
INTENT(IN) :: phi
30 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: d1a,dam
31 REAL,
DIMENSION(klon,klev,klev),
INTENT(IN) :: phi2
33 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: mpin
34 REAL,
DIMENSION(klon,klev+1),
INTENT(IN) :: paprs
36 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(IN) :: tr
37 INTEGER,
INTENT(IN) ::
it
38 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: upd
39 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: dnd
41 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: wdtraina
42 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: wdtrainm
43 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: pmflxrin
44 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: pmflxsin
45 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: ev
46 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: epin
47 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: te
48 REAL,
DIMENSION(klon,klev,klev),
INTENT(IN) :: sij
49 REAL,
DIMENSION(klon,klev,klev),
INTENT(IN) :: elij
50 REAL,
DIMENSION(klon,klev,klev),
INTENT(IN) :: epmlmmm
51 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: eplamm
53 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: clw
54 REAL,
DIMENSION(klon),
INTENT(IN) ::
sigd
55 INTEGER,
DIMENSION(klon),
INTENT(IN) :: icb,inb
57 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: dtrcv
58 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: dtrcvma
59 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: trsptd
60 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: dtrsscav
61 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: dtrsat
62 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: dtruscav
66 REAL,
DIMENSION(klon,klev) :: dxpres
69 REAL,
DIMENSION(klon,klev,klev) :: zmd
70 REAL,
DIMENSION(klon,klev,klev) :: za
71 REAL,
DIMENSION(klon,klev,nbtr) :: zmfd,zmfa
72 REAL,
DIMENSION(klon,klev,nbtr) :: zmfp,zmfu
74 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: zmfd1a
75 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: zmfdam
76 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: zmfphi2
79 REAL,
DIMENSION(klon,klev) ::
pa, pm
80 REAL,
DIMENSION(klon,klev) :: pmflxs,pmflxr
81 REAL,
DIMENSION(klon,klev) :: mp
82 REAL,
DIMENSION(klon,klev) :: ep
83 REAL,
DIMENSION(klon,klev) :: evap
84 REAL,
DIMENSION(klon,klev) :: rho
86 REAL,
DIMENSION(klon,klev) ::
kappa
88 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: qtrdi
89 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: qdi
90 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: qpr
91 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: qpa
92 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: qmel
93 REAL,
DIMENSION(klon,klev,nbtr) :: qmeltmp
94 REAL,
DIMENSION(klon,klev,nbtr) :: qpmmint
95 REAL,
DIMENSION(klon,klev),
INTENT(OUT) :: mint
104 REAL,
PARAMETER :: rdrop=1.e-3
106 REAL,
DIMENSION(klon,klev) :: imp
109 REAL :: ccntrenv_coef
112 LOGICAL,
DIMENSION(klon,klev) :: no_precip
124 call
getin(
'ccntrAA_coef',ccntraa_coef)
125 call
getin(
'ccntrENV_coef',ccntrenv_coef)
126 call
getin(
'coefcoli',coefcoli)
129 print*,
'cvltr coef lessivage convectif', ccntraa_coef,ccntrenv_coef,coefcoli
160 imp(
i,
j) = coefcoli*0.75e-3/rdrop *&
161 0.5*(pmflxr(
i,
j+1)+pmflxs(
i,
j+1)+pmflxr(
i,
j)+pmflxs(
i,
j))
206 if(ev(
i,
j).lt.1.e-16)
then
217 if(epin(
i,
j).lt.1.e-32)
then
225 if(mpin(
i,
j).lt.1.e-32)
then
230 if(pmflxsin(
i,
j).lt.1.e-32)
then
233 pmflxs(
i,
j)=pmflxsin(
i,
j)
235 if(pmflxrin(
i,
j).lt.1.e-32)
then
238 pmflxr(
i,
j)=pmflxrin(
i,
j)
240 if(wdtraina(
i,
j).lt.1.e-32)
then
245 if(wdtrainm(
i,
j).lt.1.e-32)
then
248 pm(
i,
j)=wdtrainm(
i,
j)
256 no_precip(
i,
j) = (pmflxr(
i,
j+1)+pmflxs(
i,
j+1)).lt.1.e-10&
257 .and.
pa(
i,
j).lt.1.e-10.and.pm(
i,
j).lt.1.e-10
278 zmd(
i,
k,
k)=max(0.,mp(
i,
k)-mp(
i,
k+1))
284 if(mp(
i,
j+1).gt.1.e-10)
then
285 zmd(
i,
j,
k)=zmd(
i,
j+1,
k)*min(1.,mp(
i,
j)/mp(
i,
j+1))
293 za(
i,
j,
k)=max(0.,zmd(
i,
j+1,
k)-zmd(
i,
j,
k))
301 if(mp(
i,
j+1).gt.1.e-10)
then
324 zmfd(
i,
j,
it)=zmfd(
i,
j,
it)+za(
i,
j,
k)*(tr(
i,
k,
it)-tr(
i,
j,
it))
340 zmfp(
i,
j,
it)=zmfp(
i,
j,
it)+phi(
i,
j,
k)*(tr(
i,
k,
it)-tr(
i,
j,
it))
365 zmfu(
i,
j,
it)=zmfu(
i,
j,
it)+min(0.,upd(
i,
j)+dnd(
i,
j))*(tr(
i,
j,
it)-tr(
i,
j-1,
it))
374 dxpres(
i,
k)=paprs(
i,
k)-paprs(
i,
k+1)
382 if(
j.ge.icb(
i).and.
j.le.inb(
i))
then
383 if(clw(
i,
j).gt.1.e-16)
then
384 qpa(
i,
j,
it)=ccntraa_coef*tr(
i,1,
it)/clw(
i,
j)
398 if(
k.ge.icb(
i).and.
k.le.inb(
i).and.&
400 if(elij(
i,
k,
j).gt.1.e-16)
then
401 qmeltmp(
i,
j,
it)=((1-ep(
i,
k))*ccntraa_coef*tr(
i,1,
it)&
402 *(1.-sij(
i,
k,
j)) +ccntrenv_coef&
408 mint(
i,
j)=mint(
i,
j) + epmlmmm(
i,
j,
k)
416 if(mint(
i,
j).gt.1.e-16)
then
427 if(mp(
i,
j+1).gt.mp(
i,
j).and.mp(
i,
j+1).gt.1.e-10)
then
429 (-mp(
i,
j+1)-imp(
i,
j)/rg*dxpres(
i,
j))&
430 + (imp(
i,
j)/rg*dxpres(
i,
j))*(evap(
i,
j)/rg*dxpres(
i,
j)))
432 elseif(mp(
i,
j).gt.mp(
i,
j+1).and.mp(
i,
j).gt.1.e-10) then
435 (-mp(
i,2)-imp(
i,
j)/rg*dxpres(
i,
j))&
436 + (imp(
i,
j)/rg*dxpres(
i,
j))*(evap(
i,
j)/rg*dxpres(
i,
j)))
439 (-mp(
i,
j)-imp(
i,
j)/rg*dxpres(
i,
j))&
440 + (imp(
i,
j)/rg*dxpres(
i,
j))*(evap(
i,
j)/rg*dxpres(
i,
j)))
450 if (abs(
kappa(
i,
j)).lt.1.e-25)
then
454 elseif(mp(
i,
j+1).gt.mp(
i,
j).and.mp(
i,
j+1).gt.1.e-10)
then
456 elseif(mp(
i,
j).gt.mp(
i,
j+1).and.mp(
i,
j).gt.1.e-10) then
457 qdi(
i,
j,
it)=(-mp(
i,
j+1)*(qdi(
i,
j+1,
it)-tr(
i,
j,
it))-mp(
i,
j)*tr(
i,
j,
it))/(-mp(
i,
j))
462 if(no_precip(
i,
j))
then
465 qpr(
i,
j,
it)=((pmflxr(
i,
j+1)+pmflxs(
i,
j+1))*qpr(
i,
j+1,
it)+&
467 +imp(
i,
j)/rg*dxpres(
i,
j)*qdi(
i,
j,
it))/&
481 if(mp(
i,2).gt.1.e-10)
then
482 if(no_precip(
i,
j))
then
487 (-evap(
i,
j)/rg*dxpres(
i,
j))*((pmflxr(
i,
j+1)+pmflxs(
i,
j+1))*qpr(
i,
j+1,
it)+&
489 (pmflxr(
i,
j+1)+pmflxs(
i,
j+1)+
pa(
i,
j)+pm(
i,
j))*&
490 (-mp(
i,
j+1)*qdi(
i,
j+1,
it)))
493 (-mp(
i,
j+1)-imp(
i,
j)/rg*dxpres(
i,
j))*&
494 ((pmflxr(
i,
j+1)+pmflxs(
i,
j+1))*qpr(
i,
j+1,
it)+&
496 +(-mp(
i,
j+1)*qdi(
i,
j+1,
it)) * (imp(
i,
j)/rg*dxpres(
i,
j)))
501 if(no_precip(
i,
j))
then
504 qpr(
i,
j,
it)=((pmflxr(
i,
j+1)+pmflxs(
i,
j+1))*qpr(
i,
j+1,
it)+&
506 +imp(
i,
j)/rg*dxpres(
i,
j)*tr(
i,
j,
it))/&
515 if(mp(
i,
j+1).gt.mp(
i,
j).and.mp(
i,
j+1).gt.1.e-10)
then
516 if(no_precip(
i,
j))
then
521 (-evap(
i,
j)/rg*dxpres(
i,
j))*((pmflxr(
i,
j+1)+pmflxs(
i,
j+1))*qpr(
i,
j+1,
it)+&
523 (pmflxr(
i,
j+1)+pmflxs(
i,
j+1)+
pa(
i,
j)+pm(
i,
j))*&
524 (-mp(
i,
j+1)*qdi(
i,
j+1,
it)))
527 (-mp(
i,
j+1)-imp(
i,
j)/rg*dxpres(
i,
j))*&
528 ((pmflxr(
i,
j+1)+pmflxs(
i,
j+1))*qpr(
i,
j+1,
it)+&
530 +(-mp(
i,
j+1)*qdi(
i,
j+1,
it)) * (imp(
i,
j)/rg*dxpres(
i,
j)))
533 elseif(mp(
i,
j).gt.mp(
i,
j+1).and.mp(
i,
j).gt.1.e-10)
then
534 if(no_precip(
i,
j))
then
535 qdi(
i,
j,
it)=(-mp(
i,
j+1)*(qdi(
i,
j+1,
it)-tr(
i,
j,
it))-mp(
i,
j)*tr(
i,
j,
it))/(-mp(
i,
j))
539 (-evap(
i,
j)/rg*dxpres(
i,
j))*((pmflxr(
i,
j+1)+pmflxs(
i,
j+1))*qpr(
i,
j+1,
it)+&
541 (pmflxr(
i,
j+1)+pmflxs(
i,
j+1)+
pa(
i,
j)+pm(
i,
j))*&
545 (-mp(
i,
j)-imp(
i,
j)/rg*dxpres(
i,
j))*&
546 ((pmflxr(
i,
j+1)+pmflxs(
i,
j+1))*qpr(
i,
j+1,
it)+&
549 (imp(
i,
j)/rg*dxpres(
i,
j)))
554 if(no_precip(
i,
j))
then
557 qpr(
i,
j,
it)=((pmflxr(
i,
j+1)+pmflxs(
i,
j+1))*qpr(
i,
j+1,
it)+&
559 +imp(
i,
j)/rg*dxpres(
i,
j)*tr(
i,
j,
it))/&
595 scavtrac=-ccntraa_coef*zmfd1a(
i,
k,
it)&
596 -zmfphi2(
i,
k,
it)*ccntrenv_coef&
597 -zmfdam(
i,
k,
it)*ccntraa_coef
599 if(
k.le.inb(
i).and.
k.gt.1)
then
601 if(mp(
i,
k+1).gt.mp(
i,
k).and.mp(
i,
k+1).gt.1.e-10)
then
602 uscavtrac= (-mp(
i,
k)+mp(
i,
k+1))*(qdi(
i,
k,
it)-tr(
i,
k,
it))&
610 elseif(mp(
i,
k).gt.mp(
i,
k+1).and.mp(
i,
k).gt.1.e-10)
then
617 if(no_precip(
i,
k))
then
621 uscavtrac=-imp(
i,
k)*tr(
i,
k,
it)*dxpres(
i,
k)/rg+evap(
i,
k)*qpr(
i,
k,
it)*dxpres(
i,
k)/rg
627 if(mp(
i,2).gt.1.e-10)
then
628 uscavtrac= (-0.+mp(
i,2))*(qdi(
i,
k,
it)-tr(
i,
k,
it))
636 if(no_precip(
i,1))
then
639 uscavtrac=-imp(
i,
k)*tr(
i,
k,
it)*dxpres(
i,
k)/rg+evap(
i,
k)*qpr(
i,
k,
it)*dxpres(
i,
k)/rg
649 trsptd(
i,
k,
it)=trsptrac*pdtimerg/dxpres(
i,
k)
650 dtrsscav(
i,
k,
it)=scavtrac*pdtimerg/dxpres(
i,
k)
651 dtruscav(
i,
k,
it)=uscavtrac*pdtimerg/dxpres(
i,
k)
652 dtrsat(
i,
k,
it)=(trsptrac+scavtrac)*pdtimerg/dxpres(
i,
k)
653 dtrcv(
i,
k,
it)=(trsptrac+scavtrac+uscavtrac)*pdtimerg/dxpres(
i,
k)
655 dtrcvma(
i,
k,
it)=tdcvma*pdtimerg/dxpres(
i,
k)