/[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

revision 62 by guez, Thu Jul 26 14:37:37 2012 UTC revision 70 by guez, Mon Jun 24 15:39:52 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, pmfu, pmfd, 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 (g/g)
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):: d_t(:, :) ! (klon, klev) incrementation de temperature
45        REAL, intent(out):: d_q(:, :) ! (klon, klev) incrementation d'humidite
46        REAL, intent(out):: rain(:) ! (klon) pluie (mm/s)
47        REAL, intent(out):: snow(:) ! (klon) neige (mm/s)
48    
49      REAL, intent(out):: pmfu(:, :) ! (klon, klev)      REAL, intent(out):: pmfu(:, :) ! (klon, klev)
50      ! flux masse (kg/m2/s) panache ascendant      ! flux masse (kg/m2/s) panache ascendant
51        
52      REAL, intent(out):: pmfd(:, :) ! (klon, klev)      REAL, intent(out):: pmfd(:, :) ! (klon, klev)
53      ! flux masse (kg/m2/s) panache descendant      ! flux masse (kg/m2/s) panache descendant
54    
55      REAL pen_u(klon, klev)      REAL, intent(out):: pen_u(:, :) ! (klon, klev)
56      REAL pen_d(klon, klev)      REAL, intent(out):: pde_u(:, :) ! (klon, klev)
57      REAL pde_u(klon, klev)      REAL, intent(out):: pen_d(:, :) ! (klon, klev)
58      REAL pde_d(klon, klev)      REAL, intent(out):: pde_d(:, :) ! (klon, klev)
59      REAL rain(klon)       ! pluie (mm/s)      INTEGER, intent(out):: kcbot(:) ! (klon) niveau du bas de la convection
60      REAL snow(klon)       ! neige (mm/s)      INTEGER, intent(out):: kctop(:) ! (klon) niveau du haut de la convection
61      REAL pmflxr(klon, klev+1)      INTEGER, intent(out):: kdtop(:) ! (klon) niveau du haut des downdrafts
62      REAL pmflxs(klon, klev+1)      REAL, intent(out):: pmflxr(:, :) ! (klon, klev+1)
63      INTEGER kcbot(klon)  ! niveau du bas de la convection      REAL, intent(out):: pmflxs(:, :) ! (klon, klev+1)
     INTEGER kctop(klon)  ! niveau du haut de la convection  
     INTEGER kdtop(klon)  ! niveau du haut des downdrafts  
64    
65      ! Local:      ! Local:
66    
     REAL pt(klon, klev)  
67      REAL pq(klon, klev)      REAL pq(klon, klev)
68      REAL pqs(klon, klev)      REAL pqs(klon, klev)
69      REAL pvervel(klon, klev)      REAL pvervel(klon, klev)
# Line 85  contains Line 87  contains
87      REAL zmflxs(klon, klev+1)      REAL zmflxs(klon, klev+1)
88    
89      INTEGER i, k      INTEGER i, k
90      REAL zdelta, zqsat      REAL zqsat
91    
92      !--------------------------------------------------------------------      !--------------------------------------------------------------------
93    
# Line 131  contains Line 133  contains
133      ! verticaux augmente du haut vers le bas)      ! verticaux augmente du haut vers le bas)
134      DO k = 1, klev      DO k = 1, klev
135         DO i = 1, klon         DO i = 1, klon
           pt(i, k) = t(i, klev-k+1)  
136            pq(i, k) = q(i, klev-k+1)            pq(i, k) = q(i, klev-k+1)
137            paprsf(i, k) = pres_f(i, klev-k+1)            paprsf(i, k) = pres_f(i, klev-k+1)
138            paprs(i, k) = pres_h(i, klev+1-k+1)            paprs(i, k) = pres_h(i, klev+1-k+1)
# Line 139  contains Line 140  contains
140            zcvgt(i, k) = con_t(i, klev-k+1)            zcvgt(i, k) = con_t(i, klev-k+1)
141            zcvgq(i, k) = con_q(i, klev-k+1)            zcvgq(i, k) = con_q(i, klev-k+1)
142    
143            zdelta=MAX(0., SIGN(1., RTT-pt(i, k)))            zqsat = MIN(0.5, R2ES * FOEEW(t(i, k), &
144            zqsat=R2ES*FOEEW ( pt(i, k), zdelta ) / paprsf(i, k)                 merge(0., 1., rtt < t(i, k))) / paprsf(i, k))
145            zqsat=MIN(0.5, zqsat)            pqs(i, k) = zqsat / (1. - RETV * zqsat)
           zqsat=zqsat/(1.-RETV  *zqsat)  
           pqs(i, k) = zqsat  
146         ENDDO         ENDDO
147      ENDDO      ENDDO
148      DO i = 1, klon      DO i = 1, klon
149         paprs(i, klev+1) = pres_h(i, 1)         paprs(i, klev+1) = pres_h(i, 1)
150         zgeom(i, klev) = RD * pt(i, klev) &         zgeom(i, klev) = RD * t(i, klev) &
151              / (0.5*(paprs(i, klev+1)+paprsf(i, klev))) &              / (0.5*(paprs(i, klev+1)+paprsf(i, klev))) &
152              * (paprs(i, klev+1)-paprsf(i, klev))              * (paprs(i, klev+1)-paprsf(i, klev))
153      ENDDO      ENDDO
154      DO k = klev-1, 1, -1      DO k = klev-1, 1, -1
155         DO i = 1, klon         DO i = 1, klon
156            zgeom(i, k) = zgeom(i, k+1) &            zgeom(i, k) = zgeom(i, k+1) &
157                 + 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) &
158                 * (paprsf(i, k+1)-paprsf(i, k))                 * (paprsf(i, k+1)-paprsf(i, k))
159         ENDDO         ENDDO
160      ENDDO      ENDDO
161    
162      ! appeler la routine principale      ! Appeler la routine principale :
163        CALL flxmain(dtime, t, pq, pqs, qhfl, paprsf, paprs, zgeom, land, &
     CALL flxmain(dtime, pt, pq, pqs, pqhfl, paprsf, paprs, zgeom, land, &  
164           zcvgt, zcvgq, pvervel, rain, snow, kcbot, kctop, kdtop, zmfu, zmfd, &           zcvgt, zcvgq, pvervel, rain, snow, kcbot, kctop, kdtop, zmfu, zmfd, &
165           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)
166    
# Line 192  contains Line 190  contains
190    
191      DO k = 1, klev      DO k = 1, klev
192         DO i = 1, klon         DO i = 1, klon
193            pen_u(i, klev+1-k)=  zen_u(i, k)            pen_u(i, klev+1-k)= zen_u(i, k)
194            pde_u(i, klev+1-k)=  zde_u(i, k)            pde_u(i, klev+1-k)= zde_u(i, k)
195         ENDDO         ENDDO
196      ENDDO      ENDDO
197    

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

  ViewVC Help
Powered by ViewVC 1.1.21