38 INTEGER,
INTENT(IN) :: nd
39 INTEGER,
INTENT(IN) :: k_upper
40 REAL,
INTENT(IN) :: delt
44 CHARACTER (LEN=20) :: modname =
'cv3_param'
45 CHARACTER (LEN=80) :: abort_message
47 LOGICAL,
SAVE :: first = .
true.
58 noff = min(max(nd-k_upper, 1), (nd+1)/2)
104 OPEN (99, file=
'conv_param.data', status=
'old', form=
'formatted',
err=9999)
105 READ (99, *, end=9998)
dpbase
106 READ (99, *, end=9998)
pbcrit
107 READ (99, *, end=9998)
ptcrit
108 READ (99, *, end=9998)
sigdz
109 READ (99, *, end=9998) spfac
110 READ (99, *, end=9998) tau
111 READ (99, *, end=9998) flag_wb
112 READ (99, *, end=9998) wbmax
116 WRITE (*, *)
'dpbase=',
dpbase
117 WRITE (*, *)
'pbcrit=',
pbcrit
118 WRITE (*, *)
'ptcrit=',
ptcrit
119 WRITE (*, *)
'sigdz=',
sigdz
120 WRITE (*, *)
'spfac=', spfac
121 WRITE (*, *)
'tau=', tau
122 WRITE (*, *)
'flag_wb =', flag_wb
123 WRITE (*, *)
'wbmax =', wbmax
126 OPEN (79, file=
'ep_param.data', status=
'old', form=
'formatted',
err=7999)
127 READ (79, *, end=7998) flag_epkeorig
128 READ (79, *, end=7998)
elcrit
129 READ (79, *, end=7998) tlcrit
133 WRITE (*, *)
'flag_epKEorig', flag_epkeorig
134 WRITE (*, *)
'elcrit=',
elcrit
135 WRITE (*, *)
'tlcrit=', tlcrit
148 CALL bcast(flag_epkeorig)
156 beta = 1.0 - delt/tau
168 SUBROUTINE cv3_prelim(len, nd, ndp1, t, q, p, ph, &
169 lv, lf, cpn, tv, gz, h, hm, th)
179 INTEGER len, nd, ndp1
180 REAL t(len, nd), q(len, nd), p(len, nd), ph(len, ndp1)
183 REAL lv(len, nd), lf(len, nd), cpn(len, nd), tv(len, nd)
184 REAL gz(len, nd), h(len, nd), hm(len, nd)
204 lf(i, k) =
lf0 -
clmci*(t(i,k)-273.15)
205 cpn(i, k) =
cpd*(1.0-q(i,k)) +
cpv*q(i, k)
206 cpx(i, k) =
cpd*(1.0-q(i,k)) +
cl*q(i, k)
208 tv(i, k) = t(i, k)*(1.0+q(i,k)/
eps-q(i,k))
209 rdcp = (
rrd*(1.-q(i,k))+q(i,k)*
rrv)/cpn(i, k)
210 th(i, k) = t(i, k)*(1000.0/p(i,k))**rdcp
222 tvx = t(i, k)*(1.+q(i,k)/
eps-q(i,k))
223 tvy = t(i, k-1)*(1.+q(i,k-1)/
eps-q(i,k-1))
224 gz(i, k) = gz(i, k-1) + 0.5*
rrd*(tvx+tvy)* &
225 (p(i,k-1)-p(i,k))/ph(i, k)
240 h(i, k) = gz(i, k) + cpn(i, k)*t(i, k)
241 hm(i, k) = gz(i, k) + cpx(i, k)*(t(i,k)-t(i,1)) + lv(i, k)*q(i, k)
248 SUBROUTINE cv3_feed(len, nd, ok_conserv_q, &
249 t, q,
u, v, p, ph, hm, gz, &
250 p1feed, p2feed, wght, &
251 wghti, tnk, thnk, qnk, qsnk, unk, vnk, &
252 cpnk, hnk, nk, icb, icbmax, iflag, gznk, plcl)
273 INTEGER,
INTENT (IN) :: len, nd
274 LOGICAL,
INTENT (IN) :: ok_conserv_q
275 REAL,
DIMENSION (len, nd),
INTENT (IN) :: t, q, p
276 REAL,
DIMENSION (len, nd),
INTENT (IN) :: u, v
277 REAL,
DIMENSION (len, nd),
INTENT (IN) :: hm, gz
278 REAL,
DIMENSION (len, nd+1),
INTENT (IN) :: ph
279 REAL,
DIMENSION (len),
INTENT (IN) :: p1feed
280 REAL,
DIMENSION (nd),
INTENT (IN) :: wght
282 REAL,
DIMENSION (len),
INTENT (INOUT) :: p2feed
284 INTEGER,
INTENT (OUT) :: icbmax
285 INTEGER,
DIMENSION (len),
INTENT (OUT) :: iflag, nk, icb
286 REAL,
DIMENSION (len, nd),
INTENT (OUT) :: wghti
287 REAL,
DIMENSION (len),
INTENT (OUT) :: tnk, thnk, qnk, qsnk
288 REAL,
DIMENSION (len),
INTENT (OUT) :: unk, vnk
289 REAL,
DIMENSION (len),
INTENT (OUT) :: cpnk, hnk, gznk
290 REAL,
DIMENSION (len),
INTENT (OUT) :: plcl
293 INTEGER i, k, iter, niter
296 REAL pup(len), plo(len), pfeed(len)
297 REAL plclup(len), plcllo(len), plclfeed(len)
304 LOGICAL,
SAVE :: first
305 LOGICAL,
SAVE :: ok_new_feed
306 REAL,
SAVE :: dp_lcl_feed
313 ok_new_feed = ok_conserv_q
314 OPEN (98, file=
'cv3feed_param.data', status=
'old', form=
'formatted', iostat=iostat)
316 READ (98, *, end=998) ok_new_feed
320 print *,
' ok_new_feed: ', ok_new_feed
331 gznk(i) = gz(i, nk(i))
347 CALL cv3_vertmix(len, nd, iflag, p1feed, pup, p, ph, &
349 wghti, nk, tnk, thnk, qnk, qsnk, unk, vnk, plclup)
352 plo(i) = ph(i, nk(i)+1)
354 CALL cv3_vertmix(len, nd, iflag, p1feed, plo, p, ph, &
356 wghti, nk, tnk, thnk, qnk, qsnk, unk, vnk, plcllo)
361 plcllo(i) = min(plo(i), plcllo(i))
362 plclup(i) = max(pup(i), plclup(i))
363 nocond(i) = plclup(i) <= pup(i)
370 IF (ok_new_feed)
THEN
371 pfeed(i) = (pup(i)*(plo(i)-plcllo(i)-dp_lcl_feed)+ &
372 plo(i)*(plclup(i)-pup(i)+dp_lcl_feed))/ &
373 (plo(i)-plcllo(i)+plclup(i)-pup(i))
375 pfeed(i) = (pup(i)*(plo(i)-plcllo(i))+ &
376 plo(i)*(plclup(i)-pup(i)))/ &
377 (plo(i)-plcllo(i)+plclup(i)-pup(i))
385 IF (ok_new_feed)
THEN
386 IF (iter==niter)
THEN
389 IF (ph(i,k)>=plclfeed(i)) pfeedmin(i) = ph(i, k)
393 pfeed(i) = max(pfeedmin(i), pfeed(i))
399 CALL cv3_vertmix(len, nd, iflag, p1feed, pfeed, p, ph, &
401 wghti, nk, tnk, thnk, qnk, qsnk, unk, vnk, plclfeed)
403 IF (ok_new_feed)
THEN
405 posit(i) = (sign(1.,plclfeed(i)-pfeed(i)+dp_lcl_feed)+1.)*0.5
406 IF (plclfeed(i)-pfeed(i)+dp_lcl_feed==0.) posit(i) = 1.
410 posit(i) = (sign(1.,plclfeed(i)-pfeed(i))+1.)*0.5
411 IF (plclfeed(i)==pfeed(i)) posit(i) = 1.
420 pup(i) = posit(i)*pfeed(i) + (1.-posit(i))*pup(i)
421 plo(i) = (1.-posit(i))*pfeed(i) + posit(i)*plo(i)
422 plclup(i) = posit(i)*plclfeed(i) + (1.-posit(i))*plclup(i)
423 plcllo(i) = (1.-posit(i))*plclfeed(i) + posit(i)*plcllo(i)
428 plcl(i) = plclfeed(i)
432 cpnk(i) =
cpd*(1.0-qnk(i)) +
cpv*qnk(i)
433 hnk(i) = gz(i, 1) + cpnk(i)*tnk(i)
441 IF (((tnk(i)<250.0) .OR. (qnk(i)<=0.0)) .AND. (iflag(i)==0)) iflag(i) = 7
472 IF (ph(i,k)<plcl(i)) icb(i) = min(icb(i), k)
483 IF ((icb(i)==nlm) .AND. (iflag(i)==0)) iflag(i) = 9
495 IF (iflag(i)<7) icbmax = max(icbmax, icb(i))
501 SUBROUTINE cv3_undilute1(len, nd, t, qs, gz, plcl, p, icb, tnk, qnk, gznk, &
522 INTEGER,
INTENT (IN) :: len, nd
523 INTEGER,
DIMENSION (len),
INTENT (IN) :: icb
524 REAL,
DIMENSION (len, nd),
INTENT (IN) :: t, qs, gz
525 REAL,
DIMENSION (len),
INTENT (IN) :: tnk, qnk, gznk
526 REAL,
DIMENSION (len, nd),
INTENT (IN) :: p
527 REAL,
DIMENSION (len),
INTENT (IN) :: plcl
530 INTEGER,
DIMENSION (len),
INTENT (OUT) :: icbs
531 REAL,
DIMENSION (len, nd),
INTENT (OUT) :: tp, tvp, clw
535 INTEGER icb1(len), icbsmax2
536 REAL tg, qg, alv, s, ahg, tc, denom, es, rg
537 REAL ah0(len), cpp(len)
538 REAL ticb(len), gzicb(len)
553 ah0(i) = (
cpd*(1.-qnk(i))+
cl*qnk(i))*tnk(i) + qnk(i)*(
lv0-
clmcpv*(tnk(i)-273.15)) + gznk(i)
554 cpp(i) =
cpd*(1.-qnk(i)) + qnk(i)*
cpv
561 icb1(i) = max(icb(i), 2)
562 icb1(i) = min(icb(i),
nl)
566 IF (plcl(i)<p(i,icb1(i)))
THEN
567 icbs(i) = min(icbs(i)+1,
nl)
572 ticb(i) = t(i, icbs(i))
573 gzicb(i) = gz(i, icbs(i))
574 qsicb(i) = qs(i, icbs(i))
582 icbsmax2 = max(icbsmax2, icbs(i))
599 tp(i, k) = tnk(i) - (gz(i,k)-gznk(i))*cpinv(i)
600 tvp(i, k) = tp(i, k)*(1.+qnk(i)/
eps-qnk(i))
616 s =
cpd*(1.-qnk(i)) +
cl*qnk(i) + &
617 alv*alv*qg/(
rrv*ticb(i)*ticb(i))
620 ahg =
cpd*tg + (
cl-
cpd)*qnk(i)*tg + alv*qg + gzicb(i)
621 tg = tg + s*(ah0(i)-ahg)
626 denom = max(denom, 1.0)
628 es = 6.112*exp(17.67*tc/denom)
633 qg =
eps*es/(p(i,icbs(i))-es*(1.-
eps))
641 ahg =
cpd*tg + (
cl-
cpd)*qnk(i)*tg + alv*qg + gzicb(i)
642 tg = tg + s*(ah0(i)-ahg)
647 denom = max(denom, 1.0)
649 es = 6.112*exp(17.67*tc/denom)
654 qg =
eps*es/(p(i,icbs(i))-es*(1.-
eps))
663 tp(i, icbs(i)) = (ah0(i)-gz(i,icbs(i))-alv*qg)/(
cpd+(
cl-
cpd)*qnk(i))
667 clw(i, icbs(i)) = qnk(i) - qg
668 clw(i, icbs(i)) = max(0.0, clw(i,icbs(i)))
673 tvp(i, icbs(i)) = tp(i, icbs(i))*(1.+qg/
eps-qnk(i))
700 ticb(i) = t(i, icb(i)+1)
701 gzicb(i) = gz(i, icb(i)+1)
702 qsicb(i) = qs(i, icb(i)+1)
714 s =
cpd*(1.-qnk(i)) +
cl*qnk(i) &
715 +alv*alv*qg/(
rrv*ticb(i)*ticb(i))
718 ahg =
cpd*tg + (
cl-
cpd)*qnk(i)*tg + alv*qg + gzicb(i)
719 tg = tg + s*(ah0(i)-ahg)
724 denom = max(denom, 1.0)
726 es = 6.112*exp(17.67*tc/denom)
731 qg =
eps*es/(p(i,icb(i)+1)-es*(1.-
eps))
739 ahg =
cpd*tg + (
cl-
cpd)*qnk(i)*tg + alv*qg + gzicb(i)
740 tg = tg + s*(ah0(i)-ahg)
745 denom = max(denom, 1.0)
747 es = 6.112*exp(17.67*tc/denom)
752 qg =
eps*es/(p(i,icb(i)+1)-es*(1.-
eps))
761 tp(i, icb(i)+1) = (ah0(i)-gz(i,icb(i)+1)-alv*qg)/(
cpd+(
cl-
cpd)*qnk(i))
765 clw(i, icb(i)+1) = qnk(i) - qg
766 clw(i, icb(i)+1) = max(0.0, clw(i,icb(i)+1))
771 tvp(i, icb(i)+1) = tp(i, icb(i)+1)*(1.+qg/
eps-qnk(i))
778 SUBROUTINE cv3_trigger(len, nd, icb, plcl, p, th, tv, tvp, thnk, &
779 pbase, buoybase, iflag, sig, w0)
802 REAL plcl(len), p(len, nd)
803 REAL th(len, nd), tv(len, nd), tvp(len, nd)
807 REAL pbase(len), buoybase(len)
811 REAL sig(len, nd), w0(len, nd)
815 REAL tvpbase, tvbase, tdif, ath, ath1
821 pbase(i) = plcl(i) +
dpbase
822 tvpbase = tvp(i, icb(i)) *(pbase(i)-p(i,icb(i)+1))/(p(i,icb(i))-p(i,icb(i)+1)) + &
823 tvp(i, icb(i)+1)*(p(i,icb(i))-pbase(i)) /(p(i,icb(i))-p(i,icb(i)+1))
824 tvbase = tv(i, icb(i)) *(pbase(i)-p(i,icb(i)+1))/(p(i,icb(i))-p(i,icb(i)+1)) + &
825 tv(i, icb(i)+1)*(p(i,icb(i))-pbase(i)) /(p(i,icb(i))-p(i,icb(i)+1))
826 buoybase(i) = tvpbase - tvbase
863 ath = th(i, icb(i)-1) - dttrig
865 IF (tdif<
dtcrit .OR. ath>ath1)
THEN
866 sig(i, k) =
beta*sig(i, k) - 2.*
alpha*tdif*tdif
867 sig(i, k) = amax1(sig(i,k), 0.0)
868 w0(i, k) =
beta*w0(i, k)
882 iflag1, nk1, icb1, icbs1, &
883 plcl1, tnk1, qnk1, gznk1, pbase1, buoybase1, &
884 t1, q1, qs1, u1, v1, gz1, th1, &
886 h1, lv1, cpn1, p1, ph1, tv1, tp1, tvp1, clw1, &
888 iflag, nk, icb, icbs, &
889 plcl, tnk, qnk, gznk, pbase, buoybase, &
890 t, q, qs,
u, v, gz, th, &
892 h, lv, cpn, p, ph, tv, tp, tvp, clw, &
900 INTEGER len, ncum, nd, ntra, nloc
901 INTEGER iflag1(len), nk1(len), icb1(len), icbs1(len)
902 REAL plcl1(len), tnk1(len), qnk1(len), gznk1(len)
903 REAL pbase1(len), buoybase1(len)
904 REAL t1(len, nd), q1(len, nd), qs1(len, nd), u1(len, nd), v1(len, nd)
905 REAL gz1(len, nd), h1(len, nd), lv1(len, nd), cpn1(len, nd)
906 REAL p1(len, nd), ph1(len, nd+1), tv1(len, nd), tp1(len, nd)
907 REAL tvp1(len, nd), clw1(len, nd)
909 REAL sig1(len, nd), w01(len, nd)
910 REAL tra1(len, nd, ntra)
914 INTEGER iflag(nloc), nk(nloc), icb(nloc), icbs(nloc)
915 REAL plcl(nloc), tnk(nloc), qnk(nloc), gznk(nloc)
916 REAL pbase(nloc), buoybase(nloc)
917 REAL t(nloc, nd), q(nloc, nd), qs(nloc, nd), u(nloc, nd), v(nloc, nd)
918 REAL gz(nloc, nd), h(nloc, nd), lv(nloc, nd), cpn(nloc, nd)
919 REAL p(nloc, nd), ph(nloc, nd+1), tv(nloc, nd), tp(nloc, nd)
920 REAL tvp(nloc, nd), clw(nloc, nd)
922 REAL sig(nloc, nd), w0(nloc, nd)
923 REAL tra(nloc, nd, ntra)
928 CHARACTER (LEN=20) :: modname =
'cv3_compress'
929 CHARACTER (LEN=80) :: abort_message
934 IF (iflag1(i)==0)
THEN
936 sig(nn, k) = sig1(i, k)
937 w0(nn, k) = w01(i, k)
940 qs(nn, k) = qs1(i, k)
943 gz(nn, k) = gz1(i, k)
945 lv(nn, k) = lv1(i, k)
946 cpn(nn, k) = cpn1(i, k)
948 ph(nn, k) = ph1(i, k)
949 tv(nn, k) = tv1(i, k)
950 tp(nn, k) = tp1(i, k)
951 tvp(nn, k) = tvp1(i, k)
952 clw(nn, k) = clw1(i, k)
953 th(nn, k) = th1(i, k)
972 WRITE (
lunout, *)
'strange! nn not equal to ncum: ', nn, ncum
979 IF (iflag1(i)==0)
THEN
981 pbase(nn) = pbase1(i)
982 buoybase(nn) = buoybase1(i)
990 iflag(nn) = iflag1(i)
997 SUBROUTINE icefrac(t, clw, qi, nl, len)
1006 REAL t(len, nl), clw(len, nl)
1012 IF (t(i,k)>263.15)
THEN
1015 IF (t(i,k)<243.15)
THEN
1016 qi(i, k) = clw(i, k)
1018 fracg = (263.15-t(i,k))/20
1019 qi(i, k) = clw(i, k)*fracg
1031 tnk, qnk, gznk, hnk, t, q, qs, gz, &
1032 p, h, tv, lv, lf, pbase, buoybase, plcl, &
1033 inb, tp, tvp, clw, hp, ep, sigp, buoy, frac)
1054 include
"cvthermo.h"
1055 include
"cv3param.h"
1060 INTEGER,
INTENT (IN) :: ncum, nd, nloc
1061 INTEGER,
DIMENSION (nloc),
INTENT (IN) :: icb, icbs, nk
1062 REAL,
DIMENSION (nloc, nd),
INTENT (IN) :: t, q, qs, gz
1063 REAL,
DIMENSION (nloc, nd),
INTENT (IN) :: p
1064 REAL,
DIMENSION (nloc),
INTENT (IN) :: tnk, qnk, gznk
1065 REAL,
DIMENSION (nloc),
INTENT (IN) :: hnk
1066 REAL,
DIMENSION (nloc, nd),
INTENT (IN) :: lv, lf, tv, h
1067 REAL,
DIMENSION (nloc),
INTENT (IN) :: pbase, buoybase, plcl
1070 REAL,
DIMENSION (nloc, nd),
INTENT (INOUT) :: tp, tvp, clw
1074 INTEGER,
DIMENSION (nloc),
INTENT (OUT) :: inb
1075 REAL,
DIMENSION (nloc, nd),
INTENT (OUT) :: ep, sigp, hp
1076 REAL,
DIMENSION (nloc, nd),
INTENT (OUT) :: buoy
1077 REAL,
DIMENSION (nloc, nd),
INTENT (OUT) :: frac
1081 REAL tg, qg, ahg, alv, alf, s, tc, es, esi, denom, rg, tca, elacrit
1083 REAL qsat_new, snew, qi(nloc, nd)
1084 REAL by, defrac, pden, tbis
1085 REAL ah0(nloc), cape(nloc), capem(nloc), byp(nloc)
1087 INTEGER iposit(nloc)
1111 ah0(i) = (
cpd*(1.-qnk(i))+
cl*qnk(i))*tnk(i)+ &
1113 qnk(i)*(
lv0-
clmcpv*(tnk(i)-273.15)) + gznk(i)
1123 IF (k>=(icbs(i)+1))
THEN
1132 s =
cpd*(1.-qnk(i)) +
cl*qnk(i) + &
1133 alv*alv*qg/(
rrv*t(i,k)*t(i,k))
1136 ahg =
cpd*tg + (
cl-
cpd)*qnk(i)*tg + alv*qg + gz(i, k)
1137 tg = tg + s*(ah0(i)-ahg)
1142 denom = max(denom, 1.0)
1144 es = 6.112*exp(17.67*tc/denom)
1148 qg =
eps*es/(p(i,k)-es*(1.-
eps))
1155 ahg =
cpd*tg + (
cl-
cpd)*qnk(i)*tg + alv*qg + gz(i, k)
1156 tg = tg + s*(ah0(i)-ahg)
1161 denom = max(denom, 1.0)
1163 es = 6.112*exp(17.67*tc/denom)
1167 qg =
eps*es/(p(i,k)-es*(1.-
eps))
1179 IF (cvflag_ice)
THEN
1180 tp(i, k) = max(0., (ah0(i)-gz(i,k)-alv*qg)/(
cpd+(
cl-
cpd)*qnk(i)))
1182 tp(i, k) = (ah0(i)-gz(i,k)-alv*qg)/(
cpd+(
cl-
cpd)*qnk(i))
1185 clw(i, k) = qnk(i) - qg
1186 clw(i, k) = max(0.0, clw(i,k))
1190 tvp(i, k) = tp(i, k)*(1.+qg/
eps-qnk(i))
1191 IF (cvflag_ice)
THEN
1192 IF (clw(i,k)<1.e-11)
THEN
1194 tvp(i, k) = tv(i, k)
1201 IF (cvflag_ice)
THEN
1204 IF (t(i,k)>263.15)
THEN
1207 IF (t(i,k)<243.15)
THEN
1208 qi(i, k) = clw(i, k)
1210 fracg = (263.15-t(i,k))/20
1211 qi(i, k) = clw(i, k)*fracg
1215 IF (t(i,k)<263.15)
THEN
1246 esi = exp(23.33086-(6111.72784/tp(i,k))+0.15215*log(tp(i,k)))
1247 qsat_new =
eps*esi/(p(i,k)-esi*(1.-
eps))
1248 snew =
cpd*(1.-qnk(i)) +
cl*qnk(i) + alv*als*qsat_new/ &
1249 (
rrv*tp(i,k)*tp(i,k))
1252 tp(i, k) = tp(i, k) + &
1253 ((
cpd*(1.-qnk(i))+
cl*qnk(i))*(tg-tp(i,k)) + &
1254 alv*(qg-qsat_new)+alf*qi(i,k))*snew
1260 clw(i, k) = qnk(i) - qsat_new
1261 clw(i, k) = max(0.0, clw(i,k))
1262 tvp(i, k) = max(0., tp(i,k)*(1.+qsat_new/
eps-qnk(i)))
1265 IF (clw(i,k)<1.e-11)
THEN
1267 tvp(i, k) = tv(i, k)
1291 IF (flag_epkeorig/=1)
THEN
1299 ep(i, k) = max(ep(i,k), 0.0)
1300 ep(i, k) = min(ep(i,k),
epmax)
1315 elacrit =
elcrit*(1.0-tca/tlcrit)
1317 elacrit = max(elacrit, 0.0)
1318 ep(i, k) = 1.0 - elacrit/max(clw(i,k), 1.0e-8)
1319 ep(i, k) = max(ep(i,k), 0.0)
1320 ep(i, k) = min(ep(i,k),
epmax)
1350 tp(i,
nlp) = tp(i,
nl)
1364 buoy(i, k) = tvp(i, k) - tv(i, k)
1374 IF ((k>=icb(i)) .AND. (k<=
nl) .AND. (p(i,k)>=pbase(i)))
THEN
1375 buoy(i, k) = buoybase(i)
1381 buoy(i, icb(i)) = buoybase(i)
1402 IF (k>=icb(i) .AND. buoy(i,k)>0.)
THEN
1403 iposit(i) = min(iposit(i), k)
1409 IF (iposit(i)==
nl)
THEN
1416 IF ((k>=iposit(i)) .AND. (buoy(i,k)<
dtovsh))
THEN
1417 inb(i) = min(inb(i), k)
1526 IF (cvflag_ice)
THEN
1530 IF ((k>=icb(i)) .AND. (k<=inb(i)))
THEN
1531 frac(i, k) = 1. - (t(i,k)-243.15)/(263.15-243.15)
1532 frac(i, k) = min(max(frac(i,k),0.0), 1.0)
1533 hp(i, k) = hnk(i) + (lv(i,k)+(
cpd-
cpv)*t(i,k)+frac(i,k)*lf(i,k))* &
1542 frac(i,k) = frac(i,icb(i))
1551 IF ((k>=icb(i)) .AND. (k<=inb(i)))
THEN
1552 hp(i, k) = hnk(i) + (lv(i,k)+(
cpd-
cpv)*t(i,k))*ep(i, k)*clw(i, k)
1562 SUBROUTINE cv3_closure(nloc, ncum, nd, icb, inb, &
1563 pbase, p, ph, tv, buoy, &
1564 sig, w0, cape, m, iflag)
1573 include
"cvthermo.h"
1574 include
"cv3param.h"
1577 INTEGER ncum, nd, nloc
1578 INTEGER icb(nloc), inb(nloc)
1580 REAL p(nloc, nd), ph(nloc, nd+1)
1581 REAL tv(nloc, nd), buoy(nloc, nd)
1584 REAL sig(nloc, nd), w0(nloc, nd)
1592 INTEGER i, j, k, icbmax
1593 REAL deltap, fac, w, amu
1594 REAL dtmin(nloc, nd), sigold(nloc, nd)
1616 IF ((inb(i)<(
nl-1)) .AND. (k>=(inb(i)+1)))
THEN
1617 sig(i, k) =
beta*sig(i, k) + &
1618 2.*
alpha*buoy(i, inb(i))*abs(buoy(i,inb(i)))
1619 sig(i, k) = amax1(sig(i,k), 0.0)
1620 w0(i, k) =
beta*w0(i, k)
1629 icbmax = max(icbmax, icb(i))
1637 sig(i, k) =
beta*sig(i, k) - &
1638 2.*
alpha*buoy(i, icb(i))*buoy(i, icb(i))
1639 sig(i, k) = max(sig(i,k), 0.0)
1640 w0(i, k) =
beta*w0(i, k)
1667 IF (sig(i,nd)<1.5 .OR. sig(i,nd)>12.0)
THEN
1695 IF ((k>=(icb(i)+1)) .AND. (k<=inb(i)) .AND. (j>=icb(i)) .AND. (j<=(k-1)))
THEN
1696 dtmin(i, k) = amin1(dtmin(i,k), buoy(i,j))
1707 IF ((k>=(icb(i)+1)) .AND. (k<=inb(i)))
THEN
1709 deltap = min(pbase(i), ph(i,k-1)) - min(pbase(i), ph(i,k))
1710 cape(i) = cape(i) +
rrd*buoy(i, k-1)*deltap/p(i, k-1)
1711 cape(i) = amax1(0.0, cape(i))
1712 sigold(i, k) = sig(i, k)
1719 sig(i, k) =
beta*sig(i, k) +
alpha*dtmin(i, k)*abs(dtmin(i,k))
1720 sig(i, k) = max(sig(i,k), 0.0)
1721 sig(i, k) = amin1(sig(i,k), 0.01)
1723 w = (1.-
beta)*fac*sqrt(cape(i)) +
beta*w0(i, k)
1724 amu = 0.5*(sig(i,k)+sigold(i,k))*w
1725 m(i, k) = amu*0.007*p(i, k)*(ph(i,k)-ph(i,k+1))/tv(i, k)
1733 w0(i, icb(i)) = 0.5*w0(i, icb(i)+1)
1734 m(i, icb(i)) = 0.5*m(i, icb(i)+1)*(ph(i,icb(i))-ph(i,icb(i)+1))/(ph(i,icb(i)+1)-ph(i,icb(i)+2))
1735 sig(i, icb(i)) = sig(i, icb(i)+1)
1736 sig(i, icb(i)-1) = sig(i, icb(i))
1803 SUBROUTINE cv3_mixing(nloc, ncum, nd, na, ntra, icb, nk, inb, &
1804 ph, t,
rr, rs,
u, v, tra, h, lv, lf, frac, qnk, &
1805 unk, vnk, hp, tv, tvp, ep, clw, m, sig, &
1806 ment, qent, uent, vent, nent, sij, elij, ments, qents, traent)
1814 include
"cvthermo.h"
1815 include
"cv3param.h"
1819 INTEGER,
INTENT (IN) :: ncum, nd, na, ntra, nloc
1820 INTEGER,
DIMENSION (nloc),
INTENT (IN) :: icb, inb, nk
1821 REAL,
DIMENSION (nloc, nd),
INTENT (IN) :: sig
1822 REAL,
DIMENSION (nloc),
INTENT (IN) :: qnk, unk, vnk
1823 REAL,
DIMENSION (nloc, nd+1),
INTENT (IN) :: ph
1824 REAL,
DIMENSION (nloc, nd),
INTENT (IN) :: t, rr, rs
1825 REAL,
DIMENSION (nloc, nd),
INTENT (IN) :: u, v
1826 REAL,
DIMENSION (nloc, nd, ntra),
INTENT (IN) :: tra
1827 REAL,
DIMENSION (nloc, na),
INTENT (IN) :: lv, h, hp
1828 REAL,
DIMENSION (nloc, na),
INTENT (IN) :: lf, frac
1829 REAL,
DIMENSION (nloc, na),
INTENT (IN) :: tv, tvp, ep, clw
1830 REAL,
DIMENSION (nloc, na),
INTENT (IN) :: m
1833 REAL,
DIMENSION (nloc, na, na),
INTENT (OUT) :: ment, qent
1834 REAL,
DIMENSION (nloc, na, na),
INTENT (OUT) :: uent, vent
1835 REAL,
DIMENSION (nloc, na, na),
INTENT (OUT) :: sij, elij
1836 REAL,
DIMENSION (nloc, nd, nd, ntra),
INTENT (OUT) :: traent
1837 REAL,
DIMENSION (nloc, nd, nd),
INTENT (OUT) :: ments, qents
1838 INTEGER,
DIMENSION (nloc, nd),
INTENT (OUT) :: nent
1841 INTEGER i, j, k, il, im, jm
1843 REAL rti, bf2, anum, denom, dei, altem, cwat, stemp, qp
1844 REAL alt, smid, sjmin, sjmax, delp, delm
1845 REAL asij(nloc), smax(nloc), scrit(nloc)
1846 REAL asum(nloc, nd), bsum(nloc, nd), csum(nloc, nd)
1847 REAL sigij(nloc, nd, nd)
1870 qent(i, k, j) = rr(i, j)
1871 uent(i, k, j) = u(i, j)
1872 vent(i, k, j) = v(i, j)
1881 ment(1:ncum, 1:nd, 1:nd) = 0.0
1882 sij(1:ncum, 1:nd, 1:nd) = 0.0
1905 IF ((i>=icb(il)) .AND. (i<=inb(il)) .AND. (j>=(icb(il)-1)) .AND. (j<=inb(il)))
THEN
1907 rti = qnk(il) - ep(il, i)*clw(il, i)
1908 bf2 = 1. + lv(il, j)*lv(il, j)*rs(il, j)/(
rrv*t(il,j)*t(il,j)*
cpd)
1911 IF (cvflag_ice)
THEN
1913 IF (t(il,j)<=263.15)
THEN
1914 bf2 = 1. + (lf(il,j)+lv(il,j))*(lv(il,j)+frac(il,j)* &
1915 lf(il,j))*rs(il, j)/(
rrv*t(il,j)*t(il,j)*
cpd)
1919 anum = h(il, j) - hp(il, i) + (
cpv-
cpd)*t(il, j)*(rti-rr(il,j))
1920 denom = h(il, i) - hp(il, i) + (
cpd-
cpv)*(rr(il,i)-rti)*t(il, j)
1922 IF (abs(dei)<0.01) dei = 0.01
1923 sij(il, i, j) = anum/dei
1925 altem = sij(il, i, j)*rr(il, i) + (1.-sij(il,i,j))*rti - rs(il, j)
1927 cwat = clw(il, j)*(1.-ep(il,j))
1928 stemp = sij(il, i, j)
1929 IF ((stemp<0.0 .OR. stemp>1.0 .OR. altem>cwat) .AND. j>i)
THEN
1931 IF (cvflag_ice)
THEN
1932 anum = anum - (lv(il,j)+frac(il,j)*lf(il,j))*(rti-rs(il,j)-cwat*bf2)
1933 denom = denom + (lv(il,j)+frac(il,j)*lf(il,j))*(rr(il,i)-rti)
1935 anum = anum - lv(il, j)*(rti-rs(il,j)-cwat*bf2)
1936 denom = denom + lv(il, j)*(rr(il,i)-rti)
1939 IF (abs(denom)<0.01) denom = 0.01
1940 sij(il, i, j) = anum/denom
1941 altem = sij(il, i, j)*rr(il, i) + (1.-sij(il,i,j))*rti - rs(il, j)
1942 altem = altem - (bf2-1.)*cwat
1944 IF (sij(il,i,j)>0.0 .AND. sij(il,i,j)<0.95)
THEN
1945 qent(il, i, j) = sij(il, i, j)*rr(il, i) + (1.-sij(il,i,j))*rti
1946 uent(il, i, j) = sij(il, i, j)*u(il, i) + (1.-sij(il,i,j))*unk(il)
1947 vent(il, i, j) = sij(il, i, j)*v(il, i) + (1.-sij(il,i,j))*vnk(il)
1952 elij(il, i, j) = altem
1953 elij(il, i, j) = max(0.0, elij(il,i,j))
1954 ment(il, i, j) = m(il, i)/(1.-sij(il,i,j))
1955 nent(il, i) = nent(il, i) + 1
1957 sij(il, i, j) = max(0.0, sij(il,i,j))
1958 sij(il, i, j) = amin1(1.0, sij(il,i,j))
1983 IF ((i>=icb(il)) .AND. (i<=inb(il)) .AND. (nent(il,i)==0))
THEN
1985 ment(il, i, i) = m(il, i)
1986 qent(il, i, i) = qnk(il) - ep(il, i)*clw(il, i)
1987 uent(il, i, i) = unk(il)
1988 vent(il, i, i) = vnk(il)
1989 elij(il, i, i) = clw(il, i)
2009 IF ((j>=(icb(il)-1)) .AND. (j<=inb(il)) .AND. (i>=icb(il)) .AND. (i<=inb(il)))
THEN
2010 sigij(il, i, j) = sij(il, i, j)
2024 CALL zilch(asum, nloc*nd)
2025 CALL zilch(csum, nloc*nd)
2026 CALL zilch(csum, nloc*nd)
2036 IF (i>=icb(il) .AND. i<=inb(il)) num1 = num1 + 1
2038 IF (num1<=0)
GO TO 789
2042 IF (i>=icb(il) .AND. i<=inb(il))
THEN
2043 lwork(il) = (nent(il,i)/=0)
2044 qp = qnk(il) - ep(il, i)*clw(il, i)
2046 IF (cvflag_ice)
THEN
2048 anum = h(il, i) - hp(il, i) - (lv(il,i)+frac(il,i)*lf(il,i))* &
2049 (qp-rs(il,i)) + (
cpv-
cpd)*t(il, i)*(qp-rr(il,i))
2050 denom = h(il, i) - hp(il, i) + (lv(il,i)+frac(il,i)*lf(il,i))* &
2051 (rr(il,i)-qp) + (
cpd-
cpv)*t(il, i)*(rr(il,i)-qp)
2054 anum = h(il, i) - hp(il, i) - lv(il, i)*(qp-rs(il,i)) + &
2055 (
cpv-
cpd)*t(il, i)*(qp-rr(il,i))
2056 denom = h(il, i) - hp(il, i) + lv(il, i)*(rr(il,i)-qp) + &
2057 (
cpd-
cpv)*t(il, i)*(rr(il,i)-qp)
2060 IF (abs(denom)<0.01) denom = 0.01
2061 scrit(il) = anum/denom
2062 alt = qp - rs(il, i) + scrit(il)*(rr(il,i)-qp)
2063 IF (scrit(il)<=0.0 .OR. alt<=0.0) scrit(il) = 1.0
2073 IF (i>=icb(il) .AND. i<=inb(il) .AND. &
2074 j>=(icb(il)-1) .AND. j<=inb(il) .AND. &
2075 lwork(il)) num2 = num2 + 1
2077 IF (num2<=0)
GO TO 175
2080 IF (i>=icb(il) .AND. i<=inb(il) .AND. &
2081 j>=(icb(il)-1) .AND. j<=inb(il) .AND. &
2084 IF (sij(il,i,j)>1.0e-16 .AND. sij(il,i,j)<0.95)
THEN
2087 sjmax = max(sij(il,i,j+1), smax(il))
2088 sjmax = amin1(sjmax, scrit(il))
2089 smax(il) = max(sij(il,i,j), smax(il))
2090 sjmin = max(sij(il,i,j-1), smax(il))
2091 sjmin = amin1(sjmin, scrit(il))
2092 IF (sij(il,i,j)<(smax(il)-1.0e-16)) wgh = 0.0
2093 smid = amin1(sij(il,i,j), scrit(il))
2095 sjmax = max(sij(il,i,j+1), scrit(il))
2096 smid = max(sij(il,i,j), scrit(il))
2098 IF (j>1) sjmin = sij(il, i, j-1)
2099 sjmin = max(sjmin, scrit(il))
2101 delp = abs(sjmax-smid)
2102 delm = abs(sjmin-smid)
2103 asij(il) = asij(il) + wgh*(delp+delm)
2104 ment(il, i, j) = ment(il, i, j)*(delp+delm)*wgh
2112 IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il))
THEN
2113 asij(il) = max(1.0e-16, asij(il))
2114 asij(il) = 1.0/asij(il)
2123 IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. &
2124 j>=(icb(il)-1) .AND. j<=inb(il))
THEN
2125 ment(il, i, j) = ment(il, i, j)*asij(il)
2132 IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. &
2133 j>=(icb(il)-1) .AND. j<=inb(il))
THEN
2134 asum(il, i) = asum(il, i) + ment(il, i, j)
2135 ment(il, i, j) = ment(il, i, j)*sig(il, j)
2136 bsum(il, i) = bsum(il, i) + ment(il, i, j)
2142 IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il))
THEN
2143 bsum(il, i) = max(bsum(il,i), 1.0e-16)
2144 bsum(il, i) = 1.0/bsum(il, i)
2150 IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. &
2151 j>=(icb(il)-1) .AND. j<=inb(il))
THEN
2152 ment(il, i, j) = ment(il, i, j)*asum(il, i)*bsum(il, i)
2159 IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. &
2160 j>=(icb(il)-1) .AND. j<=inb(il))
THEN
2161 csum(il, i) = csum(il, i) + ment(il, i, j)
2167 IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. &
2168 csum(il,i)<m(il,i))
THEN
2170 ment(il, i, i) = m(il, i)
2171 qent(il, i, i) = qnk(il) - ep(il, i)*clw(il, i)
2172 uent(il, i, i) = unk(il)
2173 vent(il, i, i) = vnk(il)
2174 elij(il, i, i) = clw(il, i)
2191 CALL zilch(zm, nloc*na)
2195 zm(il, im) = zm(il, im) + (1.-sij(il,im,jm))*ment(il, im, jm)
2203 IF (zm(il,im)/=0.)
THEN
2204 ment(il, im, jm) = ment(il, im, jm)*m(il, im)/zm(il, im)
2213 qents(il, im, jm) = qent(il, im, jm)
2214 ments(il, im, jm) = ment(il, im, jm)
2222 SUBROUTINE cv3_unsat(nloc, ncum, nd, na, ntra, icb, inb, iflag, &
2223 t,
rr, rs, gz,
u, v, tra, p, ph, &
2224 th, tv, lv, lf, cpn, ep, sigp, clw, &
2225 m, ment, elij, delt, plcl, coef_clos, &
2226 mp, rp, up, vp, trap, wt, water, evap, fondue, ice, &
2233 include
"cvthermo.h"
2234 include
"cv3param.h"
2239 INTEGER,
INTENT (IN) :: ncum, nd, na, ntra, nloc
2240 INTEGER,
DIMENSION (nloc),
INTENT (IN) :: icb, inb
2241 REAL,
INTENT(IN) :: delt
2242 REAL,
DIMENSION (nloc),
INTENT (IN) :: plcl
2243 REAL,
DIMENSION (nloc, nd),
INTENT (IN) :: t, rr, rs
2244 REAL,
DIMENSION (nloc, na),
INTENT (IN) :: gz
2245 REAL,
DIMENSION (nloc, nd),
INTENT (IN) :: u, v
2246 REAL tra(nloc, nd, ntra)
2247 REAL p(nloc, nd), ph(nloc, nd+1)
2248 REAL,
DIMENSION (nloc, na),
INTENT (IN) :: ep, sigp, clw
2249 REAL,
DIMENSION (nloc, na),
INTENT (IN) :: th, tv, lv, cpn
2250 REAL,
DIMENSION (nloc, na),
INTENT (IN) :: lf
2251 REAL,
DIMENSION (nloc, na),
INTENT (IN) :: m
2252 REAL,
DIMENSION (nloc, na, na),
INTENT (IN) :: ment, elij
2253 REAL,
DIMENSION (nloc),
INTENT (IN) :: coef_clos
2256 INTEGER,
DIMENSION (nloc),
INTENT (INOUT) :: iflag(nloc)
2259 REAL,
DIMENSION (nloc, na),
INTENT (OUT) :: mp, rp, up, vp
2260 REAL,
DIMENSION (nloc, na),
INTENT (OUT) :: water, evap, wt
2261 REAL,
DIMENSION (nloc, na),
INTENT (OUT) :: ice, fondue, faci
2262 REAL,
DIMENSION (nloc, na, ntra),
INTENT (OUT) :: trap
2263 REAL,
DIMENSION (nloc, na),
INTENT (OUT) :: b
2264 REAL,
DIMENSION (nloc),
INTENT (OUT) :: sigd
2269 REAL,
DIMENSION (nloc, na),
INTENT (OUT) :: wdtrainA, wdtrainM
2272 INTEGER i, j, k, il, num1, ndp1
2273 REAL tinv, delti, coef
2274 REAL awat, afac, afac1, afac2, bfac
2275 REAL pr1, pr2, sigt, b6, c6, d6, e6, f6, revap, delth
2276 REAL amfac, amp2, xf, tf, fac2, ur, sru, fac, d, af, bf
2279 REAL lvcp(nloc, na), lfcp(nloc, na)
2280 REAL h(nloc, na), hm(nloc, na)
2282 REAL fraci(nloc, na), prec(nloc, na)
2284 LOGICAL lwork(nloc), mplus(nloc)
2297 rp(il, i) = rr(il, i)
2298 up(il, i) = u(il, i)
2299 vp(il, i) = v(il, i)
2312 wdtraina(il, i) = 0.0
2313 wdtrainm(il, i) = 0.0
2320 sigd(il) =
sigdz*coef_clos(il)
2336 lvcp(il, i) = lv(il, i)/cpn(il, i)
2337 lfcp(il, i) = lf(il, i)/cpn(il, i)
2356 lwork(il) = ep(il, inb(il)) >= 0.0001
2366 DO i =
nl + 1, 1, -1
2370 IF (i<=inb(il) .AND. lwork(il)) num1 = num1 + 1
2372 IF (num1<=0)
GO TO 400
2374 CALL zilch(wdtrain, ncum)
2384 IF (i<=inb(il) .AND. lwork(il))
THEN
2386 wdtrain(il) = grav*ep(il, i)*m(il, i)*clw(il, i)
2387 wdtraina(il, i) = wdtrain(il)/grav
2389 wdtrain(il) = 10.0*ep(il, i)*m(il, i)*clw(il, i)
2390 wdtraina(il, i) = wdtrain(il)/10.
2398 IF (i<=inb(il) .AND. lwork(il))
THEN
2399 awat = elij(il, j, i) - (1.-ep(il,i))*clw(il, i)
2400 awat = max(awat, 0.0)
2402 wdtrain(il) = wdtrain(il) + grav*awat*ment(il, j, i)
2403 wdtrainm(il, i) = wdtrain(il)/grav - wdtraina(il, i)
2405 wdtrain(il) = wdtrain(il) + 10.0*awat*ment(il, j, i)
2406 wdtrainm(il, i) = wdtrain(il)/10. - wdtraina(il, i)
2419 IF (i<=inb(il) .AND. lwork(il))
THEN
2423 IF (cvflag_ice)
THEN
2424 frac(il, inb(il)) = 1. - (t(il,inb(il))-243.15)/(263.15-243.15)
2425 frac(il, inb(il)) = min(max(frac(il,inb(il)),0.), 1.)
2426 fraci(il, inb(il)) = frac(il, inb(il))
2433 IF (cvflag_ice)
THEN
2435 thaw = (t(il,i)-273.15)/(tmax_fonte_cv-273.15)
2436 thaw = min(max(thaw,0.0), 1.0)
2437 frac(il, i) = frac(il, i)*(1.-thaw)
2442 rp(il, i) = rp(il, i+1) + &
2443 (
cpd*(t(il,i+1)-t(il,i))+gz(il,i+1)-gz(il,i))/lv(il, i)
2444 rp(il, i) = 0.5*(rp(il,i)+rr(il,i))
2446 fraci(il, i) = 1. - (t(il,i)-243.15)/(263.15-243.15)
2447 fraci(il, i) = min(max(fraci(il,i),0.0), 1.0)
2448 rp(il, i) = max(rp(il,i), 0.0)
2449 rp(il, i) = amin1(rp(il,i), rs(il,i))
2450 rp(il, inb(il)) = rr(il, inb(il))
2453 afac = p(il, 1)*(rs(il,1)-rp(il,1))/(1.0e4+2000.0*p(il,1)*rs(il,1))
2454 IF (cvflag_ice)
THEN
2455 afac1 = p(il, i)*(rs(il,1)-rp(il,1))/(1.0e4+2000.0*p(il,1)*rs(il,1))
2458 rp(il, i-1) = rp(il, i) + (
cpd*(t(il,i)-t(il,i-1))+gz(il,i)-gz(il,i-1))/lv(il, i)
2459 rp(il, i-1) = 0.5*(rp(il,i-1)+rr(il,i-1))
2460 rp(il, i-1) = amin1(rp(il,i-1), rs(il,i-1))
2461 rp(il, i-1) = max(rp(il,i-1), 0.0)
2462 afac1 = p(il, i)*(rs(il,i)-rp(il,i))/(1.0e4+2000.0*p(il,i)*rs(il,i))
2463 afac2 = p(il, i-1)*(rs(il,i-1)-rp(il,i-1))/(1.0e4+2000.0*p(il,i-1)*rs(il,i-1))
2464 afac = 0.5*(afac1+afac2)
2466 IF (i==inb(il)) afac = 0.0
2467 afac = max(afac, 0.0)
2468 bfac = 1./(sigd(il)*wt(il,i))
2472 print*,
'cv3_unsat after provisional rp estimate: rp, afac, bfac ', &
2473 i, rp(1, i), afac,bfac
2486 pr1 = (plcl(il)-ph(il,i+1))/(ph(il,i)-ph(il,i+1))
2487 pr1 = max(0., min(1.,pr1))
2488 pr2 = (ph(il,i)-plcl(il))/(ph(il,i)-ph(il,i+1))
2489 pr2 = max(0., min(1.,pr2))
2490 sigt = sigp(il, i)*pr1 + pr2
2506 IF (cvflag_ice)
THEN
2521 b6 = bfac*50.*sigd(il)*(ph(il,i)-ph(il,i+1))*sigt*afac1
2522 c6 = prec(il, i+1) + 0.5*bfac*wdtrain(il)
2526 IF (c6>b6*b6+1.e-20)
THEN
2527 revap = 2.*c6/(b6+sqrt(b6*b6+4.*c6))
2529 revap = (-b6+sqrt(b6*b6+4.*c6))/2.
2531 prec(il, i) = max(0., 2.*revap*revap-prec(il,i+1))
2548 evap(il, i) = (wdtrain(il)+sigd(il)*wt(il,i)*(prec(il,i+1)-prec(il,i))) / &
2549 (sigd(il)*(ph(il,i)-ph(il,i+1))*100.)
2552 print*,
'cv3_unsat after evap computation: wdtrain, sigd, wt, prec(i+1),prec(i) ', &
2553 i, wdtrain(1), sigd(1), wt(1,i), prec(1,i+1),prec(1,i)
2557 d6 = bfac*wdtrain(il) - 100.*sigd(il)*bfac*(ph(il,i)-ph(il,i+1))*evap(il, i)
2558 e6 = bfac*wdtrain(il)
2559 f6 = -100.*sigd(il)*bfac*(ph(il,i)-ph(il,i+1))*evap(il, i)
2562 thaw = (t(il,i)-273.15)/(tmax_fonte_cv-273.15)
2563 thaw = min(max(thaw,0.0), 1.0)
2564 water(il, i) = water(il, i+1) + (1-fraci(il,i))*d6
2565 water(il, i) = max(water(il,i), 0.)
2566 ice(il, i) = ice(il, i+1) + fraci(il, i)*d6
2567 ice(il, i) = max(ice(il,i), 0.)
2568 fondue(il, i) = ice(il, i)*thaw
2569 water(il, i) = water(il, i) + fondue(il, i)
2570 ice(il, i) = ice(il, i) - fondue(il, i)
2572 IF (water(il,i)+ice(il,i)<1.e-30)
THEN
2575 faci(il, i) = ice(il, i)/(water(il,i)+ice(il,i))
2593 b6 = bfac*50.*sigd(il)*(ph(il,i)-ph(il,i+1))*sigt*afac
2594 c6 = water(il, i+1) + bfac*wdtrain(il) - &
2595 50.*sigd(il)*bfac*(ph(il,i)-ph(il,i+1))*evap(il, i+1)
2597 revap = 0.5*(-b6+sqrt(b6*b6+4.*c6))
2598 water(il, i) = revap*revap
2603 evap(il, i) = (wdtrain(il)+sigd(il)*wt(il,i)*(water(il,i+1)-water(il,i)))/ &
2604 (sigd(il)*(ph(il,i)-ph(il,i+1))*100.)
2616 IF (i<=inb(il) .AND. lwork(il) .AND. i/=1)
THEN
2618 tevap(il) = max(0.0, evap(il,i))
2619 delth = max(0.001, (th(il,i)-th(il,i-1)))
2620 IF (cvflag_ice)
THEN
2622 mp(il, i) = 100.*
ginv*(lvcp(il,i)*sigd(il)*tevap(il)* &
2623 (p(il,i-1)-p(il,i))/delth + &
2624 lfcp(il,i)*sigd(il)*faci(il,i)*tevap(il)* &
2625 (p(il,i-1)-p(il,i))/delth + &
2626 lfcp(il,i)*sigd(il)*wt(il,i)/100.*fondue(il,i)* &
2627 (p(il,i-1)-p(il,i))/delth/(ph(il,i)-ph(il,i+1)))
2629 mp(il, i) = 10.*(lvcp(il,i)*sigd(il)*tevap(il)* &
2630 (p(il,i-1)-p(il,i))/delth + &
2631 lfcp(il,i)*sigd(il)*faci(il,i)*tevap(il)* &
2632 (p(il,i-1)-p(il,i))/delth + &
2633 lfcp(il,i)*sigd(il)*wt(il,i)/100.*fondue(il,i)* &
2634 (p(il,i-1)-p(il,i))/delth/(ph(il,i)-ph(il,i+1)))
2639 mp(il, i) = 100.*
ginv*lvcp(il, i)*sigd(il)*tevap(il)* &
2640 (p(il,i-1)-p(il,i))/delth
2642 mp(il, i) = 10.*lvcp(il, i)*sigd(il)*tevap(il)* &
2643 (p(il,i-1)-p(il,i))/delth
2657 IF (i<=inb(il) .AND. lwork(il) .AND. i/=1)
THEN
2659 amfac = sigd(il)*sigd(il)*70.0*ph(il, i)*(p(il,i-1)-p(il,i))* &
2660 (th(il,i)-th(il,i-1))/(tv(il,i)*th(il,i))
2661 amp2 = abs(mp(il,i+1)*mp(il,i+1)-mp(il,i)*mp(il,i))
2663 IF (amp2>(0.1*amfac))
THEN
2664 xf = 100.0*sigd(il)*sigd(il)*sigd(il)*(ph(il,i)-ph(il,i+1))
2665 tf = b(il, i) - 5.0*(th(il,i)-th(il,i-1))*t(il, i) / &
2666 (lvcp(il,i)*sigd(il)*th(il,i))
2667 af = xf*tf + mp(il, i+1)*mp(il, i+1)*tinv
2669 IF (cvflag_ice)
THEN
2670 bf = 2.*(tinv*mp(il,i+1))**3 + tinv*mp(il, i+1)*xf*tf + &
2671 50.*(p(il,i-1)-p(il,i))*xf*(tevap(il)*(1.+(lf(il,i)/lv(il,i))*faci(il,i)) + &
2672 (lf(il,i)/lv(il,i))*wt(il,i)/100.*fondue(il,i)/(ph(il,i)-ph(il,i+1)))
2675 bf = 2.*(tinv*mp(il,i+1))**3 + tinv*mp(il, i+1)*xf*tf + &
2676 50.*(p(il,i-1)-p(il,i))*xf*tevap(il)
2680 IF (bf<0.0) fac2 = -1.0
2682 ur = 0.25*bf*bf - af*af*af*tinv*tinv*tinv
2686 IF ((0.5*bf-sru)<0.0) fac = -1.0
2687 mp(il, i) = mp(il, i+1)*tinv + (0.5*bf+sru)**tinv + &
2688 fac*(abs(0.5*bf-sru))**tinv
2690 d = atan(2.*sqrt(-ur)/(bf+1.0e-28))
2691 IF (fac2<0.0) d = 3.14159 - d
2692 mp(il, i) = mp(il, i+1)*tinv + 2.*sqrt(af*tinv)*cos(d*tinv)
2694 mp(il, i) = max(0.0, mp(il,i))
2696 IF (cvflag_ice)
THEN
2701 b(il, i-1) = b(il, i) + 100.0*(p(il,i-1)-p(il,i))* &
2702 (tevap(il)*(1.+(lf(il,i)/lv(il,i))*faci(il,i)) + &
2703 (lf(il,i)/lv(il,i))*wt(il,i)/100.*fondue(il,i) / &
2704 (ph(il,i)-ph(il,i+1))) / &
2705 (mp(il,i)+sigd(il)*0.1) - &
2706 10.0*(th(il,i)-th(il,i-1))*t(il, i) / &
2707 (lvcp(il,i)*sigd(il)*th(il,i))
2709 b(il, i-1) = b(il, i) + 100.0*(p(il,i-1)-p(il,i))*&
2710 (tevap(il)*(1.+(lf(il,i)/lv(il,i))*faci(il,i)) + &
2711 (lf(il,i)/lv(il,i))*wt(il,i)/100.*fondue(il,i) / &
2712 (ph(il,i)-ph(il,i+1))) / &
2713 (mp(il,i)+sigd(il)*0.1) - &
2714 10.0*(th(il,i)-th(il,i-1))*t(il, i) / &
2715 (lvcp(il,i)*sigd(il)*th(il,i))
2719 b(il, i-1) = b(il, i) + 100.0*(p(il,i-1)-p(il,i))*tevap(il) / &
2720 (mp(il,i)+sigd(il)*0.1) - &
2721 10.0*(th(il,i)-th(il,i-1))*t(il, i) / &
2722 (lvcp(il,i)*sigd(il)*th(il,i))
2724 b(il, i-1) = b(il, i) + 100.0*(p(il,i-1)-p(il,i))*tevap(il) / &
2725 (mp(il,i)+sigd(il)*0.1) - &
2726 10.0*(th(il,i)-th(il,i-1))*t(il, i) / &
2727 (lvcp(il,i)*sigd(il)*th(il,i))
2730 b(il, i-1) = max(b(il,i-1), 0.0)
2736 ampmax = 2.0*(ph(il,i)-ph(il,i+1))*delti
2737 amp2 = 2.0*(ph(il,i-1)-ph(il,i))*delti
2738 ampmax = min(ampmax, amp2)
2739 mp(il, i) = min(mp(il,i), ampmax)
2748 IF (ph(il,i)>0.9*plcl(il))
THEN
2749 mp(il, i) = mp(il, i)*(ph(il,1)-ph(il,i))/(ph(il,1)-0.9*plcl(il))
2757 print*,
'cv3_unsat after mp computation: mp, b(i), b(i-1) ', &
2758 i, mp(1, i), b(1,i), b(1,max(i-1,1))
2765 IF (i<inb(il) .AND. lwork(il))
THEN
2766 mplus(il) = mp(il, i) > mp(il, i+1)
2771 IF (i<inb(il) .AND. lwork(il))
THEN
2773 rp(il, i) = rr(il, i)
2778 rp(il, i) = rp(il, i+1)*mp(il, i+1) + rr(il, i)*(mp(il,i)-mp(il,i+1)) + &
2779 100.*
ginv*0.5*sigd(il)*(ph(il,i)-ph(il,i+1))*(evap(il,i+1)+evap(il,i))
2781 rp(il, i) = rp(il, i+1)*mp(il, i+1) + rr(il, i)*(mp(il,i)-mp(il,i+1)) + &
2782 5.*sigd(il)*(ph(il,i)-ph(il,i+1))*(evap(il,i+1)+evap(il,i))
2784 rp(il, i) = rp(il, i)/mp(il, i)
2785 up(il, i) = up(il, i+1)*mp(il, i+1) + u(il, i)*(mp(il,i)-mp(il,i+1))
2786 up(il, i) = up(il, i)/mp(il, i)
2787 vp(il, i) = vp(il, i+1)*mp(il, i+1) + v(il, i)*(mp(il,i)-mp(il,i+1))
2788 vp(il, i) = vp(il, i)/mp(il, i)
2792 IF (mp(il,i+1)>1.0e-16)
THEN
2794 rp(il, i) = rp(il,i+1) + 100.*
ginv*0.5*sigd(il)*(ph(il,i)-ph(il,i+1)) * &
2795 (evap(il,i+1)+evap(il,i))/mp(il,i+1)
2797 rp(il, i) = rp(il,i+1) + 5.*sigd(il)*(ph(il,i)-ph(il,i+1)) * &
2798 (evap(il,i+1)+evap(il,i))/mp(il, i+1)
2800 up(il, i) = up(il, i+1)
2801 vp(il, i) = vp(il, i+1)
2805 rp(il, i) = amin1(rp(il,i), rs(il,i))
2806 rp(il, i) = max(rp(il,i), 0.0)
2843 SUBROUTINE cv3_yield(nloc, ncum, nd, na, ntra, ok_conserv_q, &
2845 t,
rr, t_wake, rr_wake, s_wake,
u, v, tra, &
2846 gz, p, ph, h, hp, lv, lf, cpn, th, th_wake, &
2847 ep, clw, m, tp, mp, rp, up, vp, trap, &
2848 wt, water, ice, evap, fondue, faci, b,
sigd, &
2849 ment, qent, hent,
iflag_mix, uent, vent, &
2850 nent, elij, traent, sig, &
2852 iflag, precip, vprecip, vprecipi, &
2853 ft, fr, fu, fv, ftra, &
2854 cbmf, upwd, dnwd, dnwd0, ma, mip, &
2861 include
"cvthermo.h"
2862 include
"cv3param.h"
2867 INTEGER,
INTENT (IN) :: iflag_mix
2868 INTEGER,
INTENT (IN) :: ncum, nd, na, ntra, nloc
2869 LOGICAL,
INTENT (IN) :: ok_conserv_q
2870 INTEGER,
DIMENSION (nloc),
INTENT (IN) :: icb, inb
2871 REAL,
INTENT (IN) :: delt
2872 REAL,
DIMENSION (nloc, nd),
INTENT (IN) :: t, rr, u, v
2873 REAL,
DIMENSION (nloc, nd),
INTENT (IN) :: t_wake, rr_wake
2874 REAL,
DIMENSION (nloc),
INTENT (IN) :: s_wake
2875 REAL,
DIMENSION (nloc, nd, ntra),
INTENT (IN) :: tra
2876 REAL,
DIMENSION (nloc, nd),
INTENT (IN) :: p
2877 REAL,
DIMENSION (nloc, nd+1),
INTENT (IN) :: ph
2878 REAL,
DIMENSION (nloc, na),
INTENT (IN) :: gz, h, hp
2879 REAL,
DIMENSION (nloc, na),
INTENT (IN) :: th, tp
2880 REAL,
DIMENSION (nloc, na),
INTENT (IN) :: lv, cpn, ep, clw
2881 REAL,
DIMENSION (nloc, na),
INTENT (IN) :: lf
2882 REAL,
DIMENSION (nloc, na),
INTENT (IN) :: rp, up
2883 REAL,
DIMENSION (nloc, na),
INTENT (IN) :: vp
2884 REAL,
DIMENSION (nloc, nd),
INTENT (IN) :: wt
2885 REAL,
DIMENSION (nloc, nd, ntra),
INTENT (IN) :: trap
2886 REAL,
DIMENSION (nloc, na),
INTENT (IN) :: water, evap, b
2887 REAL,
DIMENSION (nloc, na),
INTENT (IN) :: fondue, faci, ice
2888 REAL,
DIMENSION (nloc, na, na),
INTENT (IN) :: qent, uent
2889 REAL,
DIMENSION (nloc, na, na),
INTENT (IN) :: hent
2890 REAL,
DIMENSION (nloc, na, na),
INTENT (IN) :: vent, elij
2891 INTEGER,
DIMENSION (nloc, nd),
INTENT (IN) :: nent
2892 REAL,
DIMENSION (nloc, na, na, ntra),
INTENT (IN) :: traent
2893 REAL,
DIMENSION (nloc, nd),
INTENT (IN) :: tv, tvp, wghti
2894 REAL,
INTENT(IN) :: tau_cld_cv, coefw_cld_cv
2897 REAL,
DIMENSION (nloc, na),
INTENT (INOUT) :: m, mp
2898 REAL,
DIMENSION (nloc, na, na),
INTENT (INOUT) :: ment
2899 INTEGER,
DIMENSION (nloc),
INTENT (INOUT) :: iflag
2900 REAL,
DIMENSION (nloc, nd),
INTENT (INOUT) :: sig
2901 REAL,
DIMENSION (nloc),
INTENT (INOUT) :: sigd
2904 REAL,
DIMENSION (nloc),
INTENT (OUT) :: precip
2905 REAL,
DIMENSION (nloc, nd),
INTENT (OUT) :: ft, fr, fu, fv
2906 REAL,
DIMENSION (nloc, nd),
INTENT (OUT) :: ftd, fqd
2907 REAL,
DIMENSION (nloc, nd, ntra),
INTENT (OUT) :: ftra
2908 REAL,
DIMENSION (nloc, nd),
INTENT (OUT) :: upwd, dnwd, ma
2909 REAL,
DIMENSION (nloc, nd),
INTENT (OUT) :: dnwd0, mip
2910 REAL,
DIMENSION (nloc, nd+1),
INTENT (OUT) :: Vprecip
2911 REAL,
DIMENSION (nloc, nd+1),
INTENT (OUT) :: Vprecipi
2913 REAL,
DIMENSION (nloc, nd),
INTENT (OUT) :: qcondc
2914 REAL,
DIMENSION (nloc, nd),
INTENT (OUT) :: qtc, sigt
2915 REAL,
DIMENSION (nloc),
INTENT (OUT) :: wd
2916 REAL,
DIMENSION (nloc),
INTENT (OUT) :: cbmf
2919 INTEGER i, k, il, n, j, num1
2921 REAL ax, bx, cx, dx, ex
2922 REAL cpinv, rdcp, dpinv
2924 REAL lvcp(nloc, na), lfcp(nloc, na)
2925 REAL am(nloc), work(nloc), ad(nloc), amp1(nloc)
2927 REAL up1(nloc, nd, nd), dn1(nloc, nd, nd)
2928 REAL asum(nloc), bsum(nloc), csum(nloc), dsum(nloc)
2929 REAL esum(nloc), fsum(nloc), gsum(nloc), hsum(nloc)
2930 REAL th_wake(nloc, nd)
2931 REAL alpha_qpos(nloc), alpha_qpos1(nloc)
2932 REAL qcond(nloc, nd), nqcond(nloc, nd), wa(nloc, nd)
2933 REAL siga(nloc, nd), sax(nloc, nd), mac(nloc, nd)
2934 REAL sument(nloc), sigment(nloc,nd), qtment(nloc,nd)
2953 vprecip(il, i) = 0.0
2954 vprecipi(il, i) = 0.0
2973 sigment(il, i) = 0.0
2989 lvcp(il, i) = lv(il, i)/cpn(il, i)
2990 lfcp(il, i) = lf(il, i)/cpn(il, i)
2999 IF (ep(il,inb(il))>=0.0001 .AND. iflag(il)<=1)
THEN
3000 IF (cvflag_ice)
THEN
3001 precip(il) = wt(il, 1)*sigd(il)*(water(il,1)+ice(il,1)) &
3002 *86400.*1000./(
rowl*grav)
3004 precip(il) = wt(il, 1)*sigd(il)*water(il, 1) &
3005 *86400.*1000./(
rowl*grav)
3016 IF (ep(il,inb(il))>=0.0001 .AND. i<=inb(il) .AND. iflag(il)<=1)
THEN
3017 IF (cvflag_ice)
THEN
3018 vprecip(il, i) = wt(il, i)*sigd(il)*(water(il,i)+ice(il,i))/grav
3019 vprecipi(il, i) = wt(il, i)*sigd(il)*ice(il,i)/grav
3021 vprecip(il, i) = wt(il, i)*sigd(il)*water(il, i)/grav
3022 vprecipi(il, i) = 0.
3042 work(il) = 1.0/(ph(il,1)-ph(il,2))
3048 IF (k>=icb(il))
THEN
3049 cbmf(il) = cbmf(il) + m(il, k)
3057 am(il) = cbmf(il)*wghti(il, 1)
3061 IF (iflag(il)<=1)
THEN
3065 IF (cvflag_ice)
THEN
3066 ft(il, 1) = -lvcp(il, 1)*sigd(il)*evap(il, 1) - &
3067 lfcp(il, 1)*sigd(il)*evap(il, 1)*faci(il, 1) - &
3068 lfcp(il, 1)*sigd(il)*(fondue(il,1)*wt(il,1)) / &
3069 (100.*(ph(il,1)-ph(il,2)))
3071 ft(il, 1) = -lvcp(il, 1)*sigd(il)*evap(il, 1)
3074 ft(il, 1) = ft(il, 1) - 0.009*grav*sigd(il)*mp(il, 2)*t_wake(il, 1)*b(il, 1)*work(il)
3076 IF (cvflag_ice)
THEN
3077 ft(il, 1) = ft(il, 1) + 0.01*sigd(il)*wt(il, 1)*(
cl-
cpd)*water(il, 2) * &
3078 (t_wake(il,2)-t_wake(il,1))*work(il)/cpn(il, 1) + &
3079 0.01*sigd(il)*wt(il, 1)*(
ci-
cpd)*ice(il, 2) * &
3080 (t_wake(il,2)-t_wake(il,1))*work(il)/cpn(il, 1)
3082 ft(il, 1) = ft(il, 1) + 0.01*sigd(il)*wt(il, 1)*(
cl-
cpd)*water(il, 2) * &
3083 (t_wake(il,2)-t_wake(il,1))*work(il)/cpn(il, 1)
3086 ftd(il, 1) = ft(il, 1)
3088 IF ((0.01*grav*work(il)*am(il))>=delti) iflag(il) = 1
3089 ft(il, 1) = ft(il, 1) + 0.01*grav*work(il)*am(il) * &
3090 (t(il,2)-t(il,1)+(gz(il,2)-gz(il,1))/cpn(il,1))
3096 IF (iflag_mix>0)
THEN
3101 IF (j<=inb(il) .AND. iflag(il)<=1)
THEN
3102 ft(il, 1) = ft(il, 1) + 0.01*grav*work(il)*ment(il, j, 1) * &
3103 (hent(il,j,1)-h(il,1)+t(il,1)*(
cpv-
cpd)*(rr(il,1)-qent(il,j,1)))*cpinv
3112 IF (iflag(il)<=1)
THEN
3114 fr(il, 1) = 0.01*grav*mp(il, 2)*(rp(il,2)-rr_wake(il,1))*work(il) + &
3115 sigd(il)*evap(il, 1)
3118 fqd(il, 1) = fr(il, 1)
3120 fr(il, 1) = fr(il, 1) + 0.01*grav*am(il)*(rr(il,2)-rr(il,1))*work(il)
3122 fu(il, 1) = fu(il, 1) + 0.01*grav*work(il)*(mp(il,2)*(up(il,2)-u(il,1)) + &
3123 am(il)*(u(il,2)-u(il,1)))
3124 fv(il, 1) = fv(il, 1) + 0.01*grav*work(il)*(mp(il,2)*(vp(il,2)-v(il,1)) + &
3125 am(il)*(v(il,2)-v(il,1)))
3148 IF (j<=inb(il) .AND. iflag(il)<=1)
THEN
3149 fr(il, 1) = fr(il, 1) + 0.01*grav*work(il)*ment(il, j, 1)*(qent(il,j,1)-rr(il,1))
3150 fu(il, 1) = fu(il, 1) + 0.01*grav*work(il)*ment(il, j, 1)*(uent(il,j,1)-u(il,1))
3151 fv(il, 1) = fv(il, 1) + 0.01*grav*work(il)*ment(il, j, 1)*(vent(il,j,1)-v(il,1))
3186 IF (i<=inb(il) .AND. iflag(il)<=1) num1 = num1 + 1
3188 IF (num1<=0)
GO TO 500
3201 IF (i>=icb(il))
THEN
3202 IF (k>=i+1 .AND. k<=(inb(il)+1))
THEN
3203 amp1(il) = amp1(il) + m(il, k)
3208 amp1(il) = amp1(il) + cbmf(il)*wghti(il, k)
3215 DO j = i + 1,
nl + 1
3217 IF (i<=inb(il) .AND. j<=(inb(il)+1))
THEN
3218 amp1(il) = amp1(il) + ment(il, k, j)
3227 IF (i<=inb(il) .AND. j<=inb(il))
THEN
3228 ad(il) = ad(il) + ment(il, j, k)
3235 IF (i<=inb(il) .AND. iflag(il)<=1)
THEN
3236 dpinv = 1.0/(ph(il,i)-ph(il,i+1))
3237 cpinv = 1.0/cpn(il, i)
3240 IF ((0.01*grav*dpinv*amp1(il))>=delti) iflag(il) = 1
3244 IF (cvflag_ice)
THEN
3245 ft(il, i) = -sigd(il)*lvcp(il, i)*evap(il, i) - &
3246 sigd(il)*lfcp(il, i)*evap(il, i)*faci(il, i) - &
3247 sigd(il)*lfcp(il, i)*fondue(il, i)*wt(il, i)/(100.*(p(il,i-1)-p(il,i)))
3249 ft(il, i) = -sigd(il)*lvcp(il, i)*evap(il, i)
3252 rat = cpn(il, i-1)*cpinv
3254 ft(il, i) = ft(il, i) - 0.009*grav*sigd(il) * &
3255 (mp(il,i+1)*t_wake(il,i)*b(il,i)-mp(il,i)*t_wake(il,i-1)*rat*b(il,i-1))*dpinv
3256 IF (cvflag_ice)
THEN
3257 ft(il, i) = ft(il, i) + 0.01*sigd(il)*wt(il, i)*(
cl-
cpd)*water(il, i+1) * &
3258 (t_wake(il,i+1)-t_wake(il,i))*dpinv*cpinv + &
3259 0.01*sigd(il)*wt(il, i)*(
ci-
cpd)*ice(il, i+1) * &
3260 (t_wake(il,i+1)-t_wake(il,i))*dpinv*cpinv
3262 ft(il, i) = ft(il, i) + 0.01*sigd(il)*wt(il, i)*(
cl-
cpd)*water(il, i+1) * &
3263 (t_wake(il,i+1)-t_wake(il,i))*dpinv* &
3267 ftd(il, i) = ft(il, i)
3271 ft(il, i) = ft(il, i) + 0.01*grav*dpinv * &
3272 (amp1(il)*(t(il,i+1)-t(il,i) + (gz(il,i+1)-gz(il,i))*cpinv) - &
3273 ad(il)*(t(il,i)-t(il,i-1)+(gz(il,i)-gz(il,i-1))*cpinv))
3276 IF (iflag_mix==0)
THEN
3277 ft(il, i) = ft(il, i) + 0.01*grav*dpinv*ment(il, i, i)*(hp(il,i)-h(il,i) + &
3278 t(il,i)*(
cpv-
cpd)*(rr(il,i)-qent(il,i,i)))*cpinv
3287 fr(il, i) = sigd(il)*evap(il, i) + 0.01*grav*(mp(il,i+1)*(rp(il,i+1)-rr_wake(il,i)) - &
3288 mp(il,i)*(rp(il,i)-rr_wake(il,i-1)))*dpinv
3289 fqd(il, i) = fr(il, i)
3291 fu(il, i) = 0.01*grav*(mp(il,i+1)*(up(il,i+1)-u(il,i)) - &
3292 mp(il,i)*(up(il,i)-u(il,i-1)))*dpinv
3293 fv(il, i) = 0.01*grav*(mp(il,i+1)*(vp(il,i+1)-v(il,i)) - &
3294 mp(il,i)*(vp(il,i)-v(il,i-1)))*dpinv
3297 fr(il, i) = fr(il, i) + 0.01*grav*dpinv*(amp1(il)*(rr(il,i+1)-rr(il,i)) - &
3298 ad(il)*(rr(il,i)-rr(il,i-1)))
3299 fu(il, i) = fu(il, i) + 0.01*grav*dpinv*(amp1(il)*(u(il,i+1)-u(il,i)) - &
3300 ad(il)*(u(il,i)-u(il,i-1)))
3301 fv(il, i) = fv(il, i) + 0.01*grav*dpinv*(amp1(il)*(v(il,i+1)-v(il,i)) - &
3302 ad(il)*(v(il,i)-v(il,i-1)))
3328 awat(il) = elij(il, k, i) - (1.-ep(il,i))*clw(il, i)
3329 awat(il) = max(awat(il), 0.0)
3332 IF (iflag_mix/=0)
THEN
3334 IF (i<=inb(il) .AND. iflag(il)<=1)
THEN
3335 dpinv = 1.0/(ph(il,i)-ph(il,i+1))
3336 cpinv = 1.0/cpn(il, i)
3337 ft(il, i) = ft(il, i) + 0.01*grav*dpinv*ment(il, k, i) * &
3338 (hent(il,k,i)-h(il,i)+t(il,i)*(
cpv-
cpd)*(rr(il,i)+awat(il)-qent(il,k,i)))*cpinv
3346 IF (i<=inb(il) .AND. iflag(il)<=1)
THEN
3347 dpinv = 1.0/(ph(il,i)-ph(il,i+1))
3348 cpinv = 1.0/cpn(il, i)
3349 fr(il, i) = fr(il, i) + 0.01*grav*dpinv*ment(il, k, i) * &
3350 (qent(il,k,i)-awat(il)-rr(il,i))
3351 fu(il, i) = fu(il, i) + 0.01*grav*dpinv*ment(il, k, i)*(uent(il,k,i)-u(il,i))
3352 fv(il, i) = fv(il, i) + 0.01*grav*dpinv*ment(il, k, i)*(vent(il,k,i)-v(il,i))
3355 qcond(il, i) = qcond(il, i) + (elij(il,k,i)-awat(il))
3356 qtment(il, i) = qtment(il, i) + qent(il,k,i)
3357 nqcond(il, i) = nqcond(il, i) + 1.
3382 IF (iflag_mix/=0)
THEN
3384 IF (i<=inb(il) .AND. k<=inb(il) .AND. iflag(il)<=1)
THEN
3385 dpinv = 1.0/(ph(il,i)-ph(il,i+1))
3386 cpinv = 1.0/cpn(il, i)
3387 ft(il, i) = ft(il, i) + 0.01*grav*dpinv*ment(il, k, i) * &
3388 (hent(il,k,i)-h(il,i)+t(il,i)*(
cpv-
cpd)*(rr(il,i)-qent(il,k,i)))*cpinv
3396 IF (i<=inb(il) .AND. k<=inb(il) .AND. iflag(il)<=1)
THEN
3397 dpinv = 1.0/(ph(il,i)-ph(il,i+1))
3398 cpinv = 1.0/cpn(il, i)
3400 fr(il, i) = fr(il, i) + 0.01*grav*dpinv*ment(il, k, i)*(qent(il,k,i)-rr(il,i))
3401 fu(il, i) = fu(il, i) + 0.01*grav*dpinv*ment(il, k, i)*(uent(il,k,i)-u(il,i))
3402 fv(il, i) = fv(il, i) + 0.01*grav*dpinv*ment(il, k, i)*(vent(il,k,i)-v(il,i))
3430 IF (k<=inb(il) .AND. i<=inb(il) .AND. iflag(il)<=1)
THEN
3432 qcond(il, i) = qcond(il, i) + elij(il, k, i)
3433 qtment(il, i) = qent(il,k,i) + qtment(il,i)
3434 nqcond(il, i) = nqcond(il, i) + 1.
3441 IF (i<=inb(il) .AND. nent(il,i)==0 .AND. iflag(il)<=1)
THEN
3442 qcond(il, i) = qcond(il, i) + (1.-ep(il,i))*clw(il, i)
3443 qtment(il, i) = qent(il,k,i) + qtment(il,i)
3444 nqcond(il, i) = nqcond(il, i) + 1.
3449 IF (i<=inb(il) .AND. nqcond(il,i)/=0 .AND. iflag(il)<=1)
THEN
3450 qcond(il, i) = qcond(il, i)/nqcond(il, i)
3451 qtment(il, i) = qtment(il,i)/nqcond(il, i)
3491 IF (iflag(il)<=1)
THEN
3492 ax = 0.01*grav*ment(il, inb(il), inb(il))* &
3493 (hp(il,inb(il))-h(il,inb(il))+t(il,inb(il))*(
cpv-
cpd)*(rr(il,inb(il))-qent(il,inb(il),inb(il))))/ &
3494 (cpn(il,inb(il))*(ph(il,inb(il))-ph(il,inb(il)+1)))
3495 ft(il, inb(il)) = ft(il, inb(il)) - ax
3496 ft(il, inb(il)-1) = ft(il, inb(il)-1) + ax*cpn(il, inb(il))*(ph(il,inb(il))-ph(il,inb(il)+1))/ &
3497 (cpn(il,inb(il)-1)*(ph(il,inb(il)-1)-ph(il,inb(il))))
3499 bx = 0.01*grav*ment(il, inb(il), inb(il))*(qent(il,inb(il),inb(il))-rr(il,inb(il)))/ &
3500 (ph(il,inb(il))-ph(il,inb(il)+1))
3501 fr(il, inb(il)) = fr(il, inb(il)) - bx
3502 fr(il, inb(il)-1) = fr(il, inb(il)-1) + bx*(ph(il,inb(il))-ph(il,inb(il)+1))/ &
3503 (ph(il,inb(il)-1)-ph(il,inb(il)))
3505 cx = 0.01*grav*ment(il, inb(il), inb(il))*(uent(il,inb(il),inb(il))-u(il,inb(il)))/ &
3506 (ph(il,inb(il))-ph(il,inb(il)+1))
3507 fu(il, inb(il)) = fu(il, inb(il)) - cx
3508 fu(il, inb(il)-1) = fu(il, inb(il)-1) + cx*(ph(il,inb(il))-ph(il,inb(il)+1))/ &
3509 (ph(il,inb(il)-1)-ph(il,inb(il)))
3511 dx = 0.01*grav*ment(il, inb(il), inb(il))*(vent(il,inb(il),inb(il))-v(il,inb(il)))/ &
3512 (ph(il,inb(il))-ph(il,inb(il)+1))
3513 fv(il, inb(il)) = fv(il, inb(il)) - dx
3514 fv(il, inb(il)-1) = fv(il, inb(il)-1) + dx*(ph(il,inb(il))-ph(il,inb(il)+1))/ &
3515 (ph(il,inb(il)-1)-ph(il,inb(il)))
3575 IF (i<=(icb(il)-1) .AND. iflag(il)<=1)
THEN
3577 asum(il) = asum(il) + (ft(il,i)-ftd(il,i))*(ph(il,i)-ph(il,i+1))
3580 IF (ok_conserv_q)
THEN
3581 bsum(il) = bsum(il) + (fr(il,i)-fqd(il,i))*(ph(il,i)-ph(il,i+1))
3582 csum(il) = csum(il) + (ph(il,i)-ph(il,i+1))
3585 bsum(il)=bsum(il)+(fr(il,i)-fqd(il,i))*(lv(il,i)+(
cl-
cpd)*(t(il,i)-t(il,1)))* &
3586 (ph(il,i)-ph(il,i+1))
3587 csum(il)=csum(il)+(lv(il,i)+(
cl-
cpd)*(t(il,i)-t(il,1)))* &
3588 (ph(il,i)-ph(il,i+1))
3591 dsum(il) = dsum(il) + t(il, i)*(ph(il,i)-ph(il,i+1))/th(il, i)
3593 esum(il) = esum(il) + ftd(il, i)*(ph(il,i)-ph(il,i+1))
3596 IF (ok_conserv_q)
THEN
3597 fsum(il) = fsum(il) + fqd(il, i)*(ph(il,i)-ph(il,i+1))
3598 gsum(il) = gsum(il) + (ph(il,i)-ph(il,i+1))
3600 fsum(il)=fsum(il)+fqd(il,i)*(lv(il,i)+(
cl-
cpd)*(t_wake(il,i)-t_wake(il,1)))* &
3601 (ph(il,i)-ph(il,i+1))
3602 gsum(il)=gsum(il)+(lv(il,i)+(
cl-
cpd)*(t_wake(il,i)-t_wake(il,1)))* &
3603 (ph(il,i)-ph(il,i+1))
3606 hsum(il) = hsum(il) + t_wake(il, i)*(ph(il,i)-ph(il,i+1))/th_wake(il, i)
3614 IF (i<=(icb(il)-1) .AND. iflag(il)<=1)
THEN
3615 ftd(il, i) = esum(il)*t_wake(il, i)/(th_wake(il,i)*hsum(il))
3616 fqd(il, i) = fsum(il)/gsum(il)
3617 ft(il, i) = ftd(il, i) + asum(il)*t(il, i)/(th(il,i)*dsum(il))
3618 fr(il, i) = fqd(il, i) + bsum(il)/csum(il)
3637 IF (iflag(il)<=1)
THEN
3638 IF (fr(il,1)<=0.)
THEN
3639 alpha_qpos(il) = max(alpha_qpos(il), (-delt*fr(il,1))/(s_wake(il)*rr_wake(il,1)+(1.-s_wake(il))*rr(il,1)))
3645 IF (iflag(il)<=1)
THEN
3646 IF (fr(il,i)<=0.)
THEN
3647 alpha_qpos1(il) = max(1., (-delt*fr(il,i))/(s_wake(il)*rr_wake(il,i)+(1.-s_wake(il))*rr(il,i)))
3648 IF (alpha_qpos1(il)>=alpha_qpos(il)) alpha_qpos(il) = alpha_qpos1(il)
3654 IF (iflag(il)<=1 .AND. alpha_qpos(il)>1.001)
THEN
3655 alpha_qpos(il) = alpha_qpos(il)*1.1
3662 IF (iflag(il)<=1)
THEN
3663 sigd(il) = sigd(il)/alpha_qpos(il)
3664 precip(il) = precip(il)/alpha_qpos(il)
3669 IF (iflag(il)<=1)
THEN
3670 fr(il, i) = fr(il, i)/alpha_qpos(il)
3671 ft(il, i) = ft(il, i)/alpha_qpos(il)
3672 fqd(il, i) = fqd(il, i)/alpha_qpos(il)
3673 ftd(il, i) = ftd(il, i)/alpha_qpos(il)
3674 fu(il, i) = fu(il, i)/alpha_qpos(il)
3675 fv(il, i) = fv(il, i)/alpha_qpos(il)
3676 m(il, i) = m(il, i)/alpha_qpos(il)
3677 mp(il, i) = mp(il, i)/alpha_qpos(il)
3678 vprecip(il, i) = vprecip(il, i)/alpha_qpos(il)
3679 vprecipi(il, i) = vprecipi(il, i)/alpha_qpos(il)
3686 IF (iflag(il)<=1)
THEN
3687 ment(il, i, j) = ment(il, i, j)/alpha_qpos(il)
3710 IF (iflag(il) < 3)
THEN
3725 dnwd0(il, i) = -mp(il, i)
3739 IF (i>=icb(il) .AND. i<=inb(il))
THEN
3759 IF (i>=icb(il) .AND. i<=inb(il) .AND. k<=inb(il))
THEN
3760 up1(il, k, i) = up1(il, k, i) + ment(il, n, k)
3761 dn1(il, k, i) = dn1(il, k, i) - ment(il, k, n)
3771 IF (i>=icb(il))
THEN
3772 IF (k>=i .AND. k<=(inb(il)))
THEN
3773 upwd(il, i) = upwd(il, i) + m(il, k)
3777 upwd(il, i) = upwd(il, i) + cbmf(il)*wghti(il, k)
3789 IF (i<=inb(il) .AND. k<=inb(il))
THEN
3790 upwd(il, i) = upwd(il, i) + up1(il, k, i)
3791 dnwd(il, i) = dnwd(il, i) + dn1(il, k, i)
3825 mip(il, i) = m(il, i)
3846 ma(il, i) = ma(il, i) + m(il, j)
3861 IF (i<=(icb(il)-1))
THEN
3901 DO k = i + 1,
nl + 1
3903 IF (i<=inb(il) .AND. k<=(inb(il)+1) .AND. iflag(il)<=1)
THEN
3904 mac(il, i) = mac(il, i) + m(il, k)
3913 IF (i>=icb(il) .AND. i<=(inb(il)-1) &
3914 .AND. j>=icb(il) .AND. iflag(il)<=1)
THEN
3915 sax(il, i) = sax(il, i) +
rrd*(tvp(il,j)-tv(il,j)) &
3916 *(ph(il,j)-ph(il,j+1))/p(il, j)
3924 IF (i>=icb(il) .AND. i<=(inb(il)-1) &
3925 .AND. sax(il,i)>0.0 .AND. iflag(il)<=1)
THEN
3926 wa(il, i) = sqrt(2.*sax(il,i))
3944 IF (k<=inb(il) .AND. i<=inb(il) .AND. iflag(il)<=1)
THEN
3945 sument(il) =sument(il) + abs(ment(il,k,i))
3952 IF (wa(il,i)>0.0 .AND. iflag(il)<=1) &
3953 siga(il, i) = mac(il, i)/(coefw_cld_cv*wa(il, i)) &
3954 *
rrd*tvp(il, i)/p(il, i)/100.
3956 siga(il, i) = min(siga(il,i), 1.0)
3962 qcondc(il, i) = siga(il, i)*clw(il, i)*(1.-ep(il,i)) &
3963 +(1.-siga(il,i))*qcond(il, i)
3966 sigment(il,i)=sument(il)*tau_cld_cv/(ph(il,i)-ph(il,i+1))
3967 sigment(il, i) = min(1.e-4+sigment(il,i), 1.0 - siga(il,i))
3968 qtc(il, i) = (siga(il,i)*qnk(il)+sigment(il,i)*qtment(il,i)) &
3969 /(siga(il,i)+sigment(il,i))
3970 sigt(il,i) = sigment(il, i) + siga(il, i)
3976 qcondc(il, i) = qcond(il, i)
3977 qtc(il,i) = qtment(il,i)
3988 SUBROUTINE cv3_tracer(nloc, len, ncum, nd, na, &
3989 ment, sigij, da, phi, phi2, d1a, dam, &
3990 ep, vprecip, elij, clw, epmlmmm, eplamm, &
3994 include
"cv3param.h"
3997 INTEGER ncum, nd, na, nloc, len
3998 REAL ment(nloc, na, na), sigij(nloc, na, na)
3999 REAL clw(nloc, nd), elij(nloc, na, na)
4001 INTEGER icb(nloc), inb(nloc)
4002 REAL Vprecip(nloc, nd+1)
4004 REAL da(nloc, na), phi(nloc, na, na)
4005 REAL phi2(nloc, na, na)
4006 REAL d1a(nloc, na), dam(nloc, na)
4007 REAL epmlmMm(nloc, na, na), eplaMm(nloc, na)
4011 REAL epm(nloc, na, na)
4027 epmlmmm(:, :, :) = 0.
4036 IF (k>=icb(i) .AND. k<=inb(i) .AND. &
4039 j>k .AND. j<=inb(i))
THEN
4040 epm(i, j, k) = 1. - (1.-ep(i,j))*clw(i, j)/max(elij(i,k,j), 1.e-16)
4042 epm(i, j, k) = max(epm(i,j,k), 0.0)
4052 IF (k>=icb(i) .AND. k<=inb(i))
THEN
4053 eplamm(i, j) = eplamm(i, j) + &
4054 ep(i, j)*clw(i, j)*ment(i, j, k)*(1.-sigij(i,j,k))
4063 IF (k>=icb(i) .AND. k<=inb(i) .AND. j<=inb(i))
THEN
4064 epmlmmm(i, j, k) = epm(i, j, k)*elij(i, k, j)*ment(i, k, j)
4074 da(i, j) = da(i, j) + (1.-sigij(i,k,j))*ment(i, k, j)
4075 phi(i, j, k) = sigij(i, k, j)*ment(i, k, j)
4076 d1a(i, j) = d1a(i, j) + ment(i, k, j)*ep(i, k)*(1.-sigij(i,k,j))
4078 dam(i, j) = dam(i, j) + ment(i, k, j)*epm(i, k, j)*(1.-ep(i,k))*(1.-sigij(i,k,j))
4079 phi2(i, j, k) = phi(i, j, k)*epm(i, j, k)
4092 ft, fq, fu, fv, ftra, &
4093 ma, upwd, dnwd, dnwd0, qcondc, wd, cape, &
4095 precip1, sig1, w01, &
4096 ft1, fq1, fu1, fv1, ftra1, &
4097 ma1, upwd1, dnwd1, dnwd01, qcondc1, wd1, cape1)
4100 include
"cv3param.h"
4103 INTEGER len, ncum, nd, ntra, nloc
4107 REAL sig(nloc, nd), w0(nloc, nd)
4108 REAL ft(nloc, nd), fq(nloc, nd), fu(nloc, nd), fv(nloc, nd)
4109 REAL ftra(nloc, nd, ntra)
4111 REAL upwd(nloc, nd), dnwd(nloc, nd), dnwd0(nloc, nd)
4112 REAL qcondc(nloc, nd)
4113 REAL wd(nloc), cape(nloc)
4118 REAL sig1(len, nd), w01(len, nd)
4119 REAL ft1(len, nd), fq1(len, nd), fu1(len, nd), fv1(len, nd)
4120 REAL ftra1(len, nd, ntra)
4122 REAL upwd1(len, nd), dnwd1(len, nd), dnwd01(len, nd)
4123 REAL qcondc1(nloc, nd)
4124 REAL wd1(nloc), cape1(nloc)
4130 precip1(idcum(i)) = precip(i)
4131 iflag1(idcum(i)) = iflag(i)
4132 wd1(idcum(i)) = wd(i)
4133 cape1(idcum(i)) = cape(i)
4138 sig1(idcum(i), k) = sig(i, k)
4139 w01(idcum(i), k) = w0(i, k)
4140 ft1(idcum(i), k) = ft(i, k)
4141 fq1(idcum(i), k) = fq(i, k)
4142 fu1(idcum(i), k) = fu(i, k)
4143 fv1(idcum(i), k) = fv(i, k)
4144 ma1(idcum(i), k) = ma(i, k)
4145 upwd1(idcum(i), k) = upwd(i, k)
4146 dnwd1(idcum(i), k) = dnwd(i, k)
4147 dnwd01(idcum(i), k) = dnwd0(i, k)
4148 qcondc1(idcum(i), k) = qcondc(i, k)
4153 sig1(idcum(i), nd) = sig(i, nd)
!IM Implemente en modes sequentiel et parallele CALL rlon_glo CALL bcast(rlon_glo)!$OMP MASTER if(is_mpi_root) then!zstophy
!$Id!Thermodynamical constants for t0 real clmcpv
!$Id!Thermodynamical constants for t0 real clmci real epsim1 real hrd real grav COMMON cvthermo rowl t0
!$Id!Thermodynamical constants for cpv
!$Id!logical cvflag_grav logical cvflag_ice COMMON cvflag cvflag_grav
!$Id!Parameters for nlm real spfac!IM cf epmax real ptcrit real omtrain real dpbase
!$Id!Parameters for minorig
!$Id!Parameters for nlm real spfac!IM cf epmax real ptcrit real omtrain real dttrig real alpha real delta real betad COMMON cv30param nlm spfac &!IM cf ptcrit omtrain dttrig delta
subroutine cv3_prelim(len, nd, ndp1, t, q, p, ph, lv, lf, cpn, tv, gz, h, hm, th)
!$Id!Parameters for nlm real spfac!IM cf epmax real ptcrit real omtrain real dttrig real beta
!$Id!Parameters for nlm real spfac!IM cf ptcrit
!$Header!CDK comgeom COMMON comgeom && alpha1
!$Id!Thermodynamical constants for t0 real clmci real epsim1 real hrd real grav COMMON cvthermo rowl cpvmcl clmci
!$Id!Thermodynamical constants for t0 real clmci real epsim1 real ginv
subroutine cv3_feed(len, nd, ok_conserv_q, t, q, u, v, p, ph, hm, gz, p1feed, p2feed, wght, wghti, tnk, thnk, qnk, qsnk, unk, vnk, cpnk, hnk, nk, icb, icbmax, iflag, gznk, plcl)
!$Id!Thermodynamical constants for ci
!$Id!Thermodynamical constants for t0 real clmci real eps
subroutine cv3_unsat(nloc, ncum, nd, na, ntra, icb, inb, iflag, t, rr, rs, gz, u, v, tra, p, ph, th, tv, lv, lf, cpn, ep, sigp, clw, m, ment, elij, delt, plcl, coef_clos, mp, rp, up, vp, trap, wt, water, evap, fondue, ice, faci, b, sigd, wdtrainA, wdtrainM)
subroutine cv3_undilute1(len, nd, t, qs, gz, plcl, p, icb, tnk, qnk, gznk, tp, tvp, clw, icbs)
!$Id!Parameters for parameters that control the rate of approach!to quasi equilibrium noff nlm real tlcrit real entp real sigd real omtrain
subroutine cv3_compress(len, nloc, ncum, nd, ntra, iflag1, nk1, icb1, icbs1, plcl1, tnk1, qnk1, gznk1, pbase1, buoybase1, t1, q1, qs1, u1, v1, gz1, th1, tra1, h1, lv1, cpn1, p1, ph1, tv1, tp1, tvp1, clw1, sig1, w01, iflag, nk, icb, icbs, plcl, tnk, qnk, gznk, pbase, buoybase, t, q, qs, u, v, gz, th, tra, h, lv, cpn, p, ph, tv, tp, tvp, clw, sig, w0)
subroutine err(ierr, typ, nam)
!$Id!Thermodynamical constants for rrd
!$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 cv3_mixing(nloc, ncum, nd, na, ntra, icb, nk, inb, ph, t, rr, rs, u, v, tra, h, lv, lf, frac, qnk, unk, vnk, hp, tv, tvp, ep, clw, m, sig, ment, qent, uent, vent, nent, sij, elij, ments, qents, traent)
!$Id!Thermodynamical constants for cl
!$Id!Parameters for nlm real spfac!IM cf epmax real pbcrit
subroutine cv3_closure(nloc, ncum, nd, icb, inb, pbase, p, ph, tv, buoy, sig, w0, cape, m, iflag)
!$Id!Parameters for nlm real spfac!IM cf epmax real ptcrit real omtrain real dttrig real alpha real delta real betad COMMON cv30param noff
!$Id!Parameters for parameters that control the rate of approach!to quasi equilibrium noff nlm real tlcrit real entp real sigd real coeffs real dtmax real cu real betad real damp real delta COMMON cvparam nlm tlcrit sigd coeffs betad
!$Id!Parameters for nlm real spfac!IM cf epmax real ptcrit real omtrain real dttrig real dtcrit
!Parameters for nlm real sigdz
INTEGER iflag_mix REAL scut REAL Supcrit2 REAL coef_clos_ls!COMMON YOMCST2 iflag_mix
!FH On elimine toutes les clefs physiques dans la dynamique prt_level
subroutine cv3_tracer(nloc, len, ncum, nd, na, ment, sigij, da, phi, phi2, d1a, dam, ep, Vprecip, elij, clw, epmlmMm, eplaMm, icb, inb)
!Parameters for nlm real spfac integer flag_wb real ptcrit real elcrit
!$Id Turb_fcg_gcssold get_uvd hqturb_gcssold endif!large scale llm day day1 day day1 *dt_toga endif!time annee_ref dt_toga u_toga vq_toga w_prof vq_prof llm u(l)
subroutine cv3_trigger(len, nd, icb, plcl, p, th, tv, tvp, thnk, pbase, buoybase, iflag, sig, w0)
!$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
!$Id!Parameters for nlm real spfac!IM cf epmax real ptcrit real omtrain real dtovsh
!$Id!Parameters for nlm real spfac!IM cf epmax real ptcrit real omtrain real dttrig real alpha real delta real betad COMMON cv30param nlm spfac &!IM cf ptcrit omtrain dttrig alpha
!$Id t_glace_min REAL exposant_glace REAL rei_max REAL coefw_cld_cv REAL tmax_fonte_cv INTEGER iflag_cld_cv common nuagecom coefw_cld_cv
!$Id t_glace_min REAL exposant_glace REAL rei_max REAL tau_cld_cv
subroutine cv3_undilute2(nloc, ncum, nd, icb, icbs, nk, tnk, qnk, gznk, hnk, t, q, qs, gz, p, h, tv, lv, lf, pbase, buoybase, plcl, inb, tp, tvp, clw, hp, ep, sigp, buoy, frac)
subroutine cv3_yield(nloc, ncum, nd, na, ntra, ok_conserv_q,icb, inb, delt,t, rr, t_wake, rr_wake, s_wake, u, v, tra,gz, p, ph, h, hp, lv, lf, cpn, th, th_wake,ep, clw, m, tp, mp, rp, up, vp, trap,wt, water, ice, evap, fondue, faci, b, sigd,ment, qent, hent, iflag_mix, uent, vent,nent, elij, traent, sig,tv, tvp, wghti,iflag, precip, Vprecip, Vprecipi,ft, fr, fu, fv, ftra,cbmf, upwd, dnwd, dnwd0, ma, mip,
!$Id!Thermodynamical constants for t0 real clmci real epsim1 real hrd real grav COMMON cvthermo cpd
!$Id!Thermodynamical constants for rrv
subroutine abort_physic(modname, message, ierr)
!$Id!Thermodynamical constants for lv0
!$Id sig2feed!common comconema2 iflag_cvl_sigd common comconema1 epmax
subroutine icefrac(t, clw, qi, nl, len)
!$Id!Thermodynamical constants for rowl
subroutine cv3_vertmix(len, nd, iflag, plim1, plim2, p, ph, t, q, u, v, w, wi, nk, tmix, thmix, qmix, qsmix, umix, vmix, plcl)
!$Id!Parameters for nlm real sigd
!$Header!gestion des impressions de sorties et de débogage la sortie standard prt_level COMMON comprint lunout
!$Id!Thermodynamical constants for lf0
subroutine cv3_uncompress(nloc, len, ncum, nd, ntra, idcum, iflag, precip, sig, w0, ft, fq, fu, fv, ftra, Ma, upwd, dnwd, dnwd0, qcondc, wd, cape, iflag1, precip1, sig1, w01, ft1, fq1, fu1, fv1, ftra1, Ma1, upwd1, dnwd1, dnwd01, qcondc1, wd1, cape1)
subroutine cv3_param(nd, k_upper, delt)