--- trunk/libf/phylmd/calltherm.f90 2011/09/23 12:28:01 52 +++ trunk/Sources/phylmd/calltherm.f 2016/12/07 16:44:53 208 @@ -8,29 +8,31 @@ q_seri, d_u_ajs, d_v_ajs, d_t_ajs, d_q_ajs, fm_therm, entr_therm) ! From LMDZ4/libf/phylmd/calltherm.F, version 1.2 2004/12/10 11:27:46 + ! Thermiques USE dimphy, ONLY: klev, klon USE ctherm, ONLY: l_mix_thermals, nsplit_thermals, r_aspect_thermals, & tho_thermals, w2di_thermals + use thermcell_m, only: thermcell 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) REAL, intent(in):: pplay(klon, klev) + REAL, intent(in):: paprs(klon, klev+1) REAL, intent(in):: pphi(klon, klev) + REAL, intent(inout):: u_seri(klon, klev), v_seri(klon, klev) + REAL, intent(inout):: t_seri(klon, klev) + real, intent(inout):: q_seri(klon, klev) ! Update thermiques - REAL d_t_ajs(klon, klev), d_q_ajs(klon, klev) REAL d_u_ajs(klon, klev), d_v_ajs(klon, klev) + REAL d_t_ajs(klon, klev), d_q_ajs(klon, klev) real fm_therm(klon, klev+1), entr_therm(klon, klev) - ! Variables locales + ! Local: + REAL d_t_the(klon, klev), d_q_the(klon, klev) REAL d_u_the(klon, klev), d_v_the(klon, klev) - ! + real, save:: zfm_therm(klon, klev+1), zentr_therm(klon, klev) real zdt @@ -47,7 +49,7 @@ ! tests sur les valeurs negatives de l'eau do k=1, klev do i=1, klon - if (.not.q_seri(i, k).ge.0.) then + if (.not.q_seri(i, k) >= 0.) then print*, 'WARN eau<0 avant therm i=', i, ' k=', k, ' dq, q', & d_q_the(i, k), q_seri(i, k) q_seri(i, k)=1.e-15 @@ -55,7 +57,7 @@ enddo enddo - zdt=dtime/float(nsplit_thermals) + zdt=dtime/real(nsplit_thermals) do isplit = 1, nsplit_thermals CALL thermcell(klon, klev, zdt, pplay, paprs, pphi, u_seri, v_seri, & t_seri, q_seri, d_u_the, d_v_the, d_t_the, d_q_the, zfm_therm, & @@ -63,12 +65,12 @@ tho_thermals) ! transformation de la derivee en tendance - d_t_the=d_t_the*dtime/float(nsplit_thermals) - d_u_the=d_u_the*dtime/float(nsplit_thermals) - d_v_the=d_v_the*dtime/float(nsplit_thermals) - d_q_the=d_q_the*dtime/float(nsplit_thermals) - fm_therm=fm_therm +zfm_therm/float(nsplit_thermals) - entr_therm=entr_therm +zentr_therm/float(nsplit_thermals) + d_t_the=d_t_the*dtime/real(nsplit_thermals) + d_u_the=d_u_the*dtime/real(nsplit_thermals) + d_v_the=d_v_the*dtime/real(nsplit_thermals) + d_q_the=d_q_the*dtime/real(nsplit_thermals) + fm_therm=fm_therm +zfm_therm/real(nsplit_thermals) + entr_therm=entr_therm +zentr_therm/real(nsplit_thermals) fm_therm(:, klev+1)=0. ! accumulation de la tendance @@ -86,7 +88,7 @@ ! tests sur les valeurs negatives de l'eau DO k = 1, klev DO i = 1, klon - if (.not.q_seri(i, k).ge.0.) then + if (.not.q_seri(i, k) >= 0.) then print*, 'WARN eau<0 apres therm i=', i, ' k=', k, ' dq, q', & d_q_the(i, k), q_seri(i, k) q_seri(i, k)=1.e-15