4 SUBROUTINE cvltr(pdtime, da, phi,phi2,d1a,dam, mpIN,epIN, &
6 sigd,sij,wght_cvfd,clw,elij,epmlmmm,eplamm, &
7 pmflxrin,pmflxsin,ev,te,wdtraina,wdtrainm, &
9 dtrcv,trsptd,dtrsscav,dtrsat,dtruscav,qdi,qpr, &
10 qpa,qmel,qtrdi,dtrcvma,mint, &
11 zmfd1a,zmfphi2,zmfdam)
27 REAL,
INTENT(IN) :: pdtime
28 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: da
29 REAL,
DIMENSION(klon,klev,klev),
INTENT(IN) :: phi
31 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: d1a,dam
32 REAL,
DIMENSION(klon,klev,klev),
INTENT(IN) :: phi2
34 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: mpIN
35 REAL,
DIMENSION(klon,klev+1),
INTENT(IN) :: paprs
37 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(IN) :: tr
38 INTEGER,
INTENT(IN) :: it
39 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: upd
40 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: dnd
42 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: wdtrainA
43 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: wdtrainM
44 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: pmflxrIN
45 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: pmflxsIN
46 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: ev
47 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: epIN
48 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: te
49 REAL,
DIMENSION(klon,klev,klev),
INTENT(IN) :: sij
50 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: wght_cvfd
51 REAL,
DIMENSION(klon,klev,klev),
INTENT(IN) :: elij
52 REAL,
DIMENSION(klon,klev,klev),
INTENT(IN) :: epmlmMm
53 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: eplaMm
55 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: clw
56 REAL,
DIMENSION(klon),
INTENT(IN) :: sigd
57 INTEGER,
DIMENSION(klon),
INTENT(IN) :: icb,inb
59 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: dtrcv
60 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: dtrcvMA
61 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: trsptd
62 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: dtrSscav
63 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: dtrsat
64 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: dtrUscav
68 REAL,
DIMENSION(klon,klev) :: dxpres
71 REAL,
DIMENSION(klon,klev,klev) :: zmd
72 REAL,
DIMENSION(klon,klev,klev) :: za
73 REAL,
DIMENSION(klon,klev,nbtr) :: zmfd,zmfa
74 REAL,
DIMENSION(klon,klev,nbtr) :: zmfp,zmfu
75 REAL,
DIMENSION(klon,nbtr) :: qfeed
77 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: zmfd1a
78 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: zmfdam
79 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: zmfphi2
82 REAL,
DIMENSION(klon,klev) :: Pa, Pm
83 REAL,
DIMENSION(klon,klev) :: pmflxs,pmflxr
84 REAL,
DIMENSION(klon,klev) :: mp
85 REAL,
DIMENSION(klon,klev) :: ep
86 REAL,
DIMENSION(klon,klev) :: evap
87 REAL,
DIMENSION(klon,klev) :: rho
89 REAL,
DIMENSION(klon,klev) :: kappa
91 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: qTrdi
92 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: qDi
93 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: qPr
94 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: qPa
95 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: qMel
96 REAL,
DIMENSION(klon,klev,nbtr) :: qMeltmp
97 REAL,
DIMENSION(klon,klev,nbtr) :: qpmMint
98 REAL,
DIMENSION(klon,klev),
INTENT(OUT) :: Mint
107 REAL,
PARAMETER :: rdrop=1.e-3
109 REAL,
DIMENSION(klon,klev) :: imp
112 REAL :: ccntrENV_coef
115 LOGICAL,
DIMENSION(klon,klev) :: NO_precip
127 call getin(
'ccntrAA_coef',ccntraa_coef)
128 call getin(
'ccntrENV_coef',ccntrenv_coef)
129 call getin(
'coefcoli',coefcoli)
132 print*,
'cvltr coef lessivage convectif', ccntraa_coef,ccntrenv_coef,coefcoli
163 imp(i,j) = coefcoli*0.75e-3/rdrop *&
164 0.5*(pmflxr(i,j+1)+pmflxs(i,j+1)+pmflxr(i,j)+pmflxs(i,j))
209 if(ev(i,j).lt.1.e-16)
then
212 evap(i,j)=ev(i,j)*sigd(i)
220 if(epin(i,j).lt.1.e-32)
then
228 if(mpin(i,j).lt.1.e-32)
then
233 if(pmflxsin(i,j).lt.1.e-32)
then
236 pmflxs(i,j)=pmflxsin(i,j)
238 if(pmflxrin(i,j).lt.1.e-32)
then
241 pmflxr(i,j)=pmflxrin(i,j)
243 if(wdtraina(i,j).lt.1.e-32)
then
246 pa(i,j)=wdtraina(i,j)
248 if(wdtrainm(i,j).lt.1.e-32)
then
251 pm(i,j)=wdtrainm(i,j)
259 no_precip(i,j) = (pmflxr(i,j+1)+pmflxs(i,j+1)).lt.1.e-10&
260 .and.pa(i,j).lt.1.e-10.and.pm(i,j).lt.1.e-10
281 zmd(i,k,k)=max(0.,mp(i,k)-mp(i,k+1))
287 if(mp(i,j+1).gt.1.e-10)
then
288 zmd(i,j,k)=zmd(i,j+1,k)*min(1.,mp(i,j)/mp(i,j+1))
296 za(i,j,k)=max(0.,zmd(i,j+1,k)-zmd(i,j,k))
304 if(mp(i,j+1).gt.1.e-10)
then
305 qtrdi(i,j+1,it)=qtrdi(i,j+1,it)+(zmd(i,j+1,k)/mp(i,j+1))*tr(i,k,it)
318 za(i,j,j-1)=za(i,j,j-1)+mp(i,j)
327 zmfd(i,j,it)=zmfd(i,j,it)+za(i,j,k)*(tr(i,k,it)-tr(i,j,it))
340 qfeed(i,it)=qfeed(i,it)+wght_cvfd(i,j)*tr(i,j,it)
349 zmfa(i,j,it)=da(i,j)*(qfeed(i,it)-tr(i,j,it))
357 zmfp(i,j,it)=zmfp(i,j,it)+phi(i,j,k)*(tr(i,k,it)-tr(i,j,it))
364 zmfd1a(i,j,it)=d1a(i,j)*tr(i,1,it)
365 zmfdam(i,j,it)=dam(i,j)*tr(i,1,it)
371 zmfphi2(i,j,it)=zmfphi2(i,j,it)+phi2(i,j,k)*tr(i,k,it)
377 zmfu(i,j,it)=max(0.,upd(i,j+1)+dnd(i,j+1))*(tr(i,j+1,it)-tr(i,j,it))
382 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))
391 dxpres(i,k)=paprs(i,k)-paprs(i,k+1)
399 if(j.ge.icb(i).and.j.le.inb(i))
then
400 if(clw(i,j).gt.1.e-16)
then
401 qpa(i,j,it)=ccntraa_coef*tr(i,1,it)/clw(i,j)
415 if(k.ge.icb(i).and.k.le.inb(i).and.&
417 if(elij(i,k,j).gt.1.e-16)
then
418 qmeltmp(i,j,it)=((1-ep(i,k))*ccntraa_coef*tr(i,1,it)&
419 *(1.-sij(i,k,j)) +ccntrenv_coef&
420 *tr(i,k,it)*sij(i,k,j)) / elij(i,k,j)
424 qpmmint(i,j,it)=qpmmint(i,j,it) + qmeltmp(i,j,it)*epmlmmm(i,j,k)
425 mint(i,j)=mint(i,j) + epmlmmm(i,j,k)
433 if(mint(i,j).gt.1.e-16)
then
434 qmel(i,j,it)=qpmmint(i,j,it)/mint(i,j)
444 if(mp(i,j+1).gt.mp(i,j).and.mp(i,j+1).gt.1.e-10)
then
445 kappa(i,j)=((pmflxr(i,j+1)+pmflxs(i,j+1)+pa(i,j)+pm(i,j))*&
446 (-mp(i,j+1)-imp(i,j)/
rg*dxpres(i,j))&
447 + (imp(i,j)/
rg*dxpres(i,j))*(evap(i,j)/
rg*dxpres(i,j)))
449 elseif(mp(i,j).gt.mp(i,j+1).and.mp(i,j).gt.1.e-10) then
451 kappa(i,j)=((pmflxr(i,j+1)+pmflxs(i,j+1)+pa(i,j)+pm(i,j))*&
452 (-mp(i,2)-imp(i,j)/
rg*dxpres(i,j))&
453 + (imp(i,j)/
rg*dxpres(i,j))*(evap(i,j)/
rg*dxpres(i,j)))
455 kappa(i,j)=((pmflxr(i,j+1)+pmflxs(i,j+1)+pa(i,j)+pm(i,j))*&
456 (-mp(i,j)-imp(i,j)/
rg*dxpres(i,j))&
457 + (imp(i,j)/
rg*dxpres(i,j))*(evap(i,j)/
rg*dxpres(i,j)))
467 if (abs(kappa(i,j)).lt.1.e-25)
then
470 qdi(i,j,it)=qdi(i,j+1,it)
471 elseif(mp(i,j+1).gt.mp(i,j).and.mp(i,j+1).gt.1.e-10)
then
472 qdi(i,j,it)=qdi(i,j+1,it)
473 elseif(mp(i,j).gt.mp(i,j+1).and.mp(i,j).gt.1.e-10) then
474 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))
476 qdi(i,j,it)=tr(i,j,it)
479 if(no_precip(i,j))
then
482 qpr(i,j,it)=((pmflxr(i,j+1)+pmflxs(i,j+1))*qpr(i,j+1,it)+&
483 pa(i,j)*qpa(i,j,it)+pm(i,j)*qmel(i,j,it)&
484 +imp(i,j)/
rg*dxpres(i,j)*qdi(i,j,it))/&
485 (pmflxr(i,j+1)+pmflxs(i,j+1)+pa(i,j)+pm(i,j))
488 kappa(i,j)=1./kappa(i,j)
493 qdi(i,j,it)=tr(i,j,it)
498 if(mp(i,2).gt.1.e-10)
then
499 if(no_precip(i,j))
then
500 qdi(i,j,it)=qdi(i,j+1,it)
503 qdi(i,j,it)=kappa(i,j)*(&
504 (-evap(i,j)/
rg*dxpres(i,j))*((pmflxr(i,j+1)+pmflxs(i,j+1))*qpr(i,j+1,it)+&
505 pa(i,j)*qpa(i,j,it)+pm(i,j)*qmel(i,j,it)) +&
506 (pmflxr(i,j+1)+pmflxs(i,j+1)+pa(i,j)+pm(i,j))*&
507 (-mp(i,j+1)*qdi(i,j+1,it)))
509 qpr(i,j,it)=kappa(i,j)*(&
510 (-mp(i,j+1)-imp(i,j)/
rg*dxpres(i,j))*&
511 ((pmflxr(i,j+1)+pmflxs(i,j+1))*qpr(i,j+1,it)+&
512 pa(i,j)*qpa(i,j,it)+pm(i,j)*qmel(i,j,it))&
513 +(-mp(i,j+1)*qdi(i,j+1,it)) * (imp(i,j)/
rg*dxpres(i,j)))
517 qdi(i,j,it)=tr(i,j,it)
518 if(no_precip(i,j))
then
521 qpr(i,j,it)=((pmflxr(i,j+1)+pmflxs(i,j+1))*qpr(i,j+1,it)+&
522 pa(i,j)*qpa(i,j,it)+pm(i,j)*qmel(i,j,it)&
523 +imp(i,j)/
rg*dxpres(i,j)*tr(i,j,it))/&
524 (pmflxr(i,j+1)+pmflxs(i,j+1)+pa(i,j)+pm(i,j))
532 if(mp(i,j+1).gt.mp(i,j).and.mp(i,j+1).gt.1.e-10)
then
533 if(no_precip(i,j))
then
534 qdi(i,j,it)=qdi(i,j+1,it)
537 qdi(i,j,it)=kappa(i,j)*(&
538 (-evap(i,j)/
rg*dxpres(i,j))*((pmflxr(i,j+1)+pmflxs(i,j+1))*qpr(i,j+1,it)+&
539 pa(i,j)*qpa(i,j,it)+pm(i,j)*qmel(i,j,it)) +&
540 (pmflxr(i,j+1)+pmflxs(i,j+1)+pa(i,j)+pm(i,j))*&
541 (-mp(i,j+1)*qdi(i,j+1,it)))
543 qpr(i,j,it)=kappa(i,j)*(&
544 (-mp(i,j+1)-imp(i,j)/
rg*dxpres(i,j))*&
545 ((pmflxr(i,j+1)+pmflxs(i,j+1))*qpr(i,j+1,it)+&
546 pa(i,j)*qpa(i,j,it)+pm(i,j)*qmel(i,j,it))&
547 +(-mp(i,j+1)*qdi(i,j+1,it)) * (imp(i,j)/
rg*dxpres(i,j)))
550 elseif(mp(i,j).gt.mp(i,j+1).and.mp(i,j).gt.1.e-10)
then
551 if(no_precip(i,j))
then
552 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))
555 qdi(i,j,it)=kappa(i,j)*(&
556 (-evap(i,j)/
rg*dxpres(i,j))*((pmflxr(i,j+1)+pmflxs(i,j+1))*qpr(i,j+1,it)+&
557 pa(i,j)*qpa(i,j,it)+pm(i,j)*qmel(i,j,it)) +&
558 (pmflxr(i,j+1)+pmflxs(i,j+1)+pa(i,j)+pm(i,j))*&
559 (-mp(i,j+1)*(qdi(i,j+1,it)-tr(i,j,it))-mp(i,j)*tr(i,j,it)))
561 qpr(i,j,it)=kappa(i,j)*(&
562 (-mp(i,j)-imp(i,j)/
rg*dxpres(i,j))*&
563 ((pmflxr(i,j+1)+pmflxs(i,j+1))*qpr(i,j+1,it)+&
564 pa(i,j)*qpa(i,j,it)+pm(i,j)*qmel(i,j,it))&
565 +(-mp(i,j+1)*(qdi(i,j+1,it)-tr(i,j,it))-mp(i,j)*tr(i,j,it))*&
566 (imp(i,j)/
rg*dxpres(i,j)))
570 qdi(i,j,it)=tr(i,j,it)
571 if(no_precip(i,j))
then
574 qpr(i,j,it)=((pmflxr(i,j+1)+pmflxs(i,j+1))*qpr(i,j+1,it)+&
575 pa(i,j)*qpa(i,j,it)+pm(i,j)*qmel(i,j,it)&
576 +imp(i,j)/
rg*dxpres(i,j)*tr(i,j,it))/&
577 (pmflxr(i,j+1)+pmflxs(i,j+1)+pa(i,j)+pm(i,j))
609 tdcvma=zmfd(i,k,it)+zmfu(i,k,it)+zmfa(i,k,it)+zmfp(i,k,it)
610 trsptrac=zmfu(i,k,it)+zmfa(i,k,it)+zmfp(i,k,it)
612 scavtrac=-ccntraa_coef*zmfd1a(i,k,it)&
613 -zmfphi2(i,k,it)*ccntrenv_coef&
614 -zmfdam(i,k,it)*ccntraa_coef
616 if(k.le.inb(i).and.k.gt.1)
then
618 if(mp(i,k+1).gt.mp(i,k).and.mp(i,k+1).gt.1.e-10)
then
619 uscavtrac= (-mp(i,k)+mp(i,k+1))*(qdi(i,k,it)-tr(i,k,it))&
620 + mp(i,k)*(tr(i,k-1,it)-tr(i,k,it))
627 elseif(mp(i,k).gt.mp(i,k+1).and.mp(i,k).gt.1.e-10)
then
628 uscavtrac= mp(i,k)*(tr(i,k-1,it)-tr(i,k,it))
634 if(no_precip(i,k))
then
638 uscavtrac=-imp(i,k)*tr(i,k,it)*dxpres(i,k)/
rg+evap(i,k)*qpr(i,k,it)*dxpres(i,k)/
rg
644 if(mp(i,2).gt.1.e-10)
then
645 uscavtrac= (-0.+mp(i,2))*(qdi(i,k,it)-tr(i,k,it))
653 if(no_precip(i,1))
then
656 uscavtrac=-imp(i,k)*tr(i,k,it)*dxpres(i,k)/
rg+evap(i,k)*qpr(i,k,it)*dxpres(i,k)/
rg
666 trsptd(i,k,it)=trsptrac*pdtimerg/dxpres(i,k)
667 dtrsscav(i,k,it)=scavtrac*pdtimerg/dxpres(i,k)
668 dtruscav(i,k,it)=uscavtrac*pdtimerg/dxpres(i,k)
669 dtrsat(i,k,it)=(trsptrac+scavtrac)*pdtimerg/dxpres(i,k)
670 dtrcv(i,k,it)=(trsptrac+scavtrac+uscavtrac)*pdtimerg/dxpres(i,k)
672 dtrcvma(i,k,it)=tdcvma*pdtimerg/dxpres(i,k)
subroutine cvltr(pdtime, da, phi, phi2, d1a, dam, mpIN, epIN,
!$Id Turb_fcg_gcssold get_uvd it
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL &zphi geo500!IM on interpole a chaque pas de temps le paprs
character(len=20), dimension(:), allocatable, save tname
!$Id sig2feed!common comconema2 iflag_cvl_sigd common comconema1 epmax
!$Id!Parameters for nlm real sigd