/[lmdze]/trunk/phylmd/calltherm.f
ViewVC logotype

Diff of /trunk/phylmd/calltherm.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/Sources/phylmd/calltherm.f revision 134 by guez, Wed Apr 29 15:47:56 2015 UTC trunk/phylmd/calltherm.f revision 322 by guez, Thu Jan 24 16:17:39 2019 UTC
# Line 4  module calltherm_m Line 4  module calltherm_m
4    
5  contains  contains
6    
7    subroutine calltherm(dtime, pplay, paprs, pphi, u_seri, v_seri, t_seri, &    subroutine calltherm(pplay, paprs, pphi, u_seri, v_seri, t_seri, q_seri, &
8         q_seri, d_u_ajs, d_v_ajs, d_t_ajs, d_q_ajs, fm_therm, entr_therm)         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    
12      USE dimphy, ONLY: klev, klon      ! Thermiques.
13    
14        use comconst, only: dtphys
15      USE ctherm, ONLY: l_mix_thermals, nsplit_thermals, r_aspect_thermals, &      USE ctherm, ONLY: l_mix_thermals, nsplit_thermals, r_aspect_thermals, &
16           tho_thermals, w2di_thermals           tho_thermals, w2di_thermals
17        USE dimphy, ONLY: klev, klon
18      use thermcell_m, only: thermcell      use thermcell_m, only: thermcell
19    
     REAL, intent(in):: dtime  
   
     REAL, intent(inout):: 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)  
20      REAL, intent(in):: pplay(klon, klev)      REAL, intent(in):: pplay(klon, klev)
21        REAL, intent(in):: paprs(klon, klev+1)
22      REAL, intent(in):: pphi(klon, klev)      REAL, intent(in):: pphi(klon, klev)
23        REAL, intent(inout):: u_seri(klon, klev), v_seri(klon, klev)
24        REAL, intent(inout):: t_seri(klon, klev)
25        real, intent(inout):: q_seri(klon, klev)
26    
27      ! Update thermiques      ! Update thermiques
     REAL d_t_ajs(klon, klev), d_q_ajs(klon, klev)  
28      REAL d_u_ajs(klon, klev), d_v_ajs(klon, klev)      REAL d_u_ajs(klon, klev), d_v_ajs(klon, klev)
29        REAL d_t_ajs(klon, klev), d_q_ajs(klon, klev)
30      real fm_therm(klon, klev+1), entr_therm(klon, klev)      real fm_therm(klon, klev+1), entr_therm(klon, klev)
31    
32      ! Variables locales      ! Local:
33    
34      REAL d_t_the(klon, klev), d_q_the(klon, klev)      REAL d_t_the(klon, klev), d_q_the(klon, klev)
35      REAL d_u_the(klon, klev), d_v_the(klon, klev)      REAL d_u_the(klon, klev), d_v_the(klon, klev)
36      !  
37      real, save:: zfm_therm(klon, klev+1), zentr_therm(klon, klev)      real, save:: zfm_therm(klon, klev+1), zentr_therm(klon, klev)
38      real zdt      real zdt
39    
# Line 48  contains Line 50  contains
50      ! tests sur les valeurs negatives de l'eau      ! tests sur les valeurs negatives de l'eau
51      do k=1, klev      do k=1, klev
52         do i=1, klon         do i=1, klon
53            if (.not.q_seri(i, k).ge.0.) then            if (.not.q_seri(i, k) >= 0.) then
54               print*, 'WARN eau<0 avant therm i=', i, ' k=', k, ' dq, q', &               print*, 'WARN eau<0 avant therm i=', i, ' k=', k, ' dq, q', &
55                    d_q_the(i, k), q_seri(i, k)                    d_q_the(i, k), q_seri(i, k)
56               q_seri(i, k)=1.e-15               q_seri(i, k)=1.e-15
# Line 56  contains Line 58  contains
58         enddo         enddo
59      enddo      enddo
60    
61      zdt=dtime/float(nsplit_thermals)      zdt=dtphys/real(nsplit_thermals)
62      do isplit = 1, nsplit_thermals      do isplit = 1, nsplit_thermals
63         CALL thermcell(klon, klev, zdt, pplay, paprs, pphi, u_seri, v_seri, &         CALL thermcell(klon, klev, zdt, pplay, paprs, pphi, u_seri, v_seri, &
64              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, &
# Line 64  contains Line 66  contains
66              tho_thermals)              tho_thermals)
67    
68         ! transformation de la derivee en tendance         ! transformation de la derivee en tendance
69         d_t_the=d_t_the*dtime/float(nsplit_thermals)         d_t_the=d_t_the*dtphys/real(nsplit_thermals)
70         d_u_the=d_u_the*dtime/float(nsplit_thermals)         d_u_the=d_u_the*dtphys/real(nsplit_thermals)
71         d_v_the=d_v_the*dtime/float(nsplit_thermals)         d_v_the=d_v_the*dtphys/real(nsplit_thermals)
72         d_q_the=d_q_the*dtime/float(nsplit_thermals)         d_q_the=d_q_the*dtphys/real(nsplit_thermals)
73         fm_therm=fm_therm +zfm_therm/float(nsplit_thermals)         fm_therm=fm_therm +zfm_therm/real(nsplit_thermals)
74         entr_therm=entr_therm +zentr_therm/float(nsplit_thermals)         entr_therm=entr_therm +zentr_therm/real(nsplit_thermals)
75         fm_therm(:, klev+1)=0.         fm_therm(:, klev+1)=0.
76    
77         ! accumulation de la tendance         ! accumulation de la tendance
# Line 87  contains Line 89  contains
89         ! tests sur les valeurs negatives de l'eau         ! tests sur les valeurs negatives de l'eau
90         DO k = 1, klev         DO k = 1, klev
91            DO i = 1, klon            DO i = 1, klon
92               if (.not.q_seri(i, k).ge.0.) then               if (.not.q_seri(i, k) >= 0.) then
93                  print*, 'WARN eau<0 apres therm i=', i, ' k=', k, ' dq, q', &                  print*, 'WARN eau<0 apres therm i=', i, ' k=', k, ' dq, q', &
94                       d_q_the(i, k), q_seri(i, k)                       d_q_the(i, k), q_seri(i, k)
95                  q_seri(i, k)=1.e-15                  q_seri(i, k)=1.e-15

Legend:
Removed from v.134  
changed lines
  Added in v.322

  ViewVC Help
Powered by ViewVC 1.1.21