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

Contents of /trunk/Sources/phylmd/Conflx/flxdlfs.f

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.21