1 | MODULE module_cu_kfeta |
---|
2 | |
---|
3 | USE module_wrf_error |
---|
4 | |
---|
5 | !-------------------------------------------------------------------- |
---|
6 | ! Lookup table variables: |
---|
7 | INTEGER, PARAMETER :: KFNT=250,KFNP=220 |
---|
8 | REAL, DIMENSION(KFNT,KFNP),PRIVATE, SAVE :: TTAB,QSTAB |
---|
9 | REAL, DIMENSION(KFNP),PRIVATE, SAVE :: THE0K |
---|
10 | REAL, DIMENSION(200),PRIVATE, SAVE :: ALU |
---|
11 | REAL, PRIVATE, SAVE :: RDPR,RDTHK,PLUTOP |
---|
12 | ! Note: KF Lookup table is used by subroutines KF_eta_PARA, TPMIX2, |
---|
13 | ! TPMIX2DD, ENVIRTHT |
---|
14 | ! End of Lookup table variables: |
---|
15 | |
---|
16 | CONTAINS |
---|
17 | |
---|
18 | SUBROUTINE KF_eta_CPS( & |
---|
19 | ids,ide, jds,jde, kds,kde & |
---|
20 | ,ims,ime, jms,jme, kms,kme & |
---|
21 | ,its,ite, jts,jte, kts,kte & |
---|
22 | ,DT,KTAU,DX,CUDT,CURR_SECS,ADAPT_STEP_FLAG & |
---|
23 | ,rho,RAINCV,PRATEC,NCA & |
---|
24 | ,U,V,TH,T,W,dz8w,Pcps,pi & |
---|
25 | ,W0AVG,XLV0,XLV1,XLS0,XLS1,CP,R,G,EP1 & |
---|
26 | ,EP2,SVP1,SVP2,SVP3,SVPT0 & |
---|
27 | ,STEPCU,CU_ACT_FLAG,warm_rain,CUTOP,CUBOT & |
---|
28 | ,QV & |
---|
29 | ! optionals |
---|
30 | ,F_QV ,F_QC ,F_QR ,F_QI ,F_QS & |
---|
31 | ,RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN & |
---|
32 | ,RQICUTEN,RQSCUTEN & |
---|
33 | ) |
---|
34 | ! |
---|
35 | !------------------------------------------------------------- |
---|
36 | IMPLICIT NONE |
---|
37 | !------------------------------------------------------------- |
---|
38 | INTEGER, INTENT(IN ) :: & |
---|
39 | ids,ide, jds,jde, kds,kde, & |
---|
40 | ims,ime, jms,jme, kms,kme, & |
---|
41 | its,ite, jts,jte, kts,kte |
---|
42 | |
---|
43 | INTEGER, INTENT(IN ) :: STEPCU |
---|
44 | LOGICAL, INTENT(IN ) :: warm_rain |
---|
45 | |
---|
46 | REAL, INTENT(IN ) :: XLV0,XLV1,XLS0,XLS1 |
---|
47 | REAL, INTENT(IN ) :: CP,R,G,EP1,EP2 |
---|
48 | REAL, INTENT(IN ) :: SVP1,SVP2,SVP3,SVPT0 |
---|
49 | |
---|
50 | INTEGER, INTENT(IN ) :: KTAU |
---|
51 | |
---|
52 | REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , & |
---|
53 | INTENT(IN ) :: & |
---|
54 | U, & |
---|
55 | V, & |
---|
56 | W, & |
---|
57 | TH, & |
---|
58 | T, & |
---|
59 | QV, & |
---|
60 | dz8w, & |
---|
61 | Pcps, & |
---|
62 | rho, & |
---|
63 | pi |
---|
64 | ! |
---|
65 | REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , & |
---|
66 | INTENT(INOUT) :: & |
---|
67 | W0AVG |
---|
68 | |
---|
69 | REAL, INTENT(IN ) :: DT, DX |
---|
70 | REAL, INTENT(IN ) :: CUDT |
---|
71 | REAL, INTENT(IN ) :: CURR_SECS |
---|
72 | LOGICAL,INTENT(IN ) :: ADAPT_STEP_FLAG |
---|
73 | ! |
---|
74 | REAL, DIMENSION( ims:ime , jms:jme ), & |
---|
75 | INTENT(INOUT) :: RAINCV |
---|
76 | |
---|
77 | REAL, DIMENSION( ims:ime , jms:jme ), & |
---|
78 | INTENT(INOUT) :: PRATEC |
---|
79 | |
---|
80 | REAL, DIMENSION( ims:ime , jms:jme ), & |
---|
81 | INTENT(INOUT) :: NCA |
---|
82 | |
---|
83 | REAL, DIMENSION( ims:ime , jms:jme ), & |
---|
84 | INTENT(OUT) :: CUBOT, & |
---|
85 | CUTOP |
---|
86 | |
---|
87 | LOGICAL, DIMENSION( ims:ime , jms:jme ), & |
---|
88 | INTENT(INOUT) :: CU_ACT_FLAG |
---|
89 | |
---|
90 | ! |
---|
91 | ! Optional arguments |
---|
92 | ! |
---|
93 | |
---|
94 | REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), & |
---|
95 | OPTIONAL, & |
---|
96 | INTENT(INOUT) :: & |
---|
97 | RTHCUTEN, & |
---|
98 | RQVCUTEN, & |
---|
99 | RQCCUTEN, & |
---|
100 | RQRCUTEN, & |
---|
101 | RQICUTEN, & |
---|
102 | RQSCUTEN |
---|
103 | |
---|
104 | ! |
---|
105 | ! Flags relating to the optional tendency arrays declared above |
---|
106 | ! Models that carry the optional tendencies will provdide the |
---|
107 | ! optional arguments at compile time; these flags all the model |
---|
108 | ! to determine at run-time whether a particular tracer is in |
---|
109 | ! use or not. |
---|
110 | ! |
---|
111 | LOGICAL, OPTIONAL :: & |
---|
112 | F_QV & |
---|
113 | ,F_QC & |
---|
114 | ,F_QR & |
---|
115 | ,F_QI & |
---|
116 | ,F_QS |
---|
117 | |
---|
118 | |
---|
119 | ! LOCAL VARS |
---|
120 | |
---|
121 | LOGICAL :: flag_qr, flag_qi, flag_qs |
---|
122 | |
---|
123 | REAL, DIMENSION( kts:kte ) :: & |
---|
124 | U1D, & |
---|
125 | V1D, & |
---|
126 | T1D, & |
---|
127 | DZ1D, & |
---|
128 | QV1D, & |
---|
129 | P1D, & |
---|
130 | RHO1D, & |
---|
131 | W0AVG1D |
---|
132 | |
---|
133 | REAL, DIMENSION( kts:kte ):: & |
---|
134 | DQDT, & |
---|
135 | DQIDT, & |
---|
136 | DQCDT, & |
---|
137 | DQRDT, & |
---|
138 | DQSDT, & |
---|
139 | DTDT |
---|
140 | |
---|
141 | REAL :: TST,tv,PRS,RHOE,W0,SCR1,DXSQ,tmp |
---|
142 | |
---|
143 | INTEGER :: i,j,k,NTST |
---|
144 | REAL :: lastdt = -1.0 |
---|
145 | REAL :: W0AVGfctr, W0fctr, W0den |
---|
146 | LOGICAL :: run_param |
---|
147 | |
---|
148 | ! |
---|
149 | DXSQ=DX*DX |
---|
150 | |
---|
151 | !---------------------- |
---|
152 | NTST=STEPCU |
---|
153 | TST=float(NTST*2) |
---|
154 | flag_qr = .FALSE. |
---|
155 | flag_qi = .FALSE. |
---|
156 | flag_qs = .FALSE. |
---|
157 | IF ( PRESENT(F_QR) ) flag_qr = F_QR |
---|
158 | IF ( PRESENT(F_QI) ) flag_qi = F_QI |
---|
159 | IF ( PRESENT(F_QS) ) flag_qs = F_QS |
---|
160 | ! |
---|
161 | if (lastdt < 0) then |
---|
162 | lastdt = dt |
---|
163 | endif |
---|
164 | |
---|
165 | if (ADAPT_STEP_FLAG) then |
---|
166 | W0AVGfctr = 2 * MAX(CUDT*60,dt) - dt |
---|
167 | W0fctr = dt |
---|
168 | W0den = 2 * MAX(CUDT*60,dt) |
---|
169 | else |
---|
170 | W0AVGfctr = (TST-1.) |
---|
171 | W0fctr = 1. |
---|
172 | W0den = TST |
---|
173 | endif |
---|
174 | |
---|
175 | DO J = jts,jte |
---|
176 | DO K=kts,kte |
---|
177 | DO I= its,ite |
---|
178 | ! SCR1=-5.0E-4*G*rho(I,K,J)*(w(I,K,J)+w(I,K+1,J)) |
---|
179 | ! TV=T(I,K,J)*(1.+EP1*QV(I,K,J)) |
---|
180 | ! RHOE=Pcps(I,K,J)/(R*TV) |
---|
181 | ! W0=-101.9368*SCR1/RHOE |
---|
182 | W0=0.5*(w(I,K,J)+w(I,K+1,J)) |
---|
183 | |
---|
184 | ! Old: |
---|
185 | ! |
---|
186 | ! W0AVG(I,K,J)=(W0AVG(I,K,J)*(TST-1.)+W0)/TST |
---|
187 | ! |
---|
188 | ! New, to support adaptive time step: |
---|
189 | ! |
---|
190 | W0AVG(I,K,J) = ( W0AVG(I,K,J) * W0AVGfctr + W0 * W0fctr ) / W0den |
---|
191 | ENDDO |
---|
192 | ENDDO |
---|
193 | ENDDO |
---|
194 | lastdt = dt |
---|
195 | |
---|
196 | |
---|
197 | ! |
---|
198 | !...CHECK FOR CONVECTIVE INITIATION EVERY 5 MINUTES (OR NTST/2)... |
---|
199 | ! |
---|
200 | !---------------------- |
---|
201 | |
---|
202 | ! |
---|
203 | ! Modified for adaptive time step |
---|
204 | ! |
---|
205 | if (ADAPT_STEP_FLAG) then |
---|
206 | if ( (KTAU .eq. 1) .or. (cudt .eq. 0) .or. & |
---|
207 | ( CURR_SECS + dt >= & |
---|
208 | ( int( CURR_SECS / ( cudt * 60 ) ) + 1 ) * cudt * 60 ) ) then |
---|
209 | run_param = .TRUE. |
---|
210 | else |
---|
211 | run_param = .FALSE. |
---|
212 | endif |
---|
213 | |
---|
214 | else |
---|
215 | if (MOD(KTAU,NTST) .EQ. 0 .or. KTAU .eq. 1) then |
---|
216 | run_param = .TRUE. |
---|
217 | else |
---|
218 | run_param = .FALSE. |
---|
219 | endif |
---|
220 | endif |
---|
221 | |
---|
222 | if (run_param) then |
---|
223 | ! |
---|
224 | DO J = jts,jte |
---|
225 | DO I= its,ite |
---|
226 | CU_ACT_FLAG(i,j) = .true. |
---|
227 | ENDDO |
---|
228 | ENDDO |
---|
229 | |
---|
230 | DO J = jts,jte |
---|
231 | DO I=its,ite |
---|
232 | |
---|
233 | |
---|
234 | IF ( NCA(I,J) .ge. 0.5*DT ) then |
---|
235 | CU_ACT_FLAG(i,j) = .false. |
---|
236 | ELSE |
---|
237 | |
---|
238 | DO k=kts,kte |
---|
239 | DQDT(k)=0. |
---|
240 | DQIDT(k)=0. |
---|
241 | DQCDT(k)=0. |
---|
242 | DQRDT(k)=0. |
---|
243 | DQSDT(k)=0. |
---|
244 | DTDT(k)=0. |
---|
245 | ENDDO |
---|
246 | RAINCV(I,J)=0. |
---|
247 | CUTOP(I,J)=KTS |
---|
248 | CUBOT(I,J)=KTE+1 |
---|
249 | PRATEC(I,J)=0. |
---|
250 | ! |
---|
251 | ! assign vars from 3D to 1D |
---|
252 | |
---|
253 | DO K=kts,kte |
---|
254 | U1D(K) =U(I,K,J) |
---|
255 | V1D(K) =V(I,K,J) |
---|
256 | T1D(K) =T(I,K,J) |
---|
257 | RHO1D(K) =rho(I,K,J) |
---|
258 | QV1D(K)=QV(I,K,J) |
---|
259 | P1D(K) =Pcps(I,K,J) |
---|
260 | W0AVG1D(K) =W0AVG(I,K,J) |
---|
261 | DZ1D(k)=dz8w(I,K,J) |
---|
262 | ENDDO |
---|
263 | CALL KF_eta_PARA(I, J, & |
---|
264 | U1D,V1D,T1D,QV1D,P1D,DZ1D, & |
---|
265 | W0AVG1D,DT,DX,DXSQ,RHO1D, & |
---|
266 | XLV0,XLV1,XLS0,XLS1,CP,R,G, & |
---|
267 | EP2,SVP1,SVP2,SVP3,SVPT0, & |
---|
268 | DQDT,DQIDT,DQCDT,DQRDT,DQSDT,DTDT, & |
---|
269 | RAINCV,PRATEC,NCA, & |
---|
270 | flag_QI,flag_QS,warm_rain, & |
---|
271 | CUTOP,CUBOT,CUDT, & |
---|
272 | ids,ide, jds,jde, kds,kde, & |
---|
273 | ims,ime, jms,jme, kms,kme, & |
---|
274 | its,ite, jts,jte, kts,kte) |
---|
275 | IF(PRESENT(rthcuten).AND.PRESENT(rqvcuten)) THEN |
---|
276 | DO K=kts,kte |
---|
277 | RTHCUTEN(I,K,J)=DTDT(K)/pi(I,K,J) |
---|
278 | RQVCUTEN(I,K,J)=DQDT(K) |
---|
279 | ENDDO |
---|
280 | ENDIF |
---|
281 | |
---|
282 | IF(PRESENT(rqrcuten).AND.PRESENT(rqccuten)) THEN |
---|
283 | IF( F_QR )THEN |
---|
284 | DO K=kts,kte |
---|
285 | RQRCUTEN(I,K,J)=DQRDT(K) |
---|
286 | RQCCUTEN(I,K,J)=DQCDT(K) |
---|
287 | ENDDO |
---|
288 | ELSE |
---|
289 | ! This is the case for Eta microphysics without 3d rain field |
---|
290 | DO K=kts,kte |
---|
291 | RQRCUTEN(I,K,J)=0. |
---|
292 | RQCCUTEN(I,K,J)=DQRDT(K)+DQCDT(K) |
---|
293 | ENDDO |
---|
294 | ENDIF |
---|
295 | ENDIF |
---|
296 | |
---|
297 | !...... QSTEN STORES GRAUPEL TENDENCY IF IT EXISTS, OTHERISE SNOW (V2) |
---|
298 | |
---|
299 | |
---|
300 | IF(PRESENT( rqicuten )) THEN |
---|
301 | IF ( F_QI ) THEN |
---|
302 | DO K=kts,kte |
---|
303 | RQICUTEN(I,K,J)=DQIDT(K) |
---|
304 | ENDDO |
---|
305 | ENDIF |
---|
306 | ENDIF |
---|
307 | |
---|
308 | IF(PRESENT( rqscuten )) THEN |
---|
309 | IF ( F_QS ) THEN |
---|
310 | DO K=kts,kte |
---|
311 | RQSCUTEN(I,K,J)=DQSDT(K) |
---|
312 | ENDDO |
---|
313 | ENDIF |
---|
314 | ENDIF |
---|
315 | ! |
---|
316 | ENDIF |
---|
317 | ENDDO ! i-loop |
---|
318 | ENDDO ! j-loop |
---|
319 | ENDIF ! run_param |
---|
320 | ! |
---|
321 | END SUBROUTINE KF_eta_CPS |
---|
322 | ! **************************************************************************** |
---|
323 | !----------------------------------------------------------- |
---|
324 | SUBROUTINE KF_eta_PARA (I, J, & |
---|
325 | U0,V0,T0,QV0,P0,DZQ,W0AVG1D, & |
---|
326 | DT,DX,DXSQ,rhoe, & |
---|
327 | XLV0,XLV1,XLS0,XLS1,CP,R,G, & |
---|
328 | EP2,SVP1,SVP2,SVP3,SVPT0, & |
---|
329 | DQDT,DQIDT,DQCDT,DQRDT,DQSDT,DTDT, & |
---|
330 | RAINCV,PRATEC,NCA, & |
---|
331 | F_QI,F_QS,warm_rain, & |
---|
332 | CUTOP,CUBOT,CUDT, & |
---|
333 | ids,ide, jds,jde, kds,kde, & |
---|
334 | ims,ime, jms,jme, kms,kme, & |
---|
335 | its,ite, jts,jte, kts,kte) |
---|
336 | !----------------------------------------------------------- |
---|
337 | !***** The KF scheme that is currently used in experimental runs of EMCs |
---|
338 | !***** Eta model....jsk 8/00 |
---|
339 | ! |
---|
340 | IMPLICIT NONE |
---|
341 | !----------------------------------------------------------- |
---|
342 | INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde, & |
---|
343 | ims,ime, jms,jme, kms,kme, & |
---|
344 | its,ite, jts,jte, kts,kte, & |
---|
345 | I,J |
---|
346 | ! ,P_QI,P_QS,P_FIRST_SCALAR |
---|
347 | |
---|
348 | LOGICAL, INTENT(IN ) :: F_QI, F_QS |
---|
349 | |
---|
350 | LOGICAL, INTENT(IN ) :: warm_rain |
---|
351 | ! |
---|
352 | REAL, DIMENSION( kts:kte ), & |
---|
353 | INTENT(IN ) :: U0, & |
---|
354 | V0, & |
---|
355 | T0, & |
---|
356 | QV0, & |
---|
357 | P0, & |
---|
358 | rhoe, & |
---|
359 | DZQ, & |
---|
360 | W0AVG1D |
---|
361 | ! |
---|
362 | REAL, INTENT(IN ) :: DT,DX,DXSQ |
---|
363 | ! |
---|
364 | |
---|
365 | REAL, INTENT(IN ) :: XLV0,XLV1,XLS0,XLS1,CP,R,G |
---|
366 | REAL, INTENT(IN ) :: EP2,SVP1,SVP2,SVP3,SVPT0 |
---|
367 | |
---|
368 | ! |
---|
369 | REAL, DIMENSION( kts:kte ), INTENT(INOUT) :: & |
---|
370 | DQDT, & |
---|
371 | DQIDT, & |
---|
372 | DQCDT, & |
---|
373 | DQRDT, & |
---|
374 | DQSDT, & |
---|
375 | DTDT |
---|
376 | |
---|
377 | REAL, DIMENSION( ims:ime , jms:jme ), & |
---|
378 | INTENT(INOUT) :: NCA |
---|
379 | |
---|
380 | REAL, DIMENSION( ims:ime , jms:jme ), & |
---|
381 | INTENT(INOUT) :: RAINCV |
---|
382 | |
---|
383 | REAL, DIMENSION( ims:ime , jms:jme ), & |
---|
384 | INTENT(INOUT) :: PRATEC |
---|
385 | |
---|
386 | REAL, DIMENSION( ims:ime , jms:jme ), & |
---|
387 | INTENT(OUT) :: CUBOT, & |
---|
388 | CUTOP |
---|
389 | REAL, INTENT(IN ) :: CUDT |
---|
390 | ! |
---|
391 | !...DEFINE LOCAL VARIABLES... |
---|
392 | ! |
---|
393 | REAL, DIMENSION( kts:kte ) :: & |
---|
394 | Q0,Z0,TV0,TU,TVU,QU,TZ,TVD, & |
---|
395 | QD,QES,THTES,TG,TVG,QG,WU,WD,W0,EMS,EMSD, & |
---|
396 | UMF,UER,UDR,DMF,DER,DDR,UMF2,UER2, & |
---|
397 | UDR2,DMF2,DER2,DDR2,DZA,THTA0,THETEE, & |
---|
398 | THTAU,THETEU,THTAD,THETED,QLIQ,QICE, & |
---|
399 | QLQOUT,QICOUT,PPTLIQ,PPTICE,DETLQ,DETIC, & |
---|
400 | DETLQ2,DETIC2,RATIO,RATIO2 |
---|
401 | |
---|
402 | |
---|
403 | REAL, DIMENSION( kts:kte ) :: & |
---|
404 | DOMGDP,EXN,TVQU,DP,RH,EQFRC,WSPD, & |
---|
405 | QDT,FXM,THTAG,THPA,THFXOUT, & |
---|
406 | THFXIN,QPA,QFXOUT,QFXIN,QLPA,QLFXIN, & |
---|
407 | QLFXOUT,QIPA,QIFXIN,QIFXOUT,QRPA, & |
---|
408 | QRFXIN,QRFXOUT,QSPA,QSFXIN,QSFXOUT, & |
---|
409 | QL0,QLG,QI0,QIG,QR0,QRG,QS0,QSG |
---|
410 | |
---|
411 | |
---|
412 | REAL, DIMENSION( kts:kte+1 ) :: OMG |
---|
413 | REAL, DIMENSION( kts:kte ) :: RAINFB,SNOWFB |
---|
414 | REAL, DIMENSION( kts:kte ) :: & |
---|
415 | CLDHGT,QSD,DILFRC,DDILFRC,TKE,TGU,QGU,THTEEG |
---|
416 | |
---|
417 | ! LOCAL VARS |
---|
418 | |
---|
419 | REAL :: P00,T00,RLF,RHIC,RHBC,PIE, & |
---|
420 | TTFRZ,TBFRZ,C5,RATE |
---|
421 | REAL :: GDRY,ROCP,ALIQ,BLIQ, & |
---|
422 | CLIQ,DLIQ |
---|
423 | REAL :: FBFRC,P300,DPTHMX,THMIX,QMIX,ZMIX,PMIX, & |
---|
424 | ROCPQ,TMIX,EMIX,TLOG,TDPT,TLCL,TVLCL, & |
---|
425 | CPORQ,PLCL,ES,DLP,TENV,QENV,TVEN,TVBAR, & |
---|
426 | ZLCL,WKL,WABS,TRPPT,WSIGNE,DTLCL,GDT,WLCL,& |
---|
427 | TVAVG,QESE,WTW,RHOLCL,AU0,VMFLCL,UPOLD, & |
---|
428 | UPNEW,ABE,WKLCL,TTEMP,FRC1, & |
---|
429 | QNEWIC,RL,R1,QNWFRZ,EFFQ,BE,BOTERM,ENTERM,& |
---|
430 | DZZ,UDLBE,REI,EE2,UD2,TTMP,F1,F2, & |
---|
431 | THTTMP,QTMP,TMPLIQ,TMPICE,TU95,TU10,EE1, & |
---|
432 | UD1,DPTT,QNEWLQ,DUMFDP,EE,TSAT, & |
---|
433 | THTA,VCONV,TIMEC,SHSIGN,VWS,PEF, & |
---|
434 | CBH,RCBH,PEFCBH,PEFF,PEFF2,TDER,THTMIN, & |
---|
435 | DTMLTD,QS,TADVEC,DPDD,FRC,DPT,RDD,A1, & |
---|
436 | DSSDT,DTMP,T1RH,QSRH,PPTFLX,CPR,CNDTNF, & |
---|
437 | UPDINC,AINCM2,DEVDMF,PPR,RCED,DPPTDF, & |
---|
438 | DMFLFS,DMFLFS2,RCED2,DDINC,AINCMX,AINCM1, & |
---|
439 | AINC,TDER2,PPTFL2,FABE,STAB,DTT,DTT1, & |
---|
440 | DTIME,TMA,TMB,TMM,BCOEFF,ACOEFF,QVDIFF, & |
---|
441 | TOPOMG,CPM,DQ,ABEG,DABE,DFDA,FRC2,DR, & |
---|
442 | UDFRC,TUC,QGS,RH0,RHG,QINIT,QFNL,ERR2, & |
---|
443 | RELERR,RLC,RLS,RNC,FABEOLD,AINCOLD,UEFRC, & |
---|
444 | DDFRC,TDC,DEFRC,RHBAR,DMFFRC,DPMIN,DILBE |
---|
445 | REAL :: ASTRT,TP,VALUE,AINTRP,TKEMAX,QFRZ,& |
---|
446 | QSS,PPTMLT,DTMELT,RHH,EVAC,BINC |
---|
447 | ! |
---|
448 | INTEGER :: INDLU,NU,NUCHM,NNN,KLFS |
---|
449 | REAL :: CHMIN,PM15,CHMAX,DTRH,RAD,DPPP |
---|
450 | REAL :: TVDIFF,DTTOT,ABSOMG,ABSOMGTC,FRDP |
---|
451 | |
---|
452 | INTEGER :: KX,K,KL |
---|
453 | ! |
---|
454 | INTEGER :: NCHECK |
---|
455 | INTEGER, DIMENSION (kts:kte) :: KCHECK |
---|
456 | |
---|
457 | INTEGER :: ISTOP,ML,L5,KMIX,LOW, & |
---|
458 | LC,MXLAYR,LLFC,NLAYRS,NK, & |
---|
459 | KPBL,KLCL,LCL,LET,IFLAG, & |
---|
460 | NK1,LTOP,NJ,LTOP1, & |
---|
461 | LTOPM1,LVF,KSTART,KMIN,LFS, & |
---|
462 | ND,NIC,LDB,LDT,ND1,NDK, & |
---|
463 | NM,LMAX,NCOUNT,NOITR, & |
---|
464 | NSTEP,NTC,NCHM,ISHALL,NSHALL |
---|
465 | LOGICAL :: IPRNT |
---|
466 | CHARACTER*1024 message |
---|
467 | ! |
---|
468 | DATA P00,T00/1.E5,273.16/ |
---|
469 | DATA RLF/3.339E5/ |
---|
470 | DATA RHIC,RHBC/1.,0.90/ |
---|
471 | DATA PIE,TTFRZ,TBFRZ,C5/3.141592654,268.16,248.16,1.0723E-3/ |
---|
472 | DATA RATE/0.03/ |
---|
473 | !----------------------------------------------------------- |
---|
474 | IPRNT=.FALSE. |
---|
475 | GDRY=-G/CP |
---|
476 | ROCP=R/CP |
---|
477 | NSHALL = 0 |
---|
478 | KL=kte |
---|
479 | KX=kte |
---|
480 | ! |
---|
481 | ! ALIQ = 613.3 |
---|
482 | ! BLIQ = 17.502 |
---|
483 | ! CLIQ = 4780.8 |
---|
484 | ! DLIQ = 32.19 |
---|
485 | ALIQ = SVP1*1000. |
---|
486 | BLIQ = SVP2 |
---|
487 | CLIQ = SVP2*SVPT0 |
---|
488 | DLIQ = SVP3 |
---|
489 | ! |
---|
490 | ! |
---|
491 | !**************************************************************************** |
---|
492 | ! ! PPT FB MODS |
---|
493 | !...OPTION TO FEED CONVECTIVELY GENERATED RAINWATER ! PPT FB MODS |
---|
494 | !...INTO GRID-RESOLVED RAINWATER (OR SNOW/GRAUPEL) ! PPT FB MODS |
---|
495 | !...FIELD. "FBFRC" IS THE FRACTION OF AVAILABLE ! PPT FB MODS |
---|
496 | !...PRECIPITATION TO BE FED BACK (0.0 - 1.0)... ! PPT FB MODS |
---|
497 | FBFRC=0.0 ! PPT FB MODS |
---|
498 | !...mods to allow shallow convection... |
---|
499 | NCHM = 0 |
---|
500 | ISHALL = 0 |
---|
501 | DPMIN = 5.E3 |
---|
502 | !... |
---|
503 | P300=P0(1)-30000. |
---|
504 | ! |
---|
505 | !...PRESSURE PERTURBATION TERM IS ONLY DEFINED AT MID-POINT OF |
---|
506 | !...VERTICAL LAYERS...SINCE TOTAL PRESSURE IS NEEDED AT THE TOP AND |
---|
507 | !...BOTTOM OF LAYERS BELOW, DO AN INTERPOLATION... |
---|
508 | ! |
---|
509 | !...INPUT A VERTICAL SOUNDING ... NOTE THAT MODEL LAYERS ARE NUMBERED |
---|
510 | !...FROM BOTTOM-UP IN THE KF SCHEME... |
---|
511 | ! |
---|
512 | ML=0 |
---|
513 | !SUE tmprpsb=1./PSB(I,J) |
---|
514 | !SUE CELL=PTOP*tmprpsb |
---|
515 | ! |
---|
516 | DO K=1,KX |
---|
517 | ! |
---|
518 | !...IF Q0 IS ABOVE SATURATION VALUE, REDUCE IT TO SATURATION LEVEL... |
---|
519 | ! |
---|
520 | ES=ALIQ*EXP((BLIQ*T0(K)-CLIQ)/(T0(K)-DLIQ)) |
---|
521 | QES(K)=0.622*ES/(P0(K)-ES) |
---|
522 | Q0(K)=AMIN1(QES(K),QV0(K)) |
---|
523 | Q0(K)=AMAX1(0.000001,Q0(K)) |
---|
524 | QL0(K)=0. |
---|
525 | QI0(K)=0. |
---|
526 | QR0(K)=0. |
---|
527 | QS0(K)=0. |
---|
528 | RH(K) = Q0(K)/QES(K) |
---|
529 | DILFRC(K) = 1. |
---|
530 | TV0(K)=T0(K)*(1.+0.608*Q0(K)) |
---|
531 | ! RHOE(K)=P0(K)/(R*TV0(K)) |
---|
532 | ! DP IS THE PRESSURE INTERVAL BETWEEN FULL SIGMA LEVELS... |
---|
533 | DP(K)=rhoe(k)*g*DZQ(k) |
---|
534 | ! IF Turbulent Kinetic Energy (TKE) is available from turbulent mixing scheme |
---|
535 | ! use it for shallow convection...For now, assume it is not available.... |
---|
536 | ! TKE(K) = Q2(I,J,NK) |
---|
537 | TKE(K) = 0. |
---|
538 | CLDHGT(K) = 0. |
---|
539 | ! IF(P0(K).GE.500E2)L5=K |
---|
540 | IF(P0(K).GE.0.5*P0(1))L5=K |
---|
541 | IF(P0(K).GE.P300)LLFC=K |
---|
542 | ENDDO |
---|
543 | ! |
---|
544 | !...DZQ IS DZ BETWEEN SIGMA SURFACES, DZA IS DZ BETWEEN MODEL HALF LEVEL |
---|
545 | Z0(1)=.5*DZQ(1) |
---|
546 | !cdir novector |
---|
547 | DO K=2,KL |
---|
548 | Z0(K)=Z0(K-1)+.5*(DZQ(K)+DZQ(K-1)) |
---|
549 | DZA(K-1)=Z0(K)-Z0(K-1) |
---|
550 | ENDDO |
---|
551 | DZA(KL)=0. |
---|
552 | ! |
---|
553 | ! |
---|
554 | ! To save time, specify a pressure interval to move up in sequential |
---|
555 | ! check of different ~50 mb deep groups of adjacent model layers in |
---|
556 | ! the process of identifying updraft source layer (USL). Note that |
---|
557 | ! this search is terminated as soon as a buoyant parcel is found and |
---|
558 | ! this parcel can produce a cloud greater than specifed minimum depth |
---|
559 | ! (CHMIN)...For now, set interval at 15 mb... |
---|
560 | ! |
---|
561 | NCHECK = 1 |
---|
562 | KCHECK(NCHECK)=1 |
---|
563 | PM15 = P0(1)-15.E2 |
---|
564 | DO K=2,LLFC |
---|
565 | IF(P0(K).LT.PM15)THEN |
---|
566 | NCHECK = NCHECK+1 |
---|
567 | KCHECK(NCHECK) = K |
---|
568 | PM15 = PM15-15.E2 |
---|
569 | ENDIF |
---|
570 | ENDDO |
---|
571 | ! |
---|
572 | NU=0 |
---|
573 | NUCHM=0 |
---|
574 | usl: DO |
---|
575 | NU = NU+1 |
---|
576 | IF(NU.GT.NCHECK)THEN |
---|
577 | IF(ISHALL.EQ.1)THEN |
---|
578 | CHMAX = 0. |
---|
579 | NCHM = 0 |
---|
580 | DO NK = 1,NCHECK |
---|
581 | NNN=KCHECK(NK) |
---|
582 | IF(CLDHGT(NNN).GT.CHMAX)THEN |
---|
583 | NCHM = NNN |
---|
584 | NUCHM = NK |
---|
585 | CHMAX = CLDHGT(NNN) |
---|
586 | ENDIF |
---|
587 | ENDDO |
---|
588 | NU = NUCHM-1 |
---|
589 | FBFRC=1. |
---|
590 | CYCLE usl |
---|
591 | ELSE |
---|
592 | RETURN |
---|
593 | ENDIF |
---|
594 | ENDIF |
---|
595 | KMIX = KCHECK(NU) |
---|
596 | LOW=KMIX |
---|
597 | !... |
---|
598 | LC = LOW |
---|
599 | ! |
---|
600 | !...ASSUME THAT IN ORDER TO SUPPORT A DEEP UPDRAFT YOU NEED A LAYER OF |
---|
601 | !...UNSTABLE AIR AT LEAST 50 mb DEEP...TO APPROXIMATE THIS, ISOLATE A |
---|
602 | !...GROUP OF ADJACENT INDIVIDUAL MODEL LAYERS, WITH THE BASE AT LEVEL |
---|
603 | !...LC, SUCH THAT THE COMBINED DEPTH OF THESE LAYERS IS AT LEAST 50 mb.. |
---|
604 | ! |
---|
605 | NLAYRS=0 |
---|
606 | DPTHMX=0. |
---|
607 | NK=LC-1 |
---|
608 | IF ( NK+1 .LT. KTS ) THEN |
---|
609 | WRITE(message,*)'WOULD GO OFF BOTTOM: KF_ETA_PARA I,J,NK',I,J,NK |
---|
610 | CALL wrf_message (TRIM(message)) |
---|
611 | ELSE |
---|
612 | DO |
---|
613 | NK=NK+1 |
---|
614 | IF ( NK .GT. KTE ) THEN |
---|
615 | WRITE(message,*)'WOULD GO OFF TOP: KF_ETA_PARA I,J,DPTHMX,DPMIN',I,J,DPTHMX,DPMIN |
---|
616 | CALL wrf_message (TRIM(message)) |
---|
617 | EXIT |
---|
618 | ENDIF |
---|
619 | DPTHMX=DPTHMX+DP(NK) |
---|
620 | NLAYRS=NLAYRS+1 |
---|
621 | IF(DPTHMX.GT.DPMIN)THEN |
---|
622 | EXIT |
---|
623 | ENDIF |
---|
624 | END DO |
---|
625 | ENDIF |
---|
626 | IF(DPTHMX.LT.DPMIN)THEN |
---|
627 | RETURN |
---|
628 | ENDIF |
---|
629 | KPBL=LC+NLAYRS-1 |
---|
630 | ! |
---|
631 | !...******************************************************** |
---|
632 | !...for computational simplicity without much loss in accuracy, |
---|
633 | !...mix temperature instead of theta for evaluating convective |
---|
634 | !...initiation (triggering) potential... |
---|
635 | ! THMIX=0. |
---|
636 | TMIX=0. |
---|
637 | QMIX=0. |
---|
638 | ZMIX=0. |
---|
639 | PMIX=0. |
---|
640 | ! |
---|
641 | !...FIND THE THERMODYNAMIC CHARACTERISTICS OF THE LAYER BY |
---|
642 | !...MASS-WEIGHTING THE CHARACTERISTICS OF THE INDIVIDUAL MODEL |
---|
643 | !...LAYERS... |
---|
644 | ! |
---|
645 | !cdir novector |
---|
646 | DO NK=LC,KPBL |
---|
647 | TMIX=TMIX+DP(NK)*T0(NK) |
---|
648 | QMIX=QMIX+DP(NK)*Q0(NK) |
---|
649 | ZMIX=ZMIX+DP(NK)*Z0(NK) |
---|
650 | PMIX=PMIX+DP(NK)*P0(NK) |
---|
651 | ENDDO |
---|
652 | ! THMIX=THMIX/DPTHMX |
---|
653 | TMIX=TMIX/DPTHMX |
---|
654 | QMIX=QMIX/DPTHMX |
---|
655 | ZMIX=ZMIX/DPTHMX |
---|
656 | PMIX=PMIX/DPTHMX |
---|
657 | EMIX=QMIX*PMIX/(0.622+QMIX) |
---|
658 | ! |
---|
659 | !...FIND THE TEMPERATURE OF THE MIXTURE AT ITS LCL... |
---|
660 | ! |
---|
661 | ! TLOG=ALOG(EMIX/ALIQ) |
---|
662 | ! ...calculate dewpoint using lookup table... |
---|
663 | ! |
---|
664 | astrt=1.e-3 |
---|
665 | ainc=0.075 |
---|
666 | a1=emix/aliq |
---|
667 | tp=(a1-astrt)/ainc |
---|
668 | indlu=int(tp)+1 |
---|
669 | value=(indlu-1)*ainc+astrt |
---|
670 | aintrp=(a1-value)/ainc |
---|
671 | tlog=aintrp*alu(indlu+1)+(1-aintrp)*alu(indlu) |
---|
672 | TDPT=(CLIQ-DLIQ*TLOG)/(BLIQ-TLOG) |
---|
673 | TLCL=TDPT-(.212+1.571E-3*(TDPT-T00)-4.36E-4*(TMIX-T00))*(TMIX-TDPT) |
---|
674 | TLCL=AMIN1(TLCL,TMIX) |
---|
675 | TVLCL=TLCL*(1.+0.608*QMIX) |
---|
676 | ZLCL = ZMIX+(TLCL-TMIX)/GDRY |
---|
677 | NK = LC-1 |
---|
678 | DO |
---|
679 | NK = NK+1 |
---|
680 | KLCL=NK |
---|
681 | IF(ZLCL.LE.Z0(NK) .or. NK.GT.KL)THEN |
---|
682 | EXIT |
---|
683 | ENDIF |
---|
684 | ENDDO |
---|
685 | IF(NK.GT.KL)THEN |
---|
686 | RETURN |
---|
687 | ENDIF |
---|
688 | K=KLCL-1 |
---|
689 | DLP=(ZLCL-Z0(K))/(Z0(KLCL)-Z0(K)) |
---|
690 | ! |
---|
691 | !...ESTIMATE ENVIRONMENTAL TEMPERATURE AND MIXING RATIO AT THE LCL... |
---|
692 | ! |
---|
693 | TENV=T0(K)+(T0(KLCL)-T0(K))*DLP |
---|
694 | QENV=Q0(K)+(Q0(KLCL)-Q0(K))*DLP |
---|
695 | TVEN=TENV*(1.+0.608*QENV) |
---|
696 | ! |
---|
697 | !...CHECK TO SEE IF CLOUD IS BUOYANT USING FRITSCH-CHAPPELL TRIGGER |
---|
698 | !...FUNCTION DESCRIBED IN KAIN AND FRITSCH (1992)...W0 IS AN |
---|
699 | !...APROXIMATE VALUE FOR THE RUNNING-MEAN GRID-SCALE VERTICAL |
---|
700 | !...VELOCITY, WHICH GIVES SMOOTHER FIELDS OF CONVECTIVE INITIATION |
---|
701 | !...THAN THE INSTANTANEOUS VALUE...FORMULA RELATING TEMPERATURE |
---|
702 | !...PERTURBATION TO VERTICAL VELOCITY HAS BEEN USED WITH THE MOST |
---|
703 | !...SUCCESS AT GRID LENGTHS NEAR 25 km. FOR DIFFERENT GRID-LENGTHS, |
---|
704 | !...ADJUST VERTICAL VELOCITY TO EQUIVALENT VALUE FOR 25 KM GRID |
---|
705 | !...LENGTH, ASSUMING LINEAR DEPENDENCE OF W ON GRID LENGTH... |
---|
706 | ! |
---|
707 | IF(ZLCL.LT.2.E3)THEN |
---|
708 | WKLCL=0.02*ZLCL/2.E3 |
---|
709 | ELSE |
---|
710 | WKLCL=0.02 |
---|
711 | ENDIF |
---|
712 | WKL=(W0AVG1D(K)+(W0AVG1D(KLCL)-W0AVG1D(K))*DLP)*DX/25.E3-WKLCL |
---|
713 | IF(WKL.LT.0.0001)THEN |
---|
714 | DTLCL=0. |
---|
715 | ELSE |
---|
716 | DTLCL=4.64*WKL**0.33 |
---|
717 | ENDIF |
---|
718 | ! |
---|
719 | !...for ETA model, give parcel an extra temperature perturbation based |
---|
720 | !...the threshold RH for condensation (U00)... |
---|
721 | ! |
---|
722 | !...for now, just assume U00=0.75... |
---|
723 | !...!!!!!! for MM5, SET DTRH = 0. !!!!!!!! |
---|
724 | ! U00 = 0.75 |
---|
725 | ! IF(U00.lt.1.)THEN |
---|
726 | ! QSLCL=QES(K)+(QES(KLCL)-QES(K))*DLP |
---|
727 | ! RHLCL = QENV/QSLCL |
---|
728 | ! DQSSDT = QMIX*(CLIQ-BLIQ*DLIQ)/((TLCL-DLIQ)*(TLCL-DLIQ)) |
---|
729 | ! IF(RHLCL.ge.0.75 .and. RHLCL.le.0.95)then |
---|
730 | ! DTRH = 0.25*(RHLCL-0.75)*QMIX/DQSSDT |
---|
731 | ! ELSEIF(RHLCL.GT.0.95)THEN |
---|
732 | ! DTRH = (1./RHLCL-1.)*QMIX/DQSSDT |
---|
733 | ! ELSE |
---|
734 | DTRH = 0. |
---|
735 | ! ENDIF |
---|
736 | ! ENDIF |
---|
737 | ! IF(ISHALL.EQ.1)IPRNT=.TRUE. |
---|
738 | ! IPRNT=.TRUE. |
---|
739 | ! IF(TLCL+DTLCL.GT.TENV)GOTO 45 |
---|
740 | ! |
---|
741 | trigger: IF(TLCL+DTLCL+DTRH.LT.TENV)THEN |
---|
742 | ! |
---|
743 | ! Parcel not buoyant, CYCLE back to start of trigger and evaluate next potential USL... |
---|
744 | ! |
---|
745 | CYCLE usl |
---|
746 | ! |
---|
747 | ELSE ! Parcel is buoyant, determine updraft |
---|
748 | ! |
---|
749 | !...CONVECTIVE TRIGGERING CRITERIA HAS BEEN SATISFIED...COMPUTE |
---|
750 | !...EQUIVALENT POTENTIAL TEMPERATURE |
---|
751 | !...(THETEU) AND VERTICAL VELOCITY OF THE RISING PARCEL AT THE LCL... |
---|
752 | ! |
---|
753 | CALL ENVIRTHT(PMIX,TMIX,QMIX,THETEU(K),ALIQ,BLIQ,CLIQ,DLIQ) |
---|
754 | ! |
---|
755 | !...modify calculation of initial parcel vertical velocity...jsk 11/26/97 |
---|
756 | ! |
---|
757 | DTTOT = DTLCL+DTRH |
---|
758 | IF(DTTOT.GT.1.E-4)THEN |
---|
759 | GDT=2.*G*DTTOT*500./TVEN |
---|
760 | WLCL=1.+0.5*SQRT(GDT) |
---|
761 | WLCL = AMIN1(WLCL,3.) |
---|
762 | ELSE |
---|
763 | WLCL=1. |
---|
764 | ENDIF |
---|
765 | PLCL=P0(K)+(P0(KLCL)-P0(K))*DLP |
---|
766 | WTW=WLCL*WLCL |
---|
767 | ! |
---|
768 | TVLCL=TLCL*(1.+0.608*QMIX) |
---|
769 | RHOLCL=PLCL/(R*TVLCL) |
---|
770 | ! |
---|
771 | LCL=KLCL |
---|
772 | LET=LCL |
---|
773 | ! make RAD a function of background vertical velocity... |
---|
774 | IF(WKL.LT.0.)THEN |
---|
775 | RAD = 1000. |
---|
776 | ELSEIF(WKL.GT.0.1)THEN |
---|
777 | RAD = 2000. |
---|
778 | ELSE |
---|
779 | RAD = 1000.+1000*WKL/0.1 |
---|
780 | ENDIF |
---|
781 | ! |
---|
782 | !******************************************************************* |
---|
783 | ! * |
---|
784 | ! COMPUTE UPDRAFT PROPERTIES * |
---|
785 | ! * |
---|
786 | !******************************************************************* |
---|
787 | ! |
---|
788 | ! |
---|
789 | !... |
---|
790 | !...ESTIMATE INITIAL UPDRAFT MASS FLUX (UMF(K))... |
---|
791 | ! |
---|
792 | WU(K)=WLCL |
---|
793 | AU0=0.01*DXSQ |
---|
794 | UMF(K)=RHOLCL*AU0 |
---|
795 | VMFLCL=UMF(K) |
---|
796 | UPOLD=VMFLCL |
---|
797 | UPNEW=UPOLD |
---|
798 | ! |
---|
799 | !...RATIO2 IS THE DEGREE OF GLACIATION IN THE CLOUD (0 TO 1), |
---|
800 | !...UER IS THE ENVIR ENTRAINMENT RATE, ABE IS AVAILABLE |
---|
801 | !...BUOYANT ENERGY, TRPPT IS THE TOTAL RATE OF PRECIPITATION |
---|
802 | !...PRODUCTION... |
---|
803 | ! |
---|
804 | RATIO2(K)=0. |
---|
805 | UER(K)=0. |
---|
806 | ABE=0. |
---|
807 | TRPPT=0. |
---|
808 | TU(K)=TLCL |
---|
809 | TVU(K)=TVLCL |
---|
810 | QU(K)=QMIX |
---|
811 | EQFRC(K)=1. |
---|
812 | QLIQ(K)=0. |
---|
813 | QICE(K)=0. |
---|
814 | QLQOUT(K)=0. |
---|
815 | QICOUT(K)=0. |
---|
816 | DETLQ(K)=0. |
---|
817 | DETIC(K)=0. |
---|
818 | PPTLIQ(K)=0. |
---|
819 | PPTICE(K)=0. |
---|
820 | IFLAG=0 |
---|
821 | ! |
---|
822 | !...TTEMP IS USED DURING CALCULATION OF THE LINEAR GLACIATION |
---|
823 | !...PROCESS; IT IS INITIALLY SET TO THE TEMPERATURE AT WHICH |
---|
824 | !...FREEZING IS SPECIFIED TO BEGIN. WITHIN THE GLACIATION |
---|
825 | !...INTERVAL, IT IS SET EQUAL TO THE UPDRAFT TEMP AT THE |
---|
826 | !...PREVIOUS MODEL LEVEL... |
---|
827 | ! |
---|
828 | TTEMP=TTFRZ |
---|
829 | ! |
---|
830 | !...ENTER THE LOOP FOR UPDRAFT CALCULATIONS...CALCULATE UPDRAFT TEMP, |
---|
831 | !...MIXING RATIO, VERTICAL MASS FLUX, LATERAL DETRAINMENT OF MASS AND |
---|
832 | !...MOISTURE, PRECIPITATION RATES AT EACH MODEL LEVEL... |
---|
833 | ! |
---|
834 | ! |
---|
835 | EE1=1. |
---|
836 | UD1=0. |
---|
837 | REI = 0. |
---|
838 | DILBE = 0. |
---|
839 | updraft: DO NK=K,KL-1 |
---|
840 | NK1=NK+1 |
---|
841 | RATIO2(NK1)=RATIO2(NK) |
---|
842 | FRC1=0. |
---|
843 | TU(NK1)=T0(NK1) |
---|
844 | THETEU(NK1)=THETEU(NK) |
---|
845 | QU(NK1)=QU(NK) |
---|
846 | QLIQ(NK1)=QLIQ(NK) |
---|
847 | QICE(NK1)=QICE(NK) |
---|
848 | call tpmix2(p0(nk1),theteu(nk1),tu(nk1),qu(nk1),qliq(nk1), & |
---|
849 | qice(nk1),qnewlq,qnewic,XLV1,XLV0) |
---|
850 | ! |
---|
851 | ! |
---|
852 | !...CHECK TO SEE IF UPDRAFT TEMP IS ABOVE THE TEMPERATURE AT WHICH |
---|
853 | !...GLACIATION IS ASSUMED TO INITIATE; IF IT IS, CALCULATE THE |
---|
854 | !...FRACTION OF REMAINING LIQUID WATER TO FREEZE...TTFRZ IS THE |
---|
855 | !...TEMP AT WHICH FREEZING BEGINS, TBFRZ THE TEMP BELOW WHICH ALL |
---|
856 | !...LIQUID WATER IS FROZEN AT EACH LEVEL... |
---|
857 | ! |
---|
858 | IF(TU(NK1).LE.TTFRZ)THEN |
---|
859 | IF(TU(NK1).GT.TBFRZ)THEN |
---|
860 | IF(TTEMP.GT.TTFRZ)TTEMP=TTFRZ |
---|
861 | FRC1=(TTEMP-TU(NK1))/(TTEMP-TBFRZ) |
---|
862 | ELSE |
---|
863 | FRC1=1. |
---|
864 | IFLAG=1 |
---|
865 | ENDIF |
---|
866 | TTEMP=TU(NK1) |
---|
867 | ! |
---|
868 | ! DETERMINE THE EFFECTS OF LIQUID WATER FREEZING WHEN TEMPERATURE |
---|
869 | !...IS BELOW TTFRZ... |
---|
870 | ! |
---|
871 | QFRZ = (QLIQ(NK1)+QNEWLQ)*FRC1 |
---|
872 | QNEWIC=QNEWIC+QNEWLQ*FRC1 |
---|
873 | QNEWLQ=QNEWLQ-QNEWLQ*FRC1 |
---|
874 | QICE(NK1) = QICE(NK1)+QLIQ(NK1)*FRC1 |
---|
875 | QLIQ(NK1) = QLIQ(NK1)-QLIQ(NK1)*FRC1 |
---|
876 | CALL DTFRZNEW(TU(NK1),P0(NK1),THETEU(NK1),QU(NK1),QFRZ, & |
---|
877 | QICE(NK1),ALIQ,BLIQ,CLIQ,DLIQ) |
---|
878 | ENDIF |
---|
879 | TVU(NK1)=TU(NK1)*(1.+0.608*QU(NK1)) |
---|
880 | ! |
---|
881 | ! CALCULATE UPDRAFT VERTICAL VELOCITY AND PRECIPITATION FALLOUT... |
---|
882 | ! |
---|
883 | IF(NK.EQ.K)THEN |
---|
884 | BE=(TVLCL+TVU(NK1))/(TVEN+TV0(NK1))-1. |
---|
885 | BOTERM=2.*(Z0(NK1)-ZLCL)*G*BE/1.5 |
---|
886 | DZZ=Z0(NK1)-ZLCL |
---|
887 | ELSE |
---|
888 | BE=(TVU(NK)+TVU(NK1))/(TV0(NK)+TV0(NK1))-1. |
---|
889 | BOTERM=2.*DZA(NK)*G*BE/1.5 |
---|
890 | DZZ=DZA(NK) |
---|
891 | ENDIF |
---|
892 | ENTERM=2.*REI*WTW/UPOLD |
---|
893 | |
---|
894 | CALL CONDLOAD(QLIQ(NK1),QICE(NK1),WTW,DZZ,BOTERM,ENTERM, & |
---|
895 | RATE,QNEWLQ,QNEWIC,QLQOUT(NK1),QICOUT(NK1),G) |
---|
896 | ! |
---|
897 | !...IF VERT VELOCITY IS LESS THAN ZERO, EXIT THE UPDRAFT LOOP AND, |
---|
898 | !...IF CLOUD IS TALL ENOUGH, FINALIZE UPDRAFT CALCULATIONS... |
---|
899 | ! |
---|
900 | IF(WTW.LT.1.E-3)THEN |
---|
901 | EXIT |
---|
902 | ELSE |
---|
903 | WU(NK1)=SQRT(WTW) |
---|
904 | ENDIF |
---|
905 | !...Calculate value of THETA-E in environment to entrain into updraft... |
---|
906 | ! |
---|
907 | CALL ENVIRTHT(P0(NK1),T0(NK1),Q0(NK1),THETEE(NK1),ALIQ,BLIQ,CLIQ,DLIQ) |
---|
908 | ! |
---|
909 | !...REI IS THE RATE OF ENVIRONMENTAL INFLOW... |
---|
910 | ! |
---|
911 | REI=VMFLCL*DP(NK1)*0.03/RAD |
---|
912 | TVQU(NK1)=TU(NK1)*(1.+0.608*QU(NK1)-QLIQ(NK1)-QICE(NK1)) |
---|
913 | IF(NK.EQ.K)THEN |
---|
914 | DILBE=((TVLCL+TVQU(NK1))/(TVEN+TV0(NK1))-1.)*DZZ |
---|
915 | ELSE |
---|
916 | DILBE=((TVQU(NK)+TVQU(NK1))/(TV0(NK)+TV0(NK1))-1.)*DZZ |
---|
917 | ENDIF |
---|
918 | IF(DILBE.GT.0.)ABE=ABE+DILBE*G |
---|
919 | ! |
---|
920 | !...IF CLOUD PARCELS ARE VIRTUALLY COLDER THAN THE ENVIRONMENT, MINIMAL |
---|
921 | !...ENTRAINMENT (0.5*REI) IS IMPOSED... |
---|
922 | ! |
---|
923 | IF(TVQU(NK1).LE.TV0(NK1))THEN ! Entrain/Detrain IF BLOCK |
---|
924 | EE2=0.5 |
---|
925 | UD2=1. |
---|
926 | EQFRC(NK1)=0. |
---|
927 | ELSE |
---|
928 | LET=NK1 |
---|
929 | TTMP=TVQU(NK1) |
---|
930 | ! |
---|
931 | !...DETERMINE THE CRITICAL MIXED FRACTION OF UPDRAFT AND ENVIRONMENTAL AIR... |
---|
932 | ! |
---|
933 | F1=0.95 |
---|
934 | F2=1.-F1 |
---|
935 | THTTMP=F1*THETEE(NK1)+F2*THETEU(NK1) |
---|
936 | QTMP=F1*Q0(NK1)+F2*QU(NK1) |
---|
937 | TMPLIQ=F2*QLIQ(NK1) |
---|
938 | TMPICE=F2*QICE(NK1) |
---|
939 | call tpmix2(p0(nk1),thttmp,ttmp,qtmp,tmpliq,tmpice, & |
---|
940 | qnewlq,qnewic,XLV1,XLV0) |
---|
941 | TU95=TTMP*(1.+0.608*QTMP-TMPLIQ-TMPICE) |
---|
942 | IF(TU95.GT.TV0(NK1))THEN |
---|
943 | EE2=1. |
---|
944 | UD2=0. |
---|
945 | EQFRC(NK1)=1.0 |
---|
946 | ELSE |
---|
947 | F1=0.10 |
---|
948 | F2=1.-F1 |
---|
949 | THTTMP=F1*THETEE(NK1)+F2*THETEU(NK1) |
---|
950 | QTMP=F1*Q0(NK1)+F2*QU(NK1) |
---|
951 | TMPLIQ=F2*QLIQ(NK1) |
---|
952 | TMPICE=F2*QICE(NK1) |
---|
953 | call tpmix2(p0(nk1),thttmp,ttmp,qtmp,tmpliq,tmpice, & |
---|
954 | qnewlq,qnewic,XLV1,XLV0) |
---|
955 | TU10=TTMP*(1.+0.608*QTMP-TMPLIQ-TMPICE) |
---|
956 | TVDIFF = ABS(TU10-TVQU(NK1)) |
---|
957 | IF(TVDIFF.LT.1.e-3)THEN |
---|
958 | EE2=1. |
---|
959 | UD2=0. |
---|
960 | EQFRC(NK1)=1.0 |
---|
961 | ELSE |
---|
962 | EQFRC(NK1)=(TV0(NK1)-TVQU(NK1))*F1/(TU10-TVQU(NK1)) |
---|
963 | EQFRC(NK1)=AMAX1(0.0,EQFRC(NK1)) |
---|
964 | EQFRC(NK1)=AMIN1(1.0,EQFRC(NK1)) |
---|
965 | IF(EQFRC(NK1).EQ.1)THEN |
---|
966 | EE2=1. |
---|
967 | UD2=0. |
---|
968 | ELSEIF(EQFRC(NK1).EQ.0.)THEN |
---|
969 | EE2=0. |
---|
970 | UD2=1. |
---|
971 | ELSE |
---|
972 | ! |
---|
973 | !...SUBROUTINE PROF5 INTEGRATES OVER THE GAUSSIAN DIST TO DETERMINE THE |
---|
974 | ! FRACTIONAL ENTRAINMENT AND DETRAINMENT RATES... |
---|
975 | ! |
---|
976 | CALL PROF5(EQFRC(NK1),EE2,UD2) |
---|
977 | ENDIF |
---|
978 | ENDIF |
---|
979 | ENDIF |
---|
980 | ENDIF ! End of Entrain/Detrain IF BLOCK |
---|
981 | ! |
---|
982 | ! |
---|
983 | !...NET ENTRAINMENT AND DETRAINMENT RATES ARE GIVEN BY THE AVERAGE FRACTIONAL |
---|
984 | ! VALUES IN THE LAYER... |
---|
985 | ! |
---|
986 | EE2 = AMAX1(EE2,0.5) |
---|
987 | UD2 = 1.5*UD2 |
---|
988 | UER(NK1)=0.5*REI*(EE1+EE2) |
---|
989 | UDR(NK1)=0.5*REI*(UD1+UD2) |
---|
990 | ! |
---|
991 | !...IF THE CALCULATED UPDRAFT DETRAINMENT RATE IS GREATER THAN THE TOTAL |
---|
992 | ! UPDRAFT MASS FLUX, ALL CLOUD MASS DETRAINS, EXIT UPDRAFT CALCULATIONS... |
---|
993 | ! |
---|
994 | IF(UMF(NK)-UDR(NK1).LT.10.)THEN |
---|
995 | ! |
---|
996 | !...IF THE CALCULATED DETRAINED MASS FLUX IS GREATER THAN THE TOTAL UPD MASS |
---|
997 | ! FLUX, IMPOSE TOTAL DETRAINMENT OF UPDRAFT MASS AT THE PREVIOUS MODEL LVL.. |
---|
998 | ! First, correct ABE calculation if needed... |
---|
999 | ! |
---|
1000 | IF(DILBE.GT.0.)THEN |
---|
1001 | ABE=ABE-DILBE*G |
---|
1002 | ENDIF |
---|
1003 | LET=NK |
---|
1004 | ! WRITE(98,1015)P0(NK1)/100. |
---|
1005 | EXIT |
---|
1006 | ELSE |
---|
1007 | EE1=EE2 |
---|
1008 | UD1=UD2 |
---|
1009 | UPOLD=UMF(NK)-UDR(NK1) |
---|
1010 | UPNEW=UPOLD+UER(NK1) |
---|
1011 | UMF(NK1)=UPNEW |
---|
1012 | DILFRC(NK1) = UPNEW/UPOLD |
---|
1013 | ! |
---|
1014 | !...DETLQ AND DETIC ARE THE RATES OF DETRAINMENT OF LIQUID AND |
---|
1015 | !...ICE IN THE DETRAINING UPDRAFT MASS... |
---|
1016 | ! |
---|
1017 | DETLQ(NK1)=QLIQ(NK1)*UDR(NK1) |
---|
1018 | DETIC(NK1)=QICE(NK1)*UDR(NK1) |
---|
1019 | QDT(NK1)=QU(NK1) |
---|
1020 | QU(NK1)=(UPOLD*QU(NK1)+UER(NK1)*Q0(NK1))/UPNEW |
---|
1021 | THETEU(NK1)=(THETEU(NK1)*UPOLD+THETEE(NK1)*UER(NK1))/UPNEW |
---|
1022 | QLIQ(NK1)=QLIQ(NK1)*UPOLD/UPNEW |
---|
1023 | QICE(NK1)=QICE(NK1)*UPOLD/UPNEW |
---|
1024 | ! |
---|
1025 | !...PPTLIQ IS THE RATE OF GENERATION (FALLOUT) OF |
---|
1026 | !...LIQUID PRECIP AT A GIVEN MODEL LVL, PPTICE THE SAME FOR ICE, |
---|
1027 | !...TRPPT IS THE TOTAL RATE OF PRODUCTION OF PRECIP UP TO THE |
---|
1028 | !...CURRENT MODEL LEVEL... |
---|
1029 | ! |
---|
1030 | PPTLIQ(NK1)=QLQOUT(NK1)*UMF(NK) |
---|
1031 | PPTICE(NK1)=QICOUT(NK1)*UMF(NK) |
---|
1032 | ! |
---|
1033 | TRPPT=TRPPT+PPTLIQ(NK1)+PPTICE(NK1) |
---|
1034 | IF(NK1.LE.KPBL)UER(NK1)=UER(NK1)+VMFLCL*DP(NK1)/DPTHMX |
---|
1035 | ENDIF |
---|
1036 | ! |
---|
1037 | END DO updraft |
---|
1038 | ! |
---|
1039 | !...CHECK CLOUD DEPTH...IF CLOUD IS TALL ENOUGH, ESTIMATE THE EQUILIBRIU |
---|
1040 | ! TEMPERATURE LEVEL (LET) AND ADJUST MASS FLUX PROFILE AT CLOUD TOP SO |
---|
1041 | ! THAT MASS FLUX DECREASES TO ZERO AS A LINEAR FUNCTION OF PRESSURE BE |
---|
1042 | ! THE LET AND CLOUD TOP... |
---|
1043 | ! |
---|
1044 | !...LTOP IS THE MODEL LEVEL JUST BELOW THE LEVEL AT WHICH VERTICAL VELOC |
---|
1045 | ! FIRST BECOMES NEGATIVE... |
---|
1046 | ! |
---|
1047 | LTOP=NK |
---|
1048 | CLDHGT(LC)=Z0(LTOP)-ZLCL |
---|
1049 | ! |
---|
1050 | !...Instead of using the same minimum cloud height (for deep convection) |
---|
1051 | !...everywhere, try specifying minimum cloud depth as a function of TLCL... |
---|
1052 | ! |
---|
1053 | ! |
---|
1054 | ! |
---|
1055 | IF(TLCL.GT.293.)THEN |
---|
1056 | CHMIN = 4.E3 |
---|
1057 | ELSEIF(TLCL.LE.293. .and. TLCL.GE.273)THEN |
---|
1058 | CHMIN = 2.E3 + 100.*(TLCL-273.) |
---|
1059 | ELSEIF(TLCL.LT.273.)THEN |
---|
1060 | CHMIN = 2.E3 |
---|
1061 | ENDIF |
---|
1062 | |
---|
1063 | ! |
---|
1064 | !...If cloud top height is less than the specified minimum for deep |
---|
1065 | !...convection, save value to consider this level as source for |
---|
1066 | !...shallow convection, go back up to check next level... |
---|
1067 | ! |
---|
1068 | !...Try specifying minimum cloud depth as a function of TLCL... |
---|
1069 | ! |
---|
1070 | ! |
---|
1071 | !...DO NOT ALLOW ANY CLOUD FROM THIS LAYER IF: |
---|
1072 | ! |
---|
1073 | !... 1.) if there is no CAPE, or |
---|
1074 | !... 2.) cloud top is at model level just above LCL, or |
---|
1075 | !... 3.) cloud top is within updraft source layer, or |
---|
1076 | !... 4.) cloud-top detrainment layer begins within |
---|
1077 | !... updraft source layer. |
---|
1078 | ! |
---|
1079 | IF(LTOP.LE.KLCL .or. LTOP.LE.KPBL .or. LET+1.LE.KPBL)THEN ! No Convection Allowed |
---|
1080 | CLDHGT(LC)=0. |
---|
1081 | DO NK=K,LTOP |
---|
1082 | UMF(NK)=0. |
---|
1083 | UDR(NK)=0. |
---|
1084 | UER(NK)=0. |
---|
1085 | DETLQ(NK)=0. |
---|
1086 | DETIC(NK)=0. |
---|
1087 | PPTLIQ(NK)=0. |
---|
1088 | PPTICE(NK)=0. |
---|
1089 | ENDDO |
---|
1090 | ! |
---|
1091 | ELSEIF(CLDHGT(LC).GT.CHMIN .and. ABE.GT.1)THEN ! Deep Convection allowed |
---|
1092 | ISHALL=0 |
---|
1093 | EXIT usl |
---|
1094 | ELSE |
---|
1095 | ! |
---|
1096 | !...TO DISALLOW SHALLOW CONVECTION, COMMENT OUT NEXT LINE !!!!!!!! |
---|
1097 | ISHALL = 1 |
---|
1098 | IF(NU.EQ.NUCHM)THEN |
---|
1099 | EXIT usl ! Shallow Convection from this layer |
---|
1100 | ELSE |
---|
1101 | ! Remember this layer (by virtue of non-zero CLDHGT) as potential shallow-cloud layer |
---|
1102 | DO NK=K,LTOP |
---|
1103 | UMF(NK)=0. |
---|
1104 | UDR(NK)=0. |
---|
1105 | UER(NK)=0. |
---|
1106 | DETLQ(NK)=0. |
---|
1107 | DETIC(NK)=0. |
---|
1108 | PPTLIQ(NK)=0. |
---|
1109 | PPTICE(NK)=0. |
---|
1110 | ENDDO |
---|
1111 | ENDIF |
---|
1112 | ENDIF |
---|
1113 | ENDIF trigger |
---|
1114 | END DO usl |
---|
1115 | IF(ISHALL.EQ.1)THEN |
---|
1116 | KSTART=MAX0(KPBL,KLCL) |
---|
1117 | LET=KSTART |
---|
1118 | endif |
---|
1119 | ! |
---|
1120 | !...IF THE LET AND LTOP ARE THE SAME, DETRAIN ALL OF THE UPDRAFT MASS FL |
---|
1121 | ! THIS LEVEL... |
---|
1122 | ! |
---|
1123 | IF(LET.EQ.LTOP)THEN |
---|
1124 | UDR(LTOP)=UMF(LTOP)+UDR(LTOP)-UER(LTOP) |
---|
1125 | DETLQ(LTOP)=QLIQ(LTOP)*UDR(LTOP)*UPNEW/UPOLD |
---|
1126 | DETIC(LTOP)=QICE(LTOP)*UDR(LTOP)*UPNEW/UPOLD |
---|
1127 | UER(LTOP)=0. |
---|
1128 | UMF(LTOP)=0. |
---|
1129 | ELSE |
---|
1130 | ! |
---|
1131 | ! BEGIN TOTAL DETRAINMENT AT THE LEVEL ABOVE THE LET... |
---|
1132 | ! |
---|
1133 | DPTT=0. |
---|
1134 | DO NJ=LET+1,LTOP |
---|
1135 | DPTT=DPTT+DP(NJ) |
---|
1136 | ENDDO |
---|
1137 | DUMFDP=UMF(LET)/DPTT |
---|
1138 | ! |
---|
1139 | !...ADJUST MASS FLUX PROFILES, DETRAINMENT RATES, AND PRECIPITATION FALL |
---|
1140 | ! RATES TO REFLECT THE LINEAR DECREASE IN MASS FLX BETWEEN THE LET AND |
---|
1141 | ! |
---|
1142 | DO NK=LET+1,LTOP |
---|
1143 | ! |
---|
1144 | !...entrainment is allowed at every level except for LTOP, so disallow |
---|
1145 | !...entrainment at LTOP and adjust entrainment rates between LET and LTOP |
---|
1146 | !...so the the dilution factor due to entyrianment is not changed but |
---|
1147 | !...the actual entrainment rate will change due due forced total |
---|
1148 | !...detrainment in this layer... |
---|
1149 | ! |
---|
1150 | IF(NK.EQ.LTOP)THEN |
---|
1151 | UDR(NK) = UMF(NK-1) |
---|
1152 | UER(NK) = 0. |
---|
1153 | DETLQ(NK) = UDR(NK)*QLIQ(NK)*DILFRC(NK) |
---|
1154 | DETIC(NK) = UDR(NK)*QICE(NK)*DILFRC(NK) |
---|
1155 | ELSE |
---|
1156 | UMF(NK)=UMF(NK-1)-DP(NK)*DUMFDP |
---|
1157 | UER(NK)=UMF(NK)*(1.-1./DILFRC(NK)) |
---|
1158 | UDR(NK)=UMF(NK-1)-UMF(NK)+UER(NK) |
---|
1159 | DETLQ(NK)=UDR(NK)*QLIQ(NK)*DILFRC(NK) |
---|
1160 | DETIC(NK)=UDR(NK)*QICE(NK)*DILFRC(NK) |
---|
1161 | ENDIF |
---|
1162 | IF(NK.GE.LET+2)THEN |
---|
1163 | TRPPT=TRPPT-PPTLIQ(NK)-PPTICE(NK) |
---|
1164 | PPTLIQ(NK)=UMF(NK-1)*QLQOUT(NK) |
---|
1165 | PPTICE(NK)=UMF(NK-1)*QICOUT(NK) |
---|
1166 | TRPPT=TRPPT+PPTLIQ(NK)+PPTICE(NK) |
---|
1167 | ENDIF |
---|
1168 | ENDDO |
---|
1169 | ENDIF |
---|
1170 | ! |
---|
1171 | ! Initialize some arrays below cloud base and above cloud top... |
---|
1172 | ! |
---|
1173 | DO NK=1,LTOP |
---|
1174 | IF(T0(NK).GT.T00)ML=NK |
---|
1175 | ENDDO |
---|
1176 | DO NK=1,K |
---|
1177 | IF(NK.GE.LC)THEN |
---|
1178 | IF(NK.EQ.LC)THEN |
---|
1179 | UMF(NK)=VMFLCL*DP(NK)/DPTHMX |
---|
1180 | UER(NK)=VMFLCL*DP(NK)/DPTHMX |
---|
1181 | ELSEIF(NK.LE.KPBL)THEN |
---|
1182 | UER(NK)=VMFLCL*DP(NK)/DPTHMX |
---|
1183 | UMF(NK)=UMF(NK-1)+UER(NK) |
---|
1184 | ELSE |
---|
1185 | UMF(NK)=VMFLCL |
---|
1186 | UER(NK)=0. |
---|
1187 | ENDIF |
---|
1188 | TU(NK)=TMIX+(Z0(NK)-ZMIX)*GDRY |
---|
1189 | QU(NK)=QMIX |
---|
1190 | WU(NK)=WLCL |
---|
1191 | ELSE |
---|
1192 | TU(NK)=0. |
---|
1193 | QU(NK)=0. |
---|
1194 | UMF(NK)=0. |
---|
1195 | WU(NK)=0. |
---|
1196 | UER(NK)=0. |
---|
1197 | ENDIF |
---|
1198 | UDR(NK)=0. |
---|
1199 | QDT(NK)=0. |
---|
1200 | QLIQ(NK)=0. |
---|
1201 | QICE(NK)=0. |
---|
1202 | QLQOUT(NK)=0. |
---|
1203 | QICOUT(NK)=0. |
---|
1204 | PPTLIQ(NK)=0. |
---|
1205 | PPTICE(NK)=0. |
---|
1206 | DETLQ(NK)=0. |
---|
1207 | DETIC(NK)=0. |
---|
1208 | RATIO2(NK)=0. |
---|
1209 | CALL ENVIRTHT(P0(NK),T0(NK),Q0(NK),THETEE(NK),ALIQ,BLIQ,CLIQ,DLIQ) |
---|
1210 | EQFRC(NK)=1.0 |
---|
1211 | ENDDO |
---|
1212 | ! |
---|
1213 | LTOP1=LTOP+1 |
---|
1214 | LTOPM1=LTOP-1 |
---|
1215 | ! |
---|
1216 | !...DEFINE VARIABLES ABOVE CLOUD TOP... |
---|
1217 | ! |
---|
1218 | DO NK=LTOP1,KX |
---|
1219 | UMF(NK)=0. |
---|
1220 | UDR(NK)=0. |
---|
1221 | UER(NK)=0. |
---|
1222 | QDT(NK)=0. |
---|
1223 | QLIQ(NK)=0. |
---|
1224 | QICE(NK)=0. |
---|
1225 | QLQOUT(NK)=0. |
---|
1226 | QICOUT(NK)=0. |
---|
1227 | DETLQ(NK)=0. |
---|
1228 | DETIC(NK)=0. |
---|
1229 | PPTLIQ(NK)=0. |
---|
1230 | PPTICE(NK)=0. |
---|
1231 | IF(NK.GT.LTOP1)THEN |
---|
1232 | TU(NK)=0. |
---|
1233 | QU(NK)=0. |
---|
1234 | WU(NK)=0. |
---|
1235 | ENDIF |
---|
1236 | THTA0(NK)=0. |
---|
1237 | THTAU(NK)=0. |
---|
1238 | EMS(NK)=0. |
---|
1239 | EMSD(NK)=0. |
---|
1240 | TG(NK)=T0(NK) |
---|
1241 | QG(NK)=Q0(NK) |
---|
1242 | QLG(NK)=0. |
---|
1243 | QIG(NK)=0. |
---|
1244 | QRG(NK)=0. |
---|
1245 | QSG(NK)=0. |
---|
1246 | OMG(NK)=0. |
---|
1247 | ENDDO |
---|
1248 | OMG(KX+1)=0. |
---|
1249 | DO NK=1,LTOP |
---|
1250 | EMS(NK)=DP(NK)*DXSQ/G |
---|
1251 | EMSD(NK)=1./EMS(NK) |
---|
1252 | ! |
---|
1253 | !...INITIALIZE SOME VARIABLES TO BE USED LATER IN THE VERT ADVECTION SCH |
---|
1254 | ! |
---|
1255 | EXN(NK)=(P00/P0(NK))**(0.2854*(1.-0.28*QDT(NK))) |
---|
1256 | THTAU(NK)=TU(NK)*EXN(NK) |
---|
1257 | EXN(NK)=(P00/P0(NK))**(0.2854*(1.-0.28*Q0(NK))) |
---|
1258 | THTA0(NK)=T0(NK)*EXN(NK) |
---|
1259 | DDILFRC(NK) = 1./DILFRC(NK) |
---|
1260 | OMG(NK)=0. |
---|
1261 | ENDDO |
---|
1262 | ! IF (XTIME.LT.10.)THEN |
---|
1263 | ! WRITE(98,1025)KLCL,ZLCL,DTLCL,LTOP,P0(LTOP),IFLAG, |
---|
1264 | ! * TMIX-T00,PMIX,QMIX,ABE |
---|
1265 | ! WRITE(98,1030)P0(LET)/100.,P0(LTOP)/100.,VMFLCL,PLCL/100., |
---|
1266 | ! * WLCL,CLDHGT |
---|
1267 | ! ENDIF |
---|
1268 | ! |
---|
1269 | !...COMPUTE CONVECTIVE TIME SCALE(TIMEC). THE MEAN WIND AT THE LCL |
---|
1270 | !...AND MIDTROPOSPHERE IS USED. |
---|
1271 | ! |
---|
1272 | WSPD(KLCL)=SQRT(U0(KLCL)*U0(KLCL)+V0(KLCL)*V0(KLCL)) |
---|
1273 | WSPD(L5)=SQRT(U0(L5)*U0(L5)+V0(L5)*V0(L5)) |
---|
1274 | WSPD(LTOP)=SQRT(U0(LTOP)*U0(LTOP)+V0(LTOP)*V0(LTOP)) |
---|
1275 | VCONV=.5*(WSPD(KLCL)+WSPD(L5)) |
---|
1276 | !...for ETA model, DX is a function of location... |
---|
1277 | ! TIMEC=DX(I,J)/VCONV |
---|
1278 | TIMEC=DX/VCONV |
---|
1279 | TADVEC=TIMEC |
---|
1280 | TIMEC=AMAX1(1800.,TIMEC) |
---|
1281 | TIMEC=AMIN1(3600.,TIMEC) |
---|
1282 | IF(ISHALL.EQ.1)TIMEC=2400. |
---|
1283 | NIC=NINT(TIMEC/DT) |
---|
1284 | TIMEC=FLOAT(NIC)*DT |
---|
1285 | ! |
---|
1286 | !...COMPUTE WIND SHEAR AND PRECIPITATION EFFICIENCY. |
---|
1287 | ! |
---|
1288 | IF(WSPD(LTOP).GT.WSPD(KLCL))THEN |
---|
1289 | SHSIGN=1. |
---|
1290 | ELSE |
---|
1291 | SHSIGN=-1. |
---|
1292 | ENDIF |
---|
1293 | VWS=(U0(LTOP)-U0(KLCL))*(U0(LTOP)-U0(KLCL))+(V0(LTOP)-V0(KLCL))* & |
---|
1294 | (V0(LTOP)-V0(KLCL)) |
---|
1295 | VWS=1.E3*SHSIGN*SQRT(VWS)/(Z0(LTOP)-Z0(LCL)) |
---|
1296 | PEF=1.591+VWS*(-.639+VWS*(9.53E-2-VWS*4.96E-3)) |
---|
1297 | PEF=AMAX1(PEF,.2) |
---|
1298 | PEF=AMIN1(PEF,.9) |
---|
1299 | ! |
---|
1300 | !...PRECIPITATION EFFICIENCY IS A FUNCTION OF THE HEIGHT OF CLOUD BASE. |
---|
1301 | ! |
---|
1302 | CBH=(ZLCL-Z0(1))*3.281E-3 |
---|
1303 | IF(CBH.LT.3.)THEN |
---|
1304 | RCBH=.02 |
---|
1305 | ELSE |
---|
1306 | RCBH=.96729352+CBH*(-.70034167+CBH*(.162179896+CBH*(- & |
---|
1307 | 1.2569798E-2+CBH*(4.2772E-4-CBH*5.44E-6)))) |
---|
1308 | ENDIF |
---|
1309 | IF(CBH.GT.25)RCBH=2.4 |
---|
1310 | PEFCBH=1./(1.+RCBH) |
---|
1311 | PEFCBH=AMIN1(PEFCBH,.9) |
---|
1312 | ! |
---|
1313 | !... MEAN PEF. IS USED TO COMPUTE RAINFALL. |
---|
1314 | ! |
---|
1315 | PEFF=.5*(PEF+PEFCBH) |
---|
1316 | PEFF2 = PEFF ! JSK MODS |
---|
1317 | IF(IPRNT)THEN |
---|
1318 | WRITE(98,1035)PEF,PEFCBH,LC,LET,WKL,VWS |
---|
1319 | ! call flush(98) |
---|
1320 | endif |
---|
1321 | ! WRITE(98,1035)PEF,PEFCBH,LC,LET,WKL,VWS |
---|
1322 | !***************************************************************** |
---|
1323 | ! * |
---|
1324 | ! COMPUTE DOWNDRAFT PROPERTIES * |
---|
1325 | ! * |
---|
1326 | !***************************************************************** |
---|
1327 | ! |
---|
1328 | ! |
---|
1329 | TDER=0. |
---|
1330 | devap:IF(ISHALL.EQ.1)THEN |
---|
1331 | LFS = 1 |
---|
1332 | ELSE |
---|
1333 | ! |
---|
1334 | !...start downdraft about 150 mb above cloud base... |
---|
1335 | ! |
---|
1336 | ! KSTART=MAX0(KPBL,KLCL) |
---|
1337 | ! KSTART=KPBL ! Changed 7/23/99 |
---|
1338 | KSTART=KPBL+1 ! Changed 7/23/99 |
---|
1339 | KLFS = LET-1 |
---|
1340 | DO NK = KSTART+1,KL |
---|
1341 | DPPP = P0(KSTART)-P0(NK) |
---|
1342 | ! IF(DPPP.GT.200.E2)THEN |
---|
1343 | IF(DPPP.GT.150.E2)THEN |
---|
1344 | KLFS = NK |
---|
1345 | EXIT |
---|
1346 | ENDIF |
---|
1347 | ENDDO |
---|
1348 | KLFS = MIN0(KLFS,LET-1) |
---|
1349 | LFS = KLFS |
---|
1350 | ! |
---|
1351 | !...if LFS is not at least 50 mb above cloud base (implying that the |
---|
1352 | !...level of equil temp, LET, is just above cloud base) do not allow a |
---|
1353 | !...downdraft... |
---|
1354 | ! |
---|
1355 | IF((P0(KSTART)-P0(LFS)).GT.50.E2)THEN |
---|
1356 | THETED(LFS) = THETEE(LFS) |
---|
1357 | QD(LFS) = Q0(LFS) |
---|
1358 | ! |
---|
1359 | !...call tpmix2dd to find wet-bulb temp, qv... |
---|
1360 | ! |
---|
1361 | call tpmix2dd(p0(lfs),theted(lfs),tz(lfs),qss,i,j) |
---|
1362 | THTAD(LFS)=TZ(LFS)*(P00/P0(LFS))**(0.2854*(1.-0.28*QSS)) |
---|
1363 | ! |
---|
1364 | !...TAKE A FIRST GUESS AT THE INITIAL DOWNDRAFT MASS FLUX... |
---|
1365 | ! |
---|
1366 | TVD(LFS)=TZ(LFS)*(1.+0.608*QSS) |
---|
1367 | RDD=P0(LFS)/(R*TVD(LFS)) |
---|
1368 | A1=(1.-PEFF)*AU0 |
---|
1369 | DMF(LFS)=-A1*RDD |
---|
1370 | DER(LFS)=DMF(LFS) |
---|
1371 | DDR(LFS)=0. |
---|
1372 | RHBAR = RH(LFS)*DP(LFS) |
---|
1373 | DPTT = DP(LFS) |
---|
1374 | DO ND = LFS-1,KSTART,-1 |
---|
1375 | ND1 = ND+1 |
---|
1376 | DER(ND)=DER(LFS)*EMS(ND)/EMS(LFS) |
---|
1377 | DDR(ND)=0. |
---|
1378 | DMF(ND)=DMF(ND1)+DER(ND) |
---|
1379 | THETED(ND)=(THETED(ND1)*DMF(ND1)+THETEE(ND)*DER(ND))/DMF(ND) |
---|
1380 | QD(ND)=(QD(ND1)*DMF(ND1)+Q0(ND)*DER(ND))/DMF(ND) |
---|
1381 | DPTT = DPTT+DP(ND) |
---|
1382 | RHBAR = RHBAR+RH(ND)*DP(ND) |
---|
1383 | ENDDO |
---|
1384 | RHBAR = RHBAR/DPTT |
---|
1385 | DMFFRC = 2.*(1.-RHBAR) |
---|
1386 | DPDD = 0. |
---|
1387 | !...Calculate melting effect |
---|
1388 | !... first, compute total frozen precipitation generated... |
---|
1389 | ! |
---|
1390 | pptmlt = 0. |
---|
1391 | DO NK = KLCL,LTOP |
---|
1392 | PPTMLT = PPTMLT+PPTICE(NK) |
---|
1393 | ENDDO |
---|
1394 | if(lc.lt.ml)then |
---|
1395 | !...For now, calculate melting effect as if DMF = -UMF at KLCL, i.e., as |
---|
1396 | !...if DMFFRC=1. Otherwise, for small DMFFRC, DTMELT gets too large! |
---|
1397 | !...12/14/98 jsk... |
---|
1398 | DTMELT = RLF*PPTMLT/(CP*UMF(KLCL)) |
---|
1399 | else |
---|
1400 | DTMELT = 0. |
---|
1401 | endif |
---|
1402 | LDT = MIN0(LFS-1,KSTART-1) |
---|
1403 | ! |
---|
1404 | call tpmix2dd(p0(kstart),theted(kstart),tz(kstart),qss,i,j) |
---|
1405 | ! |
---|
1406 | tz(kstart) = tz(kstart)-dtmelt |
---|
1407 | ES=ALIQ*EXP((BLIQ*TZ(KSTART)-CLIQ)/(TZ(KSTART)-DLIQ)) |
---|
1408 | QSS=0.622*ES/(P0(KSTART)-ES) |
---|
1409 | THETED(KSTART)=TZ(KSTART)*(1.E5/P0(KSTART))**(0.2854*(1.-0.28*QSS))* & |
---|
1410 | EXP((3374.6525/TZ(KSTART)-2.5403)*QSS*(1.+0.81*QSS)) |
---|
1411 | !.... |
---|
1412 | LDT = MIN0(LFS-1,KSTART-1) |
---|
1413 | DO ND = LDT,1,-1 |
---|
1414 | DPDD = DPDD+DP(ND) |
---|
1415 | THETED(ND) = THETED(KSTART) |
---|
1416 | QD(ND) = QD(KSTART) |
---|
1417 | ! |
---|
1418 | !...call tpmix2dd to find wet bulb temp, saturation mixing ratio... |
---|
1419 | ! |
---|
1420 | call tpmix2dd(p0(nd),theted(nd),tz(nd),qss,i,j) |
---|
1421 | qsd(nd) = qss |
---|
1422 | ! |
---|
1423 | !...specify RH decrease of 20%/km in downdraft... |
---|
1424 | ! |
---|
1425 | RHH = 1.-0.2/1000.*(Z0(KSTART)-Z0(ND)) |
---|
1426 | ! |
---|
1427 | !...adjust downdraft TEMP, Q to specified RH: |
---|
1428 | ! |
---|
1429 | IF(RHH.LT.1.)THEN |
---|
1430 | DSSDT=(CLIQ-BLIQ*DLIQ)/((TZ(ND)-DLIQ)*(TZ(ND)-DLIQ)) |
---|
1431 | RL=XLV0-XLV1*TZ(ND) |
---|
1432 | DTMP=RL*QSS*(1.-RHH)/(CP+RL*RHH*QSS*DSSDT) |
---|
1433 | T1RH=TZ(ND)+DTMP |
---|
1434 | ES=RHH*ALIQ*EXP((BLIQ*T1RH-CLIQ)/(T1RH-DLIQ)) |
---|
1435 | QSRH=0.622*ES/(P0(ND)-ES) |
---|
1436 | ! |
---|
1437 | !...CHECK TO SEE IF MIXING RATIO AT SPECIFIED RH IS LESS THAN ACTUAL |
---|
1438 | !...MIXING RATIO...IF SO, ADJUST TO GIVE ZERO EVAPORATION... |
---|
1439 | ! |
---|
1440 | IF(QSRH.LT.QD(ND))THEN |
---|
1441 | QSRH=QD(ND) |
---|
1442 | T1RH=TZ(ND)+(QSS-QSRH)*RL/CP |
---|
1443 | ENDIF |
---|
1444 | TZ(ND)=T1RH |
---|
1445 | QSS=QSRH |
---|
1446 | QSD(ND) = QSS |
---|
1447 | ENDIF |
---|
1448 | TVD(nd) = tz(nd)*(1.+0.608*qsd(nd)) |
---|
1449 | IF(TVD(ND).GT.TV0(ND).OR.ND.EQ.1)THEN |
---|
1450 | LDB=ND |
---|
1451 | EXIT |
---|
1452 | ENDIF |
---|
1453 | ENDDO |
---|
1454 | IF((P0(LDB)-P0(LFS)) .gt. 50.E2)THEN ! minimum Downdraft depth! |
---|
1455 | DO ND=LDT,LDB,-1 |
---|
1456 | ND1 = ND+1 |
---|
1457 | DDR(ND) = -DMF(KSTART)*DP(ND)/DPDD |
---|
1458 | DER(ND) = 0. |
---|
1459 | DMF(ND) = DMF(ND1)+DDR(ND) |
---|
1460 | TDER=TDER+(QSD(nd)-QD(ND))*DDR(ND) |
---|
1461 | QD(ND)=QSD(nd) |
---|
1462 | THTAD(ND)=TZ(ND)*(P00/P0(ND))**(0.2854*(1.-0.28*QD(ND))) |
---|
1463 | ENDDO |
---|
1464 | ENDIF |
---|
1465 | ENDIF |
---|
1466 | ENDIF devap |
---|
1467 | ! |
---|
1468 | !...IF DOWNDRAFT DOES NOT EVAPORATE ANY WATER FOR SPECIFIED RELATIVE |
---|
1469 | !...HUMIDITY, NO DOWNDRAFT IS ALLOWED... |
---|
1470 | ! |
---|
1471 | d_mf: IF(TDER.LT.1.)THEN |
---|
1472 | ! WRITE(98,3004)I,J |
---|
1473 | !3004 FORMAT(' ','No Downdraft!; I=',I3,2X,'J=',I3,'ISHALL =',I2) |
---|
1474 | PPTFLX=TRPPT |
---|
1475 | CPR=TRPPT |
---|
1476 | TDER=0. |
---|
1477 | CNDTNF=0. |
---|
1478 | UPDINC=1. |
---|
1479 | LDB=LFS |
---|
1480 | DO NDK=1,LTOP |
---|
1481 | DMF(NDK)=0. |
---|
1482 | DER(NDK)=0. |
---|
1483 | DDR(NDK)=0. |
---|
1484 | THTAD(NDK)=0. |
---|
1485 | WD(NDK)=0. |
---|
1486 | TZ(NDK)=0. |
---|
1487 | QD(NDK)=0. |
---|
1488 | ENDDO |
---|
1489 | AINCM2=100. |
---|
1490 | ELSE |
---|
1491 | DDINC = -DMFFRC*UMF(KLCL)/DMF(KSTART) |
---|
1492 | UPDINC=1. |
---|
1493 | IF(TDER*DDINC.GT.TRPPT)THEN |
---|
1494 | DDINC = TRPPT/TDER |
---|
1495 | ENDIF |
---|
1496 | TDER = TDER*DDINC |
---|
1497 | DO NK=LDB,LFS |
---|
1498 | DMF(NK)=DMF(NK)*DDINC |
---|
1499 | DER(NK)=DER(NK)*DDINC |
---|
1500 | DDR(NK)=DDR(NK)*DDINC |
---|
1501 | ENDDO |
---|
1502 | CPR=TRPPT |
---|
1503 | PPTFLX = TRPPT-TDER |
---|
1504 | PEFF=PPTFLX/TRPPT |
---|
1505 | IF(IPRNT)THEN |
---|
1506 | write(98,*)'PRECIP EFFICIENCY =',PEFF |
---|
1507 | ! call flush(98) |
---|
1508 | ENDIF |
---|
1509 | ! |
---|
1510 | ! |
---|
1511 | !...ADJUST UPDRAFT MASS FLUX, MASS DETRAINMENT RATE, AND LIQUID WATER AN |
---|
1512 | ! DETRAINMENT RATES TO BE CONSISTENT WITH THE TRANSFER OF THE ESTIMATE |
---|
1513 | ! FROM THE UPDRAFT TO THE DOWNDRAFT AT THE LFS... |
---|
1514 | ! |
---|
1515 | ! DO NK=LC,LFS |
---|
1516 | ! UMF(NK)=UMF(NK)*UPDINC |
---|
1517 | ! UDR(NK)=UDR(NK)*UPDINC |
---|
1518 | ! UER(NK)=UER(NK)*UPDINC |
---|
1519 | ! PPTLIQ(NK)=PPTLIQ(NK)*UPDINC |
---|
1520 | ! PPTICE(NK)=PPTICE(NK)*UPDINC |
---|
1521 | ! DETLQ(NK)=DETLQ(NK)*UPDINC |
---|
1522 | ! DETIC(NK)=DETIC(NK)*UPDINC |
---|
1523 | ! ENDDO |
---|
1524 | ! |
---|
1525 | !...ZERO OUT THE ARRAYS FOR DOWNDRAFT DATA AT LEVELS ABOVE AND BELOW THE |
---|
1526 | !...DOWNDRAFT... |
---|
1527 | ! |
---|
1528 | IF(LDB.GT.1)THEN |
---|
1529 | DO NK=1,LDB-1 |
---|
1530 | DMF(NK)=0. |
---|
1531 | DER(NK)=0. |
---|
1532 | DDR(NK)=0. |
---|
1533 | WD(NK)=0. |
---|
1534 | TZ(NK)=0. |
---|
1535 | QD(NK)=0. |
---|
1536 | THTAD(NK)=0. |
---|
1537 | ENDDO |
---|
1538 | ENDIF |
---|
1539 | DO NK=LFS+1,KX |
---|
1540 | DMF(NK)=0. |
---|
1541 | DER(NK)=0. |
---|
1542 | DDR(NK)=0. |
---|
1543 | WD(NK)=0. |
---|
1544 | TZ(NK)=0. |
---|
1545 | QD(NK)=0. |
---|
1546 | THTAD(NK)=0. |
---|
1547 | ENDDO |
---|
1548 | DO NK=LDT+1,LFS-1 |
---|
1549 | TZ(NK)=0. |
---|
1550 | QD(NK)=0. |
---|
1551 | THTAD(NK)=0. |
---|
1552 | ENDDO |
---|
1553 | ENDIF d_mf |
---|
1554 | ! |
---|
1555 | !...SET LIMITS ON THE UPDRAFT AND DOWNDRAFT MASS FLUXES SO THAT THE INFL |
---|
1556 | ! INTO CONVECTIVE DRAFTS FROM A GIVEN LAYER IS NO MORE THAN IS AVAILAB |
---|
1557 | ! IN THAT LAYER INITIALLY... |
---|
1558 | ! |
---|
1559 | AINCMX=1000. |
---|
1560 | LMAX=MAX0(KLCL,LFS) |
---|
1561 | DO NK=LC,LMAX |
---|
1562 | IF((UER(NK)-DER(NK)).GT.1.e-3)THEN |
---|
1563 | AINCM1=EMS(NK)/((UER(NK)-DER(NK))*TIMEC) |
---|
1564 | AINCMX=AMIN1(AINCMX,AINCM1) |
---|
1565 | ENDIF |
---|
1566 | ENDDO |
---|
1567 | AINC=1. |
---|
1568 | IF(AINCMX.LT.AINC)AINC=AINCMX |
---|
1569 | ! |
---|
1570 | !...SAVE THE RELEVENT VARIABLES FOR A UNIT UPDRAFT AND DOWNDRAFT...THEY WILL |
---|
1571 | !...BE ITERATIVELY ADJUSTED BY THE FACTOR AINC TO SATISFY THE STABILIZATION |
---|
1572 | !...CLOSURE... |
---|
1573 | ! |
---|
1574 | TDER2=TDER |
---|
1575 | PPTFL2=PPTFLX |
---|
1576 | DO NK=1,LTOP |
---|
1577 | DETLQ2(NK)=DETLQ(NK) |
---|
1578 | DETIC2(NK)=DETIC(NK) |
---|
1579 | UDR2(NK)=UDR(NK) |
---|
1580 | UER2(NK)=UER(NK) |
---|
1581 | DDR2(NK)=DDR(NK) |
---|
1582 | DER2(NK)=DER(NK) |
---|
1583 | UMF2(NK)=UMF(NK) |
---|
1584 | DMF2(NK)=DMF(NK) |
---|
1585 | ENDDO |
---|
1586 | FABE=1. |
---|
1587 | STAB=0.95 |
---|
1588 | NOITR=0 |
---|
1589 | ISTOP=0 |
---|
1590 | ! |
---|
1591 | IF(ISHALL.EQ.1)THEN ! First for shallow convection |
---|
1592 | ! |
---|
1593 | ! No iteration for shallow convection; if turbulent kinetic energy (TKE) is available |
---|
1594 | ! from a turbulence parameterization, scale cloud-base updraft mass flux as a function |
---|
1595 | ! of TKE, but for now, just specify shallow-cloud mass flux using TKEMAX = 5... |
---|
1596 | ! |
---|
1597 | !...find the maximum TKE value between LC and KLCL... |
---|
1598 | ! TKEMAX = 0. |
---|
1599 | TKEMAX = 5. |
---|
1600 | ! DO 173 K = LC,KLCL |
---|
1601 | ! NK = KX-K+1 |
---|
1602 | ! TKEMAX = AMAX1(TKEMAX,Q2(I,J,NK)) |
---|
1603 | ! 173 CONTINUE |
---|
1604 | ! TKEMAX = AMIN1(TKEMAX,10.) |
---|
1605 | ! TKEMAX = AMAX1(TKEMAX,5.) |
---|
1606 | !c TKEMAX = 10. |
---|
1607 | !c...3_24_99...DPMIN was changed for shallow convection so that it is the |
---|
1608 | !c... the same as for deep convection (5.E3). Since this doubles |
---|
1609 | !c... (roughly) the value of DPTHMX, add a factor of 0.5 to calcu- |
---|
1610 | !c... lation of EVAC... |
---|
1611 | !c EVAC = TKEMAX*0.1 |
---|
1612 | EVAC = 0.5*TKEMAX*0.1 |
---|
1613 | ! AINC = 0.1*DPTHMX*DXIJ*DXIJ/(VMFLCL*G*TIMEC) |
---|
1614 | ! AINC = EVAC*DPTHMX*DX(I,J)*DX(I,J)/(VMFLCL*G*TIMEC) |
---|
1615 | AINC = EVAC*DPTHMX*DXSQ/(VMFLCL*G*TIMEC) |
---|
1616 | TDER=TDER2*AINC |
---|
1617 | PPTFLX=PPTFL2*AINC |
---|
1618 | DO NK=1,LTOP |
---|
1619 | UMF(NK)=UMF2(NK)*AINC |
---|
1620 | DMF(NK)=DMF2(NK)*AINC |
---|
1621 | DETLQ(NK)=DETLQ2(NK)*AINC |
---|
1622 | DETIC(NK)=DETIC2(NK)*AINC |
---|
1623 | UDR(NK)=UDR2(NK)*AINC |
---|
1624 | UER(NK)=UER2(NK)*AINC |
---|
1625 | DER(NK)=DER2(NK)*AINC |
---|
1626 | DDR(NK)=DDR2(NK)*AINC |
---|
1627 | ENDDO |
---|
1628 | ENDIF ! Otherwise for deep convection |
---|
1629 | ! use iterative procedure to find mass fluxes... |
---|
1630 | iter: DO NCOUNT=1,10 |
---|
1631 | ! |
---|
1632 | !***************************************************************** |
---|
1633 | ! * |
---|
1634 | ! COMPUTE PROPERTIES FOR COMPENSATIONAL SUBSIDENCE * |
---|
1635 | ! * |
---|
1636 | !***************************************************************** |
---|
1637 | ! |
---|
1638 | !...DETERMINE OMEGA VALUE NECESSARY AT TOP AND BOTTOM OF EACH LAYER TO |
---|
1639 | !...SATISFY MASS CONTINUITY... |
---|
1640 | ! |
---|
1641 | DTT=TIMEC |
---|
1642 | DO NK=1,LTOP |
---|
1643 | DOMGDP(NK)=-(UER(NK)-DER(NK)-UDR(NK)-DDR(NK))*EMSD(NK) |
---|
1644 | IF(NK.GT.1)THEN |
---|
1645 | OMG(NK)=OMG(NK-1)-DP(NK-1)*DOMGDP(NK-1) |
---|
1646 | ABSOMG = ABS(OMG(NK)) |
---|
1647 | ABSOMGTC = ABSOMG*TIMEC |
---|
1648 | FRDP = 0.75*DP(NK-1) |
---|
1649 | IF(ABSOMGTC.GT.FRDP)THEN |
---|
1650 | DTT1 = FRDP/ABSOMG |
---|
1651 | DTT=AMIN1(DTT,DTT1) |
---|
1652 | ENDIF |
---|
1653 | ENDIF |
---|
1654 | ENDDO |
---|
1655 | DO NK=1,LTOP |
---|
1656 | THPA(NK)=THTA0(NK) |
---|
1657 | QPA(NK)=Q0(NK) |
---|
1658 | NSTEP=NINT(TIMEC/DTT+1) |
---|
1659 | DTIME=TIMEC/FLOAT(NSTEP) |
---|
1660 | FXM(NK)=OMG(NK)*DXSQ/G |
---|
1661 | ENDDO |
---|
1662 | ! |
---|
1663 | !...DO AN UPSTREAM/FORWARD-IN-TIME ADVECTION OF THETA, QV... |
---|
1664 | ! |
---|
1665 | DO NTC=1,NSTEP |
---|
1666 | ! |
---|
1667 | !...ASSIGN THETA AND Q VALUES AT THE TOP AND BOTTOM OF EACH LAYER BASED |
---|
1668 | !...SIGN OF OMEGA... |
---|
1669 | ! |
---|
1670 | DO NK=1,LTOP |
---|
1671 | THFXIN(NK)=0. |
---|
1672 | THFXOUT(NK)=0. |
---|
1673 | QFXIN(NK)=0. |
---|
1674 | QFXOUT(NK)=0. |
---|
1675 | ENDDO |
---|
1676 | DO NK=2,LTOP |
---|
1677 | IF(OMG(NK).LE.0.)THEN |
---|
1678 | THFXIN(NK)=-FXM(NK)*THPA(NK-1) |
---|
1679 | QFXIN(NK)=-FXM(NK)*QPA(NK-1) |
---|
1680 | THFXOUT(NK-1)=THFXOUT(NK-1)+THFXIN(NK) |
---|
1681 | QFXOUT(NK-1)=QFXOUT(NK-1)+QFXIN(NK) |
---|
1682 | ELSE |
---|
1683 | THFXOUT(NK)=FXM(NK)*THPA(NK) |
---|
1684 | QFXOUT(NK)=FXM(NK)*QPA(NK) |
---|
1685 | THFXIN(NK-1)=THFXIN(NK-1)+THFXOUT(NK) |
---|
1686 | QFXIN(NK-1)=QFXIN(NK-1)+QFXOUT(NK) |
---|
1687 | ENDIF |
---|
1688 | ENDDO |
---|
1689 | ! |
---|
1690 | !...UPDATE THE THETA AND QV VALUES AT EACH LEVEL... |
---|
1691 | ! |
---|
1692 | DO NK=1,LTOP |
---|
1693 | THPA(NK)=THPA(NK)+(THFXIN(NK)+UDR(NK)*THTAU(NK)+DDR(NK)* & |
---|
1694 | THTAD(NK)-THFXOUT(NK)-(UER(NK)-DER(NK))*THTA0(NK))* & |
---|
1695 | DTIME*EMSD(NK) |
---|
1696 | QPA(NK)=QPA(NK)+(QFXIN(NK)+UDR(NK)*QDT(NK)+DDR(NK)*QD(NK)- & |
---|
1697 | QFXOUT(NK)-(UER(NK)-DER(NK))*Q0(NK))*DTIME*EMSD(NK) |
---|
1698 | ENDDO |
---|
1699 | ENDDO |
---|
1700 | DO NK=1,LTOP |
---|
1701 | THTAG(NK)=THPA(NK) |
---|
1702 | QG(NK)=QPA(NK) |
---|
1703 | ENDDO |
---|
1704 | ! |
---|
1705 | !...CHECK TO SEE IF MIXING RATIO DIPS BELOW ZERO ANYWHERE; IF SO, BORRO |
---|
1706 | !...MOISTURE FROM ADJACENT LAYERS TO BRING IT BACK UP ABOVE ZERO... |
---|
1707 | ! |
---|
1708 | DO NK=1,LTOP |
---|
1709 | IF(QG(NK).LT.0.)THEN |
---|
1710 | IF(NK.EQ.1)THEN ! JSK MODS |
---|
1711 | ! PRINT *,' PROBLEM WITH KF SCHEME: ' ! JSK MODS |
---|
1712 | ! PRINT *,'QG = 0 AT THE SURFACE!!!!!!!' ! JSK MODS |
---|
1713 | CALL wrf_error_fatal ( 'QG, QG(NK).LT.0') ! JSK MODS |
---|
1714 | ENDIF ! JSK MODS |
---|
1715 | NK1=NK+1 |
---|
1716 | IF(NK.EQ.LTOP)THEN |
---|
1717 | NK1=KLCL |
---|
1718 | ENDIF |
---|
1719 | TMA=QG(NK1)*EMS(NK1) |
---|
1720 | TMB=QG(NK-1)*EMS(NK-1) |
---|
1721 | TMM=(QG(NK)-1.E-9)*EMS(NK ) |
---|
1722 | BCOEFF=-TMM/((TMA*TMA)/TMB+TMB) |
---|
1723 | ACOEFF=BCOEFF*TMA/TMB |
---|
1724 | TMB=TMB*(1.-BCOEFF) |
---|
1725 | TMA=TMA*(1.-ACOEFF) |
---|
1726 | IF(NK.EQ.LTOP)THEN |
---|
1727 | QVDIFF=(QG(NK1)-TMA*EMSD(NK1))*100./QG(NK1) |
---|
1728 | ! IF(ABS(QVDIFF).GT.1.)THEN |
---|
1729 | ! PRINT *,'!!!WARNING!!! CLOUD BASE WATER VAPOR CHANGES BY ', & |
---|
1730 | ! QVDIFF, & |
---|
1731 | ! '% WHEN MOISTURE IS BORROWED TO PREVENT NEGATIVE ', & |
---|
1732 | ! 'VALUES IN KAIN-FRITSCH' |
---|
1733 | ! ENDIF |
---|
1734 | ENDIF |
---|
1735 | QG(NK)=1.E-9 |
---|
1736 | QG(NK1)=TMA*EMSD(NK1) |
---|
1737 | QG(NK-1)=TMB*EMSD(NK-1) |
---|
1738 | ENDIF |
---|
1739 | ENDDO |
---|
1740 | TOPOMG=(UDR(LTOP)-UER(LTOP))*DP(LTOP)*EMSD(LTOP) |
---|
1741 | IF(ABS(TOPOMG-OMG(LTOP)).GT.1.E-3)THEN |
---|
1742 | ! WRITE(99,*)'ERROR: MASS DOES NOT BALANCE IN KF SCHEME; & |
---|
1743 | ! TOPOMG, OMG =',TOPOMG,OMG(LTOP) |
---|
1744 | ! TOPOMG, OMG =',TOPOMG,OMG(LTOP) |
---|
1745 | ISTOP=1 |
---|
1746 | IPRNT=.TRUE. |
---|
1747 | EXIT iter |
---|
1748 | ENDIF |
---|
1749 | ! |
---|
1750 | !...CONVERT THETA TO T... |
---|
1751 | ! |
---|
1752 | DO NK=1,LTOP |
---|
1753 | EXN(NK)=(P00/P0(NK))**(0.2854*(1.-0.28*QG(NK))) |
---|
1754 | TG(NK)=THTAG(NK)/EXN(NK) |
---|
1755 | TVG(NK)=TG(NK)*(1.+0.608*QG(NK)) |
---|
1756 | ENDDO |
---|
1757 | IF(ISHALL.EQ.1)THEN |
---|
1758 | EXIT iter |
---|
1759 | ENDIF |
---|
1760 | ! |
---|
1761 | !******************************************************************* |
---|
1762 | ! * |
---|
1763 | ! COMPUTE NEW CLOUD AND CHANGE IN AVAILABLE BUOYANT ENERGY. * |
---|
1764 | ! * |
---|
1765 | !******************************************************************* |
---|
1766 | ! |
---|
1767 | !...THE FOLLOWING COMPUTATIONS ARE SIMILAR TO THAT FOR UPDRAFT |
---|
1768 | ! |
---|
1769 | ! THMIX=0. |
---|
1770 | TMIX=0. |
---|
1771 | QMIX=0. |
---|
1772 | ! |
---|
1773 | !...FIND THE THERMODYNAMIC CHARACTERISTICS OF THE LAYER BY |
---|
1774 | !...MASS-WEIGHTING THE CHARACTERISTICS OF THE INDIVIDUAL MODEL |
---|
1775 | !...LAYERS... |
---|
1776 | ! |
---|
1777 | DO NK=LC,KPBL |
---|
1778 | TMIX=TMIX+DP(NK)*TG(NK) |
---|
1779 | QMIX=QMIX+DP(NK)*QG(NK) |
---|
1780 | ENDDO |
---|
1781 | TMIX=TMIX/DPTHMX |
---|
1782 | QMIX=QMIX/DPTHMX |
---|
1783 | ES=ALIQ*EXP((TMIX*BLIQ-CLIQ)/(TMIX-DLIQ)) |
---|
1784 | QSS=0.622*ES/(PMIX-ES) |
---|
1785 | ! |
---|
1786 | !...REMOVE SUPERSATURATION FOR DIAGNOSTIC PURPOSES, IF NECESSARY... |
---|
1787 | ! |
---|
1788 | IF(QMIX.GT.QSS)THEN |
---|
1789 | RL=XLV0-XLV1*TMIX |
---|
1790 | CPM=CP*(1.+0.887*QMIX) |
---|
1791 | DSSDT=QSS*(CLIQ-BLIQ*DLIQ)/((TMIX-DLIQ)*(TMIX-DLIQ)) |
---|
1792 | DQ=(QMIX-QSS)/(1.+RL*DSSDT/CPM) |
---|
1793 | TMIX=TMIX+RL/CP*DQ |
---|
1794 | QMIX=QMIX-DQ |
---|
1795 | TLCL=TMIX |
---|
1796 | ELSE |
---|
1797 | QMIX=AMAX1(QMIX,0.) |
---|
1798 | EMIX=QMIX*PMIX/(0.622+QMIX) |
---|
1799 | astrt=1.e-3 |
---|
1800 | binc=0.075 |
---|
1801 | a1=emix/aliq |
---|
1802 | tp=(a1-astrt)/binc |
---|
1803 | indlu=int(tp)+1 |
---|
1804 | value=(indlu-1)*binc+astrt |
---|
1805 | aintrp=(a1-value)/binc |
---|
1806 | tlog=aintrp*alu(indlu+1)+(1-aintrp)*alu(indlu) |
---|
1807 | TDPT=(CLIQ-DLIQ*TLOG)/(BLIQ-TLOG) |
---|
1808 | TLCL=TDPT-(.212+1.571E-3*(TDPT-T00)-4.36E-4*(TMIX-T00))*(TMIX-TDPT) |
---|
1809 | TLCL=AMIN1(TLCL,TMIX) |
---|
1810 | ENDIF |
---|
1811 | TVLCL=TLCL*(1.+0.608*QMIX) |
---|
1812 | ZLCL = ZMIX+(TLCL-TMIX)/GDRY |
---|
1813 | DO NK = LC,KL |
---|
1814 | KLCL=NK |
---|
1815 | IF(ZLCL.LE.Z0(NK))THEN |
---|
1816 | EXIT |
---|
1817 | ENDIF |
---|
1818 | ENDDO |
---|
1819 | K=KLCL-1 |
---|
1820 | DLP=(ZLCL-Z0(K))/(Z0(KLCL)-Z0(K)) |
---|
1821 | ! |
---|
1822 | !...ESTIMATE ENVIRONMENTAL TEMPERATURE AND MIXING RATIO AT THE LCL... |
---|
1823 | ! |
---|
1824 | TENV=TG(K)+(TG(KLCL)-TG(K))*DLP |
---|
1825 | QENV=QG(K)+(QG(KLCL)-QG(K))*DLP |
---|
1826 | TVEN=TENV*(1.+0.608*QENV) |
---|
1827 | PLCL=P0(K)+(P0(KLCL)-P0(K))*DLP |
---|
1828 | THETEU(K)=TMIX*(1.E5/PMIX)**(0.2854*(1.-0.28*QMIX))* & |
---|
1829 | EXP((3374.6525/TLCL-2.5403)*QMIX*(1.+0.81*QMIX)) |
---|
1830 | ! |
---|
1831 | !...COMPUTE ADJUSTED ABE(ABEG). |
---|
1832 | ! |
---|
1833 | ABEG=0. |
---|
1834 | DO NK=K,LTOPM1 |
---|
1835 | NK1=NK+1 |
---|
1836 | THETEU(NK1) = THETEU(NK) |
---|
1837 | ! |
---|
1838 | call tpmix2dd(p0(nk1),theteu(nk1),tgu(nk1),qgu(nk1),i,j) |
---|
1839 | ! |
---|
1840 | TVQU(NK1)=TGU(NK1)*(1.+0.608*QGU(NK1)-QLIQ(NK1)-QICE(NK1)) |
---|
1841 | IF(NK.EQ.K)THEN |
---|
1842 | DZZ=Z0(KLCL)-ZLCL |
---|
1843 | DILBE=((TVLCL+TVQU(NK1))/(TVEN+TVG(NK1))-1.)*DZZ |
---|
1844 | ELSE |
---|
1845 | DZZ=DZA(NK) |
---|
1846 | DILBE=((TVQU(NK)+TVQU(NK1))/(TVG(NK)+TVG(NK1))-1.)*DZZ |
---|
1847 | ENDIF |
---|
1848 | IF(DILBE.GT.0.)ABEG=ABEG+DILBE*G |
---|
1849 | ! |
---|
1850 | !...DILUTE BY ENTRAINMENT BY THE RATE AS ORIGINAL UPDRAFT... |
---|
1851 | ! |
---|
1852 | CALL ENVIRTHT(P0(NK1),TG(NK1),QG(NK1),THTEEG(NK1),ALIQ,BLIQ,CLIQ,DLIQ) |
---|
1853 | THETEU(NK1)=THETEU(NK1)*DDILFRC(NK1)+THTEEG(NK1)*(1.-DDILFRC(NK1)) |
---|
1854 | ENDDO |
---|
1855 | ! |
---|
1856 | !...ASSUME AT LEAST 90% OF CAPE (ABE) IS REMOVED BY CONVECTION DURING |
---|
1857 | !...THE PERIOD TIMEC... |
---|
1858 | ! |
---|
1859 | IF(NOITR.EQ.1)THEN |
---|
1860 | ! write(98,*)' ' |
---|
1861 | ! write(98,*)'TAU, I, J, =',NTSD,I,J |
---|
1862 | ! WRITE(98,1060)FABE |
---|
1863 | ! GOTO 265 |
---|
1864 | EXIT iter |
---|
1865 | ENDIF |
---|
1866 | DABE=AMAX1(ABE-ABEG,0.1*ABE) |
---|
1867 | FABE=ABEG/ABE |
---|
1868 | IF(FABE.GT.1. .and. ISHALL.EQ.0)THEN |
---|
1869 | ! WRITE(98,*)'UPDRAFT/DOWNDRAFT COUPLET INCREASES CAPE AT THIS |
---|
1870 | ! *GRID POINT; NO CONVECTION ALLOWED!' |
---|
1871 | RETURN |
---|
1872 | ENDIF |
---|
1873 | IF(NCOUNT.NE.1)THEN |
---|
1874 | IF(ABS(AINC-AINCOLD).LT.0.0001)THEN |
---|
1875 | NOITR=1 |
---|
1876 | AINC=AINCOLD |
---|
1877 | CYCLE iter |
---|
1878 | ENDIF |
---|
1879 | DFDA=(FABE-FABEOLD)/(AINC-AINCOLD) |
---|
1880 | IF(DFDA.GT.0.)THEN |
---|
1881 | NOITR=1 |
---|
1882 | AINC=AINCOLD |
---|
1883 | CYCLE iter |
---|
1884 | ENDIF |
---|
1885 | ENDIF |
---|
1886 | AINCOLD=AINC |
---|
1887 | FABEOLD=FABE |
---|
1888 | IF(AINC/AINCMX.GT.0.999.AND.FABE.GT.1.05-STAB)THEN |
---|
1889 | ! write(98,*)' ' |
---|
1890 | ! write(98,*)'TAU, I, J, =',NTSD,I,J |
---|
1891 | ! WRITE(98,1055)FABE |
---|
1892 | ! GOTO 265 |
---|
1893 | EXIT |
---|
1894 | ENDIF |
---|
1895 | IF((FABE.LE.1.05-STAB.AND.FABE.GE.0.95-STAB) .or. NCOUNT.EQ.10)THEN |
---|
1896 | EXIT iter |
---|
1897 | ELSE |
---|
1898 | IF(NCOUNT.GT.10)THEN |
---|
1899 | ! write(98,*)' ' |
---|
1900 | ! write(98,*)'TAU, I, J, =',NTSD,I,J |
---|
1901 | ! WRITE(98,1060)FABE |
---|
1902 | ! GOTO 265 |
---|
1903 | EXIT |
---|
1904 | ENDIF |
---|
1905 | ! |
---|
1906 | !...IF MORE THAN 10% OF THE ORIGINAL CAPE REMAINS, INCREASE THE CONVECTI |
---|
1907 | !...MASS FLUX BY THE FACTOR AINC: |
---|
1908 | ! |
---|
1909 | IF(FABE.EQ.0.)THEN |
---|
1910 | AINC=AINC*0.5 |
---|
1911 | ELSE |
---|
1912 | IF(DABE.LT.1.e-4)THEN |
---|
1913 | NOITR=1 |
---|
1914 | AINC=AINCOLD |
---|
1915 | CYCLE iter |
---|
1916 | ELSE |
---|
1917 | AINC=AINC*STAB*ABE/DABE |
---|
1918 | ENDIF |
---|
1919 | ENDIF |
---|
1920 | ! AINC=AMIN1(AINCMX,AINC) |
---|
1921 | AINC=AMIN1(AINCMX,AINC) |
---|
1922 | !...IF AINC BECOMES VERY SMALL, EFFECTS OF CONVECTION ! JSK MODS |
---|
1923 | !...WILL BE MINIMAL SO JUST IGNORE IT... ! JSK MODS |
---|
1924 | IF(AINC.LT.0.05)then |
---|
1925 | RETURN ! JSK MODS |
---|
1926 | ENDIF |
---|
1927 | ! AINC=AMAX1(AINC,0.05) ! JSK MODS |
---|
1928 | TDER=TDER2*AINC |
---|
1929 | PPTFLX=PPTFL2*AINC |
---|
1930 | ! IF (XTIME.LT.10.)THEN |
---|
1931 | ! WRITE(98,1080)LFS,LDB,LDT,TIMEC,TADVEC,NSTEP,NCOUNT, |
---|
1932 | ! * FABEOLD,AINCOLD |
---|
1933 | ! ENDIF |
---|
1934 | DO NK=1,LTOP |
---|
1935 | UMF(NK)=UMF2(NK)*AINC |
---|
1936 | DMF(NK)=DMF2(NK)*AINC |
---|
1937 | DETLQ(NK)=DETLQ2(NK)*AINC |
---|
1938 | DETIC(NK)=DETIC2(NK)*AINC |
---|
1939 | UDR(NK)=UDR2(NK)*AINC |
---|
1940 | UER(NK)=UER2(NK)*AINC |
---|
1941 | DER(NK)=DER2(NK)*AINC |
---|
1942 | DDR(NK)=DDR2(NK)*AINC |
---|
1943 | ENDDO |
---|
1944 | ! |
---|
1945 | !...GO BACK UP FOR ANOTHER ITERATION... |
---|
1946 | ! |
---|
1947 | ENDIF |
---|
1948 | ENDDO iter |
---|
1949 | ! |
---|
1950 | !...COMPUTE HYDROMETEOR TENDENCIES AS IS DONE FOR T, QV... |
---|
1951 | ! |
---|
1952 | !...FRC2 IS THE FRACTION OF TOTAL CONDENSATE ! PPT FB MODS |
---|
1953 | !...GENERATED THAT GOES INTO PRECIPITIATION ! PPT FB MODS |
---|
1954 | ! |
---|
1955 | ! Redistribute hydormeteors according to the final mass-flux values: |
---|
1956 | ! |
---|
1957 | IF(CPR.GT.0.)THEN |
---|
1958 | FRC2=PPTFLX/(CPR*AINC) ! PPT FB MODS |
---|
1959 | ELSE |
---|
1960 | FRC2=0. |
---|
1961 | ENDIF |
---|
1962 | DO NK=1,LTOP |
---|
1963 | QLPA(NK)=QL0(NK) |
---|
1964 | QIPA(NK)=QI0(NK) |
---|
1965 | QRPA(NK)=QR0(NK) |
---|
1966 | QSPA(NK)=QS0(NK) |
---|
1967 | RAINFB(NK)=PPTLIQ(NK)*AINC*FBFRC*FRC2 ! PPT FB MODS |
---|
1968 | SNOWFB(NK)=PPTICE(NK)*AINC*FBFRC*FRC2 ! PPT FB MODS |
---|
1969 | ENDDO |
---|
1970 | DO NTC=1,NSTEP |
---|
1971 | ! |
---|
1972 | !...ASSIGN HYDROMETEORS CONCENTRATIONS AT THE TOP AND BOTTOM OF EACH LAY |
---|
1973 | !...BASED ON THE SIGN OF OMEGA... |
---|
1974 | ! |
---|
1975 | DO NK=1,LTOP |
---|
1976 | QLFXIN(NK)=0. |
---|
1977 | QLFXOUT(NK)=0. |
---|
1978 | QIFXIN(NK)=0. |
---|
1979 | QIFXOUT(NK)=0. |
---|
1980 | QRFXIN(NK)=0. |
---|
1981 | QRFXOUT(NK)=0. |
---|
1982 | QSFXIN(NK)=0. |
---|
1983 | QSFXOUT(NK)=0. |
---|
1984 | ENDDO |
---|
1985 | DO NK=2,LTOP |
---|
1986 | IF(OMG(NK).LE.0.)THEN |
---|
1987 | QLFXIN(NK)=-FXM(NK)*QLPA(NK-1) |
---|
1988 | QIFXIN(NK)=-FXM(NK)*QIPA(NK-1) |
---|
1989 | QRFXIN(NK)=-FXM(NK)*QRPA(NK-1) |
---|
1990 | QSFXIN(NK)=-FXM(NK)*QSPA(NK-1) |
---|
1991 | QLFXOUT(NK-1)=QLFXOUT(NK-1)+QLFXIN(NK) |
---|
1992 | QIFXOUT(NK-1)=QIFXOUT(NK-1)+QIFXIN(NK) |
---|
1993 | QRFXOUT(NK-1)=QRFXOUT(NK-1)+QRFXIN(NK) |
---|
1994 | QSFXOUT(NK-1)=QSFXOUT(NK-1)+QSFXIN(NK) |
---|
1995 | ELSE |
---|
1996 | QLFXOUT(NK)=FXM(NK)*QLPA(NK) |
---|
1997 | QIFXOUT(NK)=FXM(NK)*QIPA(NK) |
---|
1998 | QRFXOUT(NK)=FXM(NK)*QRPA(NK) |
---|
1999 | QSFXOUT(NK)=FXM(NK)*QSPA(NK) |
---|
2000 | QLFXIN(NK-1)=QLFXIN(NK-1)+QLFXOUT(NK) |
---|
2001 | QIFXIN(NK-1)=QIFXIN(NK-1)+QIFXOUT(NK) |
---|
2002 | QRFXIN(NK-1)=QRFXIN(NK-1)+QRFXOUT(NK) |
---|
2003 | QSFXIN(NK-1)=QSFXIN(NK-1)+QSFXOUT(NK) |
---|
2004 | ENDIF |
---|
2005 | ENDDO |
---|
2006 | ! |
---|
2007 | !...UPDATE THE HYDROMETEOR CONCENTRATION VALUES AT EACH LEVEL... |
---|
2008 | ! |
---|
2009 | DO NK=1,LTOP |
---|
2010 | QLPA(NK)=QLPA(NK)+(QLFXIN(NK)+DETLQ(NK)-QLFXOUT(NK))*DTIME*EMSD(NK) |
---|
2011 | QIPA(NK)=QIPA(NK)+(QIFXIN(NK)+DETIC(NK)-QIFXOUT(NK))*DTIME*EMSD(NK) |
---|
2012 | QRPA(NK)=QRPA(NK)+(QRFXIN(NK)-QRFXOUT(NK)+RAINFB(NK))*DTIME*EMSD(NK) ! PPT FB MODS |
---|
2013 | QSPA(NK)=QSPA(NK)+(QSFXIN(NK)-QSFXOUT(NK)+SNOWFB(NK))*DTIME*EMSD(NK) ! PPT FB MODS |
---|
2014 | ENDDO |
---|
2015 | ENDDO |
---|
2016 | DO NK=1,LTOP |
---|
2017 | QLG(NK)=QLPA(NK) |
---|
2018 | QIG(NK)=QIPA(NK) |
---|
2019 | QRG(NK)=QRPA(NK) |
---|
2020 | QSG(NK)=QSPA(NK) |
---|
2021 | ENDDO |
---|
2022 | ! |
---|
2023 | !...CLEAN THINGS UP, CALCULATE CONVECTIVE FEEDBACK TENDENCIES FOR THIS |
---|
2024 | !...GRID POINT... |
---|
2025 | ! |
---|
2026 | ! IF (XTIME.LT.10.)THEN |
---|
2027 | ! WRITE(98,1080)LFS,LDB,LDT,TIMEC,TADVEC,NSTEP,NCOUNT,FABE,AINC |
---|
2028 | ! ENDIF |
---|
2029 | IF(IPRNT)THEN |
---|
2030 | WRITE(98,1080)LFS,LDB,LDT,TIMEC,TADVEC,NSTEP,NCOUNT,FABE,AINC |
---|
2031 | ! call flush(98) |
---|
2032 | endif |
---|
2033 | ! |
---|
2034 | !...SEND FINAL PARAMETERIZED VALUES TO OUTPUT FILES... |
---|
2035 | ! |
---|
2036 | !297 IF(IPRNT)then |
---|
2037 | IF(IPRNT)then |
---|
2038 | ! if(I.eq.16 .and. J.eq.41)then |
---|
2039 | ! IF(ISTOP.EQ.1)THEN |
---|
2040 | write(98,*) |
---|
2041 | ! write(98,*)'At t(h), I, J =',float(NTSD)*72./3600.,I,J |
---|
2042 | write(98,*)'P(LC), DTP, WKL, WKLCL =',p0(LC)/100., & |
---|
2043 | TLCL+DTLCL+dtrh-TENV,WKL,WKLCL |
---|
2044 | write(98,*)'TLCL, DTLCL, DTRH, TENV =',TLCL,DTLCL, & |
---|
2045 | DTRH,TENV |
---|
2046 | WRITE(98,1025)KLCL,ZLCL,DTLCL,LTOP,P0(LTOP),IFLAG, & |
---|
2047 | TMIX-T00,PMIX,QMIX,ABE |
---|
2048 | WRITE(98,1030)P0(LET)/100.,P0(LTOP)/100.,VMFLCL,PLCL/100., & |
---|
2049 | WLCL,CLDHGT(LC) |
---|
2050 | WRITE(98,1035)PEF,PEFCBH,LC,LET,WKL,VWS |
---|
2051 | write(98,*)'PRECIP EFFICIENCY =',PEFF |
---|
2052 | WRITE(98,1080)LFS,LDB,LDT,TIMEC,TADVEC,NSTEP,NCOUNT,FABE,AINC |
---|
2053 | ! ENDIF |
---|
2054 | !!!!! HERE !!!!!!! |
---|
2055 | WRITE(98,1070)' P ',' DP ',' DT K/D ',' DR K/D ',' OMG ', & |
---|
2056 | ' DOMGDP ',' UMF ',' UER ',' UDR ',' DMF ',' DER ' & |
---|
2057 | ,' DDR ',' EMS ',' W0 ',' DETLQ ',' DETIC ' |
---|
2058 | write(98,*)'just before DO 300...' |
---|
2059 | ! call flush(98) |
---|
2060 | DO NK=1,LTOP |
---|
2061 | K=LTOP-NK+1 |
---|
2062 | DTT=(TG(K)-T0(K))*86400./TIMEC |
---|
2063 | RL=XLV0-XLV1*TG(K) |
---|
2064 | DR=-(QG(K)-Q0(K))*RL*86400./(TIMEC*CP) |
---|
2065 | UDFRC=UDR(K)*TIMEC*EMSD(K) |
---|
2066 | UEFRC=UER(K)*TIMEC*EMSD(K) |
---|
2067 | DDFRC=DDR(K)*TIMEC*EMSD(K) |
---|
2068 | DEFRC=-DER(K)*TIMEC*EMSD(K) |
---|
2069 | WRITE(98,1075)P0(K)/100.,DP(K)/100.,DTT,DR,OMG(K),DOMGDP(K)*1.E4, & |
---|
2070 | UMF(K)/1.E6,UEFRC,UDFRC,DMF(K)/1.E6,DEFRC,DDFRC,EMS(K)/1.E11, & |
---|
2071 | W0AVG1D(K)*1.E2,DETLQ(K)*TIMEC*EMSD(K)*1.E3,DETIC(K)* & |
---|
2072 | TIMEC*EMSD(K)*1.E3 |
---|
2073 | ENDDO |
---|
2074 | WRITE(98,1085)'K','P','Z','T0','TG','DT','TU','TD','Q0','QG', & |
---|
2075 | 'DQ','QU','QD','QLG','QIG','QRG','QSG','RH0','RHG' |
---|
2076 | DO NK=1,KL |
---|
2077 | K=KX-NK+1 |
---|
2078 | DTT=TG(K)-T0(K) |
---|
2079 | TUC=TU(K)-T00 |
---|
2080 | IF(K.LT.LC.OR.K.GT.LTOP)TUC=0. |
---|
2081 | TDC=TZ(K)-T00 |
---|
2082 | IF((K.LT.LDB.OR.K.GT.LDT).AND.K.NE.LFS)TDC=0. |
---|
2083 | IF(T0(K).LT.T00)THEN |
---|
2084 | ES=ALIQ*EXP((BLIQ*TG(K)-CLIQ)/(TG(K)-DLIQ)) |
---|
2085 | ELSE |
---|
2086 | ES=ALIQ*EXP((BLIQ*TG(K)-CLIQ)/(TG(K)-DLIQ)) |
---|
2087 | ENDIF |
---|
2088 | QGS=ES*0.622/(P0(K)-ES) |
---|
2089 | RH0=Q0(K)/QES(K) |
---|
2090 | RHG=QG(K)/QGS |
---|
2091 | WRITE(98,1090)K,P0(K)/100.,Z0(K),T0(K)-T00,TG(K)-T00,DTT,TUC, & |
---|
2092 | TDC,Q0(K)*1000.,QG(K)*1000.,(QG(K)-Q0(K))*1000.,QU(K)* & |
---|
2093 | 1000.,QD(K)*1000.,QLG(K)*1000.,QIG(K)*1000.,QRG(K)*1000., & |
---|
2094 | QSG(K)*1000.,RH0,RHG |
---|
2095 | ENDDO |
---|
2096 | ! |
---|
2097 | !...IF CALCULATIONS ABOVE SHOW AN ERROR IN THE MASS BUDGET, PRINT OUT A |
---|
2098 | !...TO BE USED LATER FOR DIAGNOSTIC PURPOSES, THEN ABORT RUN... |
---|
2099 | ! |
---|
2100 | ! IF(ISTOP.EQ.1 .or. ISHALL.EQ.1)THEN |
---|
2101 | |
---|
2102 | ! IF(ISHALL.NE.1)THEN |
---|
2103 | ! write(98,4421)i,j,iyr,imo,idy,ihr,imn |
---|
2104 | ! write(98)i,j,iyr,imo,idy,ihr,imn,kl |
---|
2105 | ! 4421 format(7i4) |
---|
2106 | ! write(98,4422)kl |
---|
2107 | ! 4422 format(i6) |
---|
2108 | DO 310 NK = 1,KL |
---|
2109 | k = kl - nk + 1 |
---|
2110 | write(98,4455) p0(k)/100.,t0(k)-273.16,q0(k)*1000., & |
---|
2111 | u0(k),v0(k),W0AVG1D(K),dp(k),tke(k) |
---|
2112 | ! write(98) p0,t0,q0,u0,v0,w0,dp,tke |
---|
2113 | ! WRITE(98,1115)Z0(K),P0(K)/100.,T0(K)-273.16,Q0(K)*1000., |
---|
2114 | ! * U0(K),V0(K),DP(K)/100.,W0AVG(I,J,K) |
---|
2115 | 310 CONTINUE |
---|
2116 | IF(ISTOP.EQ.1)THEN |
---|
2117 | CALL wrf_error_fatal ( 'KAIN-FRITSCH, istop=1, diags' ) |
---|
2118 | ENDIF |
---|
2119 | ! ENDIF |
---|
2120 | 4455 format(8f11.3) |
---|
2121 | ENDIF |
---|
2122 | CNDTNF=(1.-EQFRC(LFS))*(QLIQ(LFS)+QICE(LFS))*DMF(LFS) |
---|
2123 | PRATEC(I,J)=PPTFLX*(1.-FBFRC)/DXSQ |
---|
2124 | RAINCV(I,J)=DT*PRATEC(I,J) ! PPT FB MODS |
---|
2125 | ! RAINCV(I,J)=.1*.5*DT*PPTFLX/DXSQ ! PPT FB MODS |
---|
2126 | ! RNC=0.1*TIMEC*PPTFLX/DXSQ |
---|
2127 | RNC=RAINCV(I,J)*NIC |
---|
2128 | IF(ISHALL.EQ.0.AND.IPRNT)write (98,909)I,J,RNC |
---|
2129 | |
---|
2130 | ! WRITE(98,1095)CPR*AINC,TDER+PPTFLX+CNDTNF |
---|
2131 | ! |
---|
2132 | ! EVALUATE MOISTURE BUDGET... |
---|
2133 | ! |
---|
2134 | |
---|
2135 | QINIT=0. |
---|
2136 | QFNL=0. |
---|
2137 | DPT=0. |
---|
2138 | DO 315 NK=1,LTOP |
---|
2139 | DPT=DPT+DP(NK) |
---|
2140 | QINIT=QINIT+Q0(NK)*EMS(NK) |
---|
2141 | QFNL=QFNL+QG(NK)*EMS(NK) |
---|
2142 | QFNL=QFNL+(QLG(NK)+QIG(NK)+QRG(NK)+QSG(NK))*EMS(NK) |
---|
2143 | 315 CONTINUE |
---|
2144 | QFNL=QFNL+PPTFLX*TIMEC*(1.-FBFRC) ! PPT FB MODS |
---|
2145 | ! QFNL=QFNL+PPTFLX*TIMEC ! PPT FB MODS |
---|
2146 | ERR2=(QFNL-QINIT)*100./QINIT |
---|
2147 | IF(IPRNT)WRITE(98,1110)QINIT,QFNL,ERR2 |
---|
2148 | IF(ABS(ERR2).GT.0.05 .AND. ISTOP.EQ.0)THEN |
---|
2149 | ! write(99,*)'!!!!!!!! MOISTURE BUDGET ERROR IN KFPARA !!!' |
---|
2150 | ! WRITE(99,1110)QINIT,QFNL,ERR2 |
---|
2151 | IPRNT=.TRUE. |
---|
2152 | ISTOP=1 |
---|
2153 | write(98,4422)kl |
---|
2154 | 4422 format(i6) |
---|
2155 | DO 311 NK = 1,KL |
---|
2156 | k = kl - nk + 1 |
---|
2157 | ! write(99,4455) p0(k)/100.,t0(k)-273.16,q0(k)*1000., & |
---|
2158 | ! u0(k),v0(k),W0AVG1D(K),dp(k) |
---|
2159 | ! write(98) p0,t0,q0,u0,v0,w0,dp,tke |
---|
2160 | ! WRITE(98,1115)P0(K)/100.,T0(K)-273.16,Q0(K)*1000., & |
---|
2161 | ! U0(K),V0(K),W0AVG1D(K),dp(k)/100.,tke(k) |
---|
2162 | WRITE(98,4456)P0(K)/100.,T0(K)-273.16,Q0(K)*1000., & |
---|
2163 | U0(K),V0(K),W0AVG1D(K),dp(k)/100.,tke(k) |
---|
2164 | 311 CONTINUE |
---|
2165 | ! call flush(98) |
---|
2166 | |
---|
2167 | ! GOTO 297 |
---|
2168 | ! STOP 'QVERR' |
---|
2169 | ENDIF |
---|
2170 | 1115 FORMAT (2X,F7.2,2X,F5.1,2X,F6.3,2(2X,F5.1),2X,F7.2,2X,F7.4) |
---|
2171 | 4456 format(8f12.3) |
---|
2172 | IF(PPTFLX.GT.0.)THEN |
---|
2173 | RELERR=ERR2*QINIT/(PPTFLX*TIMEC) |
---|
2174 | ELSE |
---|
2175 | RELERR=0. |
---|
2176 | ENDIF |
---|
2177 | IF(IPRNT)THEN |
---|
2178 | WRITE(98,1120)RELERR |
---|
2179 | WRITE(98,*)'TDER, CPR, TRPPT =', & |
---|
2180 | TDER,CPR*AINC,TRPPT*AINC |
---|
2181 | ENDIF |
---|
2182 | ! |
---|
2183 | !...FEEDBACK TO RESOLVABLE SCALE TENDENCIES. |
---|
2184 | ! |
---|
2185 | !...IF THE ADVECTIVE TIME PERIOD (TADVEC) IS LESS THAN SPECIFIED MINIMUM |
---|
2186 | !...TIMEC, ALLOW FEEDBACK TO OCCUR ONLY DURING TADVEC... |
---|
2187 | ! |
---|
2188 | IF(TADVEC.LT.TIMEC)NIC=NINT(TADVEC/DT) |
---|
2189 | NCA(I,J) = TADVEC |
---|
2190 | IF(ISHALL.EQ.1)THEN |
---|
2191 | TIMEC = 2400. |
---|
2192 | NCA(I,J) = CUDT*60. |
---|
2193 | NSHALL = NSHALL+1 |
---|
2194 | ENDIF |
---|
2195 | |
---|
2196 | DO K=1,KX |
---|
2197 | ! IF(IMOIST(INEST).NE.2)THEN |
---|
2198 | ! |
---|
2199 | !...IF HYDROMETEORS ARE NOT ALLOWED, THEY MUST BE EVAPORATED OR SUBLIMAT |
---|
2200 | !...AND FED BACK AS VAPOR, ALONG WITH ASSOCIATED CHANGES IN TEMPERATURE. |
---|
2201 | !...NOTE: THIS WILL INTRODUCE CHANGES IN THE CONVECTIVE TEMPERATURE AND |
---|
2202 | !...WATER VAPOR FEEDBACK TENDENCIES AND MAY LEAD TO SUPERSATURATED VALUE |
---|
2203 | !...OF QG... |
---|
2204 | ! |
---|
2205 | ! RLC=XLV0-XLV1*TG(K) |
---|
2206 | ! RLS=XLS0-XLS1*TG(K) |
---|
2207 | ! CPM=CP*(1.+0.887*QG(K)) |
---|
2208 | ! TG(K)=TG(K)-(RLC*(QLG(K)+QRG(K))+RLS*(QIG(K)+QSG(K)))/CPM |
---|
2209 | ! QG(K)=QG(K)+(QLG(K)+QRG(K)+QIG(K)+QSG(K)) |
---|
2210 | ! DQLDT(I,J,NK)=0. |
---|
2211 | ! DQIDT(I,J,NK)=0. |
---|
2212 | ! DQRDT(I,J,NK)=0. |
---|
2213 | ! DQSDT(I,J,NK)=0. |
---|
2214 | ! ELSE |
---|
2215 | ! |
---|
2216 | !...IF ICE PHASE IS NOT ALLOWED, MELT ALL FROZEN HYDROMETEORS... |
---|
2217 | ! |
---|
2218 | IF(.NOT. F_QI .and. warm_rain)THEN |
---|
2219 | |
---|
2220 | CPM=CP*(1.+0.887*QG(K)) |
---|
2221 | TG(K)=TG(K)-(QIG(K)+QSG(K))*RLF/CPM |
---|
2222 | DQCDT(K)=(QLG(K)+QIG(K)-QL0(K)-QI0(K))/TIMEC |
---|
2223 | DQIDT(K)=0. |
---|
2224 | DQRDT(K)=(QRG(K)+QSG(K)-QR0(K)-QS0(K))/TIMEC |
---|
2225 | DQSDT(K)=0. |
---|
2226 | ELSEIF(.NOT. F_QI .and. .not. warm_rain)THEN |
---|
2227 | ! |
---|
2228 | !...IF ICE PHASE IS ALLOWED, BUT MIXED PHASE IS NOT, MELT FROZEN HYDROME |
---|
2229 | !...BELOW THE MELTING LEVEL, FREEZE LIQUID WATER ABOVE THE MELTING LEVEL |
---|
2230 | ! |
---|
2231 | CPM=CP*(1.+0.887*QG(K)) |
---|
2232 | IF(K.LE.ML)THEN |
---|
2233 | TG(K)=TG(K)-(QIG(K)+QSG(K))*RLF/CPM |
---|
2234 | ELSEIF(K.GT.ML)THEN |
---|
2235 | TG(K)=TG(K)+(QLG(K)+QRG(K))*RLF/CPM |
---|
2236 | ENDIF |
---|
2237 | DQCDT(K)=(QLG(K)+QIG(K)-QL0(K)-QI0(K))/TIMEC |
---|
2238 | DQIDT(K)=0. |
---|
2239 | DQRDT(K)=(QRG(K)+QSG(K)-QR0(K)-QS0(K))/TIMEC |
---|
2240 | DQSDT(K)=0. |
---|
2241 | ELSEIF(F_QI) THEN |
---|
2242 | ! |
---|
2243 | !...IF MIXED PHASE HYDROMETEORS ARE ALLOWED, FEED BACK CONVECTIVE TENDEN |
---|
2244 | !...OF HYDROMETEORS DIRECTLY... |
---|
2245 | ! |
---|
2246 | DQCDT(K)=(QLG(K)-QL0(K))/TIMEC |
---|
2247 | DQIDT(K)=(QIG(K)-QI0(K))/TIMEC |
---|
2248 | DQRDT(K)=(QRG(K)-QR0(K))/TIMEC |
---|
2249 | IF (F_QS) THEN |
---|
2250 | DQSDT(K)=(QSG(K)-QS0(K))/TIMEC |
---|
2251 | ELSE |
---|
2252 | DQIDT(K)=DQIDT(K)+(QSG(K)-QS0(K))/TIMEC |
---|
2253 | ENDIF |
---|
2254 | ELSE |
---|
2255 | ! PRINT *,'THIS COMBINATION OF IMOIST, IEXICE, IICE NOT ALLOWED!' |
---|
2256 | CALL wrf_error_fatal ( 'KAIN-FRITSCH, THIS COMBINATION OF IMOIST, IEXICE, IICE NOT ALLOWED' ) |
---|
2257 | ENDIF |
---|
2258 | DTDT(K)=(TG(K)-T0(K))/TIMEC |
---|
2259 | DQDT(K)=(QG(K)-Q0(K))/TIMEC |
---|
2260 | ENDDO |
---|
2261 | PRATEC(I,J)=PPTFLX*(1.-FBFRC)/DXSQ |
---|
2262 | RAINCV(I,J)=DT*PRATEC(I,J) |
---|
2263 | ! RAINCV(I,J)=.1*.5*DT*PPTFLX/DXSQ ! PPT FB MODS |
---|
2264 | ! RNC=0.1*TIMEC*PPTFLX/DXSQ |
---|
2265 | RNC=RAINCV(I,J)*NIC |
---|
2266 | 909 FORMAT('AT I, J =',i3,1x,i3,' CONVECTIVE RAINFALL =',F8.4,' mm') |
---|
2267 | ! write (98,909)I,J,RNC |
---|
2268 | ! write (6,909)I,J,RNC |
---|
2269 | ! WRITE(98,*)'at NTSD =',NTSD,',No. of KF points activated =', |
---|
2270 | ! * NCCNT |
---|
2271 | ! call flush(98) |
---|
2272 | 1000 FORMAT(' ',10A8) |
---|
2273 | 1005 FORMAT(' ',F6.0,2X,F6.4,2X,F7.3,1X,F6.4,2X,4(F6.3,2X),2(F7.3,1X)) |
---|
2274 | 1010 FORMAT(' ',' VERTICAL VELOCITY IS NEGATIVE AT ',F4.0,' MB') |
---|
2275 | 1015 FORMAT(' ','ALL REMAINING MASS DETRAINS BELOW ',F4.0,' MB') |
---|
2276 | 1025 FORMAT(5X,' KLCL=',I2,' ZLCL=',F7.1,'M', & |
---|
2277 | ' DTLCL=',F5.2,' LTOP=',I2,' P0(LTOP)=',-2PF5.1,'MB FRZ LV=', & |
---|
2278 | I2,' TMIX=',0PF4.1,1X,'PMIX=',-2PF6.1,' QMIX=',3PF5.1, & |
---|
2279 | ' CAPE=',0PF7.1) |
---|
2280 | 1030 FORMAT(' ',' P0(LET) = ',F6.1,' P0(LTOP) = ',F6.1,' VMFLCL =', & |
---|
2281 | E12.3,' PLCL =',F6.1,' WLCL =',F6.3,' CLDHGT =', & |
---|
2282 | F8.1) |
---|
2283 | 1035 FORMAT(1X,'PEF(WS)=',F4.2,'(CB)=',F4.2,'LC,LET=',2I3,'WKL=' & |
---|
2284 | ,F6.3,'VWS=',F5.2) |
---|
2285 | !1055 FORMAT('*** DEGREE OF STABILIZATION =',F5.3, & |
---|
2286 | ! ', NO MORE MASS FLUX IS ALLOWED!') |
---|
2287 | !1060 FORMAT(' ITERATION DOES NOT CONVERGE TO GIVE THE SPECIFIED & |
---|
2288 | ! &DEGREE OF STABILIZATION! FABE= ',F6.4) |
---|
2289 | 1070 FORMAT (16A8) |
---|
2290 | 1075 FORMAT (F8.2,3(F8.2),2(F8.3),F8.2,2F8.3,F8.2,6F8.3) |
---|
2291 | 1080 FORMAT(2X,'LFS,LDB,LDT =',3I3,' TIMEC, TADVEC, NSTEP=', & |
---|
2292 | 2(1X,F5.0),I3,'NCOUNT, FABE, AINC=',I2,1X,F5.3,F6.2) |
---|
2293 | 1085 FORMAT (A3,16A7,2A8) |
---|
2294 | 1090 FORMAT (I3,F7.2,F7.0,10F7.2,4F7.3,2F8.3) |
---|
2295 | 1095 FORMAT(' ',' PPT PRODUCTION RATE= ',F10.0,' TOTAL EVAP+PPT= ',F10.0) |
---|
2296 | 1105 FORMAT(' ','NET LATENT HEAT RELEASE =',E12.5,' ACTUAL HEATING =',& |
---|
2297 | E12.5,' J/KG-S, DIFFERENCE = ',F9.3,'%') |
---|
2298 | 1110 FORMAT(' ','INITIAL WATER =',E12.5,' FINAL WATER =',E12.5, & |
---|
2299 | ' TOTAL WATER CHANGE =',F8.2,'%') |
---|
2300 | ! 1115 FORMAT (2X,F6.0,2X,F7.2,2X,F5.1,2X,F6.3,2(2X,F5.1),2X,F7.2,2X,F7.4) |
---|
2301 | 1120 FORMAT(' ','MOISTURE ERROR AS FUNCTION OF TOTAL PPT =',F9.3,'%') |
---|
2302 | ! |
---|
2303 | !----------------------------------------------------------------------- |
---|
2304 | !--------------SAVE CLOUD TOP AND BOTTOM FOR RADIATION------------------ |
---|
2305 | !----------------------------------------------------------------------- |
---|
2306 | ! |
---|
2307 | CUTOP(I,J)=REAL(LTOP) |
---|
2308 | CUBOT(I,J)=REAL(LCL) |
---|
2309 | ! |
---|
2310 | !----------------------------------------------------------------------- |
---|
2311 | END SUBROUTINE KF_eta_PARA |
---|
2312 | !******************************************************************** |
---|
2313 | ! *********************************************************************** |
---|
2314 | SUBROUTINE TPMIX2(p,thes,tu,qu,qliq,qice,qnewlq,qnewic,XLV1,XLV0) |
---|
2315 | ! |
---|
2316 | ! Lookup table variables: |
---|
2317 | ! INTEGER, PARAMETER :: (KFNT=250,KFNP=220) |
---|
2318 | ! REAL, SAVE, DIMENSION(1:KFNT,1:KFNP) :: TTAB,QSTAB |
---|
2319 | ! REAL, SAVE, DIMENSION(1:KFNP) :: THE0K |
---|
2320 | ! REAL, SAVE, DIMENSION(1:200) :: ALU |
---|
2321 | ! REAL, SAVE :: RDPR,RDTHK,PLUTOP |
---|
2322 | ! End of Lookup table variables: |
---|
2323 | !----------------------------------------------------------------------- |
---|
2324 | IMPLICIT NONE |
---|
2325 | !----------------------------------------------------------------------- |
---|
2326 | REAL, INTENT(IN ) :: P,THES,XLV1,XLV0 |
---|
2327 | REAL, INTENT(OUT ) :: QNEWLQ,QNEWIC |
---|
2328 | REAL, INTENT(INOUT) :: TU,QU,QLIQ,QICE |
---|
2329 | REAL :: TP,QQ,BTH,TTH,PP,T00,T10,T01,T11,Q00,Q10,Q01,Q11, & |
---|
2330 | TEMP,QS,QNEW,DQ,QTOT,RLL,CPP |
---|
2331 | INTEGER :: IPTB,ITHTB |
---|
2332 | !----------------------------------------------------------------------- |
---|
2333 | |
---|
2334 | !c******** LOOKUP TABLE VARIABLES... **************************** |
---|
2335 | ! parameter(kfnt=250,kfnp=220) |
---|
2336 | !c |
---|
2337 | ! COMMON/KFLUT/ ttab(kfnt,kfnp),qstab(kfnt,kfnp),the0k(kfnp), |
---|
2338 | ! * alu(200),rdpr,rdthk,plutop |
---|
2339 | !C*************************************************************** |
---|
2340 | !c |
---|
2341 | !c*********************************************************************** |
---|
2342 | !c scaling pressure and tt table index |
---|
2343 | !c*********************************************************************** |
---|
2344 | !c |
---|
2345 | tp=(p-plutop)*rdpr |
---|
2346 | qq=tp-aint(tp) |
---|
2347 | iptb=int(tp)+1 |
---|
2348 | |
---|
2349 | ! |
---|
2350 | !*********************************************************************** |
---|
2351 | ! base and scaling factor for the |
---|
2352 | !*********************************************************************** |
---|
2353 | ! |
---|
2354 | ! scaling the and tt table index |
---|
2355 | bth=(the0k(iptb+1)-the0k(iptb))*qq+the0k(iptb) |
---|
2356 | tth=(thes-bth)*rdthk |
---|
2357 | pp =tth-aint(tth) |
---|
2358 | ithtb=int(tth)+1 |
---|
2359 | IF(IPTB.GE.220 .OR. IPTB.LE.1 .OR. ITHTB.GE.250 .OR. ITHTB.LE.1)THEN |
---|
2360 | write(98,*)'**** OUT OF BOUNDS *********' |
---|
2361 | ! call flush(98) |
---|
2362 | ENDIF |
---|
2363 | ! |
---|
2364 | t00=ttab(ithtb ,iptb ) |
---|
2365 | t10=ttab(ithtb+1,iptb ) |
---|
2366 | t01=ttab(ithtb ,iptb+1) |
---|
2367 | t11=ttab(ithtb+1,iptb+1) |
---|
2368 | ! |
---|
2369 | q00=qstab(ithtb ,iptb ) |
---|
2370 | q10=qstab(ithtb+1,iptb ) |
---|
2371 | q01=qstab(ithtb ,iptb+1) |
---|
2372 | q11=qstab(ithtb+1,iptb+1) |
---|
2373 | ! |
---|
2374 | !*********************************************************************** |
---|
2375 | ! parcel temperature |
---|
2376 | !*********************************************************************** |
---|
2377 | ! |
---|
2378 | temp=(t00+(t10-t00)*pp+(t01-t00)*qq+(t00-t10-t01+t11)*pp*qq) |
---|
2379 | ! |
---|
2380 | qs=(q00+(q10-q00)*pp+(q01-q00)*qq+(q00-q10-q01+q11)*pp*qq) |
---|
2381 | ! |
---|
2382 | DQ=QS-QU |
---|
2383 | IF(DQ.LE.0.)THEN |
---|
2384 | QNEW=QU-QS |
---|
2385 | QU=QS |
---|
2386 | ELSE |
---|
2387 | ! |
---|
2388 | ! IF THE PARCEL IS SUBSATURATED, TEMPERATURE AND MIXING RATIO MUST BE |
---|
2389 | ! ADJUSTED...IF LIQUID WATER IS PRESENT, IT IS ALLOWED TO EVAPORATE |
---|
2390 | ! |
---|
2391 | QNEW=0. |
---|
2392 | QTOT=QLIQ+QICE |
---|
2393 | ! |
---|
2394 | ! IF THERE IS ENOUGH LIQUID OR ICE TO SATURATE THE PARCEL, TEMP STAYS AT ITS |
---|
2395 | ! WET BULB VALUE, VAPOR MIXING RATIO IS AT SATURATED LEVEL, AND THE MIXING |
---|
2396 | ! RATIOS OF LIQUID AND ICE ARE ADJUSTED TO MAKE UP THE ORIGINAL SATURATION |
---|
2397 | ! DEFICIT... OTHERWISE, ANY AVAILABLE LIQ OR ICE VAPORIZES AND APPROPRIATE |
---|
2398 | ! ADJUSTMENTS TO PARCEL TEMP; VAPOR, LIQUID, AND ICE MIXING RATIOS ARE MADE. |
---|
2399 | ! |
---|
2400 | !...subsaturated values only occur in calculations involving various mixtures of |
---|
2401 | !...updraft and environmental air for estimation of entrainment and detrainment. |
---|
2402 | !...For these purposes, assume that reasonable estimates can be given using |
---|
2403 | !...liquid water saturation calculations only - i.e., ignore the effect of the |
---|
2404 | !...ice phase in this process only...will not affect conservative properties... |
---|
2405 | ! |
---|
2406 | IF(QTOT.GE.DQ)THEN |
---|
2407 | qliq=qliq-dq*qliq/(qtot+1.e-10) |
---|
2408 | qice=qice-dq*qice/(qtot+1.e-10) |
---|
2409 | QU=QS |
---|
2410 | ELSE |
---|
2411 | RLL=XLV0-XLV1*TEMP |
---|
2412 | CPP=1004.5*(1.+0.89*QU) |
---|
2413 | IF(QTOT.LT.1.E-10)THEN |
---|
2414 | ! |
---|
2415 | !...IF NO LIQUID WATER OR ICE IS AVAILABLE, TEMPERATURE IS GIVEN BY: |
---|
2416 | TEMP=TEMP+RLL*(DQ/(1.+DQ))/CPP |
---|
2417 | ELSE |
---|
2418 | ! |
---|
2419 | !...IF SOME LIQ WATER/ICE IS AVAILABLE, BUT NOT ENOUGH TO ACHIEVE SATURATION, |
---|
2420 | ! THE TEMPERATURE IS GIVEN BY: |
---|
2421 | ! |
---|
2422 | TEMP=TEMP+RLL*((DQ-QTOT)/(1+DQ-QTOT))/CPP |
---|
2423 | QU=QU+QTOT |
---|
2424 | QTOT=0. |
---|
2425 | QLIQ=0. |
---|
2426 | QICE=0. |
---|
2427 | ENDIF |
---|
2428 | ENDIF |
---|
2429 | ENDIF |
---|
2430 | TU=TEMP |
---|
2431 | qnewlq=qnew |
---|
2432 | qnewic=0. |
---|
2433 | ! |
---|
2434 | END SUBROUTINE TPMIX2 |
---|
2435 | !****************************************************************************** |
---|
2436 | SUBROUTINE DTFRZNEW(TU,P,THTEU,QU,QFRZ,QICE,ALIQ,BLIQ,CLIQ,DLIQ) |
---|
2437 | !----------------------------------------------------------------------- |
---|
2438 | IMPLICIT NONE |
---|
2439 | !----------------------------------------------------------------------- |
---|
2440 | REAL, INTENT(IN ) :: P,QFRZ,ALIQ,BLIQ,CLIQ,DLIQ |
---|
2441 | REAL, INTENT(INOUT) :: TU,THTEU,QU,QICE |
---|
2442 | REAL :: RLC,RLS,RLF,CPP,A,DTFRZ,ES,QS,DQEVAP,PII |
---|
2443 | !----------------------------------------------------------------------- |
---|
2444 | ! |
---|
2445 | !...ALLOW THE FREEZING OF LIQUID WATER IN THE UPDRAFT TO PROCEED AS AN |
---|
2446 | !...APPROXIMATELY LINEAR FUNCTION OF TEMPERATURE IN THE TEMPERATURE RANGE |
---|
2447 | !...TTFRZ TO TBFRZ... |
---|
2448 | !...FOR COLDER TERMPERATURES, FREEZE ALL LIQUID WATER... |
---|
2449 | !...THERMODYNAMIC PROPERTIES ARE STILL CALCULATED WITH RESPECT TO LIQUID WATER |
---|
2450 | !...TO ALLOW THE USE OF LOOKUP TABLE TO EXTRACT TMP FROM THETAE... |
---|
2451 | ! |
---|
2452 | RLC=2.5E6-2369.276*(TU-273.16) |
---|
2453 | RLS=2833922.-259.532*(TU-273.16) |
---|
2454 | RLF=RLS-RLC |
---|
2455 | CPP=1004.5*(1.+0.89*QU) |
---|
2456 | ! |
---|
2457 | ! A = D(es)/DT IS THAT CALCULATED FROM BUCK (1981) EMPERICAL FORMULAS |
---|
2458 | ! FOR SATURATION VAPOR PRESSURE... |
---|
2459 | ! |
---|
2460 | A=(CLIQ-BLIQ*DLIQ)/((TU-DLIQ)*(TU-DLIQ)) |
---|
2461 | DTFRZ = RLF*QFRZ/(CPP+RLS*QU*A) |
---|
2462 | TU = TU+DTFRZ |
---|
2463 | |
---|
2464 | ES = ALIQ*EXP((BLIQ*TU-CLIQ)/(TU-DLIQ)) |
---|
2465 | QS = ES*0.622/(P-ES) |
---|
2466 | ! |
---|
2467 | !...FREEZING WARMS THE AIR AND IT BECOMES UNSATURATED...ASSUME THAT SOME OF THE |
---|
2468 | !...LIQUID WATER THAT IS AVAILABLE FOR FREEZING EVAPORATES TO MAINTAIN SATURA- |
---|
2469 | !...TION...SINCE THIS WATER HAS ALREADY BEEN TRANSFERRED TO THE ICE CATEGORY, |
---|
2470 | !...SUBTRACT IT FROM ICE CONCENTRATION, THEN SET UPDRAFT MIXING RATIO AT THE NEW |
---|
2471 | !...TEMPERATURE TO THE SATURATION VALUE... |
---|
2472 | ! |
---|
2473 | DQEVAP = QS-QU |
---|
2474 | QICE = QICE-DQEVAP |
---|
2475 | QU = QU+DQEVAP |
---|
2476 | PII=(1.E5/P)**(0.2854*(1.-0.28*QU)) |
---|
2477 | THTEU=TU*PII*EXP((3374.6525/TU-2.5403)*QU*(1.+0.81*QU)) |
---|
2478 | ! |
---|
2479 | END SUBROUTINE DTFRZNEW |
---|
2480 | ! -------------------------------------------------------------------------------- |
---|
2481 | |
---|
2482 | SUBROUTINE CONDLOAD(QLIQ,QICE,WTW,DZ,BOTERM,ENTERM,RATE,QNEWLQ, & |
---|
2483 | QNEWIC,QLQOUT,QICOUT,G) |
---|
2484 | |
---|
2485 | !----------------------------------------------------------------------- |
---|
2486 | IMPLICIT NONE |
---|
2487 | !----------------------------------------------------------------------- |
---|
2488 | ! 9/18/88...THIS PRECIPITATION FALLOUT SCHEME IS BASED ON THE SCHEME US |
---|
2489 | ! BY OGURA AND CHO (1973). LIQUID WATER FALLOUT FROM A PARCEL IS CAL- |
---|
2490 | ! CULATED USING THE EQUATION DQ=-RATE*Q*DT, BUT TO SIMULATE A QUASI- |
---|
2491 | ! CONTINUOUS PROCESS, AND TO ELIMINATE A DEPENDENCY ON VERTICAL |
---|
2492 | ! RESOLUTION THIS IS EXPRESSED AS Q=Q*EXP(-RATE*DZ). |
---|
2493 | |
---|
2494 | REAL, INTENT(IN ) :: G |
---|
2495 | REAL, INTENT(IN ) :: DZ,BOTERM,ENTERM,RATE |
---|
2496 | REAL, INTENT(INOUT) :: QLQOUT,QICOUT,WTW,QLIQ,QICE,QNEWLQ,QNEWIC |
---|
2497 | REAL :: QTOT,QNEW,QEST,G1,WAVG,CONV,RATIO3,OLDQ,RATIO4,DQ,PPTDRG |
---|
2498 | |
---|
2499 | ! |
---|
2500 | ! 9/18/88...THIS PRECIPITATION FALLOUT SCHEME IS BASED ON THE SCHEME US |
---|
2501 | ! BY OGURA AND CHO (1973). LIQUID WATER FALLOUT FROM A PARCEL IS CAL- |
---|
2502 | ! CULATED USING THE EQUATION DQ=-RATE*Q*DT, BUT TO SIMULATE A QUASI- |
---|
2503 | ! CONTINUOUS PROCESS, AND TO ELIMINATE A DEPENDENCY ON VERTICAL |
---|
2504 | ! RESOLUTION THIS IS EXPRESSED AS Q=Q*EXP(-RATE*DZ). |
---|
2505 | QTOT=QLIQ+QICE |
---|
2506 | QNEW=QNEWLQ+QNEWIC |
---|
2507 | ! |
---|
2508 | ! ESTIMATE THE VERTICAL VELOCITY SO THAT AN AVERAGE VERTICAL VELOCITY |
---|
2509 | ! BE CALCULATED TO ESTIMATE THE TIME REQUIRED FOR ASCENT BETWEEN MODEL |
---|
2510 | ! LEVELS... |
---|
2511 | ! |
---|
2512 | QEST=0.5*(QTOT+QNEW) |
---|
2513 | G1=WTW+BOTERM-ENTERM-2.*G*DZ*QEST/1.5 |
---|
2514 | IF(G1.LT.0.0)G1=0. |
---|
2515 | WAVG=0.5*(SQRT(WTW)+SQRT(G1)) |
---|
2516 | CONV=RATE*DZ/WAVG |
---|
2517 | ! |
---|
2518 | ! RATIO3 IS THE FRACTION OF LIQUID WATER IN FRESH CONDENSATE, RATIO4 IS |
---|
2519 | ! THE FRACTION OF LIQUID WATER IN THE TOTAL AMOUNT OF CONDENSATE INVOLV |
---|
2520 | ! IN THE PRECIPITATION PROCESS - NOTE THAT ONLY 60% OF THE FRESH CONDEN |
---|
2521 | ! SATE IS IS ALLOWED TO PARTICIPATE IN THE CONVERSION PROCESS... |
---|
2522 | ! |
---|
2523 | RATIO3=QNEWLQ/(QNEW+1.E-8) |
---|
2524 | ! OLDQ=QTOT |
---|
2525 | QTOT=QTOT+0.6*QNEW |
---|
2526 | OLDQ=QTOT |
---|
2527 | RATIO4=(0.6*QNEWLQ+QLIQ)/(QTOT+1.E-8) |
---|
2528 | QTOT=QTOT*EXP(-CONV) |
---|
2529 | ! |
---|
2530 | ! DETERMINE THE AMOUNT OF PRECIPITATION THAT FALLS OUT OF THE UPDRAFT |
---|
2531 | ! PARCEL AT THIS LEVEL... |
---|
2532 | ! |
---|
2533 | DQ=OLDQ-QTOT |
---|
2534 | QLQOUT=RATIO4*DQ |
---|
2535 | QICOUT=(1.-RATIO4)*DQ |
---|
2536 | ! |
---|
2537 | ! ESTIMATE THE MEAN LOAD OF CONDENSATE ON THE UPDRAFT IN THE LAYER, CAL |
---|
2538 | ! LATE VERTICAL VELOCITY |
---|
2539 | ! |
---|
2540 | PPTDRG=0.5*(OLDQ+QTOT-0.2*QNEW) |
---|
2541 | WTW=WTW+BOTERM-ENTERM-2.*G*DZ*PPTDRG/1.5 |
---|
2542 | IF(ABS(WTW).LT.1.E-4)WTW=1.E-4 |
---|
2543 | ! |
---|
2544 | ! DETERMINE THE NEW LIQUID WATER AND ICE CONCENTRATIONS INCLUDING LOSSE |
---|
2545 | ! DUE TO PRECIPITATION AND GAINS FROM CONDENSATION... |
---|
2546 | ! |
---|
2547 | QLIQ=RATIO4*QTOT+RATIO3*0.4*QNEW |
---|
2548 | QICE=(1.-RATIO4)*QTOT+(1.-RATIO3)*0.4*QNEW |
---|
2549 | QNEWLQ=0. |
---|
2550 | QNEWIC=0. |
---|
2551 | |
---|
2552 | END SUBROUTINE CONDLOAD |
---|
2553 | |
---|
2554 | ! ---------------------------------------------------------------------- |
---|
2555 | SUBROUTINE PROF5(EQ,EE,UD) |
---|
2556 | ! |
---|
2557 | !*********************************************************************** |
---|
2558 | !***** GAUSSIAN TYPE MIXING PROFILE....****************************** |
---|
2559 | !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC |
---|
2560 | ! THIS SUBROUTINE INTEGRATES THE AREA UNDER THE CURVE IN THE GAUSSIAN |
---|
2561 | ! DISTRIBUTION...THE NUMERICAL APPROXIMATION TO THE INTEGRAL IS TAKEN FROM |
---|
2562 | ! "HANDBOOK OF MATHEMATICAL FUNCTIONS WITH FORMULAS, GRAPHS AND MATHEMATICS TABLES" |
---|
2563 | ! ED. BY ABRAMOWITZ AND STEGUN, NATL BUREAU OF STANDARDS APPLIED |
---|
2564 | ! MATHEMATICS SERIES. JUNE, 1964., MAY, 1968. |
---|
2565 | ! JACK KAIN |
---|
2566 | ! 7/6/89 |
---|
2567 | !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC |
---|
2568 | !----------------------------------------------------------------------- |
---|
2569 | IMPLICIT NONE |
---|
2570 | !----------------------------------------------------------------------- |
---|
2571 | REAL, INTENT(IN ) :: EQ |
---|
2572 | REAL, INTENT(INOUT) :: EE,UD |
---|
2573 | REAL :: SQRT2P,A1,A2,A3,P,SIGMA,FE,X,Y,EY,E45,T1,T2,C1,C2 |
---|
2574 | |
---|
2575 | DATA SQRT2P,A1,A2,A3,P,SIGMA,FE/2.506628,0.4361836,-0.1201676, & |
---|
2576 | 0.9372980,0.33267,0.166666667,0.202765151/ |
---|
2577 | X=(EQ-0.5)/SIGMA |
---|
2578 | Y=6.*EQ-3. |
---|
2579 | EY=EXP(Y*Y/(-2)) |
---|
2580 | E45=EXP(-4.5) |
---|
2581 | T2=1./(1.+P*ABS(Y)) |
---|
2582 | T1=0.500498 |
---|
2583 | C1=A1*T1+A2*T1*T1+A3*T1*T1*T1 |
---|
2584 | C2=A1*T2+A2*T2*T2+A3*T2*T2*T2 |
---|
2585 | IF(Y.GE.0.)THEN |
---|
2586 | EE=SIGMA*(0.5*(SQRT2P-E45*C1-EY*C2)+SIGMA*(E45-EY))-E45*EQ*EQ/2. |
---|
2587 | UD=SIGMA*(0.5*(EY*C2-E45*C1)+SIGMA*(E45-EY))-E45*(0.5+EQ*EQ/2.- & |
---|
2588 | EQ) |
---|
2589 | ELSE |
---|
2590 | EE=SIGMA*(0.5*(EY*C2-E45*C1)+SIGMA*(E45-EY))-E45*EQ*EQ/2. |
---|
2591 | UD=SIGMA*(0.5*(SQRT2P-E45*C1-EY*C2)+SIGMA*(E45-EY))-E45*(0.5+EQ* & |
---|
2592 | EQ/2.-EQ) |
---|
2593 | ENDIF |
---|
2594 | EE=EE/FE |
---|
2595 | UD=UD/FE |
---|
2596 | |
---|
2597 | END SUBROUTINE PROF5 |
---|
2598 | |
---|
2599 | ! ------------------------------------------------------------------------ |
---|
2600 | SUBROUTINE TPMIX2DD(p,thes,ts,qs,i,j) |
---|
2601 | ! |
---|
2602 | ! Lookup table variables: |
---|
2603 | ! INTEGER, PARAMETER :: (KFNT=250,KFNP=220) |
---|
2604 | ! REAL, SAVE, DIMENSION(1:KFNT,1:KFNP) :: TTAB,QSTAB |
---|
2605 | ! REAL, SAVE, DIMENSION(1:KFNP) :: THE0K |
---|
2606 | ! REAL, SAVE, DIMENSION(1:200) :: ALU |
---|
2607 | ! REAL, SAVE :: RDPR,RDTHK,PLUTOP |
---|
2608 | ! End of Lookup table variables: |
---|
2609 | !----------------------------------------------------------------------- |
---|
2610 | IMPLICIT NONE |
---|
2611 | !----------------------------------------------------------------------- |
---|
2612 | REAL, INTENT(IN ) :: P,THES |
---|
2613 | REAL, INTENT(INOUT) :: TS,QS |
---|
2614 | INTEGER, INTENT(IN ) :: i,j ! avail for debugging |
---|
2615 | REAL :: TP,QQ,BTH,TTH,PP,T00,T10,T01,T11,Q00,Q10,Q01,Q11 |
---|
2616 | INTEGER :: IPTB,ITHTB |
---|
2617 | CHARACTER*256 :: MESS |
---|
2618 | !----------------------------------------------------------------------- |
---|
2619 | |
---|
2620 | ! |
---|
2621 | !******** LOOKUP TABLE VARIABLES (F77 format)... **************************** |
---|
2622 | ! parameter(kfnt=250,kfnp=220) |
---|
2623 | ! |
---|
2624 | ! COMMON/KFLUT/ ttab(kfnt,kfnp),qstab(kfnt,kfnp),the0k(kfnp), & |
---|
2625 | ! alu(200),rdpr,rdthk,plutop |
---|
2626 | !*************************************************************** |
---|
2627 | ! |
---|
2628 | !*********************************************************************** |
---|
2629 | ! scaling pressure and tt table index |
---|
2630 | !*********************************************************************** |
---|
2631 | ! |
---|
2632 | tp=(p-plutop)*rdpr |
---|
2633 | qq=tp-aint(tp) |
---|
2634 | iptb=int(tp)+1 |
---|
2635 | ! |
---|
2636 | !*********************************************************************** |
---|
2637 | ! base and scaling factor for the |
---|
2638 | !*********************************************************************** |
---|
2639 | ! |
---|
2640 | ! scaling the and tt table index |
---|
2641 | bth=(the0k(iptb+1)-the0k(iptb))*qq+the0k(iptb) |
---|
2642 | tth=(thes-bth)*rdthk |
---|
2643 | pp =tth-aint(tth) |
---|
2644 | ithtb=int(tth)+1 |
---|
2645 | ! |
---|
2646 | t00=ttab(ithtb ,iptb ) |
---|
2647 | t10=ttab(ithtb+1,iptb ) |
---|
2648 | t01=ttab(ithtb ,iptb+1) |
---|
2649 | t11=ttab(ithtb+1,iptb+1) |
---|
2650 | ! |
---|
2651 | q00=qstab(ithtb ,iptb ) |
---|
2652 | q10=qstab(ithtb+1,iptb ) |
---|
2653 | q01=qstab(ithtb ,iptb+1) |
---|
2654 | q11=qstab(ithtb+1,iptb+1) |
---|
2655 | ! |
---|
2656 | !*********************************************************************** |
---|
2657 | ! parcel temperature and saturation mixing ratio |
---|
2658 | !*********************************************************************** |
---|
2659 | ! |
---|
2660 | ts=(t00+(t10-t00)*pp+(t01-t00)*qq+(t00-t10-t01+t11)*pp*qq) |
---|
2661 | ! |
---|
2662 | qs=(q00+(q10-q00)*pp+(q01-q00)*qq+(q00-q10-q01+q11)*pp*qq) |
---|
2663 | ! |
---|
2664 | END SUBROUTINE TPMIX2DD |
---|
2665 | |
---|
2666 | ! ----------------------------------------------------------------------- |
---|
2667 | SUBROUTINE ENVIRTHT(P1,T1,Q1,THT1,ALIQ,BLIQ,CLIQ,DLIQ) |
---|
2668 | ! |
---|
2669 | !----------------------------------------------------------------------- |
---|
2670 | IMPLICIT NONE |
---|
2671 | !----------------------------------------------------------------------- |
---|
2672 | REAL, INTENT(IN ) :: P1,T1,Q1,ALIQ,BLIQ,CLIQ,DLIQ |
---|
2673 | REAL, INTENT(INOUT) :: THT1 |
---|
2674 | REAL :: EE,TLOG,ASTRT,AINC,A1,TP,VALUE,AINTRP,TDPT,TSAT,THT, & |
---|
2675 | T00,P00,C1,C2,C3,C4,C5 |
---|
2676 | INTEGER :: INDLU |
---|
2677 | !----------------------------------------------------------------------- |
---|
2678 | DATA T00,P00,C1,C2,C3,C4,C5/273.16,1.E5,3374.6525,2.5403,3114.834, & |
---|
2679 | 0.278296,1.0723E-3/ |
---|
2680 | ! |
---|
2681 | ! CALCULATE ENVIRONMENTAL EQUIVALENT POTENTIAL TEMPERATURE... |
---|
2682 | ! |
---|
2683 | ! NOTE: Calculations for mixed/ice phase no longer used...jsk 8/00 |
---|
2684 | ! |
---|
2685 | EE=Q1*P1/(0.622+Q1) |
---|
2686 | ! TLOG=ALOG(EE/ALIQ) |
---|
2687 | ! ...calculate LOG term using lookup table... |
---|
2688 | ! |
---|
2689 | astrt=1.e-3 |
---|
2690 | ainc=0.075 |
---|
2691 | a1=ee/aliq |
---|
2692 | tp=(a1-astrt)/ainc |
---|
2693 | indlu=int(tp)+1 |
---|
2694 | value=(indlu-1)*ainc+astrt |
---|
2695 | aintrp=(a1-value)/ainc |
---|
2696 | tlog=aintrp*alu(indlu+1)+(1-aintrp)*alu(indlu) |
---|
2697 | ! |
---|
2698 | TDPT=(CLIQ-DLIQ*TLOG)/(BLIQ-TLOG) |
---|
2699 | TSAT=TDPT-(.212+1.571E-3*(TDPT-T00)-4.36E-4*(T1-T00))*(T1-TDPT) |
---|
2700 | THT=T1*(P00/P1)**(0.2854*(1.-0.28*Q1)) |
---|
2701 | THT1=THT*EXP((C1/TSAT-C2)*Q1*(1.+0.81*Q1)) |
---|
2702 | ! |
---|
2703 | END SUBROUTINE ENVIRTHT |
---|
2704 | ! *********************************************************************** |
---|
2705 | !==================================================================== |
---|
2706 | SUBROUTINE kf_eta_init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, & |
---|
2707 | RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS, & |
---|
2708 | SVP1,SVP2,SVP3,SVPT0, & |
---|
2709 | P_FIRST_SCALAR,restart,allowed_to_read, & |
---|
2710 | ids, ide, jds, jde, kds, kde, & |
---|
2711 | ims, ime, jms, jme, kms, kme, & |
---|
2712 | its, ite, jts, jte, kts, kte ) |
---|
2713 | !-------------------------------------------------------------------- |
---|
2714 | IMPLICIT NONE |
---|
2715 | !-------------------------------------------------------------------- |
---|
2716 | LOGICAL , INTENT(IN) :: restart,allowed_to_read |
---|
2717 | INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, & |
---|
2718 | ims, ime, jms, jme, kms, kme, & |
---|
2719 | its, ite, jts, jte, kts, kte |
---|
2720 | INTEGER , INTENT(IN) :: P_QI,P_QS,P_FIRST_SCALAR |
---|
2721 | |
---|
2722 | REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: & |
---|
2723 | RTHCUTEN, & |
---|
2724 | RQVCUTEN, & |
---|
2725 | RQCCUTEN, & |
---|
2726 | RQRCUTEN, & |
---|
2727 | RQICUTEN, & |
---|
2728 | RQSCUTEN |
---|
2729 | |
---|
2730 | REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG |
---|
2731 | |
---|
2732 | REAL, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: NCA |
---|
2733 | |
---|
2734 | INTEGER :: i, j, k, itf, jtf, ktf |
---|
2735 | REAL, INTENT(IN) :: SVP1,SVP2,SVP3,SVPT0 |
---|
2736 | |
---|
2737 | jtf=min0(jte,jde-1) |
---|
2738 | ktf=min0(kte,kde-1) |
---|
2739 | itf=min0(ite,ide-1) |
---|
2740 | |
---|
2741 | IF(.not.restart)THEN |
---|
2742 | |
---|
2743 | DO j=jts,jtf |
---|
2744 | DO k=kts,ktf |
---|
2745 | DO i=its,itf |
---|
2746 | RTHCUTEN(i,k,j)=0. |
---|
2747 | RQVCUTEN(i,k,j)=0. |
---|
2748 | RQCCUTEN(i,k,j)=0. |
---|
2749 | RQRCUTEN(i,k,j)=0. |
---|
2750 | ENDDO |
---|
2751 | ENDDO |
---|
2752 | ENDDO |
---|
2753 | |
---|
2754 | IF (P_QI .ge. P_FIRST_SCALAR) THEN |
---|
2755 | DO j=jts,jtf |
---|
2756 | DO k=kts,ktf |
---|
2757 | DO i=its,itf |
---|
2758 | RQICUTEN(i,k,j)=0. |
---|
2759 | ENDDO |
---|
2760 | ENDDO |
---|
2761 | ENDDO |
---|
2762 | ENDIF |
---|
2763 | |
---|
2764 | IF (P_QS .ge. P_FIRST_SCALAR) THEN |
---|
2765 | DO j=jts,jtf |
---|
2766 | DO k=kts,ktf |
---|
2767 | DO i=its,itf |
---|
2768 | RQSCUTEN(i,k,j)=0. |
---|
2769 | ENDDO |
---|
2770 | ENDDO |
---|
2771 | ENDDO |
---|
2772 | ENDIF |
---|
2773 | |
---|
2774 | DO j=jts,jtf |
---|
2775 | DO i=its,itf |
---|
2776 | NCA(i,j)=-100. |
---|
2777 | ENDDO |
---|
2778 | ENDDO |
---|
2779 | |
---|
2780 | DO j=jts,jtf |
---|
2781 | DO k=kts,ktf |
---|
2782 | DO i=its,itf |
---|
2783 | W0AVG(i,k,j)=0. |
---|
2784 | ENDDO |
---|
2785 | ENDDO |
---|
2786 | ENDDO |
---|
2787 | |
---|
2788 | endif |
---|
2789 | |
---|
2790 | CALL KF_LUTAB(SVP1,SVP2,SVP3,SVPT0) |
---|
2791 | |
---|
2792 | END SUBROUTINE kf_eta_init |
---|
2793 | |
---|
2794 | !------------------------------------------------------- |
---|
2795 | |
---|
2796 | subroutine kf_lutab(SVP1,SVP2,SVP3,SVPT0) |
---|
2797 | ! |
---|
2798 | ! This subroutine is a lookup table. |
---|
2799 | ! Given a series of series of saturation equivalent potential |
---|
2800 | ! temperatures, the temperature is calculated. |
---|
2801 | ! |
---|
2802 | !-------------------------------------------------------------------- |
---|
2803 | IMPLICIT NONE |
---|
2804 | !-------------------------------------------------------------------- |
---|
2805 | ! Lookup table variables |
---|
2806 | ! INTEGER, SAVE, PARAMETER :: KFNT=250,KFNP=220 |
---|
2807 | ! REAL, SAVE, DIMENSION(1:KFNT,1:KFNP) :: TTAB,QSTAB |
---|
2808 | ! REAL, SAVE, DIMENSION(1:KFNP) :: THE0K |
---|
2809 | ! REAL, SAVE, DIMENSION(1:200) :: ALU |
---|
2810 | ! REAL, SAVE :: RDPR,RDTHK,PLUTOP |
---|
2811 | ! End of Lookup table variables |
---|
2812 | |
---|
2813 | INTEGER :: KP,IT,ITCNT,I |
---|
2814 | REAL :: DTH,TMIN,TOLER,PBOT,DPR, & |
---|
2815 | TEMP,P,ES,QS,PI,THES,TGUES,THGUES,F0,T1,T0,THGS,F1,DT, & |
---|
2816 | ASTRT,AINC,A1,THTGS |
---|
2817 | ! REAL :: ALIQ,BLIQ,CLIQ,DLIQ,SVP1,SVP2,SVP3,SVPT0 |
---|
2818 | REAL :: ALIQ,BLIQ,CLIQ,DLIQ |
---|
2819 | REAL, INTENT(IN) :: SVP1,SVP2,SVP3,SVPT0 |
---|
2820 | ! |
---|
2821 | ! equivalent potential temperature increment |
---|
2822 | data dth/1./ |
---|
2823 | ! minimum starting temp |
---|
2824 | data tmin/150./ |
---|
2825 | ! tolerance for accuracy of temperature |
---|
2826 | data toler/0.001/ |
---|
2827 | ! top pressure (pascals) |
---|
2828 | plutop=5000.0 |
---|
2829 | ! bottom pressure (pascals) |
---|
2830 | pbot=110000.0 |
---|
2831 | |
---|
2832 | ALIQ = SVP1*1000. |
---|
2833 | BLIQ = SVP2 |
---|
2834 | CLIQ = SVP2*SVPT0 |
---|
2835 | DLIQ = SVP3 |
---|
2836 | |
---|
2837 | ! |
---|
2838 | ! compute parameters |
---|
2839 | ! |
---|
2840 | ! 1._over_(sat. equiv. theta increment) |
---|
2841 | rdthk=1./dth |
---|
2842 | ! pressure increment |
---|
2843 | ! |
---|
2844 | DPR=(PBOT-PLUTOP)/REAL(KFNP-1) |
---|
2845 | ! dpr=(pbot-plutop)/REAL(kfnp-1) |
---|
2846 | ! 1._over_(pressure increment) |
---|
2847 | rdpr=1./dpr |
---|
2848 | ! compute the spread of thes |
---|
2849 | ! thespd=dth*(kfnt-1) |
---|
2850 | ! |
---|
2851 | ! calculate the starting sat. equiv. theta |
---|
2852 | ! |
---|
2853 | temp=tmin |
---|
2854 | p=plutop-dpr |
---|
2855 | do kp=1,kfnp |
---|
2856 | p=p+dpr |
---|
2857 | es=aliq*exp((bliq*temp-cliq)/(temp-dliq)) |
---|
2858 | qs=0.622*es/(p-es) |
---|
2859 | pi=(1.e5/p)**(0.2854*(1.-0.28*qs)) |
---|
2860 | the0k(kp)=temp*pi*exp((3374.6525/temp-2.5403)*qs* & |
---|
2861 | (1.+0.81*qs)) |
---|
2862 | enddo |
---|
2863 | ! |
---|
2864 | ! compute temperatures for each sat. equiv. potential temp. |
---|
2865 | ! |
---|
2866 | p=plutop-dpr |
---|
2867 | do kp=1,kfnp |
---|
2868 | thes=the0k(kp)-dth |
---|
2869 | p=p+dpr |
---|
2870 | do it=1,kfnt |
---|
2871 | ! define sat. equiv. pot. temp. |
---|
2872 | thes=thes+dth |
---|
2873 | ! iterate to find temperature |
---|
2874 | ! find initial guess |
---|
2875 | if(it.eq.1) then |
---|
2876 | tgues=tmin |
---|
2877 | else |
---|
2878 | tgues=ttab(it-1,kp) |
---|
2879 | endif |
---|
2880 | es=aliq*exp((bliq*tgues-cliq)/(tgues-dliq)) |
---|
2881 | qs=0.622*es/(p-es) |
---|
2882 | pi=(1.e5/p)**(0.2854*(1.-0.28*qs)) |
---|
2883 | thgues=tgues*pi*exp((3374.6525/tgues-2.5403)*qs* & |
---|
2884 | (1.+0.81*qs)) |
---|
2885 | f0=thgues-thes |
---|
2886 | t1=tgues-0.5*f0 |
---|
2887 | t0=tgues |
---|
2888 | itcnt=0 |
---|
2889 | ! iteration loop |
---|
2890 | do itcnt=1,11 |
---|
2891 | es=aliq*exp((bliq*t1-cliq)/(t1-dliq)) |
---|
2892 | qs=0.622*es/(p-es) |
---|
2893 | pi=(1.e5/p)**(0.2854*(1.-0.28*qs)) |
---|
2894 | thtgs=t1*pi*exp((3374.6525/t1-2.5403)*qs*(1.+0.81*qs)) |
---|
2895 | f1=thtgs-thes |
---|
2896 | if(abs(f1).lt.toler)then |
---|
2897 | exit |
---|
2898 | endif |
---|
2899 | ! itcnt=itcnt+1 |
---|
2900 | dt=f1*(t1-t0)/(f1-f0) |
---|
2901 | t0=t1 |
---|
2902 | f0=f1 |
---|
2903 | t1=t1-dt |
---|
2904 | enddo |
---|
2905 | ttab(it,kp)=t1 |
---|
2906 | qstab(it,kp)=qs |
---|
2907 | enddo |
---|
2908 | enddo |
---|
2909 | ! |
---|
2910 | ! lookup table for tlog(emix/aliq) |
---|
2911 | ! |
---|
2912 | ! set up intial values for lookup tables |
---|
2913 | ! |
---|
2914 | astrt=1.e-3 |
---|
2915 | ainc=0.075 |
---|
2916 | ! |
---|
2917 | a1=astrt-ainc |
---|
2918 | do i=1,200 |
---|
2919 | a1=a1+ainc |
---|
2920 | alu(i)=alog(a1) |
---|
2921 | enddo |
---|
2922 | ! |
---|
2923 | END SUBROUTINE KF_LUTAB |
---|
2924 | |
---|
2925 | END MODULE module_cu_kfeta |
---|