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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 328 - (show annotations)
Thu Jun 13 14:40:06 2019 UTC (4 years, 11 months ago) by guez
File size: 3616 byte(s)
Change all `.f` suffixes to `.f90`. (The opposite was done in revision
82.)  Because of change of philosopy in GNUmakefile: we already had a
rewritten rule for `.f`, so it does not make the makefile longer to
replace it by a rule for `.f90`. And it spares us options of
makedepf90 and of the compiler. Also we prepare the way for a simpler
`CMakeLists.txt`.

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