File: C:\NOAA\NEMS_11731\src\atmos\phys\lrgsclr.f
1 SUBROUTINE LRGSCL(IX,IM,KM,DT,T1,Q1,PRSL,DEL,PRSLK,RAIN,CLW)
2
3 USE MACHINE , ONLY : kind_phys
4 USE FUNCPHYS , ONLY : fpvs, ftdp, fthe, stma, ftlcl
5 USE PHYSCONS, HVAP => con_HVAP, CP => con_CP, RV => con_RV
6 &, EPS => con_eps, EPSM1 => con_epsm1, ROCP => con_ROCP
7 &, grav => con_g
8 implicit none
9
10
11
12 integer IX , IM, KM
13 real(kind=kind_phys) T1(IX,KM), Q1(IX,KM), PRSL(IX,KM),
14 & DEL(IX,KM), PRSLK(IX,KM), RAIN(IM),
15 & CLW(IM,KM), DT
16
17
18
19 integer k, kmax, I
20 real(kind=kind_phys) dpovg, EI, el2orc,
21 & elocp,
22 & pk, qcond, qevap,
23 & rnevap, SLKLCL,TDPD,
24 & THELCL, TLCL, val0, val1
25
26
27
28 PARAMETER(ELOCP=HVAP/CP, EL2ORC=HVAP*HVAP/(RV*CP))
29
30
31 real(kind=kind_phys) TO(IM,KM), QO(IM,KM), QS(IM,KM),
32 & THE(IM,KM), DQ(IM,KM), RAINLVL(IM,KM),
33 & ES(IM,KM), DQINT(IM), PINT(IM),
34 & DELQBAR(IM), DELTBAR(IM), THEBAR(IM),
35 & THEINT(IM)
36 integer KMLEV(IM,KM), KE(IM), KK(IM), KS(IM)
37 LOGICAL FLG(IM), TOPFLG(IM), TOTFLG
38
39
40
41 real(kind=kind_phys) cons_0
42 real(kind=kind_phys) cons_1pdm8
43
44 = 0.d0
45 = 1.d-8
46
47
48
49 = KM
50 DO K = 1, KM
51 do i=1,im
52 IF (PRSL(I,K) .GT. 6000.0) KMAX = K + 1
53 enddo
54 ENDDO
55
56
57
58 DO I=1,IM
59
60 (I) = 0.
61 DELTBAR(I) = 0.
62 DELQBAR(I) = 0.
63 FLG(I) = .FALSE.
64 TOPFLG(I) = .FALSE.
65 KE(I) = kmax + 1
66 KS(I) = 0
67 ENDDO
68 TOTFLG = .FALSE.
69
70
71
72
73
74
75 DO K = 1, KMAX
76 DO I=1,IM
77
78 (I,k) = T1(I,k)
79 QO(I,k) = Q1(I,k)
80 ENDDO
81 ENDDO
82
83
84
85
86 DO K = 1, KMAX
87 DO I=1,IM
88 es(I,k) = min(PRSL(I,k), fpvs(t1(I,k)))
89 (I,k) = EPS * ES(I,k) / (PRSL(I,k) + EPSM1*ES(I,k))
90 QS(I,k) = MAX(QS(I,k),cons_1pdm8)
91 ENDDO
92 ENDDO
93 DO K = 1, KMAX
94 DO I=1,IM
95 IF(QO(I,k).GT.QS(I,k)) FLG(I) = .TRUE.
96 ENDDO
97 ENDDO
98
99 DO I=1,IM
100 IF(FLG(I)) TOTFLG = .TRUE.
101 ENDDO
102 IF(.NOT.TOTFLG) RETURN
103
104 DO K = 1, KMAX
105 DO I = 1, IM
106 DQ(I,k) = 0.
107 THE(I,k) = TO(I,k)
108 ENDDO
109 ENDDO
110
111
112
113 DO K = 1, KMAX
114 DO I = 1, IM
115 IF(FLG(I)) THEN
116
117 = PRSLK(I,K)
118 THE(I,k) = FTHE(TO(I,k),PK)
119 IF(THE(I,k).EQ.0.) THEN
120 THE(I,k) = TO(I,k) / PK
121 ENDIF
122
123
124 (I,k) = QO(I,k)- QS(I,k)
125
126
127
128 (I,k)= THE(I,k) * (1. + HVAP*MAX(DQ(I,k),cons_0)
129 /(CP*TO(I,k)))
130 ENDIF
131 ENDDO
132 ENDDO
133 DO K = 1, KMAX
134 DO I = 1, IM
135 KMLEV(I,k) = 0
136 RAINLVL(I,k) = 0.
137 ENDDO
138 ENDDO
139
140
141
142 = 1
143 DO I = 1, IM
144 KK(I) = 0
145 DQINT(I) = 0.
146 THEINT(I) = 0.
147 THEBAR(I) = 0.
148 PINT(I) = 0.
149
150
151
152
153
154
155
156 IF(DQ(I,k).GT.0..AND.THE(I,k).GE.THE(I,K+1).AND.FLG(I)) THEN
157 DQINT(I) = DQINT(I) + DQ(I,k) * DEL(I,K)
158 THEINT(I) = THEINT(I) + THE(I,k) * DEL(I,K)
159 PINT(I) = PINT(I) + DEL(I,K)
160 KK(I) = KK(I) + 1
161 KMLEV(I,k) = KK(I)
162 ENDIF
163 ENDDO
164 DO K = 2, KMAX - 1
165 DO I = 1, IM
166 IF(DQ(I,k).GT.0..AND.THE(I,k).GE.THE(I,K+1).AND.FLG(I)) THEN
167 DQINT(I) = DQINT(I) + DQ(I,k) * DEL(I,K)
168 THEINT(I) = THEINT(I) + THE(I,k) * DEL(I,K)
169 PINT(I) = PINT(I) + DEL(I,K)
170 KK(I) = KK(I) + 1
171 KMLEV(I,k) = KK(I)
172 ENDIF
173 ENDDO
174 DO I = 1, IM
175 IF(PINT(I).GT.0.)THEBAR(I) = THEINT(I) / PINT(I)
176
177
178
179
180
181
182 IF(KMLEV(I,k).EQ.0.AND.KMLEV(I,K-1).GT.0.AND.
183 & THEBAR(I).GE.THE(I,k).AND..NOT.TOPFLG(I)) THEN
184 DQINT(I) = DQINT(I) + DQ(I,k) * DEL(I,K)
185 ENDIF
186 IF(KMLEV(I,k).EQ.0.AND.KMLEV(I,K-1).GT.0.AND.
187 & THEBAR(I).GE.THE(I,k).AND.DQINT(I).GT.0.
188 & .AND..NOT.TOPFLG(I)) THEN
189 KK(I) = KK(I) + 1
190 KMLEV(I,k) = KK(I)
191 TOPFLG(I) = .TRUE.
192
193 = PRSL(I,k) * QO(I,k)
194 & / (EPS - EPSM1*QO(I,k))
195 EI = MIN(MAX(EI,cons_1pdm8),ES(I,k))
196 = MAX(TO(I,k)-FTDP(EI),cons_0)
197 = FTLCL(TO(I,k), TDPD)
198 SLKLCL = PRSLK(I,K) * TLCL / TO(I,k)
199 THELCL = FTHE(TLCL,SLKLCL)
200 IF(THELCL.NE.0.) THEN
201 THE(I,k) = THELCL
202
203
204 ENDIF
205 THEINT(I) = THEINT(I) + THE(I,k) * DEL(I,K)
206 PINT(I) = PINT(I) + DEL(I,K)
207 ENDIF
208 ENDDO
209
210
211
212 DO I = 1, IM
213 IF(KMLEV(I,k).EQ.0.AND.KMLEV(I,K-1).GT.0) THEN
214 THEBAR(I) = THEINT(I) / PINT(I)
215 DQINT(I) = 0.
216 THEINT(I) = 0.
217 PINT(I) = 0.
218 KK(I) = 0
219 KS(I) = k - 1
220 KE(I) = KS(I) - KMLEV(I,k-1) + 1
221 FLG(I) = .false.
222 ENDIF
223 ENDDO
224 enddo
225
226
227
228
229 do k = 1, kmax
230 DO I = 1, IM
231 if(k.ge.KE(I).and.k.le.KS(I)) then
232
233 = PRSLK(I,K)
234
235 CALL STMA(THEBAR(i),PK,TO(I,k),QO(I,k))
236 THE(I,k) = THEBAR(I)
237 QS(I,k) = QO(I,k)
238 DPOVG = DEL(I,K) * (1.0/grav)
239 RAINLVL(I,k) = (Q1(I,k) - QO(I,k)) * dpovg
240 DELTBAR(I) = DELTBAR(I) + (TO(I,k) - T1(I,k)) * dpovg / PK
241 DELQBAR(I) = DELQBAR(I) + (QO(I,k) - Q1(I,k)) * dpovg
242 ENDIF
243
244
245
246 IF(KMLEV(I,k).EQ.0.AND.DQ(I,k).GT.0.) THEN
247 QCOND = (QO(I,k)-QS(I,k)) /
248 & (1.+EL2ORC*QS(I,k)/(TO(I,K)*TO(I,K)))
249 QO(I,k) = QO(I,k) - QCOND
250 TO(I,k) = TO(I,k) + QCOND * ELOCP
251
252 = PRSLK(I,K)
253
254 = DEL(I,K) * (1.0/grav)
255 RAINLVL(I,k) = (Q1(I,k) - QO(I,k)) * dpovg
256 DELTBAR(I) = DELTBAR(I) + (TO(I,k) - T1(I,k)) * dpovg / PK
257 DELQBAR(I) = DELQBAR(I) + (QO(I,k) - Q1(I,k)) * dpovg
258 QS(I,k) = QO(I,k)
259 ENDIF
260 ENDDO
261 ENDDO
262
263
264
265 DO K = KMAX, 1, -1
266 DO I = 1, IM
267 T1(I,k) = TO(I,k)
268 Q1(I,k) = QO(I,k)
269 DPOVG = DEL(I,K) * (1.0/grav)
270 RAIN(I) = RAIN(I) + RAINLVL(I,k) + CLW(I,k) * DPOVG
271 DQ(I,k) = (QO(I,k) - QS(I,k)) /
272 & (1. + EL2ORC*QS(I,k)/(TO(I,K)*TO(I,K)))
273 IF(RAIN(I).GT.0..AND.RAINLVL(I,k).LE.0.) THEN
274 QEVAP = -DQ(I,k)*(1.-EXP(-0.32*SQRT(DT*RAIN(I))))
275 RNEVAP = MIN(QEVAP*DPOVG,RAIN(I))
276 Q1(I,k) = Q1(I,k)+RNEVAP/DPOVG
277 T1(I,k) = T1(I,k)-RNEVAP/DPOVG*ELOCP
278 RAIN(I) = RAIN(I)-RNEVAP
279 DELTBAR(I) = DELTBAR(I) - RNEVAP * ELOCP
280 DELQBAR(I) = DELQBAR(I) + RNEVAP
281 ENDIF
282 ENDDO
283 ENDDO
284 DO I = 1, IM
285 RAIN(I) = MAX(RAIN(I),cons_0)
286 ENDDO
287
288 RETURN
289 END
290