4 SUBROUTINE cvltr_scav(pdtime, da, phi,phi2,d1a,dam, mpIN,epIN, &
5 sigd,sij,wght_cvfd,clw,elij,epmlmmm,eplamm, &
6 pmflxrin,pmflxsin,ev,te,wdtraina,wdtrainm, &
8 ccntraa_3d,ccntrenv_3d,coefcoli_3d, &
9 dtrcv,trsptd,dtrsscav,dtrsat,dtruscav,qdi,qpr, &
10 qpa,qmel,qtrdi,dtrcvma,mint, &
11 zmfd1a,zmfphi2,zmfdam)
29 REAL,
INTENT(IN) :: pdtime
30 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: da
31 REAL,
DIMENSION(klon,klev,klev),
INTENT(IN) :: phi
33 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: d1a,dam
34 REAL,
DIMENSION(klon,klev,klev),
INTENT(IN) :: phi2
36 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: mpIN
37 REAL,
DIMENSION(klon,klev+1),
INTENT(IN) :: paprs
38 INTEGER,
INTENT(IN) :: it
39 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(IN) :: tr
40 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: upd
41 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: dnd
43 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: wdtrainA
44 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: wdtrainM
46 REAL,
DIMENSION(klon,klev+1),
INTENT(IN) :: pmflxrIN
48 REAL,
DIMENSION(klon,klev+1),
INTENT(IN) :: pmflxsIN
49 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: ev
50 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: epIN
51 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: te
52 REAL,
DIMENSION(klon,klev,klev),
INTENT(IN) :: sij
53 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: wght_cvfd
54 REAL,
DIMENSION(klon,klev,klev),
INTENT(IN) :: elij
55 REAL,
DIMENSION(klon,klev,klev),
INTENT(IN) :: epmlmMm
56 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: eplaMm
58 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: clw
59 REAL,
DIMENSION(klon),
INTENT(IN) :: sigd
60 INTEGER,
DIMENSION(klon),
INTENT(IN) :: icb,inb
62 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: ccntrAA_3d
63 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: ccntrENV_3d
64 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: coefcoli_3d
67 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: dtrcv
68 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: dtrcvMA
69 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: trsptd
70 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: dtrSscav
71 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: dtrsat
72 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: dtrUscav
76 REAL,
DIMENSION(klon,klev) :: dxpres
78 REAL,
DIMENSION(klon,nbtr) :: qfeed
80 REAL,
DIMENSION(klon,klev,klev) :: zmd
81 REAL,
DIMENSION(klon,klev,klev) :: za
82 REAL,
DIMENSION(klon,klev,nbtr) :: zmfd,zmfa
83 REAL,
DIMENSION(klon,klev,nbtr) :: zmfp,zmfu
85 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: zmfd1a
86 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: zmfdam
87 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: zmfphi2
90 REAL,
DIMENSION(klon,klev) :: Pa, Pm
91 REAL,
DIMENSION(klon,klev) :: pmflxs,pmflxr
92 REAL,
DIMENSION(klon,klev) :: mp
93 REAL,
DIMENSION(klon,klev) :: ep
94 REAL,
DIMENSION(klon,klev) :: evap
95 REAL,
DIMENSION(klon,klev) :: rho
97 REAL,
DIMENSION(klon,klev) :: kappa
99 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: qTrdi
100 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: qDi
101 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: qPr
102 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: qPa
103 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: qMel
104 REAL,
DIMENSION(klon,klev,nbtr) :: qMeltmp
105 REAL,
DIMENSION(klon,klev,nbtr) :: qpmMint
106 REAL,
DIMENSION(klon,klev),
INTENT(OUT) :: Mint
115 REAL,
PARAMETER :: rdrop=1.e-3
117 REAL,
DIMENSION(klon,klev) :: imp
119 LOGICAL,
DIMENSION(klon,klev) :: NO_precip
186 IF(ev(i,j).lt.1.e-16)
THEN
189 evap(i,j)=ev(i,j)*sigd(i)
197 IF(epin(i,j).LT.1.e-32)
THEN
205 IF(mpin(i,j).LT.1.e-32)
THEN
210 IF(pmflxsin(i,j).LT.1.e-32)
THEN
213 pmflxs(i,j)=pmflxsin(i,j)
215 IF(pmflxrin(i,j).LT.1.e-32)
THEN
218 pmflxr(i,j)=pmflxrin(i,j)
220 IF(wdtraina(i,j).LT.1.e-32)
THEN
223 pa(i,j)=wdtraina(i,j)
225 IF(wdtrainm(i,j).LT.1.e-32)
THEN
228 pm(i,j)=wdtrainm(i,j)
236 no_precip(i,j) = (pmflxr(i,j+1)+pmflxs(i,j+1)).LT.1.e-10&
237 .AND.pa(i,j).LT.1.e-10.AND.pm(i,j).LT.1.e-10
256 imp(i,j) = coefcoli_3d(i,j)*0.75e-3/rdrop *&
257 0.5*(pmflxr(i,j+1)+pmflxs(i,j+1)+pmflxr(i,j)+pmflxs(i,j))
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
302 qtrdi(i,j+1,it)=qtrdi(i,j+1,it)+(zmd(i,j+1,k)/mp(i,j+1))*tr(i,k,it)
315 za(i,j,j-1)=za(i,j,j-1)+mp(i,j)
324 zmfd(i,j,it)=zmfd(i,j,it)+za(i,j,k)*(tr(i,k,it)-tr(i,j,it))
336 qfeed(i,it)=qfeed(i,it)+wght_cvfd(i,j)*tr(i,j,it)
345 zmfa(i,j,it)=da(i,j)*(qfeed(i,it)-tr(i,j,it))
353 zmfp(i,j,it)=zmfp(i,j,it)+phi(i,j,k)*(tr(i,k,it)-tr(i,j,it))
360 zmfd1a(i,j,it)=d1a(i,j)*tr(i,1,it)
361 zmfdam(i,j,it)=dam(i,j)*tr(i,1,it)
367 zmfphi2(i,j,it)=zmfphi2(i,j,it)+phi2(i,j,k)*tr(i,k,it)
373 zmfu(i,j,it)=max(0.,upd(i,j+1)+dnd(i,j+1))*(tr(i,j+1,it)-tr(i,j,it))
378 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))
387 dxpres(i,k)=paprs(i,k)-paprs(i,k+1)
395 IF(j.GE.icb(i).AND.j.LE.inb(i))
THEN
396 IF(clw(i,j).GT.1.e-16)
THEN
398 qpa(i,j,it)=ccntraa_3d(i,j)*tr(i,1,it)/clw(i,j)
412 IF(k.GE.icb(i).AND.k.LE.inb(i).AND.&
414 IF(elij(i,k,j).GT.1.e-16)
THEN
418 qmeltmp(i,j,it)=((1-ep(i,k))*ccntraa_3d(i,k)*tr(i,1,it)&
419 *(1.-sij(i,k,j)) +ccntrenv_3d(i,k)&
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)
615 scavtrac=-ccntraa_3d(i,k)*zmfd1a(i,k,it)&
616 -zmfphi2(i,k,it)*ccntrenv_3d(i,k)&
617 -zmfdam(i,k,it)*ccntraa_3d(i,k)
619 if(k.LE.inb(i).AND.k.GT.1)
THEN
621 if(mp(i,k+1).GT.mp(i,k).AND.mp(i,k+1).GT.1.e-10)
THEN
622 uscavtrac= (-mp(i,k)+mp(i,k+1))*(qdi(i,k,it)-tr(i,k,it))&
623 + mp(i,k)*(tr(i,k-1,it)-tr(i,k,it))
630 ELSEIF(mp(i,k).GT.mp(i,k+1).AND.mp(i,k).GT.1.e-10)
THEN
631 uscavtrac= mp(i,k)*(tr(i,k-1,it)-tr(i,k,it))
637 if(no_precip(i,k))
THEN
641 uscavtrac=-imp(i,k)*tr(i,k,it)*dxpres(i,k)/
rg+evap(i,k)*qpr(i,k,it)*dxpres(i,k)/
rg
655 if(mp(i,2).GT.1.e-10)
THEN
656 uscavtrac= (-0.+mp(i,2))*(qdi(i,k,it)-tr(i,k,it))
664 if(no_precip(i,1))
THEN
667 uscavtrac=-imp(i,k)*tr(i,k,it)*dxpres(i,k)/
rg+evap(i,k)*qpr(i,k,it)*dxpres(i,k)/
rg
677 trsptd(i,k,it)=trsptrac*pdtimerg/dxpres(i,k)
678 dtrsscav(i,k,it)=scavtrac*pdtimerg/dxpres(i,k)
679 dtruscav(i,k,it)=uscavtrac*pdtimerg/dxpres(i,k)
680 dtrsat(i,k,it)=(trsptrac+scavtrac)*pdtimerg/dxpres(i,k)
681 dtrcv(i,k,it)=(trsptrac+scavtrac+uscavtrac)*pdtimerg/dxpres(i,k)
683 dtrcvma(i,k,it)=tdcvma*pdtimerg/dxpres(i,k)
!$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
subroutine cvltr_scav(pdtime, da, phi, phi2, d1a, dam, mpIN, epIN, sigd, sij, wght_cvfd, clw, elij, epmlmMm, eplaMm, pmflxrIN, pmflxsIN, ev, te, wdtrainA, wdtrainM, paprs, it, tr, upd, dnd, inb, icb, ccntrAA_3d, ccntrENV_3d, coefcoli_3d, dtrcv, trsptd, dtrSscav, dtrsat, dtrUscav, qDi, qPr, qPa, qMel, qTrdi, dtrcvMA, Mint, zmfd1a, zmfphi2, zmfdam)
!$Id!Parameters for nlm real sigd