/[lmdze]/trunk/libf/phylmd/Conflx/flxmain.f90
ViewVC logotype

Diff of /trunk/libf/phylmd/Conflx/flxmain.f90

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

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

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

  ViewVC Help
Powered by ViewVC 1.1.21