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

trunk/libf/phylmd/Conflx/flxmain.f90 revision 71 by guez, Mon Jul 8 18:12:18 2013 UTC trunk/phylmd/Conflx/flxmain.f revision 82 by guez, Wed Mar 5 14:57:53 2014 UTC
# Line 10  contains Line 10  contains
10    
11      USE dimphy, ONLY: klev, klon      USE dimphy, ONLY: klev, klon
12      use flxasc_m, only: flxasc      use flxasc_m, only: flxasc
13        use flxbase_m, only: flxbase
14        use flxddraf_m, only: flxddraf
15        use flxdlfs_m, only: flxdlfs
16      use flxdtdq_m, only: flxdtdq      use flxdtdq_m, only: flxdtdq
17      use flxflux_m, only: flxflux      use flxflux_m, only: flxflux
18      use flxini_m, only: flxini      use flxini_m, only: flxini
# Line 22  contains Line 25  contains
25      real, intent(in):: qen(klon, klev)      real, intent(in):: qen(klon, klev)
26      real, intent(inout):: qsen(klon, klev)      real, intent(inout):: qsen(klon, klev)
27      REAL, intent(in):: pqhfl(klon)      REAL, intent(in):: pqhfl(klon)
28      real pap(klon, klev), paph(klon, klev+1)      real, intent(in):: pap(klon, klev)
29        real, intent(in):: paph(klon, klev + 1) ! pression aux demi-niveaux
30      REAL, intent(in):: pgeo(klon, klev)      REAL, intent(in):: pgeo(klon, klev)
31      LOGICAL ldland(klon)      LOGICAL ldland(klon)
32      REAL ptte(klon, klev)      REAL ptte(klon, klev)
# Line 36  contains Line 40  contains
40      REAL pen_u(klon, klev), pde_u(klon, klev)      REAL pen_u(klon, klev), pde_u(klon, klev)
41      REAL pen_d(klon, klev), pde_d(klon, klev)      REAL pen_d(klon, klev), pde_d(klon, klev)
42      REAL dt_con(klon, klev), dq_con(klon, klev)      REAL dt_con(klon, klev), dq_con(klon, klev)
43      REAL pmflxr(klon, klev+1)      REAL pmflxr(klon, klev + 1)
44      REAL pmflxs(klon, klev+1)      REAL pmflxs(klon, klev + 1)
45    
46      ! Local:      ! Local:
47      REAL ptu(klon, klev), pqu(klon, klev), plu(klon, klev)      REAL ptu(klon, klev), pqu(klon, klev), plu(klon, klev)
# Line 74  contains Line 78  contains
78         firstcal = .FALSE.         firstcal = .FALSE.
79      ENDIF      ENDIF
80    
81      DO i = 1, klon      ldcum = .FALSE.
82         ldcum(i) = .FALSE.      dt_con = 0.
83      ENDDO      dq_con = 0.
     DO k = 1, klev  
        DO i = 1, klon  
           dt_con(i, k) = 0.0  
           dq_con(i, k) = 0.0  
        ENDDO  
     ENDDO  
   
     ! initialiser les variables et faire l'interpolation verticale  
84    
85        ! Initialiser les variables et faire l'interpolation verticale :
86      CALL flxini(ten, qen, qsen, pgeo, paph, zgeoh, ztenh, zqenh, zqsenh, &      CALL flxini(ten, qen, qsen, pgeo, paph, zgeoh, ztenh, zqenh, zqsenh, &
87           ptu, pqu, ptd, pqd, mfd, zmfds, zmfdq, zdmfdp, mfu, mfus, mfuq, &           ptu, pqu, ptd, pqd, mfd, zmfds, zmfdq, zdmfdp, mfu, mfus, mfuq, &
88           zdmfup, zdpmel, plu, plude, ilab, pen_u, pde_u, pen_d, pde_d)           zdmfup, zdpmel, plu, plude, ilab, pen_u, pde_u, pen_d, pde_d)
89    
90      ! determiner les valeurs au niveau de base de la tour convective      ! Déterminer les valeurs au niveau de base de la tour convective :
91        CALL flxbase(ztenh, zqenh, zgeoh, paph, ptu, pqu, plu, ldcum, kcbot, ilab)
     CALL flxbase(ztenh, zqenh, zgeoh, paph, &  
          ptu, pqu, plu, ldcum, kcbot, ilab)  
   
     ! calculer la convergence totale de l'humidite et celle en provenance  
     ! de la couche limite, plus precisement, la convergence integree entre  
     ! le sol et la base de la convection. Cette derniere convergence est  
     ! comparee avec l'evaporation obtenue dans la couche limite pour  
     ! determiner le type de la convection  
92    
93      k=1      ! Calculer la convergence totale de l'humidité et celle en
94      DO i = 1, klon      ! provenance de la couche limite, plus précisément, la convergence
95         zdqcv(i) = pqte(i, k)*(paph(i, k+1)-paph(i, k))      ! intégrée entre le sol et la base de la convection. Cette
96         zdhpbl(i) = 0.0      ! dernière convergence est comparée avec l'&vaporation obtenue
97         zdqpbl(i) = 0.0      ! dans la couche limite pour déterminer le type de la convection.
98      ENDDO  
99        zdqcv = pqte(:, 1) * (paph(:, 2) - paph(:, 1))
100        zdhpbl = 0.
101        zdqpbl = 0.
102    
103      DO k=2, klev      DO k=2, klev
104         DO i = 1, klon         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
# Line 132  contains Line 124  contains
124    
125      DO i = 1, klon      DO i = 1, klon
126         ikb=kcbot(i)         ikb=kcbot(i)
127         zqumqe=pqu(i, ikb)+plu(i, ikb)-zqenh(i, ikb)         zqumqe=pqu(i, ikb) + plu(i, ikb)-zqenh(i, ikb)
128         zdqmin=MAX(0.01*zqenh(i, ikb), 1.E-10)         zdqmin=MAX(0.01*zqenh(i, ikb), 1.E-10)
129         IF (zdqpbl(i) > 0..AND.zqumqe > zdqmin.AND.ldcum(i)) THEN         IF (zdqpbl(i) > 0..AND.zqumqe > zdqmin.AND.ldcum(i)) THEN
130            mfub(i) = zdqpbl(i)/(RG*MAX(zqumqe, zdqmin))            mfub(i) = zdqpbl(i)/(RG*MAX(zqumqe, zdqmin))
# Line 159  contains Line 151  contains
151    
152      DO i = 1, klon      DO i = 1, klon
153         ikb=kcbot(i)         ikb=kcbot(i)
154         zhcbase(i)=RCPD*ptu(i, ikb)+zgeoh(i, ikb)+RLVTT*pqu(i, ikb)         zhcbase(i)=RCPD*ptu(i, ikb) + zgeoh(i, ikb) + RLVTT*pqu(i, ikb)
155         ictop0(i)=kcbot(i)-1         ictop0(i)=kcbot(i)-1
156      ENDDO      ENDDO
157    
158      zalvdcp=RLVTT/RCPD      zalvdcp=RLVTT/RCPD
159      DO k=klev-1, 3, -1      DO k=klev-1, 3, -1
160         DO i = 1, klon         DO i = 1, klon
161            zhsat=RCPD*ztenh(i, k)+zgeoh(i, k)+RLVTT*zqsenh(i, k)            zhsat=RCPD*ztenh(i, k) + zgeoh(i, k) + RLVTT*zqsenh(i, k)
162            zgam=R5LES*zalvdcp*zqsenh(i, k)/ &            zgam=R5LES*zalvdcp*zqsenh(i, k)/ &
163                 ((1.-RETV *zqsenh(i, k))*(ztenh(i, k)-R4LES)**2)                 ((1.-RETV *zqsenh(i, k))*(ztenh(i, k)-R4LES)**2)
164            zzz=RCPD*ztenh(i, k)*0.608            zzz=RCPD*ztenh(i, k)*0.608
165            zhhat=zhsat-(zzz+zgam*zzz)/(1.+zgam*zzz/RLVTT)* &            zhhat=zhsat-(zzz + zgam*zzz)/(1. + zgam*zzz/RLVTT)* &
166                 MAX(zqsenh(i, k)-zqenh(i, k), 0.)                 MAX(zqsenh(i, k)-zqenh(i, k), 0.)
167            IF(k < ictop0(i).AND.zhcbase(i) > zhhat) ictop0(i)=k            IF(k < ictop0(i).AND.zhcbase(i) > zhhat) ictop0(i)=k
168         ENDDO         ENDDO
# Line 194  contains Line 186  contains
186            IF(ktype(i) == 2) zentr(i)=ENTRSCV            IF(ktype(i) == 2) zentr(i)=ENTRSCV
187         ENDDO         ENDDO
188    
189         IF (lmfdd) THEN ! si l'on considere le panache descendant         downdraft: IF (lmfdd) THEN
190              ! si l'on considere le panache descendant
191            ! calculer la precipitation issue du panache ascendant pour            ! calculer la precipitation issue du panache ascendant pour
192            ! determiner l'existence du panache descendant dans la convection            ! determiner l'existence du panache descendant dans la convection
193            DO i = 1, klon            DO i = 1, klon
# Line 202  contains Line 195  contains
195            ENDDO            ENDDO
196            DO k=2, klev            DO k=2, klev
197               DO i = 1, klon               DO i = 1, klon
198                  zrfl(i)=zrfl(i)+zdmfup(i, k)                  zrfl(i)=zrfl(i) + zdmfup(i, k)
199               ENDDO               ENDDO
200            ENDDO            ENDDO
201    
202            ! determiner le LFS (level of free sinking: niveau de plonge libre)            ! determiner le LFS (level of free sinking: niveau de plonge libre)
203            CALL flxdlfs(ztenh, zqenh, zgeoh, paph, ptu, pqu, &            CALL flxdlfs(ztenh, zqenh, zgeoh, paph, ptu, pqu, ldcum, kcbot, &
204                 ldcum, kcbot, kctop, mfub, zrfl, &                 kctop, mfub, zrfl, ptd, pqd, mfd, zmfds, zmfdq, zdmfdp, kdtop, &
205                 ptd, pqd, &                 lddraf)
                mfd, zmfds, zmfdq, zdmfdp, &  
                kdtop, lddraf)  
206    
207            ! calculer le panache descendant            ! calculer le panache descendant
208            CALL flxddraf(ztenh, zqenh, &            CALL flxddraf(ztenh, zqenh, zgeoh, paph, zrfl, ptd, pqd, mfd, &
209                 zgeoh, paph, zrfl, &                 zmfds, zmfdq, zdmfdp, lddraf, pen_d, pde_d)
                ptd, pqd, &  
                mfd, zmfds, zmfdq, zdmfdp, &  
                lddraf, pen_d, pde_d)  
210    
211            ! calculer de nouveau le flux de masse entrant a travers la base            ! calculer de nouveau le flux de masse entrant a travers la base
212            ! de la convection, sachant qu'il a ete modifie par le panache            ! de la convection, sachant qu'il a ete modifie par le panache
# Line 229  contains Line 217  contains
217                  llo1 = MFD(i, ikb) < 0.                  llo1 = MFD(i, ikb) < 0.
218                  zeps = 0.                  zeps = 0.
219                  IF (llo1) zeps = CMFDEPS                  IF (llo1) zeps = CMFDEPS
220                  zqumqe = pqu(i, ikb)+plu(i, ikb)- &                  zqumqe = pqu(i, ikb) + plu(i, ikb)- &
221                       zeps*pqd(i, ikb)-(1.-zeps)*zqenh(i, ikb)                       zeps*pqd(i, ikb)-(1.-zeps)*zqenh(i, ikb)
222                  zdqmin = MAX(0.01*zqenh(i, ikb), 1.E-10)                  zdqmin = MAX(0.01*zqenh(i, ikb), 1.E-10)
223                  zmfmax = (paph(i, ikb)-paph(i, ikb-1)) / (RG*dtime)                  zmfmax = (paph(i, ikb)-paph(i, ikb-1)) / (RG*dtime)
# Line 241  contains Line 229  contains
229                  ENDIF                  ENDIF
230                  IF (ktype(i) == 2) THEN                  IF (ktype(i) == 2) THEN
231                     zdh = RCPD*(ptu(i, ikb)-zeps*ptd(i, ikb)- &                     zdh = RCPD*(ptu(i, ikb)-zeps*ptd(i, ikb)- &
232                          (1.-zeps)*ztenh(i, ikb))+RLVTT*zqumqe                          (1.-zeps)*ztenh(i, ikb)) + RLVTT*zqumqe
233                     zdh = RG * MAX(zdh, 1.0E5*zdqmin)                     zdh = RG * MAX(zdh, 1.0E5*zdqmin)
234                     IF (zdhpbl(i) > 0..AND.ldcum(i))mfub1(i)=zdhpbl(i)/zdh                     IF (zdhpbl(i) > 0..AND.ldcum(i))mfub1(i)=zdhpbl(i)/zdh
235                  ENDIF                  ENDIF
# Line 266  contains Line 254  contains
254            DO i = 1, klon            DO i = 1, klon
255               IF (lddraf(i)) mfub(i)=mfub1(i)               IF (lddraf(i)) mfub(i)=mfub1(i)
256            ENDDO            ENDDO
257         ENDIF ! fin de test sur lmfdd         ENDIF downdraft
258    
259         ! calculer de nouveau le panache ascendant         ! calculer de nouveau le panache ascendant
260    

Legend:
Removed from v.71  
changed lines
  Added in v.82

  ViewVC Help
Powered by ViewVC 1.1.21