4 SUBROUTINE conlmd(dtime, paprs, pplay, t, q, conv_q, d_t, d_q, rain, snow, &
39 INTEGER ibas_bis(
klon)
40 INTEGER itop_bis(
klon)
45 REAL zlvdcp, zlsdcp, zdelta, zz, za, zb
50 (dtime, paprs, pplay, t, q, d_t, d_q, d_ql, rneb, rain, snow, ibas, itop)
56 (dtime, paprs, pplay, t, q, conv_q, d_t_bis, d_q_bis, d_ql_bis, &
57 rneb_bis, rain_bis, snow_bis, ibas_bis, itop_bis)
60 d_t(i, k) = d_t(i, k) + d_t_bis(i, k)
61 d_q(i, k) = d_q(i, k) + d_q_bis(i, k)
62 d_ql(i, k) = d_ql(i, k) + d_ql_bis(i, k)
66 rain(i) = rain(i) + rain_bis(i)
67 snow(i) = snow(i) + snow_bis(i)
68 ibas(i) = min(ibas(i), ibas_bis(i))
69 itop(i) = max(itop(i), itop_bis(i))
77 zlvdcp = rlvtt/rcpd/(1.0+rvtmp2*q(i,k))
78 zlsdcp = rlstt/rcpd/(1.0+rvtmp2*q(i,k))
79 zdelta = max(0., sign(1.,rtt-t(i,k)))
82 za = -max(0.0, zz)*(zlvdcp*(1.-zdelta)+zlsdcp*zdelta)
83 d_t(i, k) = d_t(i, k) + za
84 d_q(i, k) = d_q(i, k) + zb
90 SUBROUTINE conman(dtime, paprs, pplay, t, q, d_t, d_q, d_ql, rneb, rain, &
123 LOGICAL accompli(
klon)
143 REAL zqs1, zqs2, zdqs1, zdqs2
147 REAL zdelta, zcor, zcvm5
173 DATA appel1er/.
true./
177 print *,
'conman, nb:', nb
178 print *,
'conman, frac:', frac
179 print *,
'conman, opt_cld:', opt_cld
209 zdelta = max(0., sign(1.,rtt-t(i,k)))
210 zcvm5 = r5les*rlvtt*(1.-zdelta) + zdelta*r5ies*rlstt
211 zcvm5 = zcvm5/rcpd/(1.0+rvtmp2*q(i,k))
212 zqs1 = r2es*foeew(t(i,k), zdelta)/pplay(i, k)
213 zqs1 = min(0.5, zqs1)
214 zcor = 1./(1.-retv*zqs1)
216 zdqs1 = foede(t(i,k), zdelta, zcvm5, zqs1, zcor)
218 zdelta = max(0., sign(1.,rtt-t(i,k+1)))
219 zcvm5 = r5les*rlvtt*(1.-zdelta) + zdelta*r5ies*rlstt
220 zcvm5 = zcvm5/rcpd/(1.0+rvtmp2*q(i,k+1))
221 zqs2 = r2es*foeew(t(i,k+1), zdelta)/pplay(i, k+1)
222 zqs2 = min(0.5, zqs2)
223 zcor = 1./(1.-retv*zqs2)
225 zdqs2 = foede(t(i,k+1), zdelta, zcvm5, zqs2, zcor)
227 IF (t(i,k)<t_coup)
THEN
228 zqs1 = qsats(t(i,k))/pplay(i, k)
229 zdqs1 = dqsats(t(i,k), zqs1)
231 zqs2 = qsats(t(i,k+1))/pplay(i, k+1)
232 zdqs2 = dqsats(t(i,k+1), zqs2)
234 zqs1 = qsatl(t(i,k))/pplay(i, k)
235 zdqs1 = dqsatl(t(i,k), zqs1)
237 zqs2 = qsatl(t(i,k+1))/pplay(i, k+1)
238 zdqs2 = dqsatl(t(i,k+1), zqs2)
241 zdp1 = paprs(i, k) - paprs(i, k+1)
242 zdp2 = paprs(i, k+1) - paprs(i, k+2)
243 zgamdz = -(pplay(i,k)-pplay(i,k+1))/paprs(i, k+1)/rcpd*(rd*(t(i, &
244 k)*zdp1+t(i,k+1)*zdp2)/(zdp1+zdp2)+rlvtt*(zqs1*zdp1+zqs2*zdp2)/(zdp1+ &
245 zdp2))/(1.0+(zdqs1*zdp1+zdqs2*zdp2)/(zdp1+zdp2))
246 zflo = t(i, k) + zgamdz - t(i, k+1)
247 zsat = (q(i,k)-zqs1)*zdp1 + (q(i,k+1)-zqs2)*zdp2
248 IF (zflo>0.0) afaire(i) = .
true.
253 imprim = mod(ncpt, 48) == 0
259 zq1 = q(i, k)*(1.0-ratqs)
260 zq2 = q(i, k)*(1.0+ratqs)
261 w_q(i, k) = zq2 - frac(n)/2.0*(zq2-zq1)
266 CALL conmanv(dtime, paprs, pplay, t, w_q, afaire, opt_cld(n), w_d_t, &
267 w_d_q, w_d_ql, w_rneb, w_rain, w_snow, w_ibas, w_itop, accompli, &
271 IF (afaire(i) .AND. accompli(i))
THEN
272 d_t(i, k) = w_d_t(i, k)*frac(n)
273 d_q(i, k) = w_d_q(i, k)*frac(n)
274 d_ql(i, k) = w_d_ql(i, k)*frac(n)
275 IF (nint(w_rneb(i,k))==1) rneb(i, k) = frac(n)
280 IF (afaire(i) .AND. accompli(i))
THEN
281 rain(i) = w_rain(i)*frac(n)
282 snow(i) = w_snow(i)*frac(n)
283 ibas(i) = min(ibas(i), w_ibas(i))
284 itop(i) = max(itop(i), w_itop(i))
288 IF (afaire(i) .AND. accompli(i)) afaire(i) = .
false.
297 SUBROUTINE conmanv(dtime, paprs, pplay, t, q, afaire, opt_cld, d_t, d_q, &
298 d_ql, rneb, rain, snow, ibas, itop, accompli, imprim)
329 LOGICAL accompli(
klon)
350 REAL deep_sig, deep_to
361 INTEGER i, k, k1min, k1max, k2min, k2max, is
368 REAL zrfl(
klon), zrfln, zqev, zqevt
373 REAL zdelta, zcor, zcvm5
378 INTEGER nbtodo, nbdone
387 delp(i, k) = paprs(i, k) - paprs(i, k+1)
406 accompli(i) = .
false.
420 zdelta = max(0., sign(1.,rtt-zt(i,k)))
421 zcvm5 = r5les*rlvtt*(1.-zdelta) + zdelta*r5ies*rlstt
422 zcvm5 = zcvm5/rcpd/(1.0+rvtmp2*zq(i,k))
423 zqs(i, k) = r2es*foeew(zt(i,k), zdelta)/pplay(i, k)
424 zqs(i, k) = min(0.5, zqs(i,k))
425 zcor = 1./(1.-retv*zqs(i,k))
426 zqs(i, k) = zqs(i, k)*zcor
427 zdqs(i, k) = foede(zt(i,k), zdelta, zcvm5, zqs(i,k), zcor)
429 IF (zt(i,k)<t_coup)
THEN
430 zqs(i, k) = qsats(zt(i,k))/pplay(i, k)
431 zdqs(i, k) = dqsats(zt(i,k), zqs(i,k))
433 zqs(i, k) = qsatl(zt(i,k))/pplay(i, k)
434 zdqs(i, k) = dqsatl(zt(i,k), zqs(i,k))
439 zqmqsdp(i, k) = (zq(i,k)-zqs(i,k))*delp(i, k)
452 zgamdz(i, k) = -(pplay(i,k)-pplay(i,k+1))/paprs(i, k+1)/rcpd*(rd*(zt( &
453 i,k)*delp(i,k)+zt(i,k+1)*delp(i,k+1))/(delp(i,k)+delp(i, &
454 k+1))+rlvtt*(zqs(i,k)*delp(i,k)+zqs(i,k+1)*delp(i,k+1))/(delp(i, &
455 k)+delp(i,k+1)))/(1.0+(zdqs(i,k)*delp(i,k)+zdqs(i,k+1)*delp(i, &
456 k+1))/(delp(i,k)+delp(i,k+1)))
465 possible(i) = .
false.
470 zflo(i) = zt(i, k-1) + zgamdz(i, k-1) - zt(i, k)
471 zsat(i) = zqmqsdp(i, k) + zqmqsdp(i, k-1)
472 IF (zflo(i)>0.0 .AND. zsat(i)>0.0) possible(i) = .
true.
478 IF (possible(i))
THEN
490 IF (possible(i)) k2min = min(k2min, k2(i))
492 IF (k2min==
klev)
GO TO 860
493 DO k = k2min,
klev - 1
495 IF (possible(i) .AND. k>=k2(i) .AND. aller(i))
THEN
496 zflo(i) = zt(i, k) + zgamdz(i, k) - zt(i, k+1)
497 zsat(i) = zqmqsdp(i, k) + zqmqsdp(i, k+1)
498 IF (zflo(i)>0.0 .AND. zsat(i)>0.0)
THEN
508 IF (possible(i) .AND. aller(i))
THEN
537 IF (todo(i)) k2min = min(k2min, k2(i))
542 IF (todo(i) .AND. k>k2(i) .AND. aller(i))
THEN
543 zsat(i) = zsat(i) + zqmqsdp(i, k)
544 zflo(i) = zt(i, k-1) + zgamdz(i, k-1) - zt(i, k)
545 IF (zflo(i)<=0.0 .OR. zsat(i)<=0.0)
THEN
586 IF (k2(i)<=k1(i)) is = is + 1
590 print *,
'Impossible: k1 trop grand ou k2 trop petit'
600 k1min = min(k1min, k1(i))
601 k1max = max(k1max, k1(i))
602 k2max = max(k2max, k2(i))
610 zb(i) = (rcpd*(1.+zdqs(i,k))*(zt(i,k)-za(i))-rlvtt*(zqs(i,k)-zq(i, &
612 zc(i) = delp(i, k)*rcpd*(1.+zdqs(i,k))
618 IF (todo(i) .AND. k>=(k1(i)+1) .AND. k<=k2(i))
THEN
619 za(i) = za(i) + zgamdz(i, k-1)
620 zb(i) = zb(i) + (rcpd*(1.+zdqs(i,k))*(zt(i,k)-za(i))-rlvtt*(zqs(i, &
621 k)-zq(i,k)))*delp(i, k)
622 zc(i) = zc(i) + delp(i, k)*rcpd*(1.+zdqs(i,k))
630 ztnew(i, k) = zb(i)/zc(i)
631 zqnew(i, k) = zqs(i, k) + (ztnew(i,k)-zt(i,k))*rcpd/rlvtt*zdqs(i, k)
637 IF (todo(i) .AND. k>=(k1(i)+1) .AND. k<=k2(i))
THEN
638 ztnew(i, k) = ztnew(i, k-1) + zgamdz(i, k-1)
639 zqnew(i, k) = zqs(i, k) + (ztnew(i,k)-zt(i,k))*rcpd/rlvtt*zdqs(i, k)
651 IF (todo(i) .AND. k>=k1(i) .AND. k<=k2(i))
THEN
653 zcond(i) = zcond(i) + (zq(i,k)-zqnew(i,k))*delp(i, k)/
rg
661 IF (todo(i) .AND. zcond(i)<=0.) todo(i) = .
false.
668 IF (todo(i)) accompli(i) = .
true.
682 toliq(i) = tomax - ((paprs(i,k1(i))-paprs(i,k2(i)+1))/paprs(i,1)-dpmin) &
683 *(tomax-tomin)/(dpmax-dpmin)
684 toliq(i) = max(tomin, min(tomax,toliq(i)))
685 IF (pplay(i,k2(i))/paprs(i,1)<=deep_sig) toliq(i) = deep_to
686 IF (old_tau) toliq(i) = 1.0
708 IF (todo(i)) zrfl(i) = zcond(i)/dtime
711 ELSE IF (opt_cld==1)
THEN
714 IF (todo(i)) zvapo(i) = 0.0
718 IF (todo(i) .AND. k>=k1(i) .AND. k<=k2(i)) zvapo(i) = zvapo(i) + &
719 zqnew(i, k)*delp(i, k)/
rg
724 zrapp(i) = toliq(i)*zcond(i)/zvapo(i)
725 zrapp(i) = max(0., min(1.,zrapp(i)))
726 zrfl(i) = (1.0-toliq(i))*zcond(i)/dtime
731 IF (todo(i) .AND. k>=k1(i) .AND. k<=k2(i))
THEN
732 d_ql(i, k) = d_ql(i, k) + zrapp(i)*zqnew(i, k)
737 ELSE IF (opt_cld==2)
THEN
740 IF (todo(i)) zvapo(i) = 0.0
744 IF (todo(i) .AND. k>=k1(i) .AND. k<=k2(i)) zvapo(i) = zvapo(i) + &
750 IF (todo(i) .AND. k>=k1(i) .AND. k<=k2(i))
THEN
751 d_ql(i, k) = d_ql(i, k) + toliq(i)*zcond(i)/zvapo(i)
756 IF (todo(i)) zrfl(i) = (1.0-toliq(i))*zcond(i)/dtime
759 ELSE IF (opt_cld==3)
THEN
762 IF (todo(i)) zvapo(i) = 0.0
766 IF (todo(i) .AND. k>=k1(i) .AND. k<=k2(i)) zvapo(i) = zvapo(i) + &
767 max(0.0, zq(i,k)-zqnew(i,k))*delp(i, k)/
rg
772 IF (todo(i) .AND. k>=k1(i) .AND. k<=k2(i) .AND. zvapo(i)>0.0) d_ql(i, &
773 k) = d_ql(i, k) + toliq(i)*zcond(i)/zvapo(i)*max(0.0, zq(i,k)-zqnew &
778 IF (todo(i)) zrfl(i) = (1.0-toliq(i))*zcond(i)/dtime
781 ELSE IF (opt_cld==4)
THEN
787 IF (todo(i)) zvapo(i) = 0.0
791 IF (todo(i) .AND. k>=(k1(i)+1) .AND. k<=k2(i)) zvapo(i) = zvapo(i) + &
792 delp(i, k)/
rg*(pplay(i,k1(i))-pplay(i,k))**nexpo
797 IF (todo(i) .AND. k>=(k1(i)+1) .AND. k<=k2(i)) d_ql(i, k) = d_ql(i, &
798 k) + toliq(i)*zcond(i)/zvapo(i)*(pplay(i,k1(i))-pplay(i,k))**nexpo
802 IF (todo(i)) zrfl(i) = (1.0-toliq(i))*zcond(i)/dtime
807 print *,
'opt_cld est faux:', opt_cld
815 IF (evap_prec .AND. (k1max>=2))
THEN
816 DO k = k1max - 1, 1, -1
818 IF (todo(i) .AND. k<k1(i) .AND. zrfl(i)>0.0)
THEN
819 zqev = max(0.0, (zqs(i,k)-zq(i,k))*zalfa)
820 zqevt = coef_eva*(1.0-zq(i,k)/zqs(i,k))*sqrt(zrfl(i))*delp(i, k)/ &
821 pplay(i, k)*zt(i, k)*rd/
rg
822 zqevt = max(0.0, min(zqevt,zrfl(i)))*
rg*dtime/delp(i, k)
823 zqev = min(zqev, zqevt)
824 zrfln = zrfl(i) - zqev*(delp(i,k))/
rg/dtime
825 zq(i, k) = zq(i, k) - (zrfln-zrfl(i))*(
rg/(delp(i,k)))*dtime
826 zt(i, k) = zt(i, k) + (zrfln-zrfl(i))*(
rg/(delp(i, &
827 k)))*dtime*rlvtt/rcpd/(1.0+rvtmp2*zq(i,k))
838 IF (zt(i,1)>rtt)
THEN
839 rain(i) = rain(i) + zrfl(i)
841 snow(i) = snow(i) + zrfl(i)
850 IF (todo(i) .AND. k>=k1(i) .AND. k<=k2(i))
THEN
851 zt(i, k) = ztnew(i, k)
852 zq(i, k) = zqnew(i, k)
864 zdelta = max(0., sign(1.,rtt-zt(i,k)))
865 zcvm5 = r5les*rlvtt*(1.-zdelta) + zdelta*r5ies*rlstt
866 zcvm5 = zcvm5/rcpd/(1.0+rvtmp2*zq(i,k))
867 zqs(i, k) = r2es*foeew(zt(i,k), zdelta)/pplay(i, k)
868 zqs(i, k) = min(0.5, zqs(i,k))
869 zcor = 1./(1.-retv*zqs(i,k))
870 zqs(i, k) = zqs(i, k)*zcor
871 zdqs(i, k) = foede(zt(i,k), zdelta, zcvm5, zqs(i,k), zcor)
873 IF (zt(i,k)<t_coup)
THEN
874 zqs(i, k) = qsats(zt(i,k))/pplay(i, k)
875 zdqs(i, k) = dqsats(zt(i,k), zqs(i,k))
877 zqs(i, k) = qsatl(zt(i,k))/pplay(i, k)
878 zdqs(i, k) = dqsatl(zt(i,k), zqs(i,k))
890 zgamdz(i, k) = -(pplay(i,k)-pplay(i,k+1))/paprs(i, k+1)/rcpd*(rd*( &
891 zt(i,k)*delp(i,k)+zt(i,k+1)*delp(i,k+1))/(delp(i,k)+delp(i, &
892 k+1))+rlvtt*(zqs(i,k)*delp(i,k)+zqs(i,k+1)*delp(i,k+1))/(delp(i, &
893 k)+delp(i,k+1)))/(1.0+(zdqs(i,k)*delp(i,k)+zdqs(i,k+1)*delp(i, &
894 k+1))/(delp(i,k)+delp(i,k+1)))
905 zqmqsdp(i, k) = (zq(i,k)-zqs(i,k))*delp(i, k)
918 IF (todo(i) .AND. k1(i)>(kbase+1))
THEN
920 zflo(i) = zt(i, k-1) + zgamdz(i, k-1) - zt(i, k)
921 zsat(i) = zqmqsdp(i, k) + zqmqsdp(i, k-1)
925 IF (zflo(i)>0.0 .AND. zsat(i)>0.0)
THEN
928 k1max = max(k1max, k1(i))
934 IF (k1max>(kbase+1))
THEN
935 DO k = k1max, kbase + 1, -1
937 IF (etendre(i) .AND. k<k1(i) .AND. aller(i))
THEN
938 zsat(i) = zsat(i) + zqmqsdp(i, k)
939 zflo(i) = zt(i, k) + zgamdz(i, k) - zt(i, k+1)
940 IF (zsat(i)<=0.0 .OR. zflo(i)<=0.0)
THEN
949 IF (etendre(i) .AND. aller(i))
THEN
989 possible(i) = .
false.
993 IF (todobis(i) .AND. k2(i)<
klev)
THEN
1006 IF (accompli(i))
THEN
1007 d_t(i, k) = zt(i, k) - t(i, k)
1008 zq(i, k) = max(zq(i,k), seuil_vap)
1009 d_q(i, k) = zq(i, k) - q(i, k)
1015 IF (accompli(i))
THEN
1017 IF (rneb(i,k)>0.0)
THEN
1024 IF (rneb(i,k)>0.0)
THEN
1037 IF (afaire(i)) nbtodo = nbtodo + 1
1038 IF (accompli(i)) nbdone = nbdone + 1
1040 print *,
'nbTodo, nbDone=', nbtodo, nbdone
1045 SUBROUTINE conkuo(dtime, paprs, pplay, t, q, conv_q, d_t, d_q, d_ql, rneb, &
1046 rain, snow, ibas, itop)
1101 REAL deep_sig, deep_to
1108 INTEGER i, k, kbmin, kbmax, khmax
1121 REAL zrfl(
klon), zrfln, zqev, zqevt
1122 REAL zdelta, zcvm5, zcor
1134 DATA appel1er/.
true./
1137 print *,
'conkuo, calcfcl:', calcfcl
1138 IF (.NOT. calcfcl) print *,
'conkuo, ldepar:', ldepar
1139 print *,
'conkuo, opt_cld:', opt_cld
1140 print *,
'conkuo, evap_prec:', evap_prec
1141 print *,
'conkuo, new_deh:', new_deh
1167 zdelta = max(0., sign(1.,rtt-t(i,k)))
1168 zcvm5 = r5les*rlvtt*(1.-zdelta) + zdelta*r5ies*rlstt
1169 zcvm5 = zcvm5/rcpd/(1.0+rvtmp2*q(i,k))
1170 zqs(i, k) = r2es*foeew(t(i,k), zdelta)/pplay(i, k)
1171 zqs(i, k) = min(0.5, zqs(i,k))
1172 zcor = 1./(1.-retv*zqs(i,k))
1173 zqs(i, k) = zqs(i, k)*zcor
1174 zdqs(i, k) = foede(t(i,k), zdelta, zcvm5, zqs(i,k), zcor)
1176 IF (t(i,k)<t_coup)
THEN
1177 zqs(i, k) = qsats(t(i,k))/pplay(i, k)
1178 zdqs(i, k) = dqsats(t(i,k), zqs(i,k))
1180 zqs(i, k) = qsatl(t(i,k))/pplay(i, k)
1181 zdqs(i, k) = dqsatl(t(i,k), zqs(i,k))
1190 zgz(i, 1) = rd*t(i, 1)/(0.5*(paprs(i,1)+pplay(i, &
1191 1)))*(paprs(i,1)-pplay(i,1))
1195 zgz(i, k) = zgz(i, k-1) + rd*0.5*(t(i,k-1)+t(i,k))/paprs(i, k)*(pplay(i &
1204 ztotal(i, k) = rcpd*t(i, k) + rlvtt*zqs(i, k) + zgz(i, k)
1215 zpres(i, k) = pplay(i, k)
1216 ztemp(i, k) = t(i, k)
1219 CALL kuofcl(ztemp, q, zgz, zpres, ldcum, kb)
1224 zdeh(i, k) = ztotal(i, k-1) - ztotal(i, k)
1226 zdeh(i, k) = rcpd*(t(i,k-1)-t(i,k)) - rd*0.5*(t(i,k-1)+t(i,k))/ &
1227 paprs(i, k)*(pplay(i,k-1)-pplay(i,k)) + &
1228 rlvtt*(zqs(i,k-1)-zqs(i,k))
1230 zdeh(i, k) = zdeh(i, k)*0.5
1235 IF (ldcum(i) .AND. k>=(kb(i)+1))
THEN
1237 zdeh(i, k) = zdeh(i, k-1) + (ztotal(i,k-1)-ztotal(i,k))
1239 zdeh(i, k) = zdeh(i, k-1) + rcpd*(t(i,k-1)-t(i,k)) - &
1240 rd*0.5*(t(i,k-1)+t(i,k))/paprs(i, k)* &
1241 (pplay(i,k-1)-pplay(i,k)) + rlvtt*(zqs(i,k-1)-zqs(i,k))
1252 zdeh(i, k) = ztotal(i, k-1) - ztotal(i, k)
1254 zdeh(i, k) = rcpd*(t(i,k-1)-t(i,k)) - rd*0.5*(t(i,k-1)+t(i,k))/paprs( &
1255 i, k)*(pplay(i,k-1)-pplay(i,k)) + rlvtt*(zqs(i,k-1)-zqs(i,k))
1257 zdeh(i, k) = zdeh(i, k)*0.5
1259 DO k = ldepar + 1,
klev
1262 zdeh(i, k) = zdeh(i, k-1) + (ztotal(i,k-1)-ztotal(i,k))
1264 zdeh(i, k) = zdeh(i, k-1) + rcpd*(t(i,k-1)-t(i,k)) - &
1265 rd*0.5*(t(i,k-1)+t(i,k))/paprs(i, k)*(pplay(i,k-1)-pplay(i,k)) + &
1266 rlvtt*(zqs(i,k-1)-zqs(i,k))
1286 IF (k>=kb(i) .AND. ldcum(i))
THEN
1287 nuage(i) = nuage(i) .AND. zdeh(i, k) > 0.0
1290 zconv(i) = zconv(i) + conv_q(i, k)*dtime*(paprs(i,k)-paprs(i,k+1))
1291 zvirt(i) = zvirt(i) + (zdeh(i,k)/rlvtt+zqs(i,k)-q(i,k))*(paprs(i,k) &
1299 todo(i) = ldcum(i) .AND. kh(i) > kb(i) .AND. zconv(i) > 0.0
1307 kbmin = min(kbmin, kb(i))
1308 kbmax = max(kbmax, kb(i))
1309 khmax = max(khmax, kh(i))
1317 zfrac(i) = max(0.0, min(zconv(i)/zvirt(i),1.0))
1330 IF (todo(i) .AND. k>=kb(i) .AND. k<=kh(i))
THEN
1331 zvar = zdeh(i, k)/(1.+zdqs(i,k))
1332 d_t(i, k) = zvar*zfrac(i)/rcpd
1333 d_q(i, k) = (zvar*zdqs(i,k)/rlvtt+zqs(i,k)-q(i,k))*zfrac(i) - &
1335 zcond(i) = zcond(i) - d_q(i, k)*(paprs(i,k)-paprs(i,k+1))/
rg
1336 rneb(i, k) = zfrac(i)
1342 IF (todo(i) .AND. zcond(i)<0.0)
THEN
1343 print *,
'WARNING: cond. negative (Kuo) ', i, kb(i), kh(i), zcond(i)
1364 toliq(i) = tomax - ((paprs(i,kb(i))-paprs(i,kh(i)+1))/paprs(i,1)-dpmin) &
1365 *(tomax-tomin)/(dpmax-dpmin)
1366 toliq(i) = max(tomin, min(tomax,toliq(i)))
1367 IF (pplay(i,kh(i))/paprs(i,1)<=deep_sig) toliq(i) = deep_to
1368 IF (old_tau) toliq(i) = 1.0
1387 IF (opt_cld==0)
THEN
1390 IF (todo(i)) zrfl(i) = zcond(i)/dtime
1393 ELSE IF (opt_cld==1)
THEN
1396 IF (todo(i)) zvapo(i) = 0.0
1400 IF (todo(i) .AND. k>=kb(i) .AND. k<=kh(i))
THEN
1401 zvapo(i) = zvapo(i) + (q(i,k)+d_q(i,k))*(paprs(i,k)-paprs(i,k+1))/ &
1408 zrapp(i) = toliq(i)*zcond(i)/zvapo(i)
1409 zrapp(i) = max(0., min(1.,zrapp(i)))
1414 IF (todo(i) .AND. k>=kb(i) .AND. k<=kh(i))
THEN
1415 d_ql(i, k) = zrapp(i)*(q(i,k)+d_q(i,k))
1421 zrfl(i) = (1.0-toliq(i))*zcond(i)/dtime
1425 ELSE IF (opt_cld==2)
THEN
1428 IF (todo(i)) zvapo(i) = 0.0
1432 IF (todo(i) .AND. k>=kb(i) .AND. k<=kh(i))
THEN
1433 zvapo(i) = zvapo(i) + (paprs(i,k)-paprs(i,k+1))/
rg
1439 IF (todo(i) .AND. k>=kb(i) .AND. k<=kh(i))
THEN
1440 d_ql(i, k) = toliq(i)*zcond(i)/zvapo(i)
1446 zrfl(i) = (1.0-toliq(i))*zcond(i)/dtime
1450 ELSE IF (opt_cld==3)
THEN
1459 IF (todo(i) .AND. k>=kb(i) .AND. k<=kh(i))
THEN
1460 zvapo(i) = zvapo(i) + max(0.0, -d_q(i,k))*(paprs(i,k)-paprs(i,k+1)) &
1467 IF (todo(i) .AND. k>=kb(i) .AND. k<=kh(i) .AND. zvapo(i)>0.0)
THEN
1468 d_ql(i, k) = d_ql(i, k) + toliq(i)*zcond(i)/zvapo(i)*max(0.0, -d_q( &
1475 zrfl(i) = (1.0-toliq(i))*zcond(i)/dtime
1479 ELSE IF (opt_cld==4)
THEN
1491 IF (todo(i) .AND. k>=(kb(i)+1) .AND. k<=kh(i))
THEN
1492 zvapo(i) = zvapo(i) + (paprs(i,k)-paprs(i,k+1))/
rg*(pplay(i,kb(i))- &
1499 IF (todo(i) .AND. k>=(kb(i)+1) .AND. k<=kh(i))
THEN
1500 d_ql(i, k) = d_ql(i, k) + toliq(i)*zcond(i)/zvapo(i)*(pplay(i,kb(i) &
1501 )-pplay(i,k))**nexpo
1507 zrfl(i) = (1.0-toliq(i))*zcond(i)/dtime
1513 print *,
'opt_cld est faux:', opt_cld
1520 IF (evap_prec .AND. kbmax>=2)
THEN
1523 IF (todo(i) .AND. k<=(kb(i)-1) .AND. zrfl(i)>0.0)
THEN
1524 zqev = max(0.0, (zqs(i,k)-q(i,k))*zfrac(i))
1525 zqevt = coef_eva*(1.0-q(i,k)/zqs(i,k))*sqrt(zrfl(i))* &
1526 (paprs(i,k)-paprs(i,k+1))/pplay(i, k)*t(i, k)*rd/
rg
1527 zqevt = max(0.0, min(zqevt,zrfl(i)))*
rg*dtime/ &
1528 (paprs(i,k)-paprs(i,k+1))
1529 zqev = min(zqev, zqevt)
1530 zrfln = zrfl(i) - zqev*(paprs(i,k)-paprs(i,k+1))/
rg/dtime
1531 d_q(i, k) = -(zrfln-zrfl(i))*(
rg/(paprs(i,k)-paprs(i,k+1)))*dtime
1532 d_t(i, k) = (zrfln-zrfl(i))*(
rg/(paprs(i,k)-paprs(i, &
1533 k+1)))*dtime*rlvtt/rcpd
1544 IF (t(i,1)>rtt)
THEN
1545 rain(i) = rain(i) + zrfl(i)
1547 snow(i) = snow(i) + zrfl(i)
1554 SUBROUTINE kuofcl(pt, pq, pg, pp, ldcum, kcbot)
1580 REAL zqold(
klon), zbuo
1594 ztu(i, k) = pt(i, k)
1595 zqu(i, k) = pq(i, k)
1611 IF (klab(i,k-1)==1) is = is + 1
1613 IF (klab(i,k-1)==1) lflag(i) = .
true.
1615 IF (is==0)
GO TO 290
1621 zqu(i, k) = zqu(i, k-1)
1622 ztu(i, k) = ztu(i, k-1) + (pg(i,k-1)-pg(i,k))/rcpd
1623 zbuo = ztu(i, k)*(1.+retv*zqu(i,k)) - pt(i, k)*(1.+retv*pq(i,k)) + &
1625 IF (zbuo>0.) klab(i, k) = 1
1626 zqold(i) = zqu(i, k)
1632 CALL adjtq(pp(1,k), ztu(1,k), zqu(1,k), lflag, 1)
1638 IF (lflag(i) .AND. zqu(i,k)/=zqold(i))
THEN
1640 zlu(i, k) = zlu(i, k) + zqold(i) - zqu(i, k)
1641 zbuo = ztu(i, k)*(1.+retv*zqu(i,k)) - pt(i, k)*(1.+retv*pq(i,k)) + &
1654 SUBROUTINE adjtq(pp, pt, pq, ldflag, kcall)
1677 LOGICAL ldflag(
klon)
1683 REAL zcond(
klon), zcond1
1684 REAL zdelta, zcvm5, zldcp, zqsat, zcor, zdqsat
1695 zdelta = max(0., sign(1.,rtt-pt(i)))
1696 zldcp = rlvtt*(1.-zdelta) + zdelta*rlstt
1697 zldcp = zldcp/rcpd/(1.0+rvtmp2*pq(i))
1699 zcvm5 = r5les*rlvtt*(1.-zdelta) + zdelta*r5ies*rlstt
1700 zcvm5 = zcvm5/rcpd/(1.0+rvtmp2*pq(i))
1701 zqsat = r2es*foeew(pt(i), zdelta)/pp(i)
1702 zqsat = min(0.5, zqsat)
1703 zcor = 1./(1.-retv*zqsat)
1705 zdqsat = foede(pt(i), zdelta, zcvm5, zqsat, zcor)
1707 IF (pt(i)<t_coup)
THEN
1708 zqsat = qsats(pt(i))/pp(i)
1709 zdqsat = dqsats(pt(i), zqsat)
1711 zqsat = qsatl(pt(i))/pp(i)
1712 zdqsat = dqsatl(pt(i), zqsat)
1715 zcond(i) = (pq(i)-zqsat)/(1.+zdqsat)
1716 IF (kcall==1) zcond(i) = max(zcond(i), 0.)
1717 IF (kcall==2) zcond(i) = min(zcond(i), 0.)
1718 pt(i) = pt(i) + zldcp*zcond(i)
1719 pq(i) = pq(i) - zcond(i)
1725 IF (zcond(i)/=0.) is = is + 1
1727 IF (is==0)
GO TO 230
1730 IF (ldflag(i) .AND. zcond(i)/=0.)
THEN
1731 zdelta = max(0., sign(1.,rtt-pt(i)))
1732 zldcp = rlvtt*(1.-zdelta) + zdelta*rlstt
1733 zldcp = zldcp/rcpd/(1.0+rvtmp2*pq(i))
1735 zcvm5 = r5les*rlvtt*(1.-zdelta) + zdelta*r5ies*rlstt
1736 zcvm5 = zcvm5/rcpd/(1.0+rvtmp2*pq(i))
1737 zqsat = r2es*foeew(pt(i), zdelta)/pp(i)
1738 zqsat = min(0.5, zqsat)
1739 zcor = 1./(1.-retv*zqsat)
1741 zdqsat = foede(pt(i), zdelta, zcvm5, zqsat, zcor)
1743 IF (pt(i)<t_coup)
THEN
1744 zqsat = qsats(pt(i))/pp(i)
1745 zdqsat = dqsats(pt(i), zqsat)
1747 zqsat = qsatl(pt(i))/pp(i)
1748 zdqsat = dqsatl(pt(i), zqsat)
1751 zcond1 = (pq(i)-zqsat)/(1.+zdqsat)
1752 pt(i) = pt(i) + zldcp*zcond1
1753 pq(i) = pq(i) - zcond1
1759 END SUBROUTINE adjtq
1760 SUBROUTINE fiajh(dtime, paprs, pplay, t, q, d_t, d_q, d_ql, rneb, rain, snow, &
1795 INTEGER k1, k1p, k2, k2p
1799 REAL cp_delta_t(
klev)
1801 REAL v_cptj(
klev), v_cptjk1, v_ssig
1813 REAL zdelta, zcor, zcvm5
1820 local_q(i, k) = q(i, k)
1821 local_t(i, k) = t(i, k)
1839 v_cptt(i, k) = rcpd*local_t(i, k)
1844 zdelta = max(0., sign(1.,rtt-v_t))
1845 zcvm5 = r5les*rlvtt*(1.-zdelta) + zdelta*r5ies*rlstt
1846 zcvm5 = zcvm5/rcpd/(1.0+rvtmp2*local_q(i,k))
1847 v_qs(i, k) = r2es*foeew(v_t, zdelta)/v_p
1848 v_qs(i, k) = min(0.5, v_qs(i,k))
1849 zcor = 1./(1.-retv*v_qs(i,k))
1850 v_qs(i, k) = v_qs(i, k)*zcor
1851 v_qsd(i, k) = foede(v_t, zdelta, zcvm5, v_qs(i,k), zcor)
1853 IF (v_t<t_coup)
THEN
1854 v_qs(i, k) = qsats(v_t)/v_p
1855 v_qsd(i, k) = dqsats(v_t, v_qs(i,k))
1857 v_qs(i, k) = qsatl(v_t)/v_p
1858 v_qsd(i, k) = dqsatl(v_t, v_qs(i,k))
1868 zdp = paprs(i, k) - paprs(i, k+1)
1869 zdpm = paprs(i, k-1) - paprs(i, k)
1870 gamcpdz(i, k) = ((rd/rcpd/(zdpm+zdp)*(v_cptt(i,k-1)*zdpm+ &
1871 v_cptt(i,k)*zdp)+rlvtt/(zdpm+zdp)*(v_qs(i,k-1)*zdpm+ &
1872 v_qs(i,k)*zdp))*(pplay(i,k-1)-pplay(i,k))/paprs(i,k))/(1.0+(v_qsd(i, &
1873 k-1)*zdpm+v_qsd(i,k)*zdp)/(zdpm+zdp))
1886 IF (k2>
klev)
GO TO 9999
1887 zflo = v_cptt(i, k2-1) - v_cptt(i, k2) - gamcpdz(i, k2)
1888 zsat = (local_q(i,k2-1)-v_qs(i,k2-1))*(paprs(i,k2-1)-paprs(i,k2)) + &
1889 (local_q(i,k2)-v_qs(i,k2))*(paprs(i,k2)-paprs(i,k2+1))
1890 IF (zflo<=0.0 .OR. zsat<=0.0)
GO TO 810
1895 IF (k2==
klev)
GO TO 821
1897 zsat = zsat + (paprs(i,k2p)-paprs(i,k2p+1))*(local_q(i,k2p)-v_qs(i,k2p))
1898 zflo = v_cptt(i, k2p-1) - v_cptt(i, k2p) - gamcpdz(i, k2p)
1899 IF (zflo<=0.0 .OR. zsat<=0.0)
GO TO 821
1907 zdp = paprs(i, k1) - paprs(i, k1+1)
1908 v_cptjk1 = ((1.0+v_qsd(i,k1))*(v_cptt(i,k1)+v_cptj(k1))+rlvtt*(local_q(i, &
1909 k1)-v_qs(i,k1)))*zdp
1910 v_ssig = zdp*(1.0+v_qsd(i,k1))
1914 zdp = paprs(i, k) - paprs(i, k+1)
1915 v_cptj(k) = v_cptj(k-1) + gamcpdz(i, k)
1916 v_cptjk1 = v_cptjk1 + zdp*((1.0+v_qsd(i,k))*(v_cptt(i, &
1917 k)+v_cptj(k))+rlvtt*(local_q(i,k)-v_qs(i,k)))
1918 v_ssig = v_ssig + zdp*(1.0+v_qsd(i,k))
1922 cp_new_t(k) = v_cptjk1/v_ssig - v_cptj(k)
1923 cp_delta_t(k) = cp_new_t(k) - v_cptt(i, k)
1924 new_qb(k) = v_qs(i, k) + v_qsd(i, k)*cp_delta_t(k)/rlvtt
1925 local_q(i, k) = new_qb(k)
1926 local_t(i, k) = cp_new_t(k)/rcpd
1934 v_cptt(i, k) = rcpd*local_t(i, k)
1939 zdelta = max(0., sign(1.,rtt-v_t))
1940 zcvm5 = r5les*rlvtt*(1.-zdelta) + zdelta*r5ies*rlstt
1941 zcvm5 = zcvm5/rcpd/(1.0+rvtmp2*local_q(i,k))
1942 v_qs(i, k) = r2es*foeew(v_t, zdelta)/v_p
1943 v_qs(i, k) = min(0.5, v_qs(i,k))
1944 zcor = 1./(1.-retv*v_qs(i,k))
1945 v_qs(i, k) = v_qs(i, k)*zcor
1946 v_qsd(i, k) = foede(v_t, zdelta, zcvm5, v_qs(i,k), zcor)
1948 IF (v_t<t_coup)
THEN
1949 v_qs(i, k) = qsats(v_t)/v_p
1950 v_qsd(i, k) = dqsats(v_t, v_qs(i,k))
1952 v_qs(i, k) = qsatl(v_t)/v_p
1953 v_qsd(i, k) = dqsatl(v_t, v_qs(i,k))
1958 zdpm = paprs(i, k-1) - paprs(i, k)
1959 zdp = paprs(i, k) - paprs(i, k+1)
1960 gamcpdz(i, k) = ((rd/rcpd/(zdpm+zdp)*(v_cptt(i,k-1)*zdpm+ &
1961 v_cptt(i,k)*zdp)+rlvtt/(zdpm+zdp)*(v_qs(i,k-1)*zdpm+ &
1962 v_qs(i,k)*zdp))*(pplay(i,k-1)-pplay(i,k))/paprs(i,k))/(1.0+(v_qsd(i, &
1963 k-1)*zdpm+v_qsd(i,k)*zdp)/(zdpm+zdp))
1968 IF (k1==1)
GO TO 841
1969 zflo = v_cptt(i, k1-1) - v_cptt(i, k1) - gamcpdz(i, k1)
1970 zsat = (local_q(i,k1-1)-v_qs(i,k1-1))*(paprs(i,k1-1)-paprs(i,k1)) + &
1971 (local_q(i,k1)-v_qs(i,k1))*(paprs(i,k1)-paprs(i,k1+1))
1972 IF (zflo<=0.0 .OR. zsat<=0.0)
GO TO 841
1976 IF (k1==1)
GO TO 830
1977 zsat = zsat + (local_q(i,k1-1)-v_qs(i,k1-1))*(paprs(i,k1-1)-paprs(i,k1))
1978 zflo = v_cptt(i, k1-1) - v_cptt(i, k1) - gamcpdz(i, k1)
1979 IF (zflo>0.0 .AND. zsat>0.0)
THEN
1997 delta_q(i, k) = local_q(i, k) - q(i, k)
1998 IF (delta_q(i,k)<0.) rneb(i, k) = 1.0
2016 zdp = paprs(i, k) - paprs(i, k+1)
2017 zq1(i) = zq1(i) - delta_q(i, k)*zdp
2018 zq2(i) = zq2(i) - min(0.0, delta_q(i,k))*zdp
2025 IF (zq2(i)/=0.0) d_ql(i, k) = -min(0.0, delta_q(i,k))*zq1(i)/zq2(i)
2032 local_q(i, k) = max(local_q(i,k), seuil_vap)
2038 d_t(i, k) = local_t(i, k) - t(i, k)
2039 d_q(i, k) = local_q(i, k) - q(i, k)
2044 END SUBROUTINE fiajh
2045 SUBROUTINE fiajc(dtime, paprs, pplay, t, q, conv_q, d_t, d_q, d_ql, rneb, &
2046 rain, snow, ibas, itop)
2082 INTEGER kh(
klon), i, k
2086 REAL ztt, zvar, zfrac(
klon)
2088 REAL zdelta, zcor, zcvm5
2116 zdelta = max(0., sign(1.,rtt-ztt))
2117 zcvm5 = r5les*rlvtt*(1.-zdelta) + zdelta*r5ies*rlstt
2118 zcvm5 = zcvm5/rcpd/(1.0+rvtmp2*q(i,k))
2119 zqs(i, k) = r2es*foeew(ztt, zdelta)/pplay(i, k)
2120 zqs(i, k) = min(0.5, zqs(i,k))
2121 zcor = 1./(1.-retv*zqs(i,k))
2122 zqs(i, k) = zqs(i, k)*zcor
2123 zdqs(i, k) = foede(ztt, zdelta, zcvm5, zqs(i,k), zcor)
2125 IF (ztt<t_coup)
THEN
2126 zqs(i, k) = qsats(ztt)/pplay(i, k)
2127 zdqs(i, k) = dqsats(ztt, zqs(i,k))
2129 zqs(i, k) = qsatl(ztt)/pplay(i, k)
2130 zdqs(i, k) = dqsatl(ztt, zqs(i,k))
2140 zdeh(i, k) = rcpd*(t(i,k-1)-t(i,k)) - rd*0.5*(t(i,k-1)+t(i,k))/paprs(i, k &
2141 )*(pplay(i,k-1)-pplay(i,k)) + rlvtt*(zqs(i,k-1)-zqs(i,k))
2142 zdeh(i, k) = zdeh(i, k)*0.5
2144 DO k = plb + 1,
klev
2146 zdeh(i, k) = zdeh(i, k-1) + rcpd*(t(i,k-1)-t(i,k)) - &
2147 rd*0.5*(t(i,k-1)+t(i,k))/paprs(i, k)*(pplay(i,k-1)-pplay(i,k)) + &
2148 rlvtt*(zqs(i,k-1)-zqs(i,k))
2163 nuage(i) = nuage(i) .AND. zdeh(i, k) > 0.0
2166 zconv(i) = zconv(i) + conv_q(i, k)*dtime*(paprs(i,k)-paprs(i,k+1))
2167 zvirt(i) = zvirt(i) + (zdeh(i,k)/rlvtt+zqs(i,k)-q(i,k))*(paprs(i,k)- &
2178 IF (k<=kh(i) .AND. kh(i)>plb .AND. zconv(i)>0.0)
THEN
2180 zfrac(i) = max(0.0, min(zconv(i)/zvirt(i),1.0))
2182 test(i, k) = .
false.
2190 zvar = zdeh(i, k)/(1.0+zdqs(i,k))
2191 d_q(i, k) = (zvar*zdqs(i,k)/rlvtt+zqs(i,k)-q(i,k))*zfrac(i) - &
2193 d_t(i, k) = zvar*zfrac(i)/rcpd
2205 IF (d_q(i,k)<0.0) rneb(i, k) = zfrac(i)
2206 zq1(i) = zq1(i) - d_q(i, k)*(paprs(i,k)-paprs(i,k+1))
2207 zq2(i) = zq2(i) - min(0.0, d_q(i,k))*(paprs(i,k)-paprs(i,k+1))
2215 IF (zq2(i)/=0.) d_ql(i, k) = -min(0.0, d_q(i,k))*zq1(i)/zq2(i)
2223 IF (kh(i)>plb .AND. zconv(i)>0.0)
THEN
2226 zfrac(i) = max(0.0, min(zconv(i)/zvirt(i),1.0))
2228 zvar = zdeh(i, k)/(1.0+zdqs(i,k))
2229 d_q(i, k) = (zvar*zdqs(i,k)/rlvtt+zqs(i,k)-q(i,k))*zfrac(i) - &
2231 d_t(i, k) = zvar*zfrac(i)/rcpd
2237 IF (d_q(i,k)<0.0) rneb(i, k) = zfrac(i)
2238 zq1(i) = zq1(i) - d_q(i, k)*(paprs(i,k)-paprs(i,k+1))
2239 zq2(i) = zq2(i) - min(0.0, d_q(i,k))*(paprs(i,k)-paprs(i,k+1))
2242 IF (zq2(i)/=0.) d_ql(i, k) = -min(0.0, d_q(i,k))*zq1(i)/zq2(i)
2250 END SUBROUTINE fiajc
subroutine conman(dtime, paprs, pplay, t, q, d_t, d_q, d_ql, rneb, rain, snow, ibas, itop)
subroutine conlmd(dtime, paprs, pplay, t, q, conv_q, d_t, d_q, rain, snow, ibas, itop)
subroutine adjtq(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 false
subroutine fiajh(dtime, paprs, pplay, t, q, d_t, d_q, d_ql, rneb, rain, snow, ibas, itop)
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
!$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
subroutine conkuo(dtime, paprs, pplay, t, q, conv_q, d_t, d_q, d_ql, rneb, rain, snow, ibas, itop)
subroutine fiajc(dtime, paprs, pplay, t, q, conv_q, d_t, d_q, d_ql, rneb, rain, snow, ibas, itop)
subroutine conmanv(dtime, paprs, pplay, t, q, afaire, opt_cld, d_t, d_q, d_ql, rneb, rain, snow, ibas, itop, accompli, imprim)
subroutine kuofcl(pt, pq, pg, pp, ldcum, kcbot)