4 |
|
|
5 |
contains |
contains |
6 |
|
|
7 |
SUBROUTINE cv30_mixing(icb, nk, inb, t, rr, rs, u, v, h, lv, hp, ep, clw, & |
SUBROUTINE cv30_mixing(icb, inb, t, rr, rs, u, v, h, lv, hp, ep, clw, m, & |
8 |
m, sig, ment, qent, uent, vent, nent, sij, elij, ments, qents) |
sig, ment, qent, uent, vent, nent, sij, elij, ments, qents) |
9 |
|
|
10 |
! MIXING |
! MIXING |
11 |
|
|
14 |
! - vectorisation de la partie normalisation des flux (do 789) |
! - vectorisation de la partie normalisation des flux (do 789) |
15 |
|
|
16 |
use cv30_param_m, only: minorig, nl |
use cv30_param_m, only: minorig, nl |
|
use cv_thermo_m, only: cpd, cpv, rrv |
|
17 |
USE dimphy, ONLY: klev, klon |
USE dimphy, ONLY: klev, klon |
18 |
|
use suphec_m, only: rcpd, rcpv, rv |
19 |
|
|
20 |
! inputs: |
! inputs: |
21 |
integer, intent(in):: icb(:), nk(:), inb(:) ! (ncum) |
|
22 |
real t(klon, klev), rr(klon, klev), rs(klon, klev) |
integer, intent(in):: icb(:) ! (ncum) {2 <= icb <= nl - 3} |
23 |
|
|
24 |
|
integer, intent(in):: inb(:) ! (ncum) |
25 |
|
! first model level above the level of neutral buoyancy of the |
26 |
|
! parcel (1 <= inb <= nl - 1) |
27 |
|
|
28 |
|
real, intent(in):: t(klon, klev), rr(klon, klev), rs(klon, klev) |
29 |
real u(klon, klev), v(klon, klev) |
real u(klon, klev), v(klon, klev) |
30 |
real h(klon, klev), lv(klon, klev), hp(klon, klev) |
real, intent(in):: h(klon, klev) |
31 |
|
real, intent(in):: lv(:, :) ! (klon, klev) |
32 |
|
real, intent(in):: hp(klon, klev) |
33 |
real ep(klon, klev), clw(klon, klev) |
real ep(klon, klev), clw(klon, klev) |
34 |
real m(klon, klev) ! input of convect3 |
real m(klon, klev) ! input of convect3 |
35 |
real sig(klon, klev) |
real sig(klon, klev) |
37 |
! outputs: |
! outputs: |
38 |
real ment(klon, klev, klev), qent(klon, klev, klev) |
real ment(klon, klev, klev), qent(klon, klev, klev) |
39 |
real uent(klon, klev, klev), vent(klon, klev, klev) |
real uent(klon, klev, klev), vent(klon, klev, klev) |
40 |
integer nent(klon, klev) |
integer, intent(out):: nent(:, 2:) ! (ncum, 2:nl - 1) |
41 |
real sij(klon, klev, klev), elij(klon, klev, klev) |
real sij(klon, klev, klev), elij(klon, klev, klev) |
42 |
real ments(klon, klev, klev), qents(klon, klev, klev) |
real ments(klon, klev, klev), qents(klon, klev, klev) |
43 |
|
|
58 |
|
|
59 |
! INITIALIZE VARIOUS ARRAYS USED IN THE COMPUTATIONS |
! INITIALIZE VARIOUS ARRAYS USED IN THE COMPUTATIONS |
60 |
|
|
61 |
do j = 1, nl |
nent = 0 |
|
do i = 1, ncum |
|
|
nent(i, j) = 0 |
|
|
end do |
|
|
end do |
|
62 |
|
|
63 |
do j = 1, nl |
do j = 1, nl |
64 |
do k = 1, nl |
do k = 1, nl |
88 |
(j >= (icb(il) - 1)).and.(j <= inb(il)))then |
(j >= (icb(il) - 1)).and.(j <= inb(il)))then |
89 |
|
|
90 |
rti = rr(il, 1) - ep(il, i) * clw(il, i) |
rti = rr(il, 1) - ep(il, i) * clw(il, i) |
91 |
bf2 = 1. + lv(il, j) * lv(il, j) * rs(il, j) / (rrv & |
bf2 = 1. + lv(il, j) * lv(il, j) * rs(il, j) / (rv & |
92 |
* t(il, j) * t(il, j) * cpd) |
* t(il, j) * t(il, j) * rcpd) |
93 |
anum = h(il, j) - hp(il, i) + (cpv - cpd) * t(il, j) * (rti & |
anum = h(il, j) - hp(il, i) + (rcpv - rcpd) * t(il, j) * (rti & |
94 |
- rr(il, j)) |
- rr(il, j)) |
95 |
denom = h(il, i) - hp(il, i) + (cpd - cpv) * (rr(il, i) & |
denom = h(il, i) - hp(il, i) + (rcpd - rcpv) * (rr(il, i) & |
96 |
- rti) * t(il, j) |
- rti) * t(il, j) |
97 |
dei = denom |
dei = denom |
98 |
if(abs(dei) < 0.01)dei = 0.01 |
if(abs(dei) < 0.01)dei = 0.01 |
117 |
qent(il, i, j) = sij(il, i, j) * rr(il, i) + (1. & |
qent(il, i, j) = sij(il, i, j) * rr(il, i) + (1. & |
118 |
- sij(il, i, j)) * rti |
- sij(il, i, j)) * rti |
119 |
uent(il, i, j) = sij(il, i, j) * u(il, i) + (1. & |
uent(il, i, j) = sij(il, i, j) * u(il, i) + (1. & |
120 |
- sij(il, i, j)) * u(il, nk(il)) |
- sij(il, i, j)) * u(il, minorig) |
121 |
vent(il, i, j) = sij(il, i, j) * v(il, i) + (1. & |
vent(il, i, j) = sij(il, i, j) * v(il, i) + (1. & |
122 |
- sij(il, i, j)) * v(il, nk(il)) |
- sij(il, i, j)) * v(il, minorig) |
123 |
elij(il, i, j) = altem |
elij(il, i, j) = altem |
124 |
elij(il, i, j) = amax1(0.0, elij(il, i, j)) |
elij(il, i, j) = amax1(0.0, elij(il, i, j)) |
125 |
ment(il, i, j) = m(il, i) / (1. - sij(il, i, j)) |
ment(il, i, j) = m(il, i) / (1. - sij(il, i, j)) |
127 |
end if |
end if |
128 |
sij(il, i, j) = amax1(0.0, sij(il, i, j)) |
sij(il, i, j) = amax1(0.0, sij(il, i, j)) |
129 |
sij(il, i, j) = amin1(1.0, sij(il, i, j)) |
sij(il, i, j) = amin1(1.0, sij(il, i, j)) |
130 |
endif ! new |
endif |
131 |
end do |
end do |
132 |
end do |
end do |
133 |
|
|
135 |
! at that level and calculate detrained air flux and properties |
! at that level and calculate detrained air flux and properties |
136 |
|
|
137 |
do il = 1, ncum |
do il = 1, ncum |
138 |
if ((i >= icb(il)).and.(i <= inb(il)).and.(nent(il, i) == 0)) then |
if (i >= icb(il) .and. i <= inb(il)) then |
139 |
ment(il, i, i) = m(il, i) |
if (nent(il, i) == 0) then |
140 |
qent(il, i, i) = rr(il, nk(il)) - ep(il, i) * clw(il, i) |
ment(il, i, i) = m(il, i) |
141 |
uent(il, i, i) = u(il, nk(il)) |
qent(il, i, i) = rr(il, minorig) - ep(il, i) * clw(il, i) |
142 |
vent(il, i, i) = v(il, nk(il)) |
uent(il, i, i) = u(il, minorig) |
143 |
elij(il, i, i) = clw(il, i) |
vent(il, i, i) = v(il, minorig) |
144 |
sij(il, i, i) = 0.0 |
elij(il, i, i) = clw(il, i) |
145 |
|
sij(il, i, i) = 0.0 |
146 |
|
end if |
147 |
end if |
end if |
148 |
end do |
end do |
149 |
end do |
end do |
171 |
lwork(il) = (nent(il, i) /= 0) |
lwork(il) = (nent(il, i) /= 0) |
172 |
qp = rr(il, 1) - ep(il, i) * clw(il, i) |
qp = rr(il, 1) - ep(il, i) * clw(il, i) |
173 |
anum = h(il, i) - hp(il, i) - lv(il, i) * (qp - rs(il, i)) & |
anum = h(il, i) - hp(il, i) - lv(il, i) * (qp - rs(il, i)) & |
174 |
+ (cpv - cpd) * t(il, i) * (qp - rr(il, i)) |
+ (rcpv - rcpd) * t(il, i) * (qp - rr(il, i)) |
175 |
denom = h(il, i) - hp(il, i) + lv(il, i) * (rr(il, i) - qp) & |
denom = h(il, i) - hp(il, i) + lv(il, i) * (rr(il, i) - qp) & |
176 |
+ (cpd - cpv) * t(il, i) * (rr(il, i) - qp) |
+ (rcpd - rcpv) * t(il, i) * (rr(il, i) - qp) |
177 |
if(abs(denom) < 0.01)denom = 0.01 |
if(abs(denom) < 0.01)denom = 0.01 |
178 |
scrit(il) = anum / denom |
scrit(il) = anum / denom |
179 |
alt = qp - rs(il, i) + scrit(il) * (rr(il, i) - qp) |
alt = qp - rs(il, i) + scrit(il) * (rr(il, i) - qp) |
286 |
nent(il, i) = 0 |
nent(il, i) = 0 |
287 |
ment(il, i, i) = m(il, i) |
ment(il, i, i) = m(il, i) |
288 |
qent(il, i, i) = rr(il, 1) - ep(il, i) * clw(il, i) |
qent(il, i, i) = rr(il, 1) - ep(il, i) * clw(il, i) |
289 |
uent(il, i, i) = u(il, nk(il)) |
uent(il, i, i) = u(il, minorig) |
290 |
vent(il, i, i) = v(il, nk(il)) |
vent(il, i, i) = v(il, minorig) |
291 |
elij(il, i, i) = clw(il, i) |
elij(il, i, i) = clw(il, i) |
292 |
sij(il, i, i) = 0.0 |
sij(il, i, i) = 0.0 |
293 |
endif |
endif |