/[lmdze]/trunk/phylmd/Conflx/flxdlfs.f
ViewVC logotype

Diff of /trunk/phylmd/Conflx/flxdlfs.f

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

trunk/libf/phylmd/Conflx/flxdlfs.f90 revision 52 by guez, Fri Sep 23 12:28:01 2011 UTC trunk/phylmd/Conflx/flxdlfs.f revision 82 by guez, Wed Mar 5 14:57:53 2014 UTC
# Line 1  Line 1 
1        SUBROUTINE flxdlfs(ptenh, pqenh, pgeoh, paph, ptu, pqu, &  module flxdlfs_m
2             ldcum, kcbot, kctop, pmfub, prfl, ptd, pqd, &  
3             pmfd, pmfds, pmfdq, pdmfdp, kdtop, lddraf)    IMPLICIT none
4        use dimens_m  
5        use dimphy  contains
6        use SUPHEC_M  
7        use yoethf_m    SUBROUTINE flxdlfs(ptenh, pqenh, pgeoh, paph, ptu, pqu, ldcum, kcbot, &
8              use yoecumf         kctop, pmfub, prfl, ptd, pqd, pmfd, pmfds, pmfdq, pdmfdp, kdtop, lddraf)
9        IMPLICIT none  
10  !      ! This routine calculates level of free sinking for cumulus
11  !----------------------------------------------------------------------      ! downdrafts and specifies T, q, u and v values
12  ! THIS ROUTINE CALCULATES LEVEL OF FREE SINKING FOR  
13  ! CUMULUS DOWNDRAFTS AND SPECIFIES T,Q,U AND V VALUES      ! To produce LFS-values for cumulus downdrafts for massflux
14  !      ! cumulus parameterization
15  ! TO PRODUCE LFS-VALUES FOR CUMULUS DOWNDRAFTS  
16  ! FOR MASSFLUX CUMULUS PARAMETERIZATION      ! Input are environmental values of T, q, u, v, p, Phi and updraft
17  !      ! values T, q, u and v and also cloud base massflux and
18  ! INPUT ARE ENVIRONMENTAL VALUES OF T,Q,U,V,P,PHI      ! cu-precipitation rate.  it returns T, q, u and v values and
19  ! AND UPDRAFT VALUES T,Q,U AND V AND ALSO      ! massflux at LFS.
20  ! CLOUD BASE MASSFLUX AND CU-PRECIPITATION RATE.  
21  ! IT RETURNS T,Q,U AND V VALUES AND MASSFLUX AT LFS.      ! Check for negative buoyancy of air of equal parts of moist
22  !      ! environmental air and cloud air.
23  ! CHECK FOR NEGATIVE BUOYANCY OF AIR OF EQUAL PARTS OF  
24  ! MOIST ENVIRONMENTAL AIR AND CLOUD AIR.      USE dimphy, ONLY: klev, klon
25  !----------------------------------------------------------------------      USE flxadjtq_m, ONLY: flxadjtq
26  !      USE suphec_m, ONLY: rcpd, retv
27        REAL ptenh(klon,klev)      USE yoecumf, ONLY: cmfdeps
28        REAL pqenh(klon,klev)  
29        REAL pgeoh(klon,klev), paph(klon,klev+1)      REAL ptenh(klon, klev)
30        REAL ptu(klon,klev), pqu(klon,klev)      REAL pqenh(klon, klev)
31        REAL pmfub(klon)      REAL, intent(in):: pgeoh(klon, klev), paph(klon, klev + 1)
32        REAL prfl(klon)      REAL ptu(klon, klev), pqu(klon, klev)
33  !      LOGICAL  ldcum(klon)
34        REAL ptd(klon,klev), pqd(klon,klev)      INTEGER  kcbot(klon), kctop(klon)
35        REAL pmfd(klon,klev), pmfds(klon,klev), pmfdq(klon,klev)      REAL pmfub(klon)
36        REAL pdmfdp(klon,klev)      REAL prfl(klon)
37        INTEGER  kcbot(klon), kctop(klon), kdtop(klon)      REAL ptd(klon, klev), pqd(klon, klev)
38        LOGICAL  ldcum(klon), lddraf(klon)      REAL pmfd(klon, klev), pmfds(klon, klev), pmfdq(klon, klev)
39  !      REAL pdmfdp(klon, klev)
40        REAL ztenwb(klon,klev), zqenwb(klon,klev), zcond(klon)      INTEGER kdtop(klon)
41        REAL zttest, zqtest, zbuo, zmftop      LOGICAL lddraf(klon)
42        LOGICAL  llo2(klon)  
43        INTEGER i, k, is, icall      ! Local:
44  !----------------------------------------------------------------------      REAL ztenwb(klon, klev), zqenwb(klon, klev), zcond(klon)
45        DO i= 1, klon      REAL zttest, zqtest, zbuo, zmftop
46           lddraf(i)=.FALSE.      LOGICAL  llo2(klon)
47           kdtop(i)=klev+1      INTEGER i, k, is, icall
48        ENDDO  
49  !      !----------------------------------------------------------------------
50  !----------------------------------------------------------------------  
51  ! DETERMINE LEVEL OF FREE SINKING BY      DO i= 1, klon
52  ! DOING A SCAN FROM TOP TO BASE OF CUMULUS CLOUDS         lddraf(i)=.FALSE.
53  !         kdtop(i)=klev + 1
54  ! FOR EVERY POINT AND PROCEED AS FOLLOWS:      ENDDO
55  !     (1) DETEMINE WET BULB ENVIRONMENTAL T AND Q  
56  !     (2) DO MIXING WITH CUMULUS CLOUD AIR      ! DETERMINE LEVEL OF FREE SINKING BY
57  !     (3) CHECK FOR NEGATIVE BUOYANCY      ! DOING A SCAN FROM TOP TO BASE OF CUMULUS CLOUDS
58  !  
59  ! THE ASSUMPTION IS THAT AIR OF DOWNDRAFTS IS MIXTURE      ! FOR EVERY POINT AND PROCEED AS FOLLOWS:
60  ! OF 50% CLOUD AIR + 50% ENVIRONMENTAL AIR AT WET BULB      !     (1) DETEMINE WET BULB ENVIRONMENTAL T AND Q
61  ! TEMPERATURE (I.E. WHICH BECAME SATURATED DUE TO      !     (2) DO MIXING WITH CUMULUS CLOUD AIR
62  ! EVAPORATION OF RAIN AND CLOUD WATER)      !     (3) CHECK FOR NEGATIVE BUOYANCY
63  !----------------------------------------------------------------------  
64  !      ! THE ASSUMPTION IS THAT AIR OF DOWNDRAFTS IS MIXTURE
65        DO 290 k = 3, klev-3      ! OF 50% CLOUD AIR + 50% ENVIRONMENTAL AIR AT WET BULB
66  !      ! TEMPERATURE (I.E. WHICH BECAME SATURATED DUE TO
67        is=0      ! EVAPORATION OF RAIN AND CLOUD WATER)
68        DO 212 i= 1, klon  
69           ztenwb(i,k)=ptenh(i,k)      DO k = 3, klev-3
70           zqenwb(i,k)=pqenh(i,k)         is=0
71           llo2(i) = ldcum(i).AND.prfl(i).GT.0. &         DO i= 1, klon
72                     .AND..NOT.lddraf(i) &            ztenwb(i, k)=ptenh(i, k)
73                     .AND.(k.LT.kcbot(i).AND.k.GT.kctop(i))            zqenwb(i, k)=pqenh(i, k)
74           IF ( llo2(i) ) is = is + 1            llo2(i) = ldcum(i).AND.prfl(i).GT.0. &
75    212 CONTINUE                 .AND..NOT.lddraf(i) &
76        IF(is.EQ.0) GO TO 290                 .AND.(k.LT.kcbot(i).AND.k.GT.kctop(i))
77  !            IF ( llo2(i) ) is = is + 1
78        icall=2         end DO
79        CALL flxadjtq(paph(1,k), ztenwb(1,k), zqenwb(1,k), llo2, icall)         IF(is.EQ.0) cycle
80  !  
81  !----------------------------------------------------------------------         icall=2
82  ! DO MIXING OF CUMULUS AND ENVIRONMENTAL AIR         CALL flxadjtq(paph(:, k), ztenwb(1, k), zqenwb(1, k), llo2, icall)
83  ! AND CHECK FOR NEGATIVE BUOYANCY.  
84  ! THEN SET VALUES FOR DOWNDRAFT AT LFS.         ! DO MIXING OF CUMULUS AND ENVIRONMENTAL AIR
85  !----------------------------------------------------------------------         ! AND CHECK FOR NEGATIVE BUOYANCY.
86        DO 222 i= 1, klon         ! THEN SET VALUES FOR DOWNDRAFT AT LFS.
87        IF (llo2(i)) THEN  
88           zttest=0.5*(ptu(i,k)+ztenwb(i,k))         DO i= 1, klon
89           zqtest=0.5*(pqu(i,k)+zqenwb(i,k))            IF (llo2(i)) THEN
90           zbuo=zttest*(1.+RETV*zqtest)- &               zttest=0.5*(ptu(i, k) + ztenwb(i, k))
91                ptenh(i,k)*(1.+RETV  *pqenh(i,k))               zqtest=0.5*(pqu(i, k) + zqenwb(i, k))
92           zcond(i)=pqenh(i,k)-zqenwb(i,k)               zbuo=zttest*(1. + RETV*zqtest)- &
93           zmftop=-CMFDEPS*pmfub(i)                    ptenh(i, k)*(1. + RETV  *pqenh(i, k))
94           IF (zbuo.LT.0..AND.prfl(i).GT.10.*zmftop*zcond(i)) THEN               zcond(i)=pqenh(i, k)-zqenwb(i, k)
95              kdtop(i)=k               zmftop=-CMFDEPS*pmfub(i)
96              lddraf(i)=.TRUE.               IF (zbuo.LT.0..AND.prfl(i).GT.10.*zmftop*zcond(i)) THEN
97              ptd(i,k)=zttest                  kdtop(i)=k
98              pqd(i,k)=zqtest                  lddraf(i)=.TRUE.
99              pmfd(i,k)=zmftop                  ptd(i, k)=zttest
100              pmfds(i,k)=pmfd(i,k)*(RCPD*ptd(i,k)+pgeoh(i,k))                  pqd(i, k)=zqtest
101              pmfdq(i,k)=pmfd(i,k)*pqd(i,k)                  pmfd(i, k)=zmftop
102              pdmfdp(i,k-1)=-0.5*pmfd(i,k)*zcond(i)                  pmfds(i, k)=pmfd(i, k)*(RCPD*ptd(i, k) + pgeoh(i, k))
103              prfl(i)=prfl(i)+pdmfdp(i,k-1)                  pmfdq(i, k)=pmfd(i, k)*pqd(i, k)
104           ENDIF                  pdmfdp(i, k-1)=-0.5*pmfd(i, k)*zcond(i)
105        ENDIF                  prfl(i)=prfl(i) + pdmfdp(i, k-1)
106    222 CONTINUE               ENDIF
107  !            ENDIF
108    290 CONTINUE         end DO
109  !      end DO
110        RETURN  
111        END    END SUBROUTINE flxdlfs
112    
113    end module flxdlfs_m

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

  ViewVC Help
Powered by ViewVC 1.1.21