1 |
guez |
52 |
module calltherm_m |
2 |
guez |
3 |
|
3 |
guez |
52 |
implicit none |
4 |
guez |
3 |
|
5 |
guez |
52 |
contains |
6 |
guez |
3 |
|
7 |
guez |
52 |
subroutine calltherm(dtime, pplay, paprs, pphi, u_seri, v_seri, t_seri, & |
8 |
|
|
q_seri, d_u_ajs, d_v_ajs, d_t_ajs, d_q_ajs, fm_therm, entr_therm) |
9 |
guez |
3 |
|
10 |
guez |
52 |
! From LMDZ4/libf/phylmd/calltherm.F, version 1.2 2004/12/10 11:27:46 |
11 |
guez |
200 |
! Thermiques |
12 |
guez |
3 |
|
13 |
guez |
52 |
USE dimphy, ONLY: klev, klon |
14 |
|
|
USE ctherm, ONLY: l_mix_thermals, nsplit_thermals, r_aspect_thermals, & |
15 |
|
|
tho_thermals, w2di_thermals |
16 |
guez |
54 |
use thermcell_m, only: thermcell |
17 |
guez |
3 |
|
18 |
guez |
52 |
REAL, intent(in):: dtime |
19 |
guez |
200 |
REAL, intent(in):: pplay(klon, klev) |
20 |
|
|
REAL, intent(in):: paprs(klon, klev+1) |
21 |
|
|
REAL, intent(in):: pphi(klon, klev) |
22 |
guez |
91 |
REAL, intent(inout):: u_seri(klon, klev), v_seri(klon, klev) |
23 |
guez |
52 |
REAL, intent(inout):: t_seri(klon, klev) |
24 |
guez |
200 |
real, intent(inout):: q_seri(klon, klev) |
25 |
guez |
3 |
|
26 |
guez |
52 |
! Update thermiques |
27 |
guez |
200 |
REAL d_u_ajs(klon, klev), d_v_ajs(klon, klev) |
28 |
guez |
52 |
REAL d_t_ajs(klon, klev), d_q_ajs(klon, klev) |
29 |
|
|
real fm_therm(klon, klev+1), entr_therm(klon, klev) |
30 |
guez |
3 |
|
31 |
guez |
200 |
! Local: |
32 |
|
|
|
33 |
guez |
52 |
REAL d_t_the(klon, klev), d_q_the(klon, klev) |
34 |
|
|
REAL d_u_the(klon, klev), d_v_the(klon, klev) |
35 |
guez |
200 |
|
36 |
guez |
52 |
real, save:: zfm_therm(klon, klev+1), zentr_therm(klon, klev) |
37 |
|
|
real zdt |
38 |
guez |
3 |
|
39 |
guez |
52 |
integer i, k, isplit |
40 |
guez |
3 |
|
41 |
guez |
52 |
!---------------------------------------------------------------- |
42 |
guez |
3 |
|
43 |
guez |
52 |
! Modele du thermique |
44 |
|
|
print*, 'avant isplit ', nsplit_thermals |
45 |
guez |
3 |
|
46 |
guez |
52 |
fm_therm=0. |
47 |
|
|
entr_therm=0. |
48 |
guez |
3 |
|
49 |
guez |
52 |
! tests sur les valeurs negatives de l'eau |
50 |
|
|
do k=1, klev |
51 |
|
|
do i=1, klon |
52 |
guez |
200 |
if (.not.q_seri(i, k) >= 0.) then |
53 |
guez |
52 |
print*, 'WARN eau<0 avant therm i=', i, ' k=', k, ' dq, q', & |
54 |
|
|
d_q_the(i, k), q_seri(i, k) |
55 |
|
|
q_seri(i, k)=1.e-15 |
56 |
|
|
endif |
57 |
|
|
enddo |
58 |
|
|
enddo |
59 |
guez |
3 |
|
60 |
guez |
208 |
zdt=dtime/real(nsplit_thermals) |
61 |
guez |
52 |
do isplit = 1, nsplit_thermals |
62 |
|
|
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, & |
64 |
|
|
zentr_therm, r_aspect_thermals, l_mix_thermals, w2di_thermals, & |
65 |
|
|
tho_thermals) |
66 |
guez |
3 |
|
67 |
guez |
52 |
! transformation de la derivee en tendance |
68 |
guez |
208 |
d_t_the=d_t_the*dtime/real(nsplit_thermals) |
69 |
|
|
d_u_the=d_u_the*dtime/real(nsplit_thermals) |
70 |
|
|
d_v_the=d_v_the*dtime/real(nsplit_thermals) |
71 |
|
|
d_q_the=d_q_the*dtime/real(nsplit_thermals) |
72 |
|
|
fm_therm=fm_therm +zfm_therm/real(nsplit_thermals) |
73 |
|
|
entr_therm=entr_therm +zentr_therm/real(nsplit_thermals) |
74 |
guez |
52 |
fm_therm(:, klev+1)=0. |
75 |
guez |
3 |
|
76 |
guez |
52 |
! accumulation de la tendance |
77 |
|
|
d_t_ajs=d_t_ajs+d_t_the |
78 |
|
|
d_u_ajs=d_u_ajs+d_u_the |
79 |
|
|
d_v_ajs=d_v_ajs+d_v_the |
80 |
|
|
d_q_ajs=d_q_ajs+d_q_the |
81 |
guez |
3 |
|
82 |
guez |
52 |
! incrementation des variables meteo |
83 |
|
|
t_seri = t_seri + d_t_the |
84 |
|
|
u_seri = u_seri + d_u_the |
85 |
|
|
v_seri = v_seri + d_v_the |
86 |
|
|
q_seri = q_seri + d_q_the |
87 |
guez |
3 |
|
88 |
guez |
52 |
! tests sur les valeurs negatives de l'eau |
89 |
|
|
DO k = 1, klev |
90 |
|
|
DO i = 1, klon |
91 |
guez |
200 |
if (.not.q_seri(i, k) >= 0.) then |
92 |
guez |
52 |
print*, 'WARN eau<0 apres therm i=', i, ' k=', k, ' dq, q', & |
93 |
|
|
d_q_the(i, k), q_seri(i, k) |
94 |
|
|
q_seri(i, k)=1.e-15 |
95 |
|
|
endif |
96 |
|
|
ENDDO |
97 |
|
|
ENDDO |
98 |
|
|
enddo |
99 |
guez |
3 |
|
100 |
guez |
52 |
end subroutine calltherm |
101 |
guez |
3 |
|
102 |
guez |
52 |
end module calltherm_m |