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

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

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

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

Legend:
Removed from v.77  
changed lines
  Added in v.78

  ViewVC Help
Powered by ViewVC 1.1.21