4 |
|
|
5 |
contains |
contains |
6 |
|
|
7 |
SUBROUTINE cv30_undilute2(icb, icbs, nk, tnk, qnk, gznk, t, qs, gz, p, h, & |
SUBROUTINE cv30_undilute2(icb, icbs, tnk, qnk, gznk, t, qs, gz, p, h, tv, & |
8 |
tv, lv, pbase, buoybase, plcl, inb, tp, tvp, clw, hp, ep, buoy) |
lv, pbase, buoybase, plcl, inb, tp, tvp, clw, hp, ep, buoy) |
9 |
|
|
10 |
! Undilute (adiabatic) updraft, second part. Purpose: find the |
! Undilute (adiabatic) updraft, second part. Purpose: find the |
11 |
! rest of the lifted parcel temperatures; compute the |
! rest of the lifted parcel temperatures; compute the |
16 |
|
|
17 |
use conema3_m, only: epmax |
use conema3_m, only: epmax |
18 |
use cv30_param_m, only: minorig, nl |
use cv30_param_m, only: minorig, nl |
19 |
use cv_thermo_m, only: cl, clmcpv, cpd, cpv, eps, lv0, rrv |
use cv_thermo_m, only: cl, clmcpv, cpd, cpv, eps, rrv |
20 |
USE dimphy, ONLY: klon, klev |
USE dimphy, ONLY: klon, klev |
21 |
|
use SUPHEC_M, only: rlvtt |
22 |
|
|
23 |
integer, intent(in):: icb(:), icbs(:) ! (ncum) |
integer, intent(in):: icb(:), icbs(:) ! (ncum) |
24 |
! icbs is the first level above LCL (may differ from icb) |
! icbs is the first level above LCL (may differ from icb) |
25 |
|
|
26 |
integer, intent(in):: nk(klon) |
real, intent(in):: tnk(:), qnk(:), gznk(:) ! (klon) |
|
real, intent(in):: tnk(klon), qnk(klon), gznk(klon) |
|
27 |
real, intent(in):: t(klon, klev), qs(klon, klev), gz(klon, klev) |
real, intent(in):: t(klon, klev), qs(klon, klev), gz(klon, klev) |
28 |
real, intent(in):: p(klon, klev), h(klon, klev) |
real, intent(in):: p(klon, klev), h(klon, klev) |
29 |
real, intent(in):: tv(klon, klev), lv(klon, klev) |
real, intent(in):: tv(klon, klev), lv(klon, klev) |
79 |
|
|
80 |
do i = 1, ncum |
do i = 1, ncum |
81 |
ah0(i) = (cpd * (1. - qnk(i)) + cl * qnk(i)) * tnk(i) & |
ah0(i) = (cpd * (1. - qnk(i)) + cl * qnk(i)) * tnk(i) & |
82 |
+ qnk(i) * (lv0 - clmcpv * (tnk(i) - 273.15)) + gznk(i) |
+ qnk(i) * (rlvtt - clmcpv * (tnk(i) - 273.15)) + gznk(i) |
83 |
end do |
end do |
84 |
|
|
85 |
! Find lifted parcel quantities above cloud base |
! Find lifted parcel quantities above cloud base |
89 |
if (k >= (icbs(i) + 1)) then |
if (k >= (icbs(i) + 1)) then |
90 |
tg = t(i, k) |
tg = t(i, k) |
91 |
qg = qs(i, k) |
qg = qs(i, k) |
92 |
alv = lv0 - clmcpv * (t(i, k) - 273.15) |
alv = rlvtt - clmcpv * (t(i, k) - 273.15) |
93 |
|
|
94 |
! First iteration. |
! First iteration. |
95 |
|
|
121 |
|
|
122 |
qg = eps * es / (p(i, k) - es * (1. - eps)) |
qg = eps * es / (p(i, k) - es * (1. - eps)) |
123 |
|
|
124 |
alv = lv0 - clmcpv * (t(i, k) - 273.15) |
alv = rlvtt - clmcpv * (t(i, k) - 273.15) |
125 |
|
|
126 |
! no approximation: |
! no approximation: |
127 |
tp(i, k) = (ah0(i) - gz(i, k) - alv * qg) & |
tp(i, k) = (ah0(i) - gz(i, k) - alv * qg) & |
197 |
|
|
198 |
do k = minorig + 1, nl |
do k = minorig + 1, nl |
199 |
do i = 1, ncum |
do i = 1, ncum |
200 |
if (k >= icb(i) .and. k <= inb(i)) hp(i, k) = h(i, nk(i)) & |
if (k >= icb(i) .and. k <= inb(i)) hp(i, k) = h(i, minorig) & |
201 |
+ (lv(i, k) + (cpd - cpv) * t(i, k)) * ep(i, k) * clw(i, k) |
+ (lv(i, k) + (cpd - cpv) * t(i, k)) * ep(i, k) * clw(i, k) |
202 |
end do |
end do |
203 |
end do |
end do |