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

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

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

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

Legend:
Removed from v.52  
changed lines
  Added in v.82

  ViewVC Help
Powered by ViewVC 1.1.21