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

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

  ViewVC Help
Powered by ViewVC 1.1.21