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

  ViewVC Help
Powered by ViewVC 1.1.21