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

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

  ViewVC Help
Powered by ViewVC 1.1.21