/[lmdze]/trunk/phylmd/Conflx/conflx.f
ViewVC logotype

Diff of /trunk/phylmd/Conflx/conflx.f

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

trunk/libf/phylmd/Conflx/conflx.f90 revision 62 by guez, Thu Jul 26 14:37:37 2012 UTC trunk/phylmd/Conflx/conflx.f90 revision 76 by guez, Fri Nov 15 18:45:49 2013 UTC
# Line 4  module conflx_m Line 4  module conflx_m
4    
5  contains  contains
6    
7    SUBROUTINE conflx (dtime, pres_h, pres_f, t, q, con_t, con_q, pqhfl, w, &    SUBROUTINE conflx (dtime, pres_h, pres_f, t, q, con_t, con_q, qhfl, w, &
8         d_t, d_q, rain, snow, pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, kcbot, &         d_t, d_q, rain, snow, mfu, mfd, pen_u, pde_u, pen_d, pde_d, kcbot, &
9         kctop, kdtop, pmflxr, pmflxs)         kctop, kdtop, pmflxr, pmflxs)
10    
11      ! From LMDZ4/libf/phylmd/conflx.F, version 1.1.1.1 2004/05/19 12:53:08      ! From LMDZ4/libf/phylmd/conflx.F, version 1.1.1.1 2004/05/19 12:53:08
12    
13      ! Author: Z. X. Li (LMD/CNRS)      ! Author: Z. X. Li (LMD/CNRS)
14      ! date: 1994/10/14      ! Date: 1994/10/14
15    
16      ! Objet: schéma flux de masse pour la convection (schéma de      ! Objet: schéma en flux de masse pour la convection (schéma de
17      ! Tiedtke avec quelques modifications mineures)      ! Tiedtke avec quelques modifications mineures)
18    
19      ! Décembre 1997 : prise en compte des modifications introduites      ! Décembre 1997 : prise en compte des modifications introduites
20      ! par Olivier Boucher et Alexandre Armengaud pour mélange et      ! par Olivier Boucher et Alexandre Armengaud pour le mélange et le
21      ! lessivage des traceurs passifs.      ! lessivage des traceurs passifs.
22    
23      use flxmain_m, only: flxmain      use flxmain_m, only: flxmain
# Line 26  contains Line 26  contains
26      USE yoethf_m, ONLY: r2es      USE yoethf_m, ONLY: r2es
27      USE fcttre, ONLY: foeew      USE fcttre, ONLY: foeew
28    
29      ! Entree:      REAL, intent(in):: dtime ! pas d'integration (s)
30      REAL, intent(in):: dtime            ! pas d'integration (s)      REAL, intent(in):: pres_h(:, :) ! (klon, klev+1) pression half-level (Pa)
31      REAL, intent(in):: pres_h(klon, klev+1) ! pression half-level (Pa)      REAL, intent(in):: pres_f(:, :) ! (klon, klev) pression full-level (Pa)
32      REAL, intent(in):: pres_f(klon, klev)! pression full-level (Pa)      REAL, intent(in):: t(:, :) ! (klon, klev) temperature (K)
33      REAL, intent(in):: t(klon, klev)     ! temperature (K)      REAL, intent(in):: q(:, :) ! (klon, klev) humidité spécifique (no dimension)
34      REAL q(klon, klev)     ! humidite specifique (g/g)  
35      REAL w(klon, klev)     ! vitesse verticale (Pa/s)      REAL, intent(in):: con_t(:, :)
36      REAL con_t(klon, klev) ! convergence de temperature (K/s)      ! (klon, klev) convergence de temperature (K/s)
37      REAL con_q(klon, klev) ! convergence de l'eau vapeur (g/g/s)  
38      REAL pqhfl(klon)      ! evaporation (negative vers haut) mm/s      REAL, intent(in):: con_q(:, :)
39        ! (klon, klev) convergence de l'eau vapeur (g/g/s)
40      ! Sortie:  
41      REAL d_t(klon, klev)   ! incrementation de temperature      REAL, intent(in):: qhfl(:) ! (klon) evaporation (negative vers haut) mm/s
42      REAL d_q(klon, klev)   ! incrementation d'humidite      REAL, intent(in):: w(:, :) ! (klon, klev) vitesse verticale (Pa/s)
43    
44      REAL, intent(out):: pmfu(:, :) ! (klon, klev)      REAL, intent(out):: d_t(:, :) ! (klon, klev) incrementation de temperature
45      ! flux masse (kg/m2/s) panache ascendant      REAL, intent(out):: d_q(:, :) ! (klon, klev) incrementation d'humidite
46            REAL, intent(out):: rain(:) ! (klon) pluie (mm/s)
47      REAL, intent(out):: pmfd(:, :) ! (klon, klev)      REAL, intent(out):: snow(:) ! (klon) neige (mm/s)
48      ! flux masse (kg/m2/s) panache descendant  
49        REAL, intent(out):: mfu(:, :) ! (klon, klev)
50      REAL pen_u(klon, klev)      ! flux de masse (kg/m2/s) panache ascendant
51      REAL pen_d(klon, klev)  
52      REAL pde_u(klon, klev)      REAL, intent(out):: mfd(:, :) ! (klon, klev)
53      REAL pde_d(klon, klev)      ! flux de masse (kg/m2/s) panache descendant
54      REAL rain(klon)       ! pluie (mm/s)  
55      REAL snow(klon)       ! neige (mm/s)      REAL, intent(out):: pen_u(:, :) ! (klon, klev)
56      REAL pmflxr(klon, klev+1)      REAL, intent(out):: pde_u(:, :) ! (klon, klev)
57      REAL pmflxs(klon, klev+1)      REAL, intent(out):: pen_d(:, :) ! (klon, klev)
58      INTEGER kcbot(klon)  ! niveau du bas de la convection      REAL, intent(out):: pde_d(:, :) ! (klon, klev)
59      INTEGER kctop(klon)  ! niveau du haut de la convection      INTEGER, intent(out):: kcbot(:) ! (klon) niveau du bas de la convection
60      INTEGER kdtop(klon)  ! niveau du haut des downdrafts      INTEGER, intent(out):: kctop(:) ! (klon) niveau du haut de la convection
61        INTEGER, intent(out):: kdtop(:) ! (klon) niveau du haut des downdrafts
62        REAL, intent(out):: pmflxr(:, :) ! (klon, klev+1)
63        REAL, intent(out):: pmflxs(:, :) ! (klon, klev+1)
64    
65      ! Local:      ! Local:
66    
67      REAL pt(klon, klev)      REAL qsen(klon, klev)
     REAL pq(klon, klev)  
     REAL pqs(klon, klev)  
68      REAL pvervel(klon, klev)      REAL pvervel(klon, klev)
69      LOGICAL land(klon)      LOGICAL land(klon)
70    
# Line 75  contains Line 76  contains
76      REAL zcvgq(klon, klev)      REAL zcvgq(klon, klev)
77      REAL zcvgt(klon, klev)      REAL zcvgt(klon, klev)
78    
     REAL zmfu(klon, klev)  
     REAL zmfd(klon, klev)  
79      REAL zen_u(klon, klev)      REAL zen_u(klon, klev)
80      REAL zen_d(klon, klev)      REAL zen_d(klon, klev)
81      REAL zde_u(klon, klev)      REAL zde_u(klon, klev)
# Line 85  contains Line 84  contains
84      REAL zmflxs(klon, klev+1)      REAL zmflxs(klon, klev+1)
85    
86      INTEGER i, k      INTEGER i, k
87      REAL zdelta, zqsat      REAL zqsat
88    
89      !--------------------------------------------------------------------      !--------------------------------------------------------------------
90    
# Line 101  contains Line 100  contains
100         DO i = 1, klon         DO i = 1, klon
101            d_t(i, k) = 0.0            d_t(i, k) = 0.0
102            d_q(i, k) = 0.0            d_q(i, k) = 0.0
           pmfu(i, k) = 0.0  
           pmfd(i, k) = 0.0  
103            pen_u(i, k) = 0.0            pen_u(i, k) = 0.0
104            pde_u(i, k) = 0.0            pde_u(i, k) = 0.0
105            pen_d(i, k) = 0.0            pen_d(i, k) = 0.0
106            pde_d(i, k) = 0.0            pde_d(i, k) = 0.0
           zmfu(i, k) = 0.0  
           zmfd(i, k) = 0.0  
107            zen_u(i, k) = 0.0            zen_u(i, k) = 0.0
108            zde_u(i, k) = 0.0            zde_u(i, k) = 0.0
109            zen_d(i, k) = 0.0            zen_d(i, k) = 0.0
# Line 131  contains Line 126  contains
126      ! verticaux augmente du haut vers le bas)      ! verticaux augmente du haut vers le bas)
127      DO k = 1, klev      DO k = 1, klev
128         DO i = 1, klon         DO i = 1, klon
           pt(i, k) = t(i, klev-k+1)  
           pq(i, k) = q(i, klev-k+1)  
129            paprsf(i, k) = pres_f(i, klev-k+1)            paprsf(i, k) = pres_f(i, klev-k+1)
130            paprs(i, k) = pres_h(i, klev+1-k+1)            paprs(i, k) = pres_h(i, klev+1-k+1)
131            pvervel(i, k) = w(i, klev+1-k)            pvervel(i, k) = w(i, klev+1-k)
132            zcvgt(i, k) = con_t(i, klev-k+1)            zcvgt(i, k) = con_t(i, klev-k+1)
133            zcvgq(i, k) = con_q(i, klev-k+1)            zcvgq(i, k) = con_q(i, klev-k+1)
134    
135            zdelta=MAX(0., SIGN(1., RTT-pt(i, k)))            zqsat = MIN(0.5, R2ES * FOEEW(t(i, k), &
136            zqsat=R2ES*FOEEW ( pt(i, k), zdelta ) / paprsf(i, k)                 merge(0., 1., rtt < t(i, k))) / paprsf(i, k))
137            zqsat=MIN(0.5, zqsat)            qsen(i, k) = zqsat / (1. - RETV * zqsat)
           zqsat=zqsat/(1.-RETV  *zqsat)  
           pqs(i, k) = zqsat  
138         ENDDO         ENDDO
139      ENDDO      ENDDO
140      DO i = 1, klon      DO i = 1, klon
141         paprs(i, klev+1) = pres_h(i, 1)         paprs(i, klev+1) = pres_h(i, 1)
142         zgeom(i, klev) = RD * pt(i, klev) &         zgeom(i, klev) = RD * t(i, klev) &
143              / (0.5*(paprs(i, klev+1)+paprsf(i, klev))) &              / (0.5*(paprs(i, klev+1)+paprsf(i, klev))) &
144              * (paprs(i, klev+1)-paprsf(i, klev))              * (paprs(i, klev+1)-paprsf(i, klev))
145      ENDDO      ENDDO
146      DO k = klev-1, 1, -1      DO k = klev-1, 1, -1
147         DO i = 1, klon         DO i = 1, klon
148            zgeom(i, k) = zgeom(i, k+1) &            zgeom(i, k) = zgeom(i, k+1) &
149                 + RD * 0.5*(pt(i, k+1)+pt(i, k)) / paprs(i, k+1) &                 + RD * 0.5*(t(i, k+1)+t(i, k)) / paprs(i, k+1) &
150                 * (paprsf(i, k+1)-paprsf(i, k))                 * (paprsf(i, k+1)-paprsf(i, k))
151         ENDDO         ENDDO
152      ENDDO      ENDDO
153    
154      ! appeler la routine principale      ! Appeler la routine principale :
155        CALL flxmain(dtime, t, q, qsen, qhfl, paprsf, paprs, zgeom, land, &
156      CALL flxmain(dtime, pt, pq, pqs, pqhfl, paprsf, paprs, zgeom, land, &           zcvgt, zcvgq, pvervel, rain, snow, kcbot, kctop, kdtop, mfu, mfd, &
          zcvgt, zcvgq, pvervel, rain, snow, kcbot, kctop, kdtop, zmfu, zmfd, &  
157           zen_u, zde_u, zen_d, zde_d, d_t_bis, d_q_bis, zmflxr, zmflxs)           zen_u, zde_u, zen_d, zde_d, d_t_bis, d_q_bis, zmflxr, zmflxs)
158    
159      ! De la même façon que l'on effectue le réindiçage pour la      ! De la même façon que l'on effectue le réindiçage pour la
# Line 176  contains Line 166  contains
166         ENDDO         ENDDO
167      ENDDO      ENDDO
168    
169      DO i = 1, klon      mfu = eoshift(mfu, shift=1, dim=2)
170         pmfu(i, 1)= 0.      mfd = eoshift(mfd, shift=1, dim=2)
171         pmfd(i, 1)= 0.      pen_d(:, 1)= 0.
172         pen_d(i, 1)= 0.      pde_d(:, 1)= 0.
        pde_d(i, 1)= 0.  
     ENDDO  
   
     DO k = 2, klev  
        DO i = 1, klon  
           pmfu(i, klev+2-k)= zmfu(i, k)  
           pmfd(i, klev+2-k)= zmfd(i, k)  
        ENDDO  
     ENDDO  
173    
174      DO k = 1, klev      DO k = 1, klev
175         DO i = 1, klon         DO i = 1, klon
176            pen_u(i, klev+1-k)=  zen_u(i, k)            pen_u(i, klev+1-k)= zen_u(i, k)
177            pde_u(i, klev+1-k)=  zde_u(i, k)            pde_u(i, klev+1-k)= zde_u(i, k)
178         ENDDO         ENDDO
179      ENDDO      ENDDO
180    

Legend:
Removed from v.62  
changed lines
  Added in v.76

  ViewVC Help
Powered by ViewVC 1.1.21