File: C:\NOAA\NEMS_11731\src\atmos\phys\precpd.f
1 SUBROUTINE PRECPD (IM,IX,KM,DT,DEL,PRSL,PS,Q,CWM,T,RN
2 &, rainp,u00k,psautco,prautco,evpco,lprnt,jpr)
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 USE MACHINE , ONLY : kind_phys
49 USE FUNCPHYS , ONLY : fpvs
50 USE PHYSCONS, grav => con_g, HVAP => con_HVAP, HFUS => con_HFUS
51 &, TTP => con_TTP, CP => con_CP
52 &, EPS => con_eps, EPSM1 => con_epsm1
53 implicit none
54
55
56 real (kind=kind_phys) G, H1, H2, H1000
57 &, H1000G, D00, D125, D5
58 &, ELWV, ELIV, ROW
59 &, EPSQ, DLDT, TM10, ELIW
60 &, RCP, RROW
61 PARAMETER (G=grav, H1=1.E0, H2=2.E0, H1000=1000.0
62 &, H1000G=H1000/G, D00=0.E0, D125=.125E0, D5=0.5E0
63 &, ELWV=HVAP, ELIV=HVAP+HFUS, ROW=1.E3
64 &, EPSQ=2.E-12, DLDT=2274.E0,TM10=TTP-10.0
65 &, ELIW=ELIV-ELWV, RCP=H1/CP, RROW=H1/ROW)
66
67 real(kind=kind_phys), parameter :: cons_0=0.0, cons_p01=0.01
68 &, cons_20=20.0
69 &, cons_m30=-30.0, cons_50=50.0
70
71 integer IM, IX, KM, LAT, jpr
72 real (kind=kind_phys) Q(IX,KM), T(IX,KM), CWM(IX,KM)
73 &, DEL(IX,KM), PRSL(IX,KM)
74
75 , PS(IM), RN(IM), SR(IM)
76 &, TCW(IM), DT
77
78
79 , RAINP(IM,KM), RNP(IM),
80 & psautco, prautco, evpco
81
82
83 real (kind=kind_phys) ERR(IM), ERS(IM), PRECRL(IM)
84 &, PRECSL(IM), PRECRL1(IM), PRECSL1(IM)
85 &, RQ(IM), CONDT(IM)
86 &, CONDE(IM), RCONDE(IM), TMT0(IM)
87 &, WMIN(IM,KM), WMINK(IM), PRES(IM)
88 &, WMINI(IM,KM), CCR(IM), CCLIM(KM)
89 &, TT(IM), QQ(IM), WW(IM)
90 &, WFIX(KM), U00K(IM,KM), ES(IM)
91 &, Zaodt
92
93 integer IW(IM,KM), IPR(IM), IWL(IM), IWL1(IM)
94
95 LOGICAL COMPUT(IM)
96 logical lprnt
97
98 real (kind=kind_phys) ke, rdt, us, cclimit, climit, cws, csm1
99 &, crs1, crs2, cr, aa2, dtcp, c00, cmr
100 &, tem, c1, c2, wwn
101
102 , precrk, precsk, pres1, qk, qw, qi
103 &, ai, bi, qint, fiw, wws, cwmk, expf
104 &, psaut, psaci, amaxcm, tem1, tem2
105 &, tmt0k, tmt15, psm1, psm2, ppr
106 &, rprs, erk, pps, sid, rid, amaxps
107 &, praut, pracw, fi, qc, amaxrq, rqkll
108 integer i, k, ihpr, n
109
110
111
112
113
114
115
116
117
118 = H1 / DT
119
120
121
122
123
124 = evpco
125
126 = H1
127 CCLIMIT = 1.0E-3
128 CLIMIT = 1.0E-20
129 CWS = 0.025
130
131 = 800.0 * RDT
132
133 = 5.0000E-8 * zaodt
134 CRS1 = 5.00000E-6 * zaodt
135 CRS2 = 6.66600E-10 * zaodt
136 CR = 5.0E-4 * zaodt
137 AA2 = 1.25E-3 * zaodt
138
139 = ke * sqrt(rdt)
140
141
142 = DT * RCP
143
144
145
146
147
148 = prautco * DT
149 = 1.0 / 3.0E-4
150
151
152 = 300.0
153 C2 = 0.5
154
155
156
157
158 DO K=1,KM
159 DO I=1,IM
160 tem = (prsl(i,k)*0.00001)
161
162 (I,K) = 0.0
163 wmin(i,k) = 1.0e-5 * tem
164 wmini(i,k) = 1.0e-5 * tem
165
166
167
168
169
170
171 (i,k) = 0.0
172
173 ENDDO
174 ENDDO
175 DO I=1,IM
176
177
178
179 (I) = 0
180 PRECRL1(I) = D00
181 PRECSL1(I) = D00
182 COMPUT(I) = .FALSE.
183 RN(I) = D00
184 SR(I) = D00
185 ccr(i) = D00
186
187 (I) = D00
188 ENDDO
189
190 DO K=1, KM-1
191 DO I=1,IM
192 tem = min(wmin(i,k), wmini(i,k))
193 IF (CWM(I,K) .GT. tem) COMPUT(I) = .TRUE.
194 ENDDO
195 ENDDO
196 IHPR = 0
197 DO I=1,IM
198 IF (COMPUT(I)) THEN
199 IHPR = IHPR + 1
200 IPR(IHPR) = I
201 ENDIF
202 ENDDO
203
204
205
206
207 DO K=KM,1,-1
208 DO N=1,IHPR
209 PRECRL(N) = PRECRL1(N)
210 PRECSL(N) = PRECSL1(N)
211 ERR (N) = D00
212 ERS (N) = D00
213 IWL (N) = 0
214
215 = IPR(N)
216 TT(N) = T(I,K)
217 QQ(N) = Q(I,K)
218 WW(N) = CWM(I,K)
219 WMINK(N) = WMIN(I,K)
220 PRES(N) = prSL(I,K)
221
222 = MAX(cons_0, PRECRL1(N))
223 PRECSK = MAX(cons_0, PRECSL1(N))
224 WWN = MAX(WW(N), CLIMIT)
225
226 IF (WWN .GT. CLIMIT .OR. (PRECRK+PRECSK) .GT. D00) THEN
227 COMPUT(N) = .TRUE.
228 ELSE
229 COMPUT(N) = .FALSE.
230 ENDIF
231 ENDDO
232
233
234 DO N=1,IHPR
235 IF (COMPUT(N)) THEN
236 I = IPR(N)
237 CONDE(N) = (DT/G) * DEL(I,K)
238 CONDT(N) = CONDE(N) * RDT
239 RCONDE(N) = H1 / CONDE(N)
240 QK = MAX(EPSQ, QQ(N))
241 TMT0(N) = TT(N) - 273.16
242 WWN = MAX(WW(N), CLIMIT)
243
244
245
246
247
248
249
250 = pres(n)
251
252 = min(pres1, fpvs(TT(N)))
253 QW = EPS * QW / (PRES1 + EPSM1 * QW)
254 QW = MAX(QW,EPSQ)
255
256
257
258
259
260
261
262
263
264
265
266 = qw
267 qint = qw
268
269
270
271 IF(TMT0(N).LT.-15.) THEN
272 FI = QK - U00K(I,K)*QI
273 IF(FI.GT.D00.OR.WWN.GT.CLIMIT) THEN
274 IWL(N) = 1
275 ELSE
276 IWL(N) = 0
277 ENDIF
278
279 ELSEIF (TMT0(N).GE.0.) THEN
280 IWL(N) = 0
281
282
283 ELSE
284 IWL(N) = 0
285 IF(IWL1(N).EQ.1.AND.WWN.GT.CLIMIT) IWL(N)=1
286 ENDIF
287
288
289
290
291
292 = FLOAT(IWL(N))
293 QC = (H1-FIW)*QINT + FIW*QI
294
295 IF(QC .LE. 1.0E-10) THEN
296 RQ(N) = D00
297 ELSE
298 RQ(N) = QK / QC
299 ENDIF
300
301 IF(RQ(N).LT.U00K(I,K)) THEN
302 CCR(N)=D00
303 ELSEIF(RQ(N).GE.US) THEN
304 CCR(N)=US
305 ELSE
306 RQKLL=MIN(US,RQ(N))
307 CCR(N)= H1-SQRT((US-RQKLL)/(US-U00K(I,K)))
308 ENDIF
309
310 ENDIF
311 ENDDO
312
313
314
315
316
317
318
319
320
321
322
323
324
325 DO N=1,IHPR
326 IF (COMPUT(N) .AND. CCR(N) .GT. 0.0) THEN
327 WWS = WW(N)
328 CWMK = MAX(cons_0, WWS)
329
330 IF (IWL(N) .EQ. 1) THEN
331 = MAX(cons_0, CWMK - WMINI(IPR(N),K))
332 EXPF = DT * EXP(0.025*TMT0(N))
333 PSAUT = MIN(CWMK, psautco*EXPF*AMAXCM)
334
335
336
337
338
339
340
341
342
343
344 (N) = WW(N) - PSAUT
345 CWMK = MAX(cons_0, WW(N))
346
347 = MIN(CWMK, AA2*EXPF*PRECSL1(N)*CWMK)
348
349 WW(N) = WW(N) - PSACI
350
351 PRECSL(N) = PRECSL(N) + (WWS - WW(N)) * CONDT(N)
352 ELSE
353
354
355
356
357 = CWMK
358 TEM1 = PRECSL1(N) + PRECRL1(N)
359 TEM2 = MIN(MAX(cons_0, 268.0-TT(N)), cons_20)
360 TEM = (1.0+C1*SQRT(TEM1*RDT)) * (1+C2*SQRT(TEM2))
361
362 = AMAXCM * CMR * TEM / max(CCR(N),cons_p01)
363 TEM2 = MIN(cons_50, TEM2*TEM2)
364 PRAUT = C00 * TEM * AMAXCM * (1.0-EXP(-TEM2))
365 PRAUT = MIN(PRAUT, CWMK)
366 WW(N) = WW(N) - PRAUT
367
368
369
370
371
372
373
374
375
376
377
378
379 (N) = PRECRL(N) + (WWS - WW(N)) * CONDT(N)
380
381
382
383 (N) = RNP(N) + (WWS - WW(N))
384 ENDIF
385 ENDIF
386 ENDDO
387
388
389
390
391 DO N=1,IHPR
392 IF (COMPUT(N)) THEN
393 I = IPR(N)
394 QK = MAX(EPSQ, QQ(N))
395 TMT0K = MAX(cons_m30, TMT0(N))
396 PRECRK = MAX(cons_0, PRECRL(N))
397 PRECSK = MAX(cons_0, PRECSL(N))
398 AMAXRQ = MAX(cons_0, U00K(I,K)-RQ(N)) * CONDE(N)
399
400
401
402 = KE * AMAXRQ * SQRT(PRECRK)
403
404 IF (TMT0(N) .GE. 0.) THEN
405 PPS = 0.
406 ELSE
407 PPS = (CRS1+CRS2*TMT0K) * AMAXRQ * PRECSK / U00K(I,K)
408 END IF
409
410 =PRECRK+PRECSK
411 IF(RQ(N).GE.1.0E-10) ERK = AMAXRQ * QK * RDT / RQ(N)
412 IF (PPR+PPS .GT. ABS(ERK)) THEN
413 RPRS = ERK / (PRECRK+PRECSK)
414 PPR = PRECRK * RPRS
415 PPS = PRECSK * RPRS
416 ENDIF
417 PPR = MIN(PPR, PRECRK)
418 PPS = MIN(PPS, PRECSK)
419 ERR(N) = PPR * RCONDE(N)
420 ERS(N) = PPS * RCONDE(N)
421 PRECRL(N) = PRECRL(N) - PPR
422
423
424
425 (N) = RNP(N) - ERR(N)
426
427 (N) = PRECSL(N) - PPS
428 ENDIF
429 ENDDO
430
431 DO N=1,IHPR
432 IF (COMPUT(N)) THEN
433 IF (TMT0(N) .GT. 0.) THEN
434 AMAXPS = MAX(cons_0, PRECSL(N))
435 PSM1 = CSM1 * TMT0(N) * TMT0(N) * AMAXPS
436 PSM2 = CWS * CR * MAX(cons_0, WW(N)) * AMAXPS
437 PPR = (PSM1 + PSM2) * CONDE(N)
438 IF (PPR .GT. AMAXPS) THEN
439 PPR = AMAXPS
440 PSM1 = AMAXPS * RCONDE(N)
441 ENDIF
442 PRECRL(N) = PRECRL(N) + PPR
443
444
445
446 (N) = RNP(N) + PPR * RCONDE(N)
447
448 (N) = PRECSL(N) - PPR
449 ELSE
450 PSM1 = D00
451 ENDIF
452
453
454 (N) = TT(N) - DTCP * (ELWV*ERR(N)+ELIV*ERS(N)+ELIW*PSM1)
455 QQ(N) = QQ(N) + DT * (ERR(N)+ERS(N))
456 ENDIF
457 ENDDO
458
459 DO N=1,IHPR
460 IWL1(N) = IWL(N)
461 PRECRL1(N) = MAX(cons_0, PRECRL(N))
462 PRECSL1(N) = MAX(cons_0, PRECSL(N))
463 I = IPR(N)
464 T(I,K) = TT(N)
465 Q(I,K) = QQ(N)
466 CWM(I,K) = WW(N)
467 IW(I,K) = IWL(N)
468
469
470
471 (I,K) = RNP(N)
472 ENDDO
473
474
475
476 do i = 1, im
477 if (cwm(i,k) < 0.) then
478 tem = q(i,k) + cwm(i,k)
479 if (tem >= 0.0) then
480 q(i,k) = tem
481 t(i,k) = t(i,k) - elwv * rcp * cwm(i,k)
482 cwm(i,k) = 0.
483 elseif (q(i,k) > 0.0) then
484 cwm(i,k) = tem
485 t(i,k) = t(i,k) + elwv * rcp * q(i,k)
486 q(i,k) = 0.0
487 endif
488 endif
489 enddo
490
491 ENDDO
492
493
494
495
496 DO N=1,IHPR
497 I = IPR(N)
498 RN(I) = (PRECRL1(N) + PRECSL1(N)) * RROW
499
500
501
502
503 = 0.
504 SID = 0.
505 IF (PRECRL1(N) .GE. 1.E-13) RID = 1.
506 IF (PRECSL1(N) .GE. 1.E-13) SID = -1.
507 SR(I) = RID + SID
508 ENDDO
509
510 RETURN
511 END
512