5 |
contains |
contains |
6 |
|
|
7 |
SUBROUTINE cv30_yield(icb, inb, delt, t, rr, u, v, gz, p, ph, h, hp, lv, & |
SUBROUTINE cv30_yield(icb, inb, delt, t, rr, u, v, gz, p, ph, h, hp, lv, & |
8 |
cpn, th, ep, clw, m, tp, mp, rp, up, vp, wt, water, evap, b, ment, & |
cpn, th, ep, clw, m, tp, mp, qp, up, vp, wt, water, evap, b, ment, & |
9 |
qent, uent, vent, nent, elij, sig, tv, tvp, iflag, precip, VPrecip, & |
qent, uent, vent, nent, elij, sig, tv, tvp, iflag, precip, VPrecip, & |
10 |
ft, fr, fu, fv, upwd, dnwd, dnwd0, ma, mike, tls, tps, qcondc) |
ft, fr, fu, fv, upwd, dnwd, dnwd0, ma, mike, tls, tps, qcondc) |
11 |
|
|
12 |
|
! Tendencies, precipitation, variables of interface with other |
13 |
|
! processes, etc. |
14 |
|
|
15 |
use conema3_m, only: iflag_clw |
use conema3_m, only: iflag_clw |
16 |
use cv30_param_m, only: delta, minorig, nl, sigd |
use cv30_param_m, only: minorig, nl, sigd |
17 |
use cvthermo, only: cl, cpd, cpv, grav, rowl, rrd, rrv |
use cv_thermo_m, only: rowl |
18 |
USE dimphy, ONLY: klev, klon |
USE dimphy, ONLY: klev, klon |
19 |
|
use SUPHEC_M, only: rg, rcpd, rcw, rcpv, rd, rv |
20 |
|
|
21 |
! inputs: |
! inputs: |
22 |
integer, intent(in):: icb(:), inb(:) ! (ncum) |
|
23 |
|
integer, intent(in):: icb(:) |
24 |
|
|
25 |
|
integer, intent(in):: inb(:) ! (ncum) |
26 |
|
! first model level above the level of neutral buoyancy of the |
27 |
|
! parcel (1 <= inb <= nl - 1) |
28 |
|
|
29 |
real, intent(in):: delt |
real, intent(in):: delt |
30 |
real t(klon, klev), rr(klon, klev), u(klon, klev), v(klon, klev) |
real, intent(in):: t(klon, klev), rr(klon, klev) |
31 |
|
real, intent(in):: u(klon, klev), v(klon, klev) |
32 |
real gz(klon, klev) |
real gz(klon, klev) |
33 |
real p(klon, klev) |
real p(klon, klev) |
34 |
real ph(klon, klev + 1), h(klon, klev), hp(klon, klev) |
real ph(klon, klev + 1), h(klon, klev), hp(klon, klev) |
35 |
real lv(klon, klev), cpn(klon, klev) |
real, intent(in):: lv(:, :) ! (klon, klev) |
36 |
real th(klon, klev) |
|
37 |
|
real, intent(in):: cpn(:, :) ! (ncum, nl) |
38 |
|
! specific heat capacity at constant pressure of humid air, in J K-1 kg-1 |
39 |
|
|
40 |
|
real, intent(in):: th(:, :) ! (ncum, nl) |
41 |
real ep(klon, klev), clw(klon, klev) |
real ep(klon, klev), clw(klon, klev) |
42 |
real m(klon, klev) |
real m(klon, klev) |
43 |
real tp(klon, klev) |
real tp(klon, klev) |
44 |
real mp(klon, klev), rp(klon, klev), up(klon, klev) |
real, intent(in):: mp(:, :) ! (ncum, nl) |
45 |
real vp(klon, klev), wt(klon, klev) |
real, intent(in):: qp(:, :), up(:, :) ! (klon, klev) |
46 |
|
real, intent(in):: vp(:, 2:) ! (ncum, 2:nl) |
47 |
|
real, intent(in):: wt(:, :) ! (ncum, nl - 1) |
48 |
real, intent(in):: water(:, :), evap(:, :) ! (ncum, nl) |
real, intent(in):: water(:, :), evap(:, :) ! (ncum, nl) |
49 |
real, intent(in):: b(:, :) ! (ncum, nl - 1) |
real, intent(in):: b(:, :) ! (ncum, nl - 1) |
50 |
real ment(klon, klev, klev), qent(klon, klev, klev), uent(klon, klev, klev) |
real ment(klon, klev, klev), qent(klon, klev, klev), uent(klon, klev, klev) |
54 |
real sig(klon, klev) |
real sig(klon, klev) |
55 |
real tv(klon, klev), tvp(klon, klev) |
real tv(klon, klev), tvp(klon, klev) |
56 |
|
|
|
! input / output: |
|
|
integer iflag(klon) |
|
|
|
|
57 |
! outputs: |
! outputs: |
58 |
|
integer, intent(out):: iflag(:) ! (ncum) |
59 |
real precip(klon) |
real precip(klon) |
60 |
real VPrecip(klon, klev + 1) |
real VPrecip(klon, klev + 1) |
61 |
real ft(klon, klev), fr(klon, klev), fu(klon, klev), fv(klon, klev) |
real ft(klon, klev), fr(klon, klev), fu(klon, klev), fv(klon, klev) |
67 |
real qcondc(klon, klev) |
real qcondc(klon, klev) |
68 |
|
|
69 |
! Local: |
! Local: |
70 |
|
real, parameter:: delta = 0.01 ! interface cloud parameterization |
71 |
integer ncum |
integer ncum |
72 |
integer i, k, il, n, j, num1 |
integer i, k, il, n, j |
73 |
real rat, awat, delti |
real awat, delti |
74 |
real ax, bx, cx, dx |
real ax, bx, cx, dx |
75 |
real cpinv, rdcp, dpinv |
real cpinv, rdcp, dpinv |
76 |
real lvcp(klon, klev) |
real lvcp(klon, klev) |
83 |
!------------------------------------------------------------- |
!------------------------------------------------------------- |
84 |
|
|
85 |
ncum = size(icb) |
ncum = size(icb) |
86 |
|
iflag = 0 |
87 |
|
|
88 |
! initialization: |
! initialization: |
89 |
|
|
113 |
enddo |
enddo |
114 |
enddo |
enddo |
115 |
|
|
116 |
! calculate surface precipitation in mm / day |
! calculate surface precipitation in mm / day |
117 |
|
|
118 |
do il = 1, ncum |
do il = 1, ncum |
119 |
if (ep(il, inb(il)) >= 1e-4) precip(il) = wt(il, 1) * sigd & |
if (ep(il, inb(il)) >= 1e-4) precip(il) = wt(il, 1) * sigd & |
120 |
* water(il, 1) * 86400. * 1000. / (rowl * grav) |
* water(il, 1) * 86400. * 1000. / (rowl * rg) |
121 |
enddo |
enddo |
122 |
|
|
123 |
! CALCULATE VERTICAL PROFILE OF PRECIPITATIONs IN kg / m2 / s === |
! CALCULATE VERTICAL PROFILE OF PRECIPITATIONs IN kg / m2 / s === |
126 |
do k = 1, nl - 1 |
do k = 1, nl - 1 |
127 |
do il = 1, ncum |
do il = 1, ncum |
128 |
if (k <= inb(il)) VPrecip(il, k) = wt(il, k) * sigd * water(il, k) & |
if (k <= inb(il)) VPrecip(il, k) = wt(il, k) * sigd * water(il, k) & |
129 |
/ grav |
/ rg |
130 |
end do |
end do |
131 |
end do |
end do |
132 |
|
|
133 |
! calculate tendencies of lowest level potential temperature |
! calculate tendencies of lowest level potential temperature |
134 |
! and mixing ratio |
! and mixing ratio |
135 |
|
|
136 |
do il = 1, ncum |
do il = 1, ncum |
137 |
work(il) = 1.0 / (ph(il, 1) - ph(il, 2)) |
work(il) = 1.0 / (ph(il, 1) - ph(il, 2)) |
145 |
enddo |
enddo |
146 |
|
|
147 |
do il = 1, ncum |
do il = 1, ncum |
148 |
! Consist vect: |
if (0.01 * rg * work(il) * am(il) >= delti) iflag(il) = 1 |
|
if (0.01 * grav * work(il) * am(il) >= delti) iflag(il) = 1 |
|
|
|
|
|
ft(il, 1) = 0.01 * grav * work(il) * am(il) * (t(il, 2) - t(il, 1) & |
|
|
+ (gz(il, 2) - gz(il, 1)) / cpn(il, 1)) |
|
149 |
|
|
150 |
ft(il, 1) = ft(il, 1) - 0.5 * lvcp(il, 1) * sigd * (evap(il, 1) & |
ft(il, 1) = 0.01 * rg * work(il) * am(il) * (t(il, 2) - t(il, 1) & |
151 |
+ evap(il, 2)) |
+ (gz(il, 2) - gz(il, 1)) / cpn(il, 1)) - 0.5 * lvcp(il, 1) & |
152 |
|
* sigd * (evap(il, 1) + evap(il, 2)) - 0.009 * rg * sigd & |
153 |
ft(il, 1) = ft(il, 1) - 0.009 * grav * sigd * mp(il, 2) & |
* mp(il, 2) * t(il, 1) * b(il, 1) * work(il) + 0.01 * sigd & |
154 |
* t(il, 1) * b(il, 1) * work(il) |
* wt(il, 1) * (rcw - rcpd) * water(il, 2) * (t(il, 2) - t(il, 1)) & |
155 |
|
* work(il) / cpn(il, 1) |
|
ft(il, 1) = ft(il, 1) + 0.01 * sigd * wt(il, 1) * (cl - cpd) & |
|
|
* water(il, 2) * (t(il, 2) - t(il, 1)) * work(il) / cpn(il, 1) |
|
156 |
|
|
157 |
!jyg1 Correction pour mieux conserver l'eau (conformite avec CONVECT4.3) |
!jyg1 Correction pour mieux conserver l'eau (conformite avec CONVECT4.3) |
158 |
! (sb: pour l'instant, on ne fait que le chgt concernant grav, pas evap) |
! (sb: pour l'instant, on ne fait que le chgt concernant rg, pas evap) |
159 |
fr(il, 1) = 0.01 * grav * mp(il, 2) * (rp(il, 2) - rr(il, 1)) & |
fr(il, 1) = 0.01 * rg * mp(il, 2) * (qp(il, 2) - rr(il, 1)) & |
160 |
* work(il) + sigd * 0.5 * (evap(il, 1) + evap(il, 2)) |
* work(il) + sigd * 0.5 * (evap(il, 1) + evap(il, 2)) |
161 |
! + tard : + sigd * evap(il, 1) |
! + tard : + sigd * evap(il, 1) |
162 |
|
|
163 |
fr(il, 1) = fr(il, 1) + 0.01 * grav * am(il) * (rr(il, 2) - rr(il, 1)) & |
fr(il, 1) = fr(il, 1) + 0.01 * rg * am(il) * (rr(il, 2) - rr(il, 1)) & |
164 |
* work(il) |
* work(il) |
165 |
|
|
166 |
fu(il, 1) = fu(il, 1) + 0.01 * grav * work(il) * (mp(il, 2) & |
fu(il, 1) = fu(il, 1) + 0.01 * rg * work(il) * (mp(il, 2) & |
167 |
* (up(il, 2) - u(il, 1)) + am(il) * (u(il, 2) - u(il, 1))) |
* (up(il, 2) - u(il, 1)) + am(il) * (u(il, 2) - u(il, 1))) |
168 |
fv(il, 1) = fv(il, 1) + 0.01 * grav * work(il) * (mp(il, 2) & |
fv(il, 1) = fv(il, 1) + 0.01 * rg * work(il) * (mp(il, 2) & |
169 |
* (vp(il, 2) - v(il, 1)) + am(il) * (v(il, 2) - v(il, 1))) |
* (vp(il, 2) - v(il, 1)) + am(il) * (v(il, 2) - v(il, 1))) |
170 |
enddo ! il |
enddo |
171 |
|
|
172 |
do j = 2, nl |
do j = 2, nl |
173 |
do il = 1, ncum |
do il = 1, ncum |
174 |
if (j <= inb(il)) then |
if (j <= inb(il)) then |
175 |
fr(il, 1) = fr(il, 1) + 0.01 * grav * work(il) * ment(il, j, 1) & |
fr(il, 1) = fr(il, 1) + 0.01 * rg * work(il) * ment(il, j, 1) & |
176 |
* (qent(il, j, 1) - rr(il, 1)) |
* (qent(il, j, 1) - rr(il, 1)) |
177 |
fu(il, 1) = fu(il, 1) + 0.01 * grav * work(il) * ment(il, j, 1) & |
fu(il, 1) = fu(il, 1) + 0.01 * rg * work(il) * ment(il, j, 1) & |
178 |
* (uent(il, j, 1) - u(il, 1)) |
* (uent(il, j, 1) - u(il, 1)) |
179 |
fv(il, 1) = fv(il, 1) + 0.01 * grav * work(il) * ment(il, j, 1) & |
fv(il, 1) = fv(il, 1) + 0.01 * rg * work(il) * ment(il, j, 1) & |
180 |
* (vent(il, j, 1) - v(il, 1)) |
* (vent(il, j, 1) - v(il, 1)) |
181 |
endif |
endif |
182 |
enddo |
enddo |
183 |
enddo |
enddo |
184 |
|
|
185 |
! calculate tendencies of potential temperature and mixing ratio |
! calculate tendencies of potential temperature and mixing ratio |
186 |
! at levels above the lowest level |
! at levels above the lowest level |
187 |
|
|
188 |
! first find the net saturated updraft and downdraft mass fluxes |
! first find the net saturated updraft and downdraft mass fluxes |
189 |
! through each level |
! through each level |
190 |
|
|
191 |
loop_i: do i = 2, nl - 1 |
loop_i: do i = 2, nl - 1 |
192 |
num1 = 0 |
if (any(inb >= i)) then |
|
|
|
|
do il = 1, ncum |
|
|
if (i <= inb(il)) num1 = num1 + 1 |
|
|
enddo |
|
|
|
|
|
if (num1 > 0) then |
|
193 |
amp1(:ncum) = 0. |
amp1(:ncum) = 0. |
194 |
ad(:ncum) = 0. |
ad(:ncum) = 0. |
195 |
|
|
226 |
dpinv = 1.0 / (ph(il, i) - ph(il, i + 1)) |
dpinv = 1.0 / (ph(il, i) - ph(il, i + 1)) |
227 |
cpinv = 1.0 / cpn(il, i) |
cpinv = 1.0 / cpn(il, i) |
228 |
|
|
229 |
! Vecto: |
if (0.01 * rg * dpinv * amp1(il) >= delti) iflag(il) = 1 |
|
if (0.01 * grav * dpinv * amp1(il) >= delti) iflag(il) = 1 |
|
230 |
|
|
231 |
ft(il, i) = 0.01 * grav * dpinv * (amp1(il) * (t(il, i + 1) & |
ft(il, i) = 0.01 * rg * dpinv * (amp1(il) * (t(il, i + 1) & |
232 |
- t(il, i) + (gz(il, i + 1) - gz(il, i)) * cpinv) & |
- t(il, i) + (gz(il, i + 1) - gz(il, i)) * cpinv) & |
233 |
- ad(il) * (t(il, i) - t(il, i - 1) + (gz(il, i) & |
- ad(il) * (t(il, i) - t(il, i - 1) + (gz(il, i) & |
234 |
- gz(il, i - 1)) * cpinv)) - 0.5 * sigd * lvcp(il, i) & |
- gz(il, i - 1)) * cpinv)) - 0.5 * sigd * lvcp(il, i) & |
235 |
* (evap(il, i) + evap(il, i + 1)) |
* (evap(il, i) + evap(il, i + 1)) - 0.009 * rg * sigd & |
236 |
rat = cpn(il, i - 1) * cpinv |
* (mp(il, i + 1) * t(il, i) * b(il, i) - mp(il, i) & |
237 |
ft(il, i) = ft(il, i) - 0.009 * grav * sigd * (mp(il, i + 1) & |
* t(il, i - 1) * cpn(il, i - 1) * cpinv * b(il, i - 1)) & |
238 |
* t(il, i) * b(il, i) - mp(il, i) * t(il, i - 1) * rat & |
* dpinv + 0.01 * rg * dpinv * ment(il, i, i) & |
239 |
* b(il, i - 1)) * dpinv |
* (hp(il, i) - h(il, i) + t(il, i) * (rcpv - rcpd) & |
240 |
ft(il, i) = ft(il, i) + 0.01 * grav * dpinv * ment(il, i, i) & |
* (rr(il, i) - qent(il, i, i))) * cpinv + 0.01 * sigd & |
241 |
* (hp(il, i) - h(il, i) + t(il, i) * (cpv - cpd) & |
* wt(il, i) * (rcw - rcpd) * water(il, i + 1) & |
242 |
* (rr(il, i) - qent(il, i, i))) * cpinv |
* (t(il, i + 1) - t(il, i)) * dpinv * cpinv |
243 |
|
fr(il, i) = 0.01 * rg * dpinv * (amp1(il) * (rr(il, i + 1) & |
|
ft(il, i) = ft(il, i) + 0.01 * sigd * wt(il, i) * (cl - cpd) & |
|
|
* water(il, i + 1) * (t(il, i + 1) - t(il, i)) * dpinv & |
|
|
* cpinv |
|
|
|
|
|
fr(il, i) = 0.01 * grav * dpinv * (amp1(il) * (rr(il, i + 1) & |
|
244 |
- rr(il, i)) - ad(il) * (rr(il, i) - rr(il, i - 1))) |
- rr(il, i)) - ad(il) * (rr(il, i) - rr(il, i - 1))) |
245 |
fu(il, i) = fu(il, i) + 0.01 * grav * dpinv * (amp1(il) & |
fu(il, i) = fu(il, i) + 0.01 * rg * dpinv * (amp1(il) & |
246 |
* (u(il, i + 1) - u(il, i)) - ad(il) * (u(il, i) & |
* (u(il, i + 1) - u(il, i)) - ad(il) * (u(il, i) & |
247 |
- u(il, i - 1))) |
- u(il, i - 1))) |
248 |
fv(il, i) = fv(il, i) + 0.01 * grav * dpinv * (amp1(il) & |
fv(il, i) = fv(il, i) + 0.01 * rg * dpinv * (amp1(il) & |
249 |
* (v(il, i + 1) - v(il, i)) - ad(il) * (v(il, i) & |
* (v(il, i + 1) - v(il, i)) - ad(il) * (v(il, i) & |
250 |
- v(il, i - 1))) |
- v(il, i - 1))) |
251 |
endif |
endif |
260 |
awat = elij(il, k, i) - (1. - ep(il, i)) * clw(il, i) |
awat = elij(il, k, i) - (1. - ep(il, i)) * clw(il, i) |
261 |
awat = amax1(awat, 0.0) |
awat = amax1(awat, 0.0) |
262 |
|
|
263 |
fr(il, i) = fr(il, i) + 0.01 * grav * dpinv & |
fr(il, i) = fr(il, i) + 0.01 * rg * dpinv & |
264 |
* ment(il, k, i) * (qent(il, k, i) - awat - rr(il, i)) |
* ment(il, k, i) * (qent(il, k, i) - awat - rr(il, i)) |
265 |
fu(il, i) = fu(il, i) + 0.01 * grav * dpinv & |
fu(il, i) = fu(il, i) + 0.01 * rg * dpinv & |
266 |
* ment(il, k, i) * (uent(il, k, i) - u(il, i)) |
* ment(il, k, i) * (uent(il, k, i) - u(il, i)) |
267 |
fv(il, i) = fv(il, i) + 0.01 * grav * dpinv & |
fv(il, i) = fv(il, i) + 0.01 * rg * dpinv & |
268 |
* ment(il, k, i) * (vent(il, k, i) - v(il, i)) |
* ment(il, k, i) * (vent(il, k, i) - v(il, i)) |
269 |
|
|
270 |
! (saturated updrafts resulting from mixing) |
! (saturated updrafts resulting from mixing) |
280 |
dpinv = 1.0 / (ph(il, i) - ph(il, i + 1)) |
dpinv = 1.0 / (ph(il, i) - ph(il, i + 1)) |
281 |
cpinv = 1.0 / cpn(il, i) |
cpinv = 1.0 / cpn(il, i) |
282 |
|
|
283 |
fr(il, i) = fr(il, i) + 0.01 * grav * dpinv & |
fr(il, i) = fr(il, i) + 0.01 * rg * dpinv & |
284 |
* ment(il, k, i) * (qent(il, k, i) - rr(il, i)) |
* ment(il, k, i) * (qent(il, k, i) - rr(il, i)) |
285 |
fu(il, i) = fu(il, i) + 0.01 * grav * dpinv & |
fu(il, i) = fu(il, i) + 0.01 * rg * dpinv & |
286 |
* ment(il, k, i) * (uent(il, k, i) - u(il, i)) |
* ment(il, k, i) * (uent(il, k, i) - u(il, i)) |
287 |
fv(il, i) = fv(il, i) + 0.01 * grav * dpinv & |
fv(il, i) = fv(il, i) + 0.01 * rg * dpinv & |
288 |
* ment(il, k, i) * (vent(il, k, i) - v(il, i)) |
* ment(il, k, i) * (vent(il, k, i) - v(il, i)) |
289 |
endif |
endif |
290 |
end do |
end do |
298 |
! sb: on ne fait pas encore la correction permettant de mieux |
! sb: on ne fait pas encore la correction permettant de mieux |
299 |
! conserver l'eau: |
! conserver l'eau: |
300 |
fr(il, i) = fr(il, i) + 0.5 * sigd * (evap(il, i) & |
fr(il, i) = fr(il, i) + 0.5 * sigd * (evap(il, i) & |
301 |
+ evap(il, i + 1)) + 0.01 * grav * (mp(il, i + 1) & |
+ evap(il, i + 1)) + 0.01 * rg * (mp(il, i + 1) & |
302 |
* (rp(il, i + 1) - rr(il, i)) - mp(il, i) * (rp(il, i) & |
* (qp(il, i + 1) - rr(il, i)) - mp(il, i) * (qp(il, i) & |
303 |
- rr(il, i - 1))) * dpinv |
- rr(il, i - 1))) * dpinv |
304 |
|
|
305 |
fu(il, i) = fu(il, i) + 0.01 * grav * (mp(il, i + 1) & |
fu(il, i) = fu(il, i) + 0.01 * rg * (mp(il, i + 1) & |
306 |
* (up(il, i + 1) - u(il, i)) - mp(il, i) * (up(il, i) & |
* (up(il, i + 1) - u(il, i)) - mp(il, i) * (up(il, i) & |
307 |
- u(il, i - 1))) * dpinv |
- u(il, i - 1))) * dpinv |
308 |
fv(il, i) = fv(il, i) + 0.01 * grav * (mp(il, i + 1) & |
fv(il, i) = fv(il, i) + 0.01 * rg * (mp(il, i + 1) & |
309 |
* (vp(il, i + 1) - v(il, i)) - mp(il, i) * (vp(il, i) & |
* (vp(il, i + 1) - v(il, i)) - mp(il, i) * (vp(il, i) & |
310 |
- v(il, i - 1))) * dpinv |
- v(il, i - 1))) * dpinv |
311 |
endif |
endif |
339 |
end if |
end if |
340 |
end do loop_i |
end do loop_i |
341 |
|
|
342 |
! move the detrainment at level inb down to level inb - 1 |
! move the detrainment at level inb down to level inb - 1 |
343 |
! in such a way as to preserve the vertically |
! in such a way as to preserve the vertically |
344 |
! integrated enthalpy and water tendencies |
! integrated enthalpy and water tendencies |
345 |
|
|
346 |
do il = 1, ncum |
do il = 1, ncum |
347 |
ax = 0.1 * ment(il, inb(il), inb(il)) * (hp(il, inb(il)) & |
ax = 0.1 * ment(il, inb(il), inb(il)) * (hp(il, inb(il)) & |
348 |
- h(il, inb(il)) + t(il, inb(il)) * (cpv - cpd) & |
- h(il, inb(il)) + t(il, inb(il)) * (rcpv - rcpd) & |
349 |
* (rr(il, inb(il)) - qent(il, inb(il), inb(il)))) & |
* (rr(il, inb(il)) - qent(il, inb(il), inb(il)))) & |
350 |
/ (cpn(il, inb(il)) * (ph(il, inb(il)) - ph(il, inb(il) + 1))) |
/ (cpn(il, inb(il)) * (ph(il, inb(il)) - ph(il, inb(il) + 1))) |
351 |
ft(il, inb(il)) = ft(il, inb(il)) - ax |
ft(il, inb(il)) = ft(il, inb(il)) - ax |
376 |
|
|
377 |
end do |
end do |
378 |
|
|
379 |
! homoginize tendencies below cloud base |
! homoginize tendencies below cloud base |
380 |
|
|
381 |
do il = 1, ncum |
do il = 1, ncum |
382 |
asum(il) = 0.0 |
asum(il) = 0.0 |
389 |
do il = 1, ncum |
do il = 1, ncum |
390 |
if (i <= (icb(il) - 1)) then |
if (i <= (icb(il) - 1)) then |
391 |
asum(il) = asum(il) + ft(il, i) * (ph(il, i) - ph(il, i + 1)) |
asum(il) = asum(il) + ft(il, i) * (ph(il, i) - ph(il, i + 1)) |
392 |
bsum(il) = bsum(il) + fr(il, i) * (lv(il, i) + (cl - cpd) & |
bsum(il) = bsum(il) + fr(il, i) * (lv(il, i) + (rcw - rcpd) & |
393 |
* (t(il, i) - t(il, 1))) * (ph(il, i) - ph(il, i + 1)) |
* (t(il, i) - t(il, 1))) * (ph(il, i) - ph(il, i + 1)) |
394 |
csum(il) = csum(il) + (lv(il, i) + (cl - cpd) * (t(il, i) & |
csum(il) = csum(il) + (lv(il, i) + (rcw - rcpd) * (t(il, i) & |
395 |
- t(il, 1))) * (ph(il, i) - ph(il, i + 1)) |
- t(il, 1))) * (ph(il, i) - ph(il, i + 1)) |
396 |
dsum(il) = dsum(il) + t(il, i) * (ph(il, i) - ph(il, i + 1)) & |
dsum(il) = dsum(il) + t(il, i) * (ph(il, i) - ph(il, i + 1)) & |
397 |
/ th(il, i) |
/ th(il, i) |
408 |
enddo |
enddo |
409 |
enddo |
enddo |
410 |
|
|
411 |
! reset counter and return |
! reset counter and return |
412 |
|
|
413 |
do il = 1, ncum |
do il = 1, ncum |
414 |
sig(il, klev) = 2.0 |
sig(il, klev) = 2.0 |
474 |
enddo |
enddo |
475 |
enddo |
enddo |
476 |
|
|
477 |
!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
! D\'etermination de la variation de flux ascendant entre |
478 |
! determination de la variation de flux ascendant entre |
! deux niveaux non dilu\'es mike |
|
! deux niveau non dilue mike |
|
|
!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
|
479 |
|
|
480 |
do i = 1, nl |
do i = 1, nl |
481 |
do il = 1, ncum |
do il = 1, ncum |
517 |
enddo |
enddo |
518 |
enddo |
enddo |
519 |
|
|
520 |
!cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
! icb repr\'esente le niveau o\`u se trouve la base du nuage, et |
521 |
! icb represente de niveau ou se trouve la |
! inb le sommet du nuage |
|
! base du nuage, et inb le top du nuage |
|
|
!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
|
522 |
|
|
523 |
do i = 1, klev |
do i = 1, klev |
524 |
DO il = 1, ncum |
DO il = 1, ncum |
525 |
rdcp = (rrd * (1. - rr(il, i)) - rr(il, i) * rrv) & |
rdcp = (rd * (1. - rr(il, i)) - rr(il, i) * rv) & |
526 |
/ (cpd * (1. - rr(il, i)) + rr(il, i) * cpv) |
/ (rcpd * (1. - rr(il, i)) + rr(il, i) * rcpv) |
527 |
tls(il, i) = t(il, i) * (1000.0 / p(il, i))**rdcp |
tls(il, i) = t(il, i) * (1000.0 / p(il, i))**rdcp |
528 |
tps(il, i) = tp(il, i) |
tps(il, i) = tp(il, i) |
529 |
end DO |
end DO |
530 |
enddo |
enddo |
531 |
|
|
532 |
! diagnose the in-cloud mixing ratio |
! Diagnose the in-cloud mixing ratio of condensed water |
|
! of condensed water |
|
|
! |
|
533 |
|
|
534 |
do i = 1, klev |
do i = 1, klev |
535 |
do il = 1, ncum |
do il = 1, ncum |
555 |
do il = 1, ncum |
do il = 1, ncum |
556 |
if (i >= icb(il) .and. i <= (inb(il) - 1) & |
if (i >= icb(il) .and. i <= (inb(il) - 1) & |
557 |
.and. j >= icb(il)) then |
.and. j >= icb(il)) then |
558 |
sax(il, i) = sax(il, i) + rrd * (tvp(il, j) - tv(il, j)) & |
sax(il, i) = sax(il, i) + rd * (tvp(il, j) - tv(il, j)) & |
559 |
* (ph(il, j) - ph(il, j + 1)) / p(il, j) |
* (ph(il, j) - ph(il, j + 1)) / p(il, j) |
560 |
endif |
endif |
561 |
enddo |
enddo |
573 |
|
|
574 |
do i = 1, nl |
do i = 1, nl |
575 |
do il = 1, ncum |
do il = 1, ncum |
576 |
if (wa(il, i) > 0.0) siga(il, i) = mac(il, i) / wa(il, i) * rrd & |
if (wa(il, i) > 0.0) siga(il, i) = mac(il, i) / wa(il, i) * rd & |
577 |
* tvp(il, i) / p(il, i) / 100. / delta |
* tvp(il, i) / p(il, i) / 100. / delta |
578 |
siga(il, i) = min(siga(il, i), 1.0) |
siga(il, i) = min(siga(il, i), 1.0) |
579 |
|
|