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

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

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

trunk/libf/phylmd/Conflx/flxmain.f90 revision 64 by guez, Wed Aug 29 14:47:17 2012 UTC trunk/phylmd/Conflx/flxmain.f revision 254 by guez, Mon Feb 5 10:39:38 2018 UTC
# Line 4  module flxmain_m Line 4  module flxmain_m
4    
5  contains  contains
6    
7    SUBROUTINE flxmain(pdtime, pten, pqen, pqsen, pqhfl, pap, paph, pgeo, &    SUBROUTINE flxmain(dtime, ten, qen, qsen, pqhfl, pap, paph, pgeo, ldland, &
8         ldland, ptte, pqte, pvervel, prsfc, pssfc, kcbot, kctop, kdtop, pmfu, &         ptte, pqte, pvervel, prsfc, pssfc, kcbot, kctop, kdtop, mfu, mfd, &
9         pmfd, pen_u, pde_u, pen_d, pde_d, dt_con, dq_con, pmflxr, pmflxs)         pen_u, pde_u, pen_d, pde_d, dt_con, dq_con, pmflxr, pmflxs)
10    
11      USE dimphy, ONLY: klev, klon      USE dimphy, ONLY: klev, klon
12        use flxasc_m, only: flxasc
13        use flxbase_m, only: flxbase
14        use flxddraf_m, only: flxddraf
15        use flxdlfs_m, only: flxdlfs
16        use flxdtdq_m, only: flxdtdq
17        use flxflux_m, only: flxflux
18        use flxini_m, only: flxini
19      USE suphec_m, ONLY: rcpd, retv, rg, rlvtt      USE suphec_m, ONLY: rcpd, retv, rg, rlvtt
     USE yoethf_m, ONLY: r4les, r5les  
20      USE yoecumf, ONLY: flxsetup, cmfdeps, entrpen, entrscv, lmfdd      USE yoecumf, ONLY: flxsetup, cmfdeps, entrpen, entrscv, lmfdd
21        USE yoethf_m, ONLY: r4les, r5les
22    
23      REAL, intent(in):: pdtime      REAL, intent(in):: dtime
24      REAL pten(klon,klev), pqen(klon,klev), pqsen(klon,klev)      REAL, intent(in):: ten(klon, klev)
25      REAL ptte(klon,klev)      real, intent(in):: qen(klon, klev)
26      REAL pqte(klon,klev)      real, intent(inout):: qsen(klon, klev)
27      REAL pvervel(klon,klev)      REAL, intent(in):: pqhfl(klon)
28      REAL pgeo(klon,klev), pap(klon,klev), paph(klon,klev+1)      real, intent(in):: pap(klon, klev)
29      REAL pqhfl(klon)      real, intent(in):: paph(klon, klev + 1) ! pression aux demi-niveaux
30        REAL, intent(in):: pgeo(klon, klev)
31      REAL ptu(klon,klev), pqu(klon,klev), plu(klon,klev)      LOGICAL ldland(klon)
32      REAL plude(klon,klev)      REAL ptte(klon, klev)
33      REAL pmfu(klon,klev)      REAL pqte(klon, klev)
34        REAL pvervel(klon, klev)
35      REAL prsfc(klon), pssfc(klon)      REAL prsfc(klon), pssfc(klon)
36      INTEGER kcbot(klon), kctop(klon), ktype(klon)      INTEGER kcbot(klon), kctop(klon)
37      LOGICAL ldland(klon), ldcum(klon)      INTEGER kdtop(klon)
38        REAL, intent(out):: mfu(klon, klev)
39      REAL ztenh(klon,klev), zqenh(klon,klev), zqsenh(klon,klev)      real, intent(out):: mfd(klon, klev)
40      REAL zgeoh(klon,klev)      REAL pen_u(klon, klev), pde_u(klon, klev)
41      REAL zmfub(klon), zmfub1(klon)      REAL pen_d(klon, klev), pde_d(klon, klev)
42      REAL zmfus(klon,klev), zmfuq(klon,klev), zmful(klon,klev)      REAL dt_con(klon, klev), dq_con(klon, klev)
43      REAL zdmfup(klon,klev), zdpmel(klon,klev)      REAL pmflxr(klon, klev + 1)
44        REAL pmflxs(klon, klev + 1)
45    
46        ! Local:
47        REAL ptu(klon, klev), pqu(klon, klev), plu(klon, klev)
48        REAL plude(klon, klev)
49        INTEGER ktype(klon)
50        LOGICAL ldcum(klon)
51    
52        REAL ztenh(klon, klev), zqenh(klon, klev), zqsenh(klon, klev)
53        REAL zgeoh(klon, klev)
54        REAL mfub(klon), mfub1(klon)
55        REAL mfus(klon, klev), mfuq(klon, klev), mful(klon, klev)
56        REAL zdmfup(klon, klev), zdpmel(klon, klev)
57      REAL zentr(klon), zhcbase(klon)      REAL zentr(klon), zhcbase(klon)
58      REAL zdqpbl(klon), zdqcv(klon), zdhpbl(klon)      REAL zdqpbl(klon), zdqcv(klon), zdhpbl(klon)
59      REAL zrfl(klon)      REAL zrfl(klon)
60      REAL pmflxr(klon,klev+1)      INTEGER ilab(klon, klev), ictop0(klon)
     REAL pmflxs(klon,klev+1)  
     INTEGER ilab(klon,klev), ictop0(klon)  
61      LOGICAL llo1      LOGICAL llo1
     REAL dt_con(klon,klev), dq_con(klon,klev)  
62      REAL zmfmax, zdh      REAL zmfmax, zdh
63      real zqumqe, zdqmin, zalvdcp, zhsat, zzz      real zqumqe, zdqmin, zalvdcp, zhsat, zzz
64      REAL zhhat, zpbmpt, zgam, zeps, zfac      REAL zhhat, zpbmpt, zgam, zeps, zfac
65      INTEGER i, k, ikb, itopm2, kcum      INTEGER i, k, ikb, itopm2, kcum
66    
     REAL pen_u(klon,klev), pde_u(klon,klev)  
     REAL pen_d(klon,klev), pde_d(klon,klev)  
67    
68      REAL ptd(klon,klev), pqd(klon,klev), pmfd(klon,klev)      REAL ptd(klon, klev), pqd(klon, klev)
69      REAL zmfds(klon,klev), zmfdq(klon,klev), zdmfdp(klon,klev)      REAL zmfds(klon, klev), zmfdq(klon, klev), zdmfdp(klon, klev)
     INTEGER kdtop(klon)  
70      LOGICAL lddraf(klon)      LOGICAL lddraf(klon)
71    
72      LOGICAL:: firstcal = .TRUE.      LOGICAL:: firstcal = .TRUE.
# Line 63  contains Line 78  contains
78         firstcal = .FALSE.         firstcal = .FALSE.
79      ENDIF      ENDIF
80    
81      DO i = 1, klon      ldcum = .FALSE.
82         ldcum(i) = .FALSE.      dt_con = 0.
83      ENDDO      dq_con = 0.
84      DO k = 1, klev  
85         DO i = 1, klon      ! Initialiser les variables et faire l'interpolation verticale :
86            dt_con(i,k) = 0.0      CALL flxini(ten, qen, qsen, pgeo, paph, zgeoh, ztenh, zqenh, zqsenh, &
87            dq_con(i,k) = 0.0           ptu, pqu, ptd, pqd, mfd, zmfds, zmfdq, zdmfdp, mfu, mfus, mfuq, &
88         ENDDO           zdmfup, zdpmel, plu, plude, ilab, pen_u, pde_u, pen_d, pde_d)
89      ENDDO  
90        ! Déterminer les valeurs au niveau de base de la tour convective :
91      ! initialiser les variables et faire l'interpolation verticale      CALL flxbase(ztenh, zqenh, zgeoh, paph, ptu, pqu, plu, ldcum, kcbot, ilab)
92    
93      CALL flxini(pten, pqen, pqsen, pgeo, &      ! Calculer la convergence totale de l'humidité et celle en
94           paph, zgeoh, ztenh, zqenh, zqsenh, &      ! provenance de la couche limite, plus précisément, la convergence
95           ptu, pqu, ptd, pqd, pmfd, zmfds, zmfdq, zdmfdp, &      ! intégrée entre le sol et la base de la convection. Cette
96           pmfu, zmfus, zmfuq, zdmfup, &      ! dernière convergence est comparée avec l'&vaporation obtenue
97           zdpmel, plu, plude, ilab, pen_u, pde_u, pen_d, pde_d)      ! dans la couche limite pour déterminer le type de la convection.
98    
99      ! determiner les valeurs au niveau de base de la tour convective      zdqcv = pqte(:, 1) * (paph(:, 2) - paph(:, 1))
100        zdhpbl = 0.
101      CALL flxbase(ztenh, zqenh, zgeoh, paph, &      zdqpbl = 0.
          ptu, pqu, plu, ldcum, kcbot, ilab)  
   
     ! calculer la convergence totale de l'humidite et celle en provenance  
     ! de la couche limite, plus precisement, la convergence integree entre  
     ! le sol et la base de la convection. Cette derniere convergence est  
     ! comparee avec l'evaporation obtenue dans la couche limite pour  
     ! determiner le type de la convection  
   
     k=1  
     DO i = 1, klon  
        zdqcv(i) = pqte(i,k)*(paph(i,k+1)-paph(i,k))  
        zdhpbl(i) = 0.0  
        zdqpbl(i) = 0.0  
     ENDDO  
102    
103      DO k=2,klev      DO k=2, klev
104         DO i = 1, klon         DO i = 1, klon
105            zdqcv(i)=zdqcv(i)+pqte(i,k)*(paph(i,k+1)-paph(i,k))            zdqcv(i)=zdqcv(i) + pqte(i, k)*(paph(i, k + 1)-paph(i, k))
106            IF (k.GE.kcbot(i)) THEN            IF (k.GE.kcbot(i)) THEN
107               zdqpbl(i)=zdqpbl(i)+pqte(i,k)*(paph(i,k+1)-paph(i,k))               zdqpbl(i)=zdqpbl(i) + pqte(i, k)*(paph(i, k + 1)-paph(i, k))
108               zdhpbl(i)=zdhpbl(i)+(RCPD*ptte(i,k)+RLVTT*pqte(i,k)) &               zdhpbl(i)=zdhpbl(i) + (RCPD*ptte(i, k) + RLVTT*pqte(i, k)) &
109                    *(paph(i,k+1)-paph(i,k))                    *(paph(i, k + 1)-paph(i, k))
110            ENDIF            ENDIF
111         ENDDO         ENDDO
112      ENDDO      ENDDO
113    
114      DO i = 1, klon      DO i = 1, klon
115         ktype(i) = 2         if (zdqcv(i) > MAX(0., - 1.5 * pqhfl(i) * RG)) then
116         if (zdqcv(i).GT.MAX(0.,-1.5*pqhfl(i)*RG)) ktype(i) = 1            ktype(i) = 1
117         !cc if (zdqcv(i).GT.MAX(0.,-1.1*pqhfl(i)*RG)) ktype(i) = 1         else
118              ktype(i) = 2
119           end if
120      ENDDO      ENDDO
121    
122      ! determiner le flux de masse entrant a travers la base.      ! Déterminer le flux de masse entrant à travers la base. On
123      ! on ignore, pour l'instant, l'effet du panache descendant      ! ignore, pour l'instant, l'effet du panache descendant
124    
125      DO i = 1, klon      DO i = 1, klon
126         ikb=kcbot(i)         ikb=kcbot(i)
127         zqumqe=pqu(i,ikb)+plu(i,ikb)-zqenh(i,ikb)         zqumqe=pqu(i, ikb) + plu(i, ikb)-zqenh(i, ikb)
128         zdqmin=MAX(0.01*zqenh(i,ikb),1.E-10)         zdqmin=MAX(0.01*zqenh(i, ikb), 1.E-10)
129         IF (zdqpbl(i).GT.0..AND.zqumqe.GT.zdqmin.AND.ldcum(i)) THEN         IF (zdqpbl(i) > 0..AND.zqumqe > zdqmin.AND.ldcum(i)) THEN
130            zmfub(i) = zdqpbl(i)/(RG*MAX(zqumqe,zdqmin))            mfub(i) = zdqpbl(i)/(RG*MAX(zqumqe, zdqmin))
131         ELSE         ELSE
132            zmfub(i) = 0.01            mfub(i) = 0.01
133            ldcum(i)=.FALSE.            ldcum(i)=.FALSE.
134         ENDIF         ENDIF
135         IF (ktype(i).EQ.2) THEN         IF (ktype(i) == 2) THEN
136            zdh = RCPD*(ptu(i,ikb)-ztenh(i,ikb)) + RLVTT*zqumqe            zdh = RCPD*(ptu(i, ikb)-ztenh(i, ikb)) + RLVTT*zqumqe
137            zdh = RG * MAX(zdh,1.0E5*zdqmin)            zdh = RG * MAX(zdh, 1.0E5*zdqmin)
138            IF (zdhpbl(i).GT.0..AND.ldcum(i))zmfub(i)=zdhpbl(i)/zdh            IF (zdhpbl(i) > 0..AND.ldcum(i))mfub(i)=zdhpbl(i)/zdh
139         ENDIF         ENDIF
140         zmfmax = (paph(i,ikb)-paph(i,ikb-1)) / (RG*pdtime)         zmfmax = (paph(i, ikb)-paph(i, ikb-1)) / (RG*dtime)
141         zmfub(i) = MIN(zmfub(i),zmfmax)         mfub(i) = MIN(mfub(i), zmfmax)
142         zentr(i) = ENTRSCV         zentr(i) = ENTRSCV
143         IF (ktype(i).EQ.1) zentr(i) = ENTRPEN         IF (ktype(i) == 1) zentr(i) = ENTRPEN
144      ENDDO      ENDDO
145    
146      ! DETERMINE CLOUD ASCENT FOR ENTRAINING PLUME      ! DETERMINE CLOUD ASCENT FOR ENTRAINING PLUME
# Line 148  contains Line 151  contains
151    
152      DO i = 1, klon      DO i = 1, klon
153         ikb=kcbot(i)         ikb=kcbot(i)
154         zhcbase(i)=RCPD*ptu(i,ikb)+zgeoh(i,ikb)+RLVTT*pqu(i,ikb)         zhcbase(i)=RCPD*ptu(i, ikb) + zgeoh(i, ikb) + RLVTT*pqu(i, ikb)
155         ictop0(i)=kcbot(i)-1         ictop0(i)=kcbot(i)-1
156      ENDDO      ENDDO
157    
158      zalvdcp=RLVTT/RCPD      zalvdcp=RLVTT/RCPD
159      DO k=klev-1,3,-1      DO k=klev-1, 3, -1
160         DO i = 1, klon         DO i = 1, klon
161            zhsat=RCPD*ztenh(i,k)+zgeoh(i,k)+RLVTT*zqsenh(i,k)            zhsat=RCPD*ztenh(i, k) + zgeoh(i, k) + RLVTT*zqsenh(i, k)
162            zgam=R5LES*zalvdcp*zqsenh(i,k)/ &            zgam=R5LES*zalvdcp*zqsenh(i, k)/ &
163                 ((1.-RETV *zqsenh(i,k))*(ztenh(i,k)-R4LES)**2)                 ((1.-RETV *zqsenh(i, k))*(ztenh(i, k)-R4LES)**2)
164            zzz=RCPD*ztenh(i,k)*0.608            zzz=RCPD*ztenh(i, k)*0.608
165            zhhat=zhsat-(zzz+zgam*zzz)/(1.+zgam*zzz/RLVTT)* &            zhhat=zhsat-(zzz + zgam*zzz)/(1. + zgam*zzz/RLVTT)* &
166                 MAX(zqsenh(i,k)-zqenh(i,k),0.)                 MAX(zqsenh(i, k)-zqenh(i, k), 0.)
167            IF(k.LT.ictop0(i).AND.zhcbase(i).GT.zhhat) ictop0(i)=k            IF(k < ictop0(i).AND.zhcbase(i) > zhhat) ictop0(i)=k
168         ENDDO         ENDDO
169      ENDDO      ENDDO
170    
171      ! (B) calculer le panache ascendant      ! (B) calculer le panache ascendant
172    
173      CALL flxasc(pdtime,ztenh, zqenh, pten, pqen, pqsen, &      CALL flxasc(dtime, ztenh, zqenh, ten, qen, qsen, pgeo, zgeoh, pap, &
174           pgeo, zgeoh, pap, paph, pqte, pvervel, &           paph, pqte, pvervel, ldland, ldcum, ktype, ilab, ptu, pqu, plu, &
175           ldland, ldcum, ktype, ilab, &           mfu, mfub, zentr, mfus, mfuq, mful, plude, zdmfup, kcbot, &
176           ptu, pqu, plu, pmfu, zmfub, zentr, &           kctop, ictop0, kcum, pen_u, pde_u)
          zmfus, zmfuq, zmful, plude, zdmfup, &  
          kcbot, kctop, ictop0, kcum, pen_u, pde_u)  
177    
178      IF (kcum /= 0) then      kcum_not_zero: IF (kcum /= 0) then
179         ! verifier l'epaisseur de la convection et changer eventuellement         ! verifier l'epaisseur de la convection et changer eventuellement
180         ! le taux d'entrainement/detrainement         ! le taux d'entrainement/detrainement
181    
182         DO i = 1, klon         DO i = 1, klon
183            zpbmpt=paph(i,kcbot(i))-paph(i,kctop(i))            zpbmpt=paph(i, kcbot(i))-paph(i, kctop(i))
184            IF(ldcum(i).AND.ktype(i).EQ.1.AND.zpbmpt.LT.2.E4)ktype(i)=2            IF(ldcum(i) .AND. ktype(i) == 1 .AND. zpbmpt < 2E4) ktype(i) = 2
185            IF(ldcum(i)) ictop0(i)=kctop(i)            IF(ldcum(i)) ictop0(i)=kctop(i)
186            IF(ktype(i).EQ.2) zentr(i)=ENTRSCV            IF(ktype(i) == 2) zentr(i)=ENTRSCV
187         ENDDO         ENDDO
188    
189         IF (lmfdd) THEN ! si l'on considere le panache descendant         downdraft: IF (lmfdd) THEN
190              ! si l'on considere le panache descendant
191            ! calculer la precipitation issue du panache ascendant pour            ! calculer la precipitation issue du panache ascendant pour
192            ! determiner l'existence du panache descendant dans la convection            ! determiner l'existence du panache descendant dans la convection
193            DO i = 1, klon            DO i = 1, klon
194               zrfl(i)=zdmfup(i,1)               zrfl(i)=zdmfup(i, 1)
195            ENDDO            ENDDO
196            DO k=2,klev            DO k=2, klev
197               DO i = 1, klon               DO i = 1, klon
198                  zrfl(i)=zrfl(i)+zdmfup(i,k)                  zrfl(i)=zrfl(i) + zdmfup(i, k)
199               ENDDO               ENDDO
200            ENDDO            ENDDO
201    
202            ! determiner le LFS (level of free sinking: niveau de plonge libre)            ! determiner le LFS (level of free sinking: niveau de plonge libre)
203            CALL flxdlfs(ztenh, zqenh, zgeoh, paph, ptu, pqu, &            CALL flxdlfs(ztenh, zqenh, zgeoh, paph, ptu, pqu, ldcum, kcbot, &
204                 ldcum, kcbot, kctop, zmfub, zrfl, &                 kctop, mfub, zrfl, ptd, pqd, mfd, zmfds, zmfdq, zdmfdp, kdtop, &
205                 ptd, pqd, &                 lddraf)
                pmfd, zmfds, zmfdq, zdmfdp, &  
                kdtop, lddraf)  
206    
207            ! calculer le panache descendant            ! calculer le panache descendant
208            CALL flxddraf(ztenh, zqenh, &            CALL flxddraf(ztenh, zqenh, zgeoh, paph, zrfl, ptd, pqd, mfd, &
209                 zgeoh, paph, zrfl, &                 zmfds, zmfdq, zdmfdp, lddraf, pen_d, pde_d)
                ptd, pqd, &  
                pmfd, zmfds, zmfdq, zdmfdp, &  
                lddraf, pen_d, pde_d)  
210    
211            ! calculer de nouveau le flux de masse entrant a travers la base            ! calculer de nouveau le flux de masse entrant a travers la base
212            ! de la convection, sachant qu'il a ete modifie par le panache            ! de la convection, sachant qu'il a ete modifie par le panache
# Line 217  contains Line 214  contains
214            DO i = 1, klon            DO i = 1, klon
215               IF (lddraf(i)) THEN               IF (lddraf(i)) THEN
216                  ikb = kcbot(i)                  ikb = kcbot(i)
217                  llo1 = PMFD(i,ikb).LT.0.                  llo1 = MFD(i, ikb) < 0.
218                  zeps = 0.                  zeps = 0.
219                  IF ( llo1 ) zeps = CMFDEPS                  IF (llo1) zeps = CMFDEPS
220                  zqumqe = pqu(i,ikb)+plu(i,ikb)- &                  zqumqe = pqu(i, ikb) + plu(i, ikb)- &
221                       zeps*pqd(i,ikb)-(1.-zeps)*zqenh(i,ikb)                       zeps*pqd(i, ikb)-(1.-zeps)*zqenh(i, ikb)
222                  zdqmin = MAX(0.01*zqenh(i,ikb),1.E-10)                  zdqmin = MAX(0.01*zqenh(i, ikb), 1.E-10)
223                  zmfmax = (paph(i,ikb)-paph(i,ikb-1)) / (RG*pdtime)                  zmfmax = (paph(i, ikb)-paph(i, ikb-1)) / (RG*dtime)
224                  IF (zdqpbl(i).GT.0..AND.zqumqe.GT.zdqmin.AND.ldcum(i) &                  IF (zdqpbl(i) > 0..AND.zqumqe > zdqmin.AND.ldcum(i) &
225                       .AND.zmfub(i).LT.zmfmax) THEN                       .AND.mfub(i) < zmfmax) THEN
226                     zmfub1(i) = zdqpbl(i) / (RG*MAX(zqumqe,zdqmin))                     mfub1(i) = zdqpbl(i) / (RG*MAX(zqumqe, zdqmin))
227                  ELSE                  ELSE
228                     zmfub1(i) = zmfub(i)                     mfub1(i) = mfub(i)
229                  ENDIF                  ENDIF
230                  IF (ktype(i).EQ.2) THEN                  IF (ktype(i) == 2) THEN
231                     zdh = RCPD*(ptu(i,ikb)-zeps*ptd(i,ikb)- &                     zdh = RCPD*(ptu(i, ikb)-zeps*ptd(i, ikb)- &
232                          (1.-zeps)*ztenh(i,ikb))+RLVTT*zqumqe                          (1.-zeps)*ztenh(i, ikb)) + RLVTT*zqumqe
233                     zdh = RG * MAX(zdh,1.0E5*zdqmin)                     zdh = RG * MAX(zdh, 1.0E5*zdqmin)
234                     IF (zdhpbl(i).GT.0..AND.ldcum(i))zmfub1(i)=zdhpbl(i)/zdh                     IF (zdhpbl(i) > 0..AND.ldcum(i))mfub1(i)=zdhpbl(i)/zdh
235                  ENDIF                  ENDIF
236                  IF ( .NOT.((ktype(i).EQ.1.OR.ktype(i).EQ.2).AND. &                  IF (.NOT. ((ktype(i) == 1 .OR. ktype(i) == 2) .AND. &
237                       ABS(zmfub1(i)-zmfub(i)).LT.0.2*zmfub(i)) ) &                       ABS(mfub1(i)-mfub(i)) < 0.2*mfub(i))) &
238                       zmfub1(i) = zmfub(i)                       mfub1(i) = mfub(i)
239               ENDIF               ENDIF
240            ENDDO            ENDDO
241            DO k = 1, klev            DO k = 1, klev
242               DO i = 1, klon               DO i = 1, klon
243                  IF (lddraf(i)) THEN                  IF (lddraf(i)) THEN
244                     zfac = zmfub1(i)/MAX(zmfub(i),1.E-10)                     zfac = mfub1(i)/MAX(mfub(i), 1.E-10)
245                     pmfd(i,k) = pmfd(i,k)*zfac                     mfd(i, k) = mfd(i, k)*zfac
246                     zmfds(i,k) = zmfds(i,k)*zfac                     zmfds(i, k) = zmfds(i, k)*zfac
247                     zmfdq(i,k) = zmfdq(i,k)*zfac                     zmfdq(i, k) = zmfdq(i, k)*zfac
248                     zdmfdp(i,k) = zdmfdp(i,k)*zfac                     zdmfdp(i, k) = zdmfdp(i, k)*zfac
249                     pen_d(i,k) = pen_d(i,k)*zfac                     pen_d(i, k) = pen_d(i, k)*zfac
250                     pde_d(i,k) = pde_d(i,k)*zfac                     pde_d(i, k) = pde_d(i, k)*zfac
251                  ENDIF                  ENDIF
252               ENDDO               ENDDO
253            ENDDO            ENDDO
254            DO i = 1, klon            DO i = 1, klon
255               IF (lddraf(i)) zmfub(i)=zmfub1(i)               IF (lddraf(i)) mfub(i)=mfub1(i)
256            ENDDO            ENDDO
257         ENDIF ! fin de test sur lmfdd         ENDIF downdraft
258    
259         ! calculer de nouveau le panache ascendant         ! calculer de nouveau le panache ascendant
260    
261         CALL flxasc(pdtime,ztenh, zqenh, pten, pqen, pqsen, &         CALL flxasc(dtime, ztenh, zqenh, ten, qen, qsen, pgeo, zgeoh, pap, &
262              pgeo, zgeoh, pap, paph, pqte, pvervel, &              paph, pqte, pvervel, ldland, ldcum, ktype, ilab, ptu, pqu, plu, &
263              ldland, ldcum, ktype, ilab, &              mfu, mfub, zentr, mfus, mfuq, mful, plude, zdmfup, kcbot, &
264              ptu, pqu, plu, pmfu, zmfub, zentr, &              kctop, ictop0, kcum, pen_u, pde_u)
             zmfus, zmfuq, zmful, plude, zdmfup, &  
             kcbot, kctop, ictop0, kcum, pen_u, pde_u)  
265    
266         ! determiner les flux convectifs en forme finale, ainsi que         ! Déterminer les flux convectifs en forme finale, ainsi que la
267         ! la quantite des precipitations         ! quantité des précipitations
268    
269         CALL flxflux(pdtime, pqen, pqsen, ztenh, zqenh, pap, paph, &         CALL flxflux(dtime, qen, qsen, ztenh, zqenh, pap, paph, &
270              ldland, zgeoh, kcbot, kctop, lddraf, kdtop, ktype, ldcum, &              ldland, zgeoh, kcbot, kctop, lddraf, kdtop, ktype, ldcum, &
271              pmfu, pmfd, zmfus, zmfds, zmfuq, zmfdq, zmful, plude, &              mfu, mfd, mfus, zmfds, mfuq, zmfdq, mful, plude, &
272              zdmfup, zdmfdp, pten, prsfc, pssfc, zdpmel, itopm2, &              zdmfup, zdmfdp, ten, prsfc, pssfc, zdpmel, itopm2, &
273              pmflxr, pmflxs)              pmflxr, pmflxs)
274    
275         ! calculer les tendances pour T et Q         ! calculer les tendances pour T et Q
276    
277         CALL flxdtdq(itopm2, paph, ldcum, pten, &         CALL flxdtdq(itopm2, paph, ldcum, ten, mfus, zmfds, mfuq, zmfdq, &
278              zmfus, zmfds, zmfuq, zmfdq, zmful, zdmfup, zdmfdp, zdpmel, &              mful, zdmfup, zdmfdp, zdpmel, dt_con, dq_con)
279              dt_con,dq_con)      end IF kcum_not_zero
     end IF  
280    
281    END SUBROUTINE flxmain    END SUBROUTINE flxmain
282    

Legend:
Removed from v.64  
changed lines
  Added in v.254

  ViewVC Help
Powered by ViewVC 1.1.21