4 SUBROUTINE conflx(dtime, pres_h, pres_f, t, q, con_t, con_q, pqhfl, w, d_t, &
5 d_q, rain, snow, pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, kcbot, kctop, &
119 pt(i, k) = t(i,
klev-k+1)
120 pq(i, k) = q(i,
klev-k+1)
121 paprsf(i, k) = pres_f(i,
klev-k+1)
122 paprs(i, k) = pres_h(i,
klev+1-k+1)
123 pvervel(i, k) = w(i,
klev+1-k)
124 zcvgt(i, k) = con_t(i,
klev-k+1)
125 zcvgq(i, k) = con_q(i,
klev-k+1)
127 zdelta = max(0., sign(1.,rtt-pt(i,k)))
128 zqsat = r2es*foeew(pt(i,k), zdelta)/paprsf(i, k)
129 zqsat = min(0.5, zqsat)
130 zqsat = zqsat/(1.-retv*zqsat)
135 paprs(i,
klev+1) = pres_h(i, 1)
136 zgeom(i,
klev) = rd*pt(i,
klev)/(0.5*(paprs(i,
klev+1)+paprsf(i, &
139 DO k =
klev - 1, 1, -1
141 zgeom(i, k) = zgeom(i, k+1) + rd*0.5*(pt(i,k+1)+pt(i,k))/paprs(i, k+1)* &
142 (paprsf(i,k+1)-paprsf(i,k))
148 CALL flxmain(dtime, pt, pq, pqs, pqhfl, paprsf, paprs, zgeom, land, zcvgt, &
149 zcvgq, pvervel, rain, snow, kcbot, kctop, kdtop, zmfu, zmfd, zen_u, &
150 zde_u, zen_d, zde_d, d_t_bis, d_q_bis, zmflxr, zmflxs)
160 d_q(i,
klev+1-k) = dtime*d_q_bis(i, k)
161 d_t(i,
klev+1-k) = dtime*d_t_bis(i, k)
174 pmfu(i,
klev+2-k) = zmfu(i, k)
175 pmfd(i,
klev+2-k) = zmfd(i, k)
181 pen_u(i,
klev+1-k) = zen_u(i, k)
182 pde_u(i,
klev+1-k) = zde_u(i, k)
188 pen_d(i,
klev+1-k) = -zen_d(i, k+1)
189 pde_d(i,
klev+1-k) = -zde_d(i, k+1)
195 pmflxr(i,
klev+2-k) = zmflxr(i, k)
196 pmflxs(i,
klev+2-k) = zmflxs(i, k)
203 SUBROUTINE flxmain(pdtime, pten, pqen, pqsen, pqhfl, pap, paph, pgeo, ldland, &
204 ptte, pqte, pvervel, prsfc, pssfc, kcbot, kctop, kdtop, &
206 pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, dt_con, dq_con, pmflxr, pmflxs)
242 REAL pdtime, zqumqe, zdqmin, zalvdcp, zhsat, zzz
243 REAL zhhat, zpbmpt, zgam, zeps, zfac
244 INTEGER i, k, ikb, itopm2, kcum
256 DATA firstcal/.
true./
276 CALL flxini(pten, pqen, pqsen, pgeo, paph, zgeoh, ztenh, zqenh, zqsenh, &
277 ptu, pqu, ptd, pqd, pmfd, zmfds, zmfdq, zdmfdp, pmfu, zmfus, zmfuq, &
278 zdmfup, zdpmel, plu, plude, ilab, pen_u, pde_u, pen_d, pde_d)
282 CALL flxbase(ztenh, zqenh, zgeoh, paph, ptu, pqu, plu, ldcum, kcbot, ilab)
292 zdqcv(i) = pqte(i, k)*(paph(i,k+1)-paph(i,k))
299 zdqcv(i) = zdqcv(i) + pqte(i, k)*(paph(i,k+1)-paph(i,k))
300 IF (k>=kcbot(i))
THEN
301 zdqpbl(i) = zdqpbl(i) + pqte(i, k)*(paph(i,k+1)-paph(i,k))
302 zdhpbl(i) = zdhpbl(i) + (rcpd*ptte(i,k)+rlvtt*pqte(i,k))*(paph(i,k+1) &
310 IF (zdqcv(i)>max(0.,-1.5*pqhfl(i)*
rg)) ktype(i) = 1
320 zqumqe = pqu(i, ikb) + plu(i, ikb) - zqenh(i, ikb)
321 zdqmin = max(0.01*zqenh(i,ikb), 1.e-10)
322 IF (zdqpbl(i)>0. .AND. zqumqe>zdqmin .AND. ldcum(i))
THEN
323 zmfub(i) = zdqpbl(i)/(
rg*max(zqumqe,zdqmin))
328 IF (ktype(i)==2)
THEN
329 zdh = rcpd*(ptu(i,ikb)-ztenh(i,ikb)) + rlvtt*zqumqe
330 zdh =
rg*max(zdh, 1.0e5*zdqmin)
331 IF (zdhpbl(i)>0. .AND. ldcum(i)) zmfub(i) = zdhpbl(i)/zdh
333 zmfmax = (paph(i,ikb)-paph(i,ikb-1))/(
rg*pdtime)
334 zmfub(i) = min(zmfub(i), zmfmax)
336 IF (ktype(i)==1) zentr(i) = entrpen
347 zhcbase(i) = rcpd*ptu(i, ikb) + zgeoh(i, ikb) + rlvtt*pqu(i, ikb)
348 ictop0(i) = kcbot(i) - 1
352 DO k =
klev - 1, 3, -1
354 zhsat = rcpd*ztenh(i, k) + zgeoh(i, k) + rlvtt*zqsenh(i, k)
355 zgam = r5les*zalvdcp*zqsenh(i, k)/((1.-retv*zqsenh(i,k))*(ztenh(i, &
357 zzz = rcpd*ztenh(i, k)*0.608
358 zhhat = zhsat - (zzz+zgam*zzz)/(1.+zgam*zzz/rlvtt)*max(zqsenh(i,k)- &
360 IF (k<ictop0(i) .AND. zhcbase(i)>zhhat) ictop0(i) = k
366 CALL flxasc(pdtime, ztenh, zqenh, pten, pqen, pqsen, pgeo, zgeoh, pap, &
367 paph, pqte, pvervel, ldland, ldcum, ktype, ilab, ptu, pqu, plu, pmfu, &
368 zmfub, zentr, zmfus, zmfuq, zmful, plude, zdmfup, kcbot, kctop, ictop0, &
370 IF (kcum==0)
GO TO 1000
376 zpbmpt = paph(i, kcbot(i)) - paph(i, kctop(i))
377 IF (ldcum(i) .AND. ktype(i)==1 .AND. zpbmpt<2.e4) ktype(i) = 2
378 IF (ldcum(i)) ictop0(i) = kctop(i)
379 IF (ktype(i)==2) zentr(i) = entrscv
387 zrfl(i) = zdmfup(i, 1)
391 zrfl(i) = zrfl(i) + zdmfup(i, k)
396 CALL flxdlfs(ztenh, zqenh, zgeoh, paph, ptu, pqu, ldcum, kcbot, kctop, &
397 zmfub, zrfl, ptd, pqd, pmfd, zmfds, zmfdq, zdmfdp, kdtop, lddraf)
400 CALL flxddraf(ztenh, zqenh, zgeoh, paph, zrfl, ptd, pqd, pmfd, zmfds, &
401 zmfdq, zdmfdp, lddraf, pen_d, pde_d)
409 llo1 = pmfd(i, ikb) < 0.
411 IF (llo1) zeps = cmfdeps
412 zqumqe = pqu(i, ikb) + plu(i, ikb) - zeps*pqd(i, ikb) - &
413 (1.-zeps)*zqenh(i, ikb)
414 zdqmin = max(0.01*zqenh(i,ikb), 1.e-10)
415 zmfmax = (paph(i,ikb)-paph(i,ikb-1))/(
rg*pdtime)
416 IF (zdqpbl(i)>0. .AND. zqumqe>zdqmin .AND. ldcum(i) .AND. &
417 zmfub(i)<zmfmax)
THEN
418 zmfub1(i) = zdqpbl(i)/(
rg*max(zqumqe,zdqmin))
422 IF (ktype(i)==2)
THEN
423 zdh = rcpd*(ptu(i,ikb)-zeps*ptd(i,ikb)-(1.-zeps)*ztenh(i,ikb)) + &
425 zdh =
rg*max(zdh, 1.0e5*zdqmin)
426 IF (zdhpbl(i)>0. .AND. ldcum(i)) zmfub1(i) = zdhpbl(i)/zdh
428 IF (.NOT. ((ktype(i)==1 .OR. ktype(i)==2) .AND. abs(zmfub1(i)-zmfub(i &
429 ))<0.2*zmfub(i))) zmfub1(i) = zmfub(i)
435 zfac = zmfub1(i)/max(zmfub(i), 1.e-10)
436 pmfd(i, k) = pmfd(i, k)*zfac
437 zmfds(i, k) = zmfds(i, k)*zfac
438 zmfdq(i, k) = zmfdq(i, k)*zfac
439 zdmfdp(i, k) = zdmfdp(i, k)*zfac
440 pen_d(i, k) = pen_d(i, k)*zfac
441 pde_d(i, k) = pde_d(i, k)*zfac
446 IF (lddraf(i)) zmfub(i) = zmfub1(i)
454 CALL flxasc(pdtime, ztenh, zqenh, pten, pqen, pqsen, pgeo, zgeoh, pap, &
455 paph, pqte, pvervel, ldland, ldcum, ktype, ilab, ptu, pqu, plu, pmfu, &
456 zmfub, zentr, zmfus, zmfuq, zmful, plude, zdmfup, kcbot, kctop, ictop0, &
463 CALL flxflux(pdtime, pqen, pqsen, ztenh, zqenh, pap, paph, ldland, zgeoh, &
464 kcbot, kctop, lddraf, kdtop, ktype, ldcum, pmfu, pmfd, zmfus, zmfds, &
465 zmfuq, zmfdq, zmful, plude, zdmfup, zdmfdp, pten, prsfc, pssfc, zdpmel, &
466 itopm2, pmflxr, pmflxs)
471 CALL flxdtdq(pdtime, itopm2, paph, ldcum, pten, zmfus, zmfds, zmfuq, zmfdq, &
472 zmful, zdmfup, zdmfdp, zdpmel, dt_con, dq_con)
477 SUBROUTINE flxini(pten, pqen, pqsen, pgeo, paph, pgeoh, ptenh, pqenh, pqsenh, &
478 ptu, pqu, ptd, pqd, pmfd, pmfds, pmfdq, pdmfdp, pmfu, pmfus, pmfuq, &
479 pdmfup, pdpmel, plu, plude, klab, pen_u, pde_u, pen_d, pde_d)
534 pgeoh(i, k) = pgeo(i, k) + (pgeo(i,k-1)-pgeo(i,k))*0.5
535 ptenh(i, k) = (max(rcpd*pten(i,k-1)+pgeo(i,k-1),rcpd*pten(i,k)+pgeo(i, &
537 pqsenh(i, k) = pqsen(i, k-1)
542 CALL flxadjtq(paph(1,k), ptenh(1,k), pqsenh(1,k), llflag, icall)
545 pqenh(i, k) = min(pqen(i,k-1), pqsen(i,k-1)) + &
546 (pqsenh(i,k)-pqsen(i,k-1))
547 pqenh(i, k) = max(pqenh(i,k), 0.)
555 ptenh(i, 1) = pten(i, 1)
556 pqenh(i, 1) = pqen(i, 1)
557 pgeoh(i, 1) = pgeo(i, 1)
560 DO k =
klev - 1, 2, -1
562 zzs = max(rcpd*ptenh(i,k)+pgeoh(i,k), rcpd*ptenh(i,k+1)+pgeoh(i,k+1))
563 ptenh(i, k) = (zzs-pgeoh(i,k))/rcpd
572 ptu(i, k) = ptenh(i, k)
573 pqu(i, k) = pqenh(i, k)
584 ptd(i, k) = ptenh(i, k)
585 pqd(i, k) = pqenh(i, k)
600 SUBROUTINE flxbase(ptenh, pqenh, pgeoh, paph, ptu, pqu, plu, ldcum, kcbot, &
625 INTEGER i, k, icall, is
626 REAL zbuo, zqold(
klon)
641 DO k =
klev - 1, 2, -1
645 IF (klab(i,k+1)==1) is = is + 1
647 IF (klab(i,k+1)==1) llflag(i) = .
true.
653 pqu(i, k) = pqu(i, k+1)
654 ptu(i, k) = ptu(i, k+1) + (pgeoh(i,k+1)-pgeoh(i,k))/rcpd
655 zbuo = ptu(i, k)*(1.+retv*pqu(i,k)) - ptenh(i, k)*(1.+retv*pqenh(i,k) &
657 IF (zbuo>0.) klab(i, k) = 1
663 CALL flxadjtq(paph(1,k), ptu(1,k), pqu(1,k), llflag, icall)
666 IF (llflag(i) .AND. pqu(i,k)/=zqold(i))
THEN
668 plu(i, k) = plu(i, k) + zqold(i) - pqu(i, k)
669 zbuo = ptu(i, k)*(1.+retv*pqu(i,k)) - ptenh(i, k)*(1.+retv*pqenh(i,k) &
671 IF (zbuo>0.) kcbot(i) = k
672 IF (zbuo>0.) ldcum(i) = .
true.
680 SUBROUTINE flxasc(pdtime, ptenh, pqenh, pten, pqen, pqsen, pgeo, pgeoh, pap, &
681 paph, pqte, pvervel, ldland, ldcum, ktype, klab, ptu, pqu, plu, pmfu, &
682 pmfub, pentr, pmfus, pmfuq, pmful, plude, pdmfup, kcbot, kctop, kctop0, &
716 INTEGER k, i, is, icall, kcum
717 REAL ztglace, zdphi, zqeen, zseen, zscde, zqude
718 REAL zmfusk, zmfuqk, zmfulk, zbuo, zdnoprc, zprcon, zlnew
721 REAL zdprho, zentr, zpmid, zmftest, zmfmax
724 REAL zwmax(
klon), zzzmb
737 IF (pvervel(i,k)<zwmax(i))
THEN
738 zwmax(i) = pvervel(i, k)
747 IF (.NOT. ldcum(i)) ktype(i) = 0
759 IF (.NOT. ldcum(i) .OR. ktype(i)==3) klab(i, k) = 0
760 IF (.NOT. ldcum(i) .AND. paph(i,k)<4.e4) kctop0(i) = k
767 zdphi = pgeoh(i, kctop0(i)) - pgeoh(i, kcbot(i))
768 IF (ptu(i,kctop0(i))>=ztglace) zdland(i) = zdphi
769 zdland(i) = max(3.0e4, zdland(i))
770 zdland(i) = min(5.0e4, zdland(i))
778 IF (.NOT. ldcum(i))
THEN
783 pmfu(i,
klev) = pmfub(i)
784 pmfus(i,
klev) = pmfub(i)*(rcpd*ptu(i,
klev)+pgeoh(i,
klev))
785 pmfuq(i,
klev) = pmfub(i)*pqu(i,
klev)
797 DO k =
klev - 1, 3, -1
799 IF (lmfmid .AND. k<
klev-1)
THEN
801 IF (.NOT. ldcum(i) .AND. klab(i,k+1)==0 .AND. &
802 pqen(i,k)>0.9*pqsen(i,k) .AND. pap(i,k)/paph(i,
klev+1)>0.4)
THEN
803 ptu(i, k+1) = pten(i, k) + (pgeo(i,k)-pgeoh(i,k+1))/rcpd
804 pqu(i, k+1) = pqen(i, k)
806 zzzmb = max(cmfcmin, -pvervel(i,k)/
rg)
807 zmfmax = (paph(i,k)-paph(i,k-1))/(
rg*pdtime)
808 pmfub(i) = min(zzzmb, zmfmax)
809 pmfu(i, k+1) = pmfub(i)
810 pmfus(i, k+1) = pmfub(i)*(rcpd*ptu(i,k+1)+pgeoh(i,k+1))
811 pmfuq(i, k+1) = pmfub(i)*pqu(i, k+1)
824 is = is + klab(i, k+1)
825 IF (klab(i,k+1)==0) klab(i, k) = 0
827 IF (klab(i,k+1)>0) llflag(i) = .
true.
836 zrho(i) = paph(i, k+1)/(rd*ptenh(i,k+1))
837 zpbot(i) = paph(i, kcbot(i))
838 zptop(i) = paph(i, kctop0(i))
843 zdprho = (paph(i,k+1)-paph(i,k))/(
rg*zrho(i))
844 zentr = pentr(i)*pmfu(i, k+1)*zdprho
846 IF (llo1) pde_u(i, k) = zentr
847 zpmid = 0.5*(zpbot(i)+zptop(i))
848 llo2 = llo1 .AND. ktype(i) == 2 .AND. (zpbot(i)-paph(i,k)<0.2e5 .OR. &
850 IF (llo2) pen_u(i, k) = zentr
851 llo2 = llo1 .AND. (ktype(i)==1 .OR. ktype(i)==3) .AND. &
852 (k>=max(klwmin(i),kctop0(i)+2) .OR. pap(i,k)>zpmid)
853 IF (llo2) pen_u(i, k) = zentr
854 llo1 = pen_u(i, k) > 0. .AND. (ktype(i)==1 .OR. ktype(i)==2)
856 fact = 1. + 3.*(1.-min(1.,(zpbot(i)-pap(i,k))/1.5e4))
858 pen_u(i, k) = pen_u(i, k)*fact
859 pde_u(i, k) = pde_u(i, k)*fact
861 IF (llo2 .AND. pqenh(i,k+1)>1.e-5) pen_u(i, k) = zentr + &
862 max(pqte(i,k), 0.)/pqenh(i, k+1)*zrho(i)*zdprho
873 zmftest = pmfu(i, k+1) + pen_u(i, k) - pde_u(i, k)
874 zmfmax = min(zmftest, (paph(i,k)-paph(i,k-1))/(
rg*pdtime))
875 pen_u(i, k) = max(pen_u(i,k)-max(0.0,zmftest-zmfmax), 0.0)
877 pde_u(i, k) = min(pde_u(i,k), 0.75*pmfu(i,k+1))
879 pmfu(i, k) = pmfu(i, k+1) + pen_u(i, k) - pde_u(i, k)
882 zqeen = pqenh(i, k+1)*pen_u(i, k)
883 zseen = (rcpd*ptenh(i,k+1)+pgeoh(i,k+1))*pen_u(i, k)
884 zscde = (rcpd*ptu(i,k+1)+pgeoh(i,k+1))*pde_u(i, k)
885 zqude = pqu(i, k+1)*pde_u(i, k)
886 plude(i, k) = plu(i, k+1)*pde_u(i, k)
887 zmfusk = pmfus(i, k+1) + zseen - zscde
888 zmfuqk = pmfuq(i, k+1) + zqeen - zqude
889 zmfulk = pmful(i, k+1) - plude(i, k)
890 plu(i, k) = zmfulk*(1./max(cmfcmin,pmfu(i,k)))
891 pqu(i, k) = zmfuqk*(1./max(cmfcmin,pmfu(i,k)))
892 ptu(i, k) = (zmfusk*(1./max(cmfcmin,pmfu(i,k)))-pgeoh(i,k))/rcpd
893 ptu(i, k) = max(100., ptu(i,k))
894 ptu(i, k) = min(400., ptu(i,k))
906 CALL flxadjtq(paph(1,k), ptu(1,k), pqu(1,k), llflag, icall)
909 IF (llflag(i) .AND. pqu(i,k)/=zqold(i))
THEN
911 plu(i, k) = plu(i, k) + zqold(i) - pqu(i, k)
912 zbuo = ptu(i, k)*(1.+retv*pqu(i,k)) - ptenh(i, k)*(1.+retv*pqenh(i,k) &
914 IF (klab(i,k+1)==1) zbuo = zbuo + 0.5
915 IF (zbuo>0. .AND. pmfu(i,k)>=0.1*pmfub(i))
THEN
919 IF (ldland(i)) zdnoprc = zdland(i)
921 IF ((zpbot(i)-paph(i,k))<zdnoprc) zprcon = 0.0
922 zlnew = plu(i, k)/(1.+zprcon*(pgeoh(i,k)-pgeoh(i,k+1)))
923 pdmfup(i, k) = max(0., (plu(i,k)-zlnew)*pmfu(i,k))
933 pmful(i, k) = plu(i, k)*pmfu(i, k)
934 pmfus(i, k) = (rcpd*ptu(i,k)+pgeoh(i,k))*pmfu(i, k)
935 pmfuq(i, k) = pqu(i, k)*pmfu(i, k)
948 kcbot(i) = max(kcbot(i), kctop(i))
955 IF (ldcum(i)) is = is + 1
963 pde_u(i, k) = (1.-cmfctop)*pmfu(i, k+1)
964 plude(i, k) = pde_u(i, k)*plu(i, k+1)
965 pmfu(i, k) = pmfu(i, k+1) - pde_u(i, k)
967 pdmfup(i, k) = max(0., (plu(i,k)-zlnew)*pmfu(i,k))
969 pmfus(i, k) = (rcpd*ptu(i,k)+pgeoh(i,k))*pmfu(i, k)
970 pmfuq(i, k) = pqu(i, k)*pmfu(i, k)
971 pmful(i, k) = plu(i, k)*pmfu(i, k)
972 plude(i, k-1) = pmful(i, k)
979 SUBROUTINE flxflux(pdtime, pqen, pqsen, ptenh, pqenh, pap, paph, ldland, &
980 pgeoh, kcbot, kctop, lddraf, kdtop, ktype, ldcum, pmfu, pmfd, pmfus, &
981 pmfds, pmfuq, pmfdq, pmful, plude, pdmfup, pdmfdp, pten, prfl, psfl, &
982 pdpmel, ktopm2, pmflxr, pmflxs)
1001 REAL ztmsmlt, zdelta, zqsat
1017 REAL zcons1, zcons2, zcucov, ztmelp2
1018 REAL pdtime, zdp, zzp, zfac, zsnmlt, zrfl, zrnew
1019 REAL zrmin, zrfln, zdrfl
1020 REAL zpds, zpdr, zdenom
1021 INTEGER ktopm2, itop, ikb
1023 LOGICAL lddraf(
klon)
1030 cevapcu(i, k) = 1.93e-6*261.*sqrt(1.e3/(38.3*0.293)*sqrt(0.5*(paph(i,k) &
1031 +paph(i,k+1))/paph(i,
klev+1)))*0.5/
rg
1037 zcons1 = rcpd/(rlmlt*
rg*pdtime)
1038 zcons2 = 1./(
rg*pdtime)
1046 itop = min(itop, kctop(i))
1047 IF (.NOT. ldcum(i) .OR. kdtop(i)<kctop(i)) lddraf(i) = .
false.
1048 IF (.NOT. ldcum(i)) ktype(i) = 0
1054 IF (ldcum(i) .AND. k>=kctop(i)-1)
THEN
1055 pmfus(i, k) = pmfus(i, k) - pmfu(i, k)*(rcpd*ptenh(i,k)+pgeoh(i,k))
1056 pmfuq(i, k) = pmfuq(i, k) - pmfu(i, k)*pqenh(i, k)
1058 IF (ldland(i)) zdp = 3.e4
1064 IF (paph(i,kcbot(i))-paph(i,kctop(i))>=zdp .AND. pqen(i,k-1)>0.8* &
1065 pqsen(i,k-1)) pdmfup(i, k-1) = pdmfup(i, k-1) + plude(i, k-1)
1067 IF (lddraf(i) .AND. k>=kdtop(i))
THEN
1068 pmfds(i, k) = pmfds(i, k) - pmfd(i, k)*(rcpd*ptenh(i,k)+pgeoh(i,k))
1069 pmfdq(i, k) = pmfdq(i, k) - pmfd(i, k)*pqenh(i, k)
1093 IF (ldcum(i) .AND. k>kcbot(i))
THEN
1095 zzp = ((paph(i,
klev+1)-paph(i,k))/(paph(i,
klev+1)-paph(i,ikb)))
1096 IF (ktype(i)==3) zzp = zzp**2
1097 pmfu(i, k) = pmfu(i, ikb)*zzp
1098 pmfus(i, k) = pmfus(i, ikb)*zzp
1099 pmfuq(i, k) = pmfuq(i, ikb)*zzp
1100 pmful(i, k) = pmful(i, ikb)*zzp
1118 IF (pmflxs(i,k)>0.0 .AND. pten(i,k)>ztmelp2)
THEN
1119 zfac = zcons1*(paph(i,k+1)-paph(i,k))
1120 zsnmlt = min(pmflxs(i,k), zfac*(pten(i,k)-ztmelp2))
1121 pdpmel(i, k) = zsnmlt
1122 ztmsmlt = pten(i, k) - zsnmlt/zfac
1123 zdelta = max(0., sign(1.,rtt-ztmsmlt))
1124 zqsat = r2es*foeew(ztmsmlt, zdelta)/pap(i, k)
1125 zqsat = min(0.5, zqsat)
1126 zqsat = zqsat/(1.-retv*zqsat)
1129 IF (pten(i,k)>rtt)
THEN
1130 pmflxr(i, k+1) = pmflxr(i, k) + pdmfup(i, k) + pdmfdp(i, k) + &
1132 pmflxs(i, k+1) = pmflxs(i, k) - pdpmel(i, k)
1134 pmflxs(i, k+1) = pmflxs(i, k) + pdmfup(i, k) + pdmfdp(i, k)
1135 pmflxr(i, k+1) = pmflxr(i, k)
1139 IF ((pmflxr(i,k+1)+pmflxs(i,k+1))<0.0)
THEN
1140 pdmfdp(i, k) = -pmflxr(i, k) - pmflxs(i, k) - pdmfup(i, k)
1141 pmflxr(i, k+1) = 0.0
1142 pmflxs(i, k+1) = 0.0
1159 maxpdmfdp(i, k) = 0.0
1165 maxpdmfdp(i, k) = maxpdmfdp(i, k) + pdmfdp(i, kp)
1173 IF (ldcum(i) .AND. k>=kcbot(i))
THEN
1174 zrfl = pmflxr(i, k) + pmflxs(i, k)
1175 IF (zrfl>1.0e-20)
THEN
1176 zrnew = (max(0.,sqrt(zrfl/zcucov)-cevapcu(i, &
1177 k)*(paph(i,k+1)-paph(i,k))*max(0.,pqsen(i,k)-pqen(i,k))))**2* &
1179 zrmin = zrfl - zcucov*max(0., 0.8*pqsen(i,k)-pqen(i,k))*zcons2*( &
1180 paph(i,k+1)-paph(i,k))
1181 zrnew = max(zrnew, zrmin)
1182 zrfln = max(zrnew, 0.)
1183 zdrfl = min(0., zrfln-zrfl)
1189 zdrfl = max(zdrfl, min(-pmflxr(i,k)-pmflxs(i,k)-maxpdmfdp(i, &
1193 zdenom = 1.0/max(1.0e-20, pmflxr(i,k)+pmflxs(i,k))
1194 IF (pten(i,k)>rtt)
THEN
1201 pmflxr(i, k+1) = pmflxr(i, k) + zpdr + pdpmel(i, k) + &
1202 zdrfl*pmflxr(i, k)*zdenom
1203 pmflxs(i, k+1) = pmflxs(i, k) + zpds - pdpmel(i, k) + &
1204 zdrfl*pmflxs(i, k)*zdenom
1205 pdmfup(i, k) = pdmfup(i, k) + zdrfl
1207 pmflxr(i, k+1) = 0.0
1208 pmflxs(i, k+1) = 0.0
1212 IF (pmflxr(i,k)+pmflxs(i,k)<-1.e-26 .AND.
prt_level>=1)
WRITE (*, *) &
1213 'precip. < 1e-16 ', pmflxr(i, k) + pmflxs(i, k)
1219 prfl(i) = pmflxr(i,
klev+1)
1220 psfl(i) = pmflxs(i,
klev+1)
1225 SUBROUTINE flxdtdq(pdtime, ktopm2, paph, ldcum, pten, pmfus, pmfds, pmfuq, &
1226 pmfdq, pmful, pdmfup, pdmfdp, pdpmel, dt_con, dq_con)
1251 REAL zalv, zdtdt, zdqdt
1253 DO k = ktopm2,
klev - 1
1256 llo1 = (pten(i,k)-rtt) > 0.
1258 IF (llo1) zalv = rlvtt
1259 zdtdt =
rg/(paph(i,k+1)-paph(i,k))/rcpd*(pmfus(i,k+1)-pmfus(i,k)+ &
1260 pmfds(i,k+1)-pmfds(i,k)-rlmlt*pdpmel(i,k)-zalv*(pmful(i, &
1261 k+1)-pmful(i,k)-pdmfup(i,k)-pdmfdp(i,k)))
1262 dt_con(i, k) = zdtdt
1263 zdqdt =
rg/(paph(i,k+1)-paph(i,k))*(pmfuq(i,k+1)-pmfuq(i,k)+pmfdq(i,k &
1264 +1)-pmfdq(i,k)+pmful(i,k+1)-pmful(i,k)-pdmfup(i,k)-pdmfdp(i,k))
1265 dq_con(i, k) = zdqdt
1273 llo1 = (pten(i,k)-rtt) > 0.
1275 IF (llo1) zalv = rlvtt
1276 zdtdt = -
rg/(paph(i,k+1)-paph(i,k))/rcpd*(pmfus(i,k)+pmfds(i,k)+rlmlt* &
1277 pdpmel(i,k)-zalv*(pmful(i,k)+pdmfup(i,k)+pdmfdp(i,k)))
1278 dt_con(i, k) = zdtdt
1279 zdqdt = -
rg/(paph(i,k+1)-paph(i,k))*(pmfuq(i,k)+pmfdq(i,k)+pmful(i,k)+ &
1280 pdmfup(i,k)+pdmfdp(i,k))
1281 dq_con(i, k) = zdqdt
1287 SUBROUTINE flxdlfs(ptenh, pqenh, pgeoh, paph, ptu, pqu, ldcum, kcbot, kctop, &
1288 pmfub, prfl, ptd, pqd, pmfd, pmfds, pmfdq, pdmfdp, kdtop, lddraf)
1325 REAL zttest, zqtest, zbuo, zmftop
1327 INTEGER i, k, is, icall
1353 ztenwb(i, k) = ptenh(i, k)
1354 zqenwb(i, k) = pqenh(i, k)
1355 llo2(i) = ldcum(i) .AND. prfl(i) > 0. .AND. .NOT. lddraf(i) .AND. &
1356 (k<kcbot(i) .AND. k>kctop(i))
1357 IF (llo2(i)) is = is + 1
1359 IF (is==0)
GO TO 290
1362 CALL flxadjtq(paph(1,k), ztenwb(1,k), zqenwb(1,k), llo2, icall)
1371 zttest = 0.5*(ptu(i,k)+ztenwb(i,k))
1372 zqtest = 0.5*(pqu(i,k)+zqenwb(i,k))
1373 zbuo = zttest*(1.+retv*zqtest) - ptenh(i, k)*(1.+retv*pqenh(i,k))
1374 zcond(i) = pqenh(i, k) - zqenwb(i, k)
1375 zmftop = -cmfdeps*pmfub(i)
1376 IF (zbuo<0. .AND. prfl(i)>10.*zmftop*zcond(i))
THEN
1382 pmfds(i, k) = pmfd(i, k)*(rcpd*ptd(i,k)+pgeoh(i,k))
1383 pmfdq(i, k) = pmfd(i, k)*pqd(i, k)
1384 pdmfdp(i, k-1) = -0.5*pmfd(i, k)*zcond(i)
1385 prfl(i) = prfl(i) + pdmfdp(i, k-1)
1394 SUBROUTINE flxddraf(ptenh, pqenh, pgeoh, paph, prfl, ptd, pqd, pmfd, pmfds, &
1395 pmfdq, pdmfdp, lddraf, pen_d, pde_d)
1425 LOGICAL lddraf(
klon)
1428 LOGICAL llo2(
klon), llo1
1429 INTEGER i, k, is, icall, itopde
1430 REAL zentr, zseen, zqeen, zsdde, zqdde, zmfdsk, zmfdqk, zdmfdp
1445 llo2(i) = lddraf(i) .AND. pmfd(i, k-1) < 0.
1446 IF (llo2(i)) is = is + 1
1448 IF (is==0)
GO TO 180
1452 zentr = entrdd*pmfd(i, k-1)*rd*ptenh(i, k-1)/(
rg*paph(i,k-1))* &
1453 (paph(i,k)-paph(i,k-1))
1464 pde_d(i, k) = pmfd(i, itopde)*(paph(i,k)-paph(i,k-1))/ &
1465 (paph(i,
klev+1)-paph(i,itopde))
1472 pmfd(i, k) = pmfd(i, k-1) + pen_d(i, k) - pde_d(i, k)
1473 zseen = (rcpd*ptenh(i,k-1)+pgeoh(i,k-1))*pen_d(i, k)
1474 zqeen = pqenh(i, k-1)*pen_d(i, k)
1475 zsdde = (rcpd*ptd(i,k-1)+pgeoh(i,k-1))*pde_d(i, k)
1476 zqdde = pqd(i, k-1)*pde_d(i, k)
1477 zmfdsk = pmfds(i, k-1) + zseen - zsdde
1478 zmfdqk = pmfdq(i, k-1) + zqeen - zqdde
1479 pqd(i, k) = zmfdqk*(1./min(-cmfcmin,pmfd(i,k)))
1480 ptd(i, k) = (zmfdsk*(1./min(-cmfcmin,pmfd(i,k)))-pgeoh(i,k))/rcpd
1481 ptd(i, k) = min(400., ptd(i,k))
1482 ptd(i, k) = max(100., ptd(i,k))
1483 zcond(i) = pqd(i, k)
1488 CALL flxadjtq(paph(1,k), ptd(1,k), pqd(1,k), llo2, icall)
1492 zcond(i) = zcond(i) - pqd(i, k)
1493 zbuo = ptd(i, k)*(1.+retv*pqd(i,k)) - ptenh(i, k)*(1.+retv*pqenh(i,k) &
1495 llo1 = zbuo < 0. .AND. (prfl(i)-pmfd(i,k)*zcond(i)>0.)
1496 IF (.NOT. llo1) pmfd(i, k) = 0.0
1497 pmfds(i, k) = (rcpd*ptd(i,k)+pgeoh(i,k))*pmfd(i, k)
1498 pmfdq(i, k) = pqd(i, k)*pmfd(i, k)
1499 zdmfdp = -pmfd(i, k)*zcond(i)
1500 pdmfdp(i, k-1) = zdmfdp
1501 prfl(i) = prfl(i) + zdmfdp
1508 SUBROUTINE flxadjtq(pp, pt, pq, ldflag, kcall)
1522 LOGICAL ldflag(
klon)
1525 REAL zcond(
klon), zcond1
1526 REAL z5alvcp, z5alscp, zalvdcp, zalsdcp
1527 REAL zdelta, zcvm5, zldcp, zqsat, zcor
1532 z5alvcp = r5les*rlvtt/rcpd
1533 z5alscp = r5ies*rlstt/rcpd
1534 zalvdcp = rlvtt/rcpd
1535 zalsdcp = rlstt/rcpd
1544 zdelta = max(0., sign(1.,rtt-pt(i)))
1545 zcvm5 = z5alvcp*(1.-zdelta) + zdelta*z5alscp
1546 zldcp = zalvdcp*(1.-zdelta) + zdelta*zalsdcp
1547 zqsat = r2es*foeew(pt(i), zdelta)/pp(i)
1548 zqsat = min(0.5, zqsat)
1549 zcor = 1./(1.-retv*zqsat)
1551 zcond(i) = (pq(i)-zqsat)/(1.+foede(pt(i),zdelta,zcvm5,zqsat,zcor))
1552 IF (kcall==1) zcond(i) = max(zcond(i), 0.)
1553 IF (kcall==2) zcond(i) = min(zcond(i), 0.)
1554 pt(i) = pt(i) + zldcp*zcond(i)
1555 pq(i) = pq(i) - zcond(i)
1561 IF (zcond(i)/=0.) is = is + 1
1563 IF (is==0)
GO TO 230
1566 IF (ldflag(i) .AND. zcond(i)/=0.)
THEN
1567 zdelta = max(0., sign(1.,rtt-pt(i)))
1568 zcvm5 = z5alvcp*(1.-zdelta) + zdelta*z5alscp
1569 zldcp = zalvdcp*(1.-zdelta) + zdelta*zalsdcp
1570 zqsat = r2es*foeew(pt(i), zdelta)/pp(i)
1571 zqsat = min(0.5, zqsat)
1572 zcor = 1./(1.-retv*zqsat)
1574 zcond1 = (pq(i)-zqsat)/(1.+foede(pt(i),zdelta,zcvm5,zqsat,zcor))
1575 pt(i) = pt(i) + zldcp*zcond1
1576 pq(i) = pq(i) - zcond1
subroutine flxasc(pdtime, ptenh, pqenh, pten, pqen, pqsen, pgeo, pgeoh, pap, paph, pqte, pvervel, ldland, ldcum, ktype, klab, ptu, pqu, plu, pmfu, pmfub, pentr, pmfus, pmfuq, pmful, plude, pdmfup, kcbot, kctop, kctop0, kcum, pen_u, pde_u)
subroutine flxflux(pdtime, pqen, pqsen, ptenh, pqenh, pap, paph, ldland, pgeoh, kcbot, kctop, lddraf, kdtop, ktype, ldcum, pmfu, pmfd, pmfus, pmfds, pmfuq, pmfdq, pmful, plude, pdmfup, pdmfdp, pten, prfl, psfl, pdpmel, ktopm2, pmflxr, pmflxs)
subroutine flxddraf(ptenh, pqenh, pgeoh, paph, prfl, ptd, pqd, pmfd, pmfds, pmfdq, pdmfdp, lddraf, pen_d, pde_d)
subroutine flxbase(ptenh, pqenh, pgeoh, paph, ptu, pqu, plu, ldcum, kcbot, klab)
subroutine flxdtdq(pdtime, ktopm2, paph, ldcum, pten, pmfus, pmfds, pmfuq, pmfdq, pmful, pdmfup, pdmfdp, pdpmel, dt_con, dq_con)
!$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 false
!FH On elimine toutes les clefs physiques dans la dynamique prt_level
subroutine flxadjtq(pp, pt, pq, ldflag, kcall)
!$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 true
INTERFACE SUBROUTINE RRTM_ECRT_140GP paph
subroutine flxmain(pdtime, pten, pqen, pqsen, pqhfl, pap, paph, pgeo, ldland,ptte, pqte, pvervel, prsfc, pssfc, kcbot, kctop, kdtop,
subroutine flxini(pten, pqen, pqsen, pgeo, paph, pgeoh, ptenh, pqenh, pqsenh, ptu, pqu, ptd, pqd, pmfd, pmfds, pmfdq, pdmfdp, pmfu, pmfus, pmfuq, pdmfup, pdpmel, plu, plude, klab, pen_u, pde_u, pen_d, pde_d)
subroutine conflx(dtime, pres_h, pres_f, t, q, con_t, con_q, pqhfl, w, d_t, d_q, rain, snow, pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, kcbot, kctop, kdtop, pmflxr, pmflxs)
subroutine flxdlfs(ptenh, pqenh, pgeoh, paph, ptu, pqu, ldcum, kcbot, kctop, pmfub, prfl, ptd, pqd, pmfd, pmfds, pmfdq, pdmfdp, kdtop, lddraf)