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

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

  ViewVC Help
Powered by ViewVC 1.1.21