8 |
q_seri, d_u_ajs, d_v_ajs, d_t_ajs, d_q_ajs, fm_therm, entr_therm) |
q_seri, d_u_ajs, d_v_ajs, d_t_ajs, d_q_ajs, fm_therm, entr_therm) |
9 |
|
|
10 |
! From LMDZ4/libf/phylmd/calltherm.F, version 1.2 2004/12/10 11:27:46 |
! From LMDZ4/libf/phylmd/calltherm.F, version 1.2 2004/12/10 11:27:46 |
11 |
|
! Thermiques |
12 |
|
|
13 |
USE dimphy, ONLY: klev, klon |
USE dimphy, ONLY: klev, klon |
14 |
USE ctherm, ONLY: l_mix_thermals, nsplit_thermals, r_aspect_thermals, & |
USE ctherm, ONLY: l_mix_thermals, nsplit_thermals, r_aspect_thermals, & |
15 |
tho_thermals, w2di_thermals |
tho_thermals, w2di_thermals |
16 |
|
use thermcell_m, only: thermcell |
17 |
|
|
18 |
REAL, intent(in):: dtime |
REAL, intent(in):: dtime |
|
|
|
|
REAL u_seri(klon, klev), v_seri(klon, klev) |
|
|
REAL, intent(inout):: t_seri(klon, klev) |
|
|
real q_seri(klon, klev) |
|
|
REAL, intent(in):: paprs(klon, klev+1) |
|
19 |
REAL, intent(in):: pplay(klon, klev) |
REAL, intent(in):: pplay(klon, klev) |
20 |
|
REAL, intent(in):: paprs(klon, klev+1) |
21 |
REAL, intent(in):: pphi(klon, klev) |
REAL, intent(in):: pphi(klon, klev) |
22 |
|
REAL, intent(inout):: u_seri(klon, klev), v_seri(klon, klev) |
23 |
|
REAL, intent(inout):: t_seri(klon, klev) |
24 |
|
real, intent(inout):: q_seri(klon, klev) |
25 |
|
|
26 |
! Update thermiques |
! Update thermiques |
|
REAL d_t_ajs(klon, klev), d_q_ajs(klon, klev) |
|
27 |
REAL d_u_ajs(klon, klev), d_v_ajs(klon, klev) |
REAL d_u_ajs(klon, klev), d_v_ajs(klon, klev) |
28 |
|
REAL d_t_ajs(klon, klev), d_q_ajs(klon, klev) |
29 |
real fm_therm(klon, klev+1), entr_therm(klon, klev) |
real fm_therm(klon, klev+1), entr_therm(klon, klev) |
30 |
|
|
31 |
! Variables locales |
! Local: |
32 |
|
|
33 |
REAL d_t_the(klon, klev), d_q_the(klon, klev) |
REAL d_t_the(klon, klev), d_q_the(klon, klev) |
34 |
REAL d_u_the(klon, klev), d_v_the(klon, klev) |
REAL d_u_the(klon, klev), d_v_the(klon, klev) |
35 |
! |
|
36 |
real, save:: zfm_therm(klon, klev+1), zentr_therm(klon, klev) |
real, save:: zfm_therm(klon, klev+1), zentr_therm(klon, klev) |
37 |
real zdt |
real zdt |
38 |
|
|
49 |
! tests sur les valeurs negatives de l'eau |
! tests sur les valeurs negatives de l'eau |
50 |
do k=1, klev |
do k=1, klev |
51 |
do i=1, klon |
do i=1, klon |
52 |
if (.not.q_seri(i, k).ge.0.) then |
if (.not.q_seri(i, k) >= 0.) then |
53 |
print*, 'WARN eau<0 avant therm i=', i, ' k=', k, ' dq, q', & |
print*, 'WARN eau<0 avant therm i=', i, ' k=', k, ' dq, q', & |
54 |
d_q_the(i, k), q_seri(i, k) |
d_q_the(i, k), q_seri(i, k) |
55 |
q_seri(i, k)=1.e-15 |
q_seri(i, k)=1.e-15 |
57 |
enddo |
enddo |
58 |
enddo |
enddo |
59 |
|
|
60 |
zdt=dtime/float(nsplit_thermals) |
zdt=dtime/real(nsplit_thermals) |
61 |
do isplit = 1, nsplit_thermals |
do isplit = 1, nsplit_thermals |
62 |
CALL thermcell(klon, klev, zdt, pplay, paprs, pphi, u_seri, v_seri, & |
CALL thermcell(klon, klev, zdt, pplay, paprs, pphi, u_seri, v_seri, & |
63 |
t_seri, q_seri, d_u_the, d_v_the, d_t_the, d_q_the, zfm_therm, & |
t_seri, q_seri, d_u_the, d_v_the, d_t_the, d_q_the, zfm_therm, & |
65 |
tho_thermals) |
tho_thermals) |
66 |
|
|
67 |
! transformation de la derivee en tendance |
! transformation de la derivee en tendance |
68 |
d_t_the=d_t_the*dtime/float(nsplit_thermals) |
d_t_the=d_t_the*dtime/real(nsplit_thermals) |
69 |
d_u_the=d_u_the*dtime/float(nsplit_thermals) |
d_u_the=d_u_the*dtime/real(nsplit_thermals) |
70 |
d_v_the=d_v_the*dtime/float(nsplit_thermals) |
d_v_the=d_v_the*dtime/real(nsplit_thermals) |
71 |
d_q_the=d_q_the*dtime/float(nsplit_thermals) |
d_q_the=d_q_the*dtime/real(nsplit_thermals) |
72 |
fm_therm=fm_therm +zfm_therm/float(nsplit_thermals) |
fm_therm=fm_therm +zfm_therm/real(nsplit_thermals) |
73 |
entr_therm=entr_therm +zentr_therm/float(nsplit_thermals) |
entr_therm=entr_therm +zentr_therm/real(nsplit_thermals) |
74 |
fm_therm(:, klev+1)=0. |
fm_therm(:, klev+1)=0. |
75 |
|
|
76 |
! accumulation de la tendance |
! accumulation de la tendance |
88 |
! tests sur les valeurs negatives de l'eau |
! tests sur les valeurs negatives de l'eau |
89 |
DO k = 1, klev |
DO k = 1, klev |
90 |
DO i = 1, klon |
DO i = 1, klon |
91 |
if (.not.q_seri(i, k).ge.0.) then |
if (.not.q_seri(i, k) >= 0.) then |
92 |
print*, 'WARN eau<0 apres therm i=', i, ' k=', k, ' dq, q', & |
print*, 'WARN eau<0 apres therm i=', i, ' k=', k, ' dq, q', & |
93 |
d_q_the(i, k), q_seri(i, k) |
d_q_the(i, k), q_seri(i, k) |
94 |
q_seri(i, k)=1.e-15 |
q_seri(i, k)=1.e-15 |