21 |
! inputs: |
! inputs: |
22 |
integer, intent(in):: icb(:), inb(:) ! (ncum) |
integer, intent(in):: icb(:), inb(:) ! (ncum) |
23 |
real, intent(in):: delt |
real, intent(in):: delt |
24 |
real t(klon, klev), rr(klon, klev), u(klon, klev), v(klon, klev) |
real, intent(in):: t(klon, klev), rr(klon, klev) |
25 |
|
real, intent(in):: u(klon, klev), v(klon, klev) |
26 |
real gz(klon, klev) |
real gz(klon, klev) |
27 |
real p(klon, klev) |
real p(klon, klev) |
28 |
real ph(klon, klev + 1), h(klon, klev), hp(klon, klev) |
real ph(klon, klev + 1), h(klon, klev), hp(klon, klev) |
43 |
real sig(klon, klev) |
real sig(klon, klev) |
44 |
real tv(klon, klev), tvp(klon, klev) |
real tv(klon, klev), tvp(klon, klev) |
45 |
|
|
|
integer, intent(out):: iflag(:) ! (ncum) |
|
|
|
|
46 |
! outputs: |
! outputs: |
47 |
|
integer, intent(out):: iflag(:) ! (ncum) |
48 |
real precip(klon) |
real precip(klon) |
49 |
real VPrecip(klon, klev + 1) |
real VPrecip(klon, klev + 1) |
50 |
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) |
58 |
! Local: |
! Local: |
59 |
real, parameter:: delta = 0.01 ! interface cloud parameterization |
real, parameter:: delta = 0.01 ! interface cloud parameterization |
60 |
integer ncum |
integer ncum |
61 |
integer i, k, il, n, j, num1 |
integer i, k, il, n, j |
62 |
real rat, awat, delti |
real awat, delti |
63 |
real ax, bx, cx, dx |
real ax, bx, cx, dx |
64 |
real cpinv, rdcp, dpinv |
real cpinv, rdcp, dpinv |
65 |
real lvcp(klon, klev) |
real lvcp(klon, klev) |
102 |
enddo |
enddo |
103 |
enddo |
enddo |
104 |
|
|
105 |
! calculate surface precipitation in mm / day |
! calculate surface precipitation in mm / day |
106 |
|
|
107 |
do il = 1, ncum |
do il = 1, ncum |
108 |
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 & |
119 |
end do |
end do |
120 |
end do |
end do |
121 |
|
|
122 |
! calculate tendencies of lowest level potential temperature |
! calculate tendencies of lowest level potential temperature |
123 |
! and mixing ratio |
! and mixing ratio |
124 |
|
|
125 |
do il = 1, ncum |
do il = 1, ncum |
126 |
work(il) = 1.0 / (ph(il, 1) - ph(il, 2)) |
work(il) = 1.0 / (ph(il, 1) - ph(il, 2)) |
134 |
enddo |
enddo |
135 |
|
|
136 |
do il = 1, ncum |
do il = 1, ncum |
|
! Consist vect: |
|
137 |
if (0.01 * rg * work(il) * am(il) >= delti) iflag(il) = 1 |
if (0.01 * rg * work(il) * am(il) >= delti) iflag(il) = 1 |
138 |
|
|
139 |
ft(il, 1) = 0.01 * rg * work(il) * am(il) * (t(il, 2) - t(il, 1) & |
ft(il, 1) = 0.01 * rg * work(il) * am(il) * (t(il, 2) - t(il, 1) & |
140 |
+ (gz(il, 2) - gz(il, 1)) / cpn(il, 1)) |
+ (gz(il, 2) - gz(il, 1)) / cpn(il, 1)) - 0.5 * lvcp(il, 1) & |
141 |
|
* sigd * (evap(il, 1) + evap(il, 2)) - 0.009 * rg * sigd & |
142 |
ft(il, 1) = ft(il, 1) - 0.5 * lvcp(il, 1) * sigd * (evap(il, 1) & |
* mp(il, 2) * t(il, 1) * b(il, 1) * work(il) + 0.01 * sigd & |
143 |
+ evap(il, 2)) |
* wt(il, 1) * (cl - cpd) * water(il, 2) * (t(il, 2) - t(il, 1)) & |
144 |
|
* work(il) / cpn(il, 1) |
|
ft(il, 1) = ft(il, 1) - 0.009 * rg * sigd * mp(il, 2) & |
|
|
* t(il, 1) * b(il, 1) * work(il) |
|
|
|
|
|
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) |
|
145 |
|
|
146 |
!jyg1 Correction pour mieux conserver l'eau (conformite avec CONVECT4.3) |
!jyg1 Correction pour mieux conserver l'eau (conformite avec CONVECT4.3) |
147 |
! (sb: pour l'instant, on ne fait que le chgt concernant rg, pas evap) |
! (sb: pour l'instant, on ne fait que le chgt concernant rg, pas evap) |
156 |
* (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))) |
157 |
fv(il, 1) = fv(il, 1) + 0.01 * rg * work(il) * (mp(il, 2) & |
fv(il, 1) = fv(il, 1) + 0.01 * rg * work(il) * (mp(il, 2) & |
158 |
* (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))) |
159 |
enddo ! il |
enddo |
160 |
|
|
161 |
do j = 2, nl |
do j = 2, nl |
162 |
do il = 1, ncum |
do il = 1, ncum |
171 |
enddo |
enddo |
172 |
enddo |
enddo |
173 |
|
|
174 |
! calculate tendencies of potential temperature and mixing ratio |
! calculate tendencies of potential temperature and mixing ratio |
175 |
! at levels above the lowest level |
! at levels above the lowest level |
176 |
|
|
177 |
! first find the net saturated updraft and downdraft mass fluxes |
! first find the net saturated updraft and downdraft mass fluxes |
178 |
! through each level |
! through each level |
179 |
|
|
180 |
loop_i: do i = 2, nl - 1 |
loop_i: do i = 2, nl - 1 |
181 |
num1 = 0 |
if (any(inb >= i)) then |
|
|
|
|
do il = 1, ncum |
|
|
if (i <= inb(il)) num1 = num1 + 1 |
|
|
enddo |
|
|
|
|
|
if (num1 > 0) then |
|
182 |
amp1(:ncum) = 0. |
amp1(:ncum) = 0. |
183 |
ad(:ncum) = 0. |
ad(:ncum) = 0. |
184 |
|
|
215 |
dpinv = 1.0 / (ph(il, i) - ph(il, i + 1)) |
dpinv = 1.0 / (ph(il, i) - ph(il, i + 1)) |
216 |
cpinv = 1.0 / cpn(il, i) |
cpinv = 1.0 / cpn(il, i) |
217 |
|
|
|
! Vecto: |
|
218 |
if (0.01 * rg * dpinv * amp1(il) >= delti) iflag(il) = 1 |
if (0.01 * rg * dpinv * amp1(il) >= delti) iflag(il) = 1 |
219 |
|
|
220 |
ft(il, i) = 0.01 * rg * dpinv * (amp1(il) * (t(il, i + 1) & |
ft(il, i) = 0.01 * rg * dpinv * (amp1(il) * (t(il, i + 1) & |
221 |
- t(il, i) + (gz(il, i + 1) - gz(il, i)) * cpinv) & |
- t(il, i) + (gz(il, i + 1) - gz(il, i)) * cpinv) & |
222 |
- ad(il) * (t(il, i) - t(il, i - 1) + (gz(il, i) & |
- ad(il) * (t(il, i) - t(il, i - 1) + (gz(il, i) & |
223 |
- gz(il, i - 1)) * cpinv)) - 0.5 * sigd * lvcp(il, i) & |
- gz(il, i - 1)) * cpinv)) - 0.5 * sigd * lvcp(il, i) & |
224 |
* (evap(il, i) + evap(il, i + 1)) |
* (evap(il, i) + evap(il, i + 1)) - 0.009 * rg * sigd & |
225 |
rat = cpn(il, i - 1) * cpinv |
* (mp(il, i + 1) * t(il, i) * b(il, i) - mp(il, i) & |
226 |
ft(il, i) = ft(il, i) - 0.009 * rg * sigd * (mp(il, i + 1) & |
* t(il, i - 1) * cpn(il, i - 1) * cpinv * b(il, i - 1)) & |
227 |
* t(il, i) * b(il, i) - mp(il, i) * t(il, i - 1) * rat & |
* dpinv + 0.01 * rg * dpinv * ment(il, i, i) & |
|
* b(il, i - 1)) * dpinv |
|
|
ft(il, i) = ft(il, i) + 0.01 * rg * dpinv * ment(il, i, i) & |
|
228 |
* (hp(il, i) - h(il, i) + t(il, i) * (cpv - cpd) & |
* (hp(il, i) - h(il, i) + t(il, i) * (cpv - cpd) & |
229 |
* (rr(il, i) - qent(il, i, i))) * cpinv |
* (rr(il, i) - qent(il, i, i))) * cpinv + 0.01 * sigd & |
230 |
|
* wt(il, i) * (cl - cpd) * water(il, i + 1) & |
231 |
ft(il, i) = ft(il, i) + 0.01 * sigd * wt(il, i) * (cl - cpd) & |
* (t(il, i + 1) - t(il, i)) * dpinv * cpinv |
|
* water(il, i + 1) * (t(il, i + 1) - t(il, i)) * dpinv & |
|
|
* cpinv |
|
|
|
|
232 |
fr(il, i) = 0.01 * rg * dpinv * (amp1(il) * (rr(il, i + 1) & |
fr(il, i) = 0.01 * rg * dpinv * (amp1(il) * (rr(il, i + 1) & |
233 |
- rr(il, i)) - ad(il) * (rr(il, i) - rr(il, i - 1))) |
- rr(il, i)) - ad(il) * (rr(il, i) - rr(il, i - 1))) |
234 |
fu(il, i) = fu(il, i) + 0.01 * rg * dpinv * (amp1(il) & |
fu(il, i) = fu(il, i) + 0.01 * rg * dpinv * (amp1(il) & |
328 |
end if |
end if |
329 |
end do loop_i |
end do loop_i |
330 |
|
|
331 |
! move the detrainment at level inb down to level inb - 1 |
! move the detrainment at level inb down to level inb - 1 |
332 |
! in such a way as to preserve the vertically |
! in such a way as to preserve the vertically |
333 |
! integrated enthalpy and water tendencies |
! integrated enthalpy and water tendencies |
334 |
|
|
335 |
do il = 1, ncum |
do il = 1, ncum |
336 |
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)) & |
365 |
|
|
366 |
end do |
end do |
367 |
|
|
368 |
! homoginize tendencies below cloud base |
! homoginize tendencies below cloud base |
369 |
|
|
370 |
do il = 1, ncum |
do il = 1, ncum |
371 |
asum(il) = 0.0 |
asum(il) = 0.0 |
397 |
enddo |
enddo |
398 |
enddo |
enddo |
399 |
|
|
400 |
! reset counter and return |
! reset counter and return |
401 |
|
|
402 |
do il = 1, ncum |
do il = 1, ncum |
403 |
sig(il, klev) = 2.0 |
sig(il, klev) = 2.0 |
463 |
enddo |
enddo |
464 |
enddo |
enddo |
465 |
|
|
466 |
!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
! D\'etermination de la variation de flux ascendant entre |
467 |
! determination de la variation de flux ascendant entre |
! deux niveaux non dilu\'es mike |
|
! deux niveau non dilue mike |
|
|
!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
|
468 |
|
|
469 |
do i = 1, nl |
do i = 1, nl |
470 |
do il = 1, ncum |
do il = 1, ncum |
506 |
enddo |
enddo |
507 |
enddo |
enddo |
508 |
|
|
509 |
!cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
! icb repr\'esente le niveau o\`u se trouve la base du nuage, et |
510 |
! icb represente de niveau ou se trouve la |
! inb le sommet du nuage |
|
! base du nuage, et inb le top du nuage |
|
|
!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
|
511 |
|
|
512 |
do i = 1, klev |
do i = 1, klev |
513 |
DO il = 1, ncum |
DO il = 1, ncum |
518 |
end DO |
end DO |
519 |
enddo |
enddo |
520 |
|
|
521 |
! diagnose the in-cloud mixing ratio |
! Diagnose the in-cloud mixing ratio of condensed water |
|
! of condensed water |
|
|
! |
|
522 |
|
|
523 |
do i = 1, klev |
do i = 1, klev |
524 |
do il = 1, ncum |
do il = 1, ncum |