10 |
! Unsaturated (precipitating) downdrafts |
! Unsaturated (precipitating) downdrafts |
11 |
|
|
12 |
use cv30_param_m, only: nl, sigd |
use cv30_param_m, only: nl, sigd |
13 |
use cv_thermo_m, only: cpd, ginv, grav |
use cv_thermo_m, only: cpd, ginv |
14 |
|
use SUPHEC_M, only: rg |
15 |
|
|
16 |
integer, intent(in):: icb(:) ! (ncum) |
integer, intent(in):: icb(:) ! (ncum) |
17 |
! {2 <= icb <= nl - 3} |
! {2 <= icb <= nl - 3} |
22 |
|
|
23 |
real, intent(in):: t(:, :), q(:, :), qs(:, :) ! (ncum, nl) |
real, intent(in):: t(:, :), q(:, :), qs(:, :) ! (ncum, nl) |
24 |
real, intent(in):: gz(:, :) ! (klon, klev) |
real, intent(in):: gz(:, :) ! (klon, klev) |
25 |
real, intent(in):: u(:, :), v(:, :) ! (klon, klev) |
real, intent(in):: u(:, :), v(:, :) ! (ncum, nl) |
26 |
real, intent(in):: p(:, :) ! (klon, klev) pressure at full level, in hPa |
real, intent(in):: p(:, :) ! (klon, klev) pressure at full level, in hPa |
27 |
real, intent(in):: ph(:, :) ! (ncum, klev + 1) |
real, intent(in):: ph(:, :) ! (ncum, klev + 1) |
28 |
real, intent(in):: th(:, :) ! (ncum, nl - 1) |
real, intent(in):: th(:, :) ! (ncum, nl - 1) |
29 |
real, intent(in):: tv(:, :) ! (klon, klev) |
real, intent(in):: tv(:, :) ! (klon, klev) |
30 |
real, intent(in):: lv(:, :) ! (klon, klev) |
real, intent(in):: lv(:, :) ! (ncum, nl) |
31 |
real, intent(in):: cpn(:, :) ! (klon, klev) |
real, intent(in):: cpn(:, :) ! (klon, klev) |
32 |
real, intent(in):: ep(:, :) ! (ncum, klev) |
real, intent(in):: ep(:, :) ! (ncum, klev) |
33 |
real, intent(in):: clw(:, :) ! (ncum, klev) |
real, intent(in):: clw(:, :) ! (ncum, klev) |
38 |
real, intent(in):: plcl(:) ! (ncum) |
real, intent(in):: plcl(:) ! (ncum) |
39 |
|
|
40 |
real, intent(out):: mp(:, :) ! (klon, klev) |
real, intent(out):: mp(:, :) ! (klon, klev) |
41 |
|
! mass flux of the unsaturated downdraft, defined positive downward |
42 |
|
! M_p in Emanuel (1991 928) |
43 |
|
|
44 |
real, intent(out):: qp(:, :), up(:, :), vp(:, :) ! (ncum, nl) |
real, intent(out):: qp(:, :), up(:, :), vp(:, :) ! (ncum, nl) |
45 |
real, intent(out):: wt(:, :) ! (ncum, nl) |
real, intent(out):: wt(:, :) ! (ncum, nl) |
46 |
real, intent(out):: water(:, :), evap(:, :) ! (ncum, nl) |
|
47 |
|
real, intent(out):: water(:, :) ! (ncum, nl) |
48 |
|
! precipitation mixing ratio, l_p in Emanuel (1991 928) |
49 |
|
|
50 |
|
real, intent(out):: evap(:, :) ! (ncum, nl) |
51 |
|
! sigt * rate of evaporation of precipitation, in s-1 |
52 |
|
! \sigma_s E in Emanuel (1991 928) |
53 |
|
|
54 |
real, intent(out):: b(:, :) ! (ncum, nl - 1) |
real, intent(out):: b(:, :) ! (ncum, nl - 1) |
55 |
|
|
56 |
! Local: |
! Local: |
105 |
! and condensed water flux |
! and condensed water flux |
106 |
|
|
107 |
! Calculate detrained precipitation |
! Calculate detrained precipitation |
108 |
forall (il = 1:ncum, inb(il) >= i .and. lwork(il)) wdtrain(il) = grav & |
forall (il = 1:ncum, inb(il) >= i .and. lwork(il)) wdtrain(il) = rg & |
109 |
* (ep(il, i) * m(il, i) * clw(il, i) & |
* (ep(il, i) * m(il, i) * clw(il, i) & |
110 |
+ sum(max(elij(il, :i - 1, i) - (1. - ep(il, i)) * clw(il, i), 0.) & |
+ sum(max(elij(il, :i - 1, i) - (1. - ep(il, i)) * clw(il, i), 0.) & |
111 |
* ment(il, :i - 1, i))) |
* ment(il, :i - 1, i))) |
223 |
|
|
224 |
mp(il, i) = max(0., mp(il, i)) |
mp(il, i) = max(0., mp(il, i)) |
225 |
|
|
226 |
! Il y a vraisemblablement une erreur dans la |
! Il y a vraisemblablement une erreur dans la ligne |
227 |
! ligne suivante : il faut diviser par (mp(il, |
! suivante : il faut diviser par (mp(il, i) * sigd |
228 |
! i) * sigd * grav) et non par (mp(il, i) + sigd |
! * rg) et non par (mp(il, i) + sigd * 0.1). Et il |
229 |
! * 0.1). Et il faut bien revoir les facteurs |
! faut bien revoir les facteurs 100. |
|
! 100. |
|
230 |
b(il, i - 1) = b(il, i) + 100. * (p(il, i - 1) - p(il, i)) & |
b(il, i - 1) = b(il, i) + 100. * (p(il, i - 1) - p(il, i)) & |
231 |
* tevap / (mp(il, i) + sigd * 0.1) - 10. * (th(il, i) & |
* tevap / (mp(il, i) + sigd * 0.1) - 10. * (th(il, i) & |
232 |
- th(il, i - 1)) * t(il, i) / (lvcp(il, i) * sigd & |
- th(il, i - 1)) * t(il, i) / (lvcp(il, i) * sigd & |