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,
14 ! End of Lookup table variables:
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 &
23 ,DT,KTAU,DX,CUDT,CURR_SECS,ADAPT_STEP_FLAG &
24 ,rho,RAINCV,PRATEC,NCA &
25 ,U,V,TH,T,W,dz8w,Pcps,pi &
26 ,W0AVG,XLV0,XLV1,XLS0,XLS1,CP,R,G,EP1 &
27 ,EP2,SVP1,SVP2,SVP3,SVPT0 &
28 ,STEPCU,CU_ACT_FLAG,warm_rain,CUTOP,CUBOT &
31 ,F_QV ,F_QC ,F_QR ,F_QI ,F_QS &
32 ,RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN &
33 ,RQICUTEN,RQSCUTEN, RQVFTEN &
36 !-------------------------------------------------------------
38 !-------------------------------------------------------------
39 INTEGER, INTENT(IN ) :: &
40 ids,ide, jds,jde, kds,kde, &
41 ims,ime, jms,jme, kms,kme, &
42 its,ite, jts,jte, kts,kte
44 INTEGER, INTENT(IN ) :: trigger
45 INTEGER, INTENT(IN ) :: STEPCU
46 LOGICAL, INTENT(IN ) :: warm_rain
48 REAL, INTENT(IN ) :: XLV0,XLV1,XLS0,XLS1
49 REAL, INTENT(IN ) :: CP,R,G,EP1,EP2
50 REAL, INTENT(IN ) :: SVP1,SVP2,SVP3,SVPT0
52 INTEGER, INTENT(IN ) :: KTAU
54 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
67 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
71 REAL, INTENT(IN ) :: DT, DX
72 REAL, INTENT(IN ) :: CUDT
73 REAL, INTENT(IN ) :: CURR_SECS
74 LOGICAL,INTENT(IN ) :: ADAPT_STEP_FLAG
76 REAL, DIMENSION( ims:ime , jms:jme ), &
77 INTENT(INOUT) :: RAINCV
79 REAL, DIMENSION( ims:ime , jms:jme ), &
80 INTENT(INOUT) :: PRATEC
82 REAL, DIMENSION( ims:ime , jms:jme ), &
85 REAL, DIMENSION( ims:ime , jms:jme ), &
86 INTENT(OUT) :: CUBOT, &
89 LOGICAL, DIMENSION( ims:ime , jms:jme ), &
90 INTENT(INOUT) :: CU_ACT_FLAG
96 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
107 ! Flags relating to the optional tendency arrays declared above
108 ! Models that carry the optional tendencies will provdide the
109 ! optional arguments at compile time; these flags all the model
110 ! to determine at run-time whether a particular tracer is in
113 LOGICAL, OPTIONAL :: &
123 LOGICAL :: flag_qr, flag_qi, flag_qs
125 REAL, DIMENSION( kts:kte ) :: &
137 REAL, DIMENSION( kts:kte ):: &
145 REAL, DIMENSION (its-1:ite+1,kts:kte,jts-1:jte+1) :: aveh_t, aveh_q
146 REAL, DIMENSION (its:ite,kts:kte,jts:jte) :: aveh_qmax, aveh_qmin
147 REAL, DIMENSION (its:ite,kts:kte,jts:jte) :: avev_t, avev_q
148 REAL, DIMENSION (its:ite,kts:kte,jts:jte) :: avev_qmax, avev_qmin
149 REAL, DIMENSION (its:ite,kts:kte,jts:jte) :: coef_v, coef_h, tpart_h, tpart_v
153 REAL, DIMENSION (kts:kte) :: z0
155 REAL :: TST,tv,PRS,RHOE,W0,SCR1,DXSQ,tmp
156 integer :: ibegh,iendh,jbegh,jendh
157 integer :: istart,iend,jstart,jend
158 INTEGER :: i,j,k,NTST
159 REAL :: lastdt = -1.0
160 REAL :: W0AVGfctr, W0fctr, W0den
166 !----------------------
172 IF ( PRESENT(F_QR) ) flag_qr = F_QR
173 IF ( PRESENT(F_QI) ) flag_qi = F_QI
174 IF ( PRESENT(F_QS) ) flag_qs = F_QS
180 if (ADAPT_STEP_FLAG) then
181 W0AVGfctr = 2 * MAX(CUDT*60,dt) - dt
183 W0den = 2 * MAX(CUDT*60,dt)
193 ! SCR1=-5.0E-4*G*rho(I,K,J)*(w(I,K,J)+w(I,K+1,J))
194 ! TV=T(I,K,J)*(1.+EP1*QV(I,K,J))
195 ! RHOE=Pcps(I,K,J)/(R*TV)
196 ! W0=-101.9368*SCR1/RHOE
197 W0=0.5*(w(I,K,J)+w(I,K+1,J))
201 ! W0AVG(I,K,J)=(W0AVG(I,K,J)*(TST-1.)+W0)/TST
203 ! New, to support adaptive time step:
205 W0AVG(I,K,J) = ( W0AVG(I,K,J) * W0AVGfctr + W0 * W0fctr ) / W0den
211 ! New trigger function
212 IF (trigger.eq.2) THEN
214 ! calculate 9-point average of moisture advection and temperature using halo (Horizontal)
216 aveh_t=-999 ! horizontal 9-point ave
218 avev_t=0 ! vertical 3-level ave
228 ibegh=max(its-1, ids+1) ! start from 2
229 jbegh=max(jts-1, jds+1)
230 iendh=min(ite+1, ide-2) ! end at ide-2
231 jendh=min(jte+1, jde-2)
235 aveh_t(i,k,j)=(T(i-1,k,j-1)+T(i-1,k,j) +T(i-1,k,j+1)+ &
236 T(i,k,j-1) +T(i,k,j) +T(i,k,j+1)+ &
237 T(i+1,k,j-1) +T(i+1,k,j) +T(i+1,k,j+1))/9.
238 aveh_q(i,k,j)=(rqvften(i-1,k,j-1)+rqvften(i-1,k,j) +rqvften(i-1,k,j+1)+ &
239 rqvften(i,k,j-1) +rqvften(i,k,j) +rqvften(i,k,j+1)+ &
240 rqvften(i+1,k,j-1) +rqvften(i+1,k,j) +rqvften(i+1,k,j+1))/9.
244 ! boundary value ( all processors will do the following? Or just those processsors handling sub-area including boundary)
250 aveh_t(i,k,j)=aveh_t(i+1,k,j)
251 aveh_q(i,k,j)=aveh_q(i+1,k,j)
252 elseif(i.eq.ide-1) then
253 aveh_t(i,k,j)=aveh_t(i-1,k,j)
254 aveh_q(i,k,j)=aveh_q(i-1,k,j)
258 aveh_t(i,k,j)=aveh_t(i,k,j+1)
259 aveh_q(i,k,j)=aveh_q(i,k,j+1)
260 elseif(j.eq.jde-1) then
261 aveh_t(i,k,j)=aveh_t(i,k,j-1)
262 aveh_q(i,k,j)=aveh_q(i,k,j-1)
265 if(j.eq.jds.and.i.eq.ids) then
266 aveh_q(i,k,j)=aveh_q(i+1,k,j+1)
267 aveh_t(i,k,j)=aveh_t(i+1,k,j+1)
270 if(j.eq.jde-1.and.i.eq.ids) then
271 aveh_q(i,k,j)=aveh_q(i+1,k,j-1)
272 aveh_t(i,k,j)=aveh_t(i+1,k,j-1)
275 if(j.eq.jde-1.and.i.eq.ide-1) then
276 aveh_q(i,k,j)=aveh_q(i-1,k,j-1)
277 aveh_t(i,k,j)=aveh_t(i-1,k,j-1)
280 if(j.eq.jds.and.i.eq.ide-1) then
281 aveh_q(i,k,j)=aveh_q(i-1,k,j+1)
282 aveh_t(i,k,j)=aveh_t(i-1,k,j+1)
288 ! search for max/min moisture advection in 9-point range, calculate horizontal T-perturbation (tpart_h)
289 istart=max(its, ids+1) ! start from 2
290 jstart=max(jts, jds+1)
291 iend=min(ite, ide-2) ! end at ide-2
296 aveh_qmax(i,k,j)=aveh_q(i,k,j)
297 aveh_qmin(i,k,j)=aveh_q(i,k,j)
300 if(aveh_q(i+II,k,j+JJ).gt.aveh_qmax(i,k,j)) aveh_qmax(i,k,j)=aveh_q(i+II,k,j+JJ)
301 if(aveh_q(i+II,k,j+JJ).lt.aveh_qmin(i,k,j)) aveh_qmin(i,k,j)=aveh_q(i+II,k,j+JJ)
304 if(aveh_qmax(i,k,j).gt.aveh_qmin(i,k,j))then
305 coef_h(i,k,j)=(aveh_q(i,k,j)-aveh_qmin(i,k,j))/(aveh_qmax(i,k,j)-aveh_qmin(i,k,j))
309 coef_h(i,k,j)=amin1(coef_h(i,k,j),1.0)
310 coef_h(i,k,j)=amax1(coef_h(i,k,j),0.0)
311 tpart_h(i,k,j)=coef_h(i,k,j)*(T(i,k,j)-aveh_t(i,k,j))
316 ! vertical 3-layer calculation
319 z0(1) = 0.5 * dz8w(i,1,j)
321 Z0(K) = Z0(K-1) + .5 * (DZ8W(i,K,j) + DZ8W(i,K-1,j))
324 ttop = t(i,k,j) + ((t(i,k,j) - t(i,k+1,j)) / (z0(k) - z0(k+1))) * (z0(k)-z0(k-1))
325 avev_t(i,k,j)=(T(i,k-1,j) + T(i,k,j) + ttop)/3.
326 ! avev_t(i,k,j)=(T(i,k-1,j)+T(i,k,j) + T(i,k+1,j))/3.
327 avev_q(i,k,j)=(rqvften(i,k-1,j)+rqvften(i,k,j) + rqvften(i,k+1,j))/3.
329 avev_t(i,kts,j)=avev_t(i,kts+1,j) ! lowest level value, is it the same as avev_t(i,kds,j)=avev_t(i,kds+1,j)?
330 avev_q(i,kts,j)=avev_q(i,kts+1,j)
331 avev_t(i,kte,j)=avev_t(i,kte-1,j) ! highest level value
332 avev_q(i,kte,j)=avev_q(i,kte-1,j)
339 avev_qmax(i,k,j)=avev_q(i,k,j)
340 avev_qmin(i,k,j)=avev_q(i,k,j)
342 if(avev_q(i,k+kk,j).gt.avev_qmax(i,k,j)) avev_qmax(i,k,j)=avev_q(i,k+kk,j)
343 if(avev_q(i,k+kk,j).lt.avev_qmin(i,k,j)) avev_qmin(i,k,j)=avev_q(i,k+kk,j)
345 if(avev_qmax(i,k,j).gt.avev_qmin(i,k,j)) then
346 coef_v(i,k,j)=(avev_q(i,k,j)-avev_qmin(i,k,j))/(avev_qmax(i,k,j)-avev_qmin(i,k,j))
350 tpart_v(i,k,j)=coef_v(i,k,j)*(T(i,k,j)-avev_t(i,k,j))
352 tpart_v(i,kts,j)= tpart_v(i,kts+1,j) ! lowest level
353 tpart_v(i,kte,j)= tpart_v(i,kte-1,j) ! highest level
356 ENDIF ! endif (trigger.eq.2)
358 !...CHECK FOR CONVECTIVE INITIATION EVERY 5 MINUTES (OR NTST/2)...
360 ! Modified for adaptive time step
362 if (ADAPT_STEP_FLAG) then
363 if ( (KTAU .eq. 1) .or. (cudt .eq. 0) .or. &
364 ( CURR_SECS + dt >= &
365 ( int( CURR_SECS / ( cudt * 60 ) ) + 1 ) * cudt * 60 ) ) then
372 if (MOD(KTAU,NTST) .EQ. 0 .or. KTAU .eq. 1) then
383 CU_ACT_FLAG(i,j) = .true.
391 IF ( NCA(I,J) .ge. 0.5*DT ) then
392 CU_ACT_FLAG(i,j) = .false.
408 ! assign vars from 3D to 1D
417 W0AVG1D(K) =W0AVG(I,K,J)
419 IF (trigger.eq.2) THEN
420 tpart_h1D(K) =tpart_h(I,K,J)
421 tpart_v1D(K) =tpart_v(I,K,J)
427 CALL KF_eta_PARA(I, J, &
428 U1D,V1D,T1D,QV1D,P1D,DZ1D,W0AVG1D, &
429 tpart_h1D,tpart_v1D, &
432 XLV0,XLV1,XLS0,XLS1,CP,R,G, &
433 EP2,SVP1,SVP2,SVP3,SVPT0, &
434 DQDT,DQIDT,DQCDT,DQRDT,DQSDT,DTDT, &
436 flag_QI,flag_QS,warm_rain, &
438 ids,ide, jds,jde, kds,kde, &
439 ims,ime, jms,jme, kms,kme, &
440 its,ite, jts,jte, kts,kte)
441 IF(PRESENT(rthcuten).AND.PRESENT(rqvcuten)) THEN
443 RTHCUTEN(I,K,J)=DTDT(K)/pi(I,K,J)
444 RQVCUTEN(I,K,J)=DQDT(K)
448 IF(PRESENT(rqrcuten).AND.PRESENT(rqccuten)) THEN
451 RQRCUTEN(I,K,J)=DQRDT(K)
452 RQCCUTEN(I,K,J)=DQCDT(K)
455 ! This is the case for Eta microphysics without 3d rain field
458 RQCCUTEN(I,K,J)=DQRDT(K)+DQCDT(K)
463 !...... QSTEN STORES GRAUPEL TENDENCY IF IT EXISTS, OTHERISE SNOW (V2)
466 IF(PRESENT( rqicuten )) THEN
469 RQICUTEN(I,K,J)=DQIDT(K)
474 IF(PRESENT( rqscuten )) THEN
477 RQSCUTEN(I,K,J)=DQSDT(K)
487 END SUBROUTINE KF_eta_CPS
488 ! ****************************************************************************
489 !-----------------------------------------------------------
490 SUBROUTINE KF_eta_PARA (I, J, &
491 U0,V0,T0,QV0,P0,DZQ,W0AVG1D, &
495 XLV0,XLV1,XLS0,XLS1,CP,R,G, &
496 EP2,SVP1,SVP2,SVP3,SVPT0, &
497 DQDT,DQIDT,DQCDT,DQRDT,DQSDT,DTDT, &
499 F_QI,F_QS,warm_rain, &
501 ids,ide, jds,jde, kds,kde, &
502 ims,ime, jms,jme, kms,kme, &
503 its,ite, jts,jte, kts,kte)
504 !-----------------------------------------------------------
505 !***** The KF scheme that is currently used in experimental runs of EMCs
506 !***** Eta model....jsk 8/00
509 !-----------------------------------------------------------
510 INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde, &
511 ims,ime, jms,jme, kms,kme, &
512 its,ite, jts,jte, kts,kte, &
514 ! ,P_QI,P_QS,P_FIRST_SCALAR
515 INTEGER, INTENT(IN ) :: trigger
517 LOGICAL, INTENT(IN ) :: F_QI, F_QS
519 LOGICAL, INTENT(IN ) :: warm_rain
521 REAL, DIMENSION( kts:kte ), &
533 REAL, INTENT(IN ) :: DT,DX,DXSQ
536 REAL, INTENT(IN ) :: XLV0,XLV1,XLS0,XLS1,CP,R,G
537 REAL, INTENT(IN ) :: EP2,SVP1,SVP2,SVP3,SVPT0
540 REAL, DIMENSION( kts:kte ), INTENT(INOUT) :: &
548 REAL, DIMENSION( ims:ime , jms:jme ), &
551 REAL, DIMENSION( ims:ime , jms:jme ), &
552 INTENT(INOUT) :: RAINCV
554 REAL, DIMENSION( ims:ime , jms:jme ), &
555 INTENT(INOUT) :: PRATEC
557 REAL, DIMENSION( ims:ime , jms:jme ), &
558 INTENT(OUT) :: CUBOT, &
560 REAL, INTENT(IN ) :: CUDT
562 !...DEFINE LOCAL VARIABLES...
564 REAL, DIMENSION( kts:kte ) :: &
565 Q0,Z0,TV0,TU,TVU,QU,TZ,TVD, &
566 QD,QES,THTES,TG,TVG,QG,WU,WD,W0,EMS,EMSD, &
567 UMF,UER,UDR,DMF,DER,DDR,UMF2,UER2, &
568 UDR2,DMF2,DER2,DDR2,DZA,THTA0,THETEE, &
569 THTAU,THETEU,THTAD,THETED,QLIQ,QICE, &
570 QLQOUT,QICOUT,PPTLIQ,PPTICE,DETLQ,DETIC, &
571 DETLQ2,DETIC2,RATIO,RATIO2
574 REAL, DIMENSION( kts:kte ) :: &
575 DOMGDP,EXN,TVQU,DP,RH,EQFRC,WSPD, &
576 QDT,FXM,THTAG,THPA,THFXOUT, &
577 THFXIN,QPA,QFXOUT,QFXIN,QLPA,QLFXIN, &
578 QLFXOUT,QIPA,QIFXIN,QIFXOUT,QRPA, &
579 QRFXIN,QRFXOUT,QSPA,QSFXIN,QSFXOUT, &
580 QL0,QLG,QI0,QIG,QR0,QRG,QS0,QSG
583 REAL, DIMENSION( kts:kte+1 ) :: OMG
584 REAL, DIMENSION( kts:kte ) :: RAINFB,SNOWFB
585 REAL, DIMENSION( kts:kte ) :: &
586 CLDHGT,QSD,DILFRC,DDILFRC,TKE,TGU,QGU,THTEEG
590 REAL :: P00,T00,RLF,RHIC,RHBC,PIE, &
592 REAL :: GDRY,ROCP,ALIQ,BLIQ, &
594 REAL :: FBFRC,P300,DPTHMX,THMIX,QMIX,ZMIX,PMIX, &
595 ROCPQ,TMIX,EMIX,TLOG,TDPT,TLCL,TVLCL, &
596 CPORQ,PLCL,ES,DLP,TENV,QENV,TVEN,TVBAR, &
597 ZLCL,WKL,WABS,TRPPT,WSIGNE,DTLCL,GDT,WLCL,&
598 TVAVG,QESE,WTW,RHOLCL,AU0,VMFLCL,UPOLD, &
599 UPNEW,ABE,WKLCL,TTEMP,FRC1, &
600 QNEWIC,RL,R1,QNWFRZ,EFFQ,BE,BOTERM,ENTERM,&
601 DZZ,UDLBE,REI,EE2,UD2,TTMP,F1,F2, &
602 THTTMP,QTMP,TMPLIQ,TMPICE,TU95,TU10,EE1, &
603 UD1,DPTT,QNEWLQ,DUMFDP,EE,TSAT, &
604 THTA,VCONV,TIMEC,SHSIGN,VWS,PEF, &
605 CBH,RCBH,PEFCBH,PEFF,PEFF2,TDER,THTMIN, &
606 DTMLTD,QS,TADVEC,DPDD,FRC,DPT,RDD,A1, &
607 DSSDT,DTMP,T1RH,QSRH,PPTFLX,CPR,CNDTNF, &
608 UPDINC,AINCM2,DEVDMF,PPR,RCED,DPPTDF, &
609 DMFLFS,DMFLFS2,RCED2,DDINC,AINCMX,AINCM1, &
610 AINC,TDER2,PPTFL2,FABE,STAB,DTT,DTT1, &
611 DTIME,TMA,TMB,TMM,BCOEFF,ACOEFF,QVDIFF, &
612 TOPOMG,CPM,DQ,ABEG,DABE,DFDA,FRC2,DR, &
613 UDFRC,TUC,QGS,RH0,RHG,QINIT,QFNL,ERR2, &
614 RELERR,RLC,RLS,RNC,FABEOLD,AINCOLD,UEFRC, &
615 DDFRC,TDC,DEFRC,RHBAR,DMFFRC,DPMIN,DILBE
616 REAL :: ASTRT,TP,VALUE,AINTRP,TKEMAX,QFRZ,&
617 QSS,PPTMLT,DTMELT,RHH,EVAC,BINC
619 INTEGER :: INDLU,NU,NUCHM,NNN,KLFS
620 REAL :: CHMIN,PM15,CHMAX,DTRH,RAD,DPPP
621 REAL :: TVDIFF,DTTOT,ABSOMG,ABSOMGTC,FRDP
626 INTEGER, DIMENSION (kts:kte) :: KCHECK
628 INTEGER :: ISTOP,ML,L5,KMIX,LOW, &
629 LC,MXLAYR,LLFC,NLAYRS,NK, &
630 KPBL,KLCL,LCL,LET,IFLAG, &
632 LTOPM1,LVF,KSTART,KMIN,LFS, &
633 ND,NIC,LDB,LDT,ND1,NDK, &
634 NM,LMAX,NCOUNT,NOITR, &
635 NSTEP,NTC,NCHM,ISHALL,NSHALL
637 REAL :: u00,qslcl,rhlcl,dqssdt !jfb
638 CHARACTER*1024 message
640 DATA P00,T00/1.E5,273.16/
642 DATA RHIC,RHBC/1.,0.90/
643 DATA PIE,TTFRZ,TBFRZ,C5/3.141592654,268.16,248.16,1.0723E-3/
644 DATA RATE/0.03/ ! wrf default
645 ! DATA RATE/0.01/ ! value used in NRCM
646 ! DATA RATE/0.001/ ! effectively turn off autoconversion
647 !-----------------------------------------------------------
665 !****************************************************************************
667 !...OPTION TO FEED CONVECTIVELY GENERATED RAINWATER ! PPT FB MODS
668 !...INTO GRID-RESOLVED RAINWATER (OR SNOW/GRAUPEL) ! PPT FB MODS
669 !...FIELD. "FBFRC" IS THE FRACTION OF AVAILABLE ! PPT FB MODS
670 !...PRECIPITATION TO BE FED BACK (0.0 - 1.0)... ! PPT FB MODS
671 FBFRC=0.0 ! PPT FB MODS
672 !...mods to allow shallow convection...
679 !...PRESSURE PERTURBATION TERM IS ONLY DEFINED AT MID-POINT OF
680 !...VERTICAL LAYERS...SINCE TOTAL PRESSURE IS NEEDED AT THE TOP AND
681 !...BOTTOM OF LAYERS BELOW, DO AN INTERPOLATION...
683 !...INPUT A VERTICAL SOUNDING ... NOTE THAT MODEL LAYERS ARE NUMBERED
684 !...FROM BOTTOM-UP IN THE KF SCHEME...
687 !SUE tmprpsb=1./PSB(I,J)
688 !SUE CELL=PTOP*tmprpsb
692 ! Saturation vapor pressure (ES) is calculated following Buck (1981)
693 !...IF Q0 IS ABOVE SATURATION VALUE, REDUCE IT TO SATURATION LEVEL...
695 ES=ALIQ*EXP((BLIQ*T0(K)-CLIQ)/(T0(K)-DLIQ))
696 QES(K)=0.622*ES/(P0(K)-ES)
697 Q0(K)=AMIN1(QES(K),QV0(K))
698 Q0(K)=AMAX1(0.000001,Q0(K))
705 TV0(K)=T0(K)*(1.+0.608*Q0(K))
706 ! RHOE(K)=P0(K)/(R*TV0(K))
707 ! DP IS THE PRESSURE INTERVAL BETWEEN FULL SIGMA LEVELS...
708 DP(K)=rhoe(k)*g*DZQ(k)
709 ! IF Turbulent Kinetic Energy (TKE) is available from turbulent mixing scheme
710 ! use it for shallow convection...For now, assume it is not available....
711 ! TKE(K) = Q2(I,J,NK)
714 ! IF(P0(K).GE.500E2)L5=K
715 IF(P0(K).GE.0.5*P0(1))L5=K
716 IF(P0(K).GE.P300)LLFC=K
719 !...DZQ IS DZ BETWEEN SIGMA SURFACES, DZA IS DZ BETWEEN MODEL HALF LEVEL
723 Z0(K)=Z0(K-1)+.5*(DZQ(K)+DZQ(K-1))
724 DZA(K-1)=Z0(K)-Z0(K-1)
729 ! To save time, specify a pressure interval to move up in sequential
730 ! check of different ~50 mb deep groups of adjacent model layers in
731 ! the process of identifying updraft source layer (USL). Note that
732 ! this search is terminated as soon as a buoyant parcel is found and
733 ! this parcel can produce a cloud greater than specifed minimum depth
734 ! (CHMIN)...For now, set interval at 15 mb...
740 IF(P0(K).LT.PM15)THEN
757 IF(CLDHGT(NNN).GT.CHMAX)THEN
775 !...ASSUME THAT IN ORDER TO SUPPORT A DEEP UPDRAFT YOU NEED A LAYER OF
776 !...UNSTABLE AIR AT LEAST 50 mb DEEP...TO APPROXIMATE THIS, ISOLATE A
777 !...GROUP OF ADJACENT INDIVIDUAL MODEL LAYERS, WITH THE BASE AT LEVEL
778 !...LC, SUCH THAT THE COMBINED DEPTH OF THESE LAYERS IS AT LEAST 50 mb..
783 IF ( NK+1 .LT. KTS ) THEN
784 WRITE(message,*)'WOULD GO OFF BOTTOM: KF_ETA_PARA I,J,NK',I,J,NK
785 CALL wrf_message (TRIM(message))
789 IF ( NK .GT. KTE ) THEN
790 WRITE(message,*)'WOULD GO OFF TOP: KF_ETA_PARA I,J,DPTHMX,DPMIN',I,J,DPTHMX,DPMIN
791 CALL wrf_message (TRIM(message))
796 IF(DPTHMX.GT.DPMIN)THEN
801 IF(DPTHMX.LT.DPMIN)THEN
806 !...********************************************************
807 !...for computational simplicity without much loss in accuracy,
808 !...mix temperature instead of theta for evaluating convective
809 !...initiation (triggering) potential...
816 !...FIND THE THERMODYNAMIC CHARACTERISTICS OF THE LAYER BY
817 !...MASS-WEIGHTING THE CHARACTERISTICS OF THE INDIVIDUAL MODEL
822 TMIX=TMIX+DP(NK)*T0(NK)
823 QMIX=QMIX+DP(NK)*Q0(NK)
824 ZMIX=ZMIX+DP(NK)*Z0(NK)
825 PMIX=PMIX+DP(NK)*P0(NK)
832 EMIX=QMIX*PMIX/(0.622+QMIX)
834 !...FIND THE TEMPERATURE OF THE MIXTURE AT ITS LCL...
836 ! TLOG=ALOG(EMIX/ALIQ)
837 ! ...calculate dewpoint using lookup table...
844 value=(indlu-1)*ainc+astrt
845 aintrp=(a1-value)/ainc
846 tlog=aintrp*alu(indlu+1)+(1-aintrp)*alu(indlu)
847 TDPT=(CLIQ-DLIQ*TLOG)/(BLIQ-TLOG)
848 TLCL=TDPT-(.212+1.571E-3*(TDPT-T00)-4.36E-4*(TMIX-T00))*(TMIX-TDPT)
849 TLCL=AMIN1(TLCL,TMIX)
850 TVLCL=TLCL*(1.+0.608*QMIX)
851 ZLCL = ZMIX+(TLCL-TMIX)/GDRY
856 IF(ZLCL.LE.Z0(NK) .or. NK.GT.KL)THEN
864 ! calculate DLP using Z instead of log(P)
865 DLP=(ZLCL-Z0(K))/(Z0(KLCL)-Z0(K))
867 !...ESTIMATE ENVIRONMENTAL TEMPERATURE AND MIXING RATIO AT THE LCL...
869 TENV=T0(K)+(T0(KLCL)-T0(K))*DLP
870 QENV=Q0(K)+(Q0(KLCL)-Q0(K))*DLP
871 TVEN=TENV*(1.+0.608*QENV)
873 !...CHECK TO SEE IF CLOUD IS BUOYANT USING FRITSCH-CHAPPELL TRIGGER
874 !...FUNCTION DESCRIBED IN KAIN AND FRITSCH (1992)...W0 IS AN
875 !...APROXIMATE VALUE FOR THE RUNNING-MEAN GRID-SCALE VERTICAL
876 !...VELOCITY, WHICH GIVES SMOOTHER FIELDS OF CONVECTIVE INITIATION
877 !...THAN THE INSTANTANEOUS VALUE...FORMULA RELATING TEMPERATURE
878 !...PERTURBATION TO VERTICAL VELOCITY HAS BEEN USED WITH THE MOST
879 !...SUCCESS AT GRID LENGTHS NEAR 25 km. FOR DIFFERENT GRID-LENGTHS,
880 !...ADJUST VERTICAL VELOCITY TO EQUIVALENT VALUE FOR 25 KM GRID
881 !...LENGTH, ASSUMING LINEAR DEPENDENCE OF W ON GRID LENGTH...
883 IF(ZLCL.LT.2.E3)THEN ! Kain (2004) Eq. 2
886 WKLCL=0.02 ! units of m/s
888 WKL=(W0AVG1D(K)+(W0AVG1D(KLCL)-W0AVG1D(K))*DLP)*DX/25.E3-WKLCL
889 IF(WKL.LT.0.0001)THEN
892 DTLCL=4.64*WKL**0.33 ! Kain (2004) Eq. 1
895 ! New trigger function
896 IF(trigger.eq.2) then
897 DTLCL=amax1(TPART_H0(KLCL)+TPART_V0(KLCL),0.0)
899 ! end for trigger function
902 if (trigger .eq. 3) then
903 !...for ETA model, give parcel an extra temperature perturbation based
904 !...the threshold RH for condensation (U00)...
905 ! as described in Narita and Ohmori (2007, 12th Mesoscale Conf.
907 !...for now, just assume U00=0.75...
908 !...!!!!!! for MM5, SET DTRH = 0. !!!!!!!!
911 QSLCL=QES(K)+(QES(KLCL)-QES(K))*DLP
913 DQSSDT = QMIX*(CLIQ-BLIQ*DLIQ)/((TLCL-DLIQ)*(TLCL-DLIQ))
914 IF(RHLCL.ge.0.75 .and. RHLCL.le.0.95)then
915 DTRH = 0.25*(RHLCL-0.75)*QMIX/DQSSDT
916 ELSEIF(RHLCL.GT.0.95)THEN
917 DTRH = (1./RHLCL-1.)*QMIX/DQSSDT
923 ! IF(ISHALL.EQ.1)IPRNT=.TRUE.
925 ! IF(TLCL+DTLCL.GT.TENV)GOTO 45
927 trigger2: IF(TLCL+DTLCL+DTRH.LT.TENV)THEN
929 ! Parcel not buoyant, CYCLE back to start of trigger and evaluate next potential USL...
933 ELSE ! Parcel is buoyant, determine updraft
935 !...CONVECTIVE TRIGGERING CRITERIA HAS BEEN SATISFIED...COMPUTE
936 !...EQUIVALENT POTENTIAL TEMPERATURE
937 !...(THETEU) AND VERTICAL VELOCITY OF THE RISING PARCEL AT THE LCL...
939 CALL ENVIRTHT(PMIX,TMIX,QMIX,THETEU(K),ALIQ,BLIQ,CLIQ,DLIQ)
941 !...modify calculation of initial parcel vertical velocity...jsk 11/26/97
944 IF(DTTOT.GT.1.E-4)THEN
945 GDT=2.*G*DTTOT*500./TVEN ! Kain (2004) Eq. 3 (sort of)
946 WLCL=1.+0.5*SQRT(GDT)
947 WLCL = AMIN1(WLCL,3.)
951 PLCL=P0(K)+(P0(KLCL)-P0(K))*DLP
954 TVLCL=TLCL*(1.+0.608*QMIX)
955 RHOLCL=PLCL/(R*TVLCL)
959 ! make RAD a function of background vertical velocity... (Kain (2004) Eq. 6)
962 ELSEIF(WKL.GT.0.1)THEN
965 RAD = 1000.+1000*WKL/0.1
968 !*******************************************************************
970 ! COMPUTE UPDRAFT PROPERTIES *
972 !*******************************************************************
976 !...ESTIMATE INITIAL UPDRAFT MASS FLUX (UMF(K))...
985 !...RATIO2 IS THE DEGREE OF GLACIATION IN THE CLOUD (0 TO 1),
986 !...UER IS THE ENVIR ENTRAINMENT RATE, ABE IS AVAILABLE
987 !...BUOYANT ENERGY, TRPPT IS THE TOTAL RATE OF PRECIPITATION
1008 !...TTEMP IS USED DURING CALCULATION OF THE LINEAR GLACIATION
1009 !...PROCESS; IT IS INITIALLY SET TO THE TEMPERATURE AT WHICH
1010 !...FREEZING IS SPECIFIED TO BEGIN. WITHIN THE GLACIATION
1011 !...INTERVAL, IT IS SET EQUAL TO THE UPDRAFT TEMP AT THE
1012 !...PREVIOUS MODEL LEVEL...
1016 !...ENTER THE LOOP FOR UPDRAFT CALCULATIONS...CALCULATE UPDRAFT TEMP,
1017 !...MIXING RATIO, VERTICAL MASS FLUX, LATERAL DETRAINMENT OF MASS AND
1018 !...MOISTURE, PRECIPITATION RATES AT EACH MODEL LEVEL...
1020 ! **1 variables indicate the bottom of a model layer
1021 ! **2 variables indicate the top of a model layer
1027 updraft: DO NK=K,KL-1
1029 RATIO2(NK1)=RATIO2(NK)
1032 THETEU(NK1)=THETEU(NK)
1036 call tpmix2(p0(nk1),theteu(nk1),tu(nk1),qu(nk1),qliq(nk1), &
1037 qice(nk1),qnewlq,qnewic,XLV1,XLV0)
1040 !...CHECK TO SEE IF UPDRAFT TEMP IS ABOVE THE TEMPERATURE AT WHICH
1041 !...GLACIATION IS ASSUMED TO INITIATE; IF IT IS, CALCULATE THE
1042 !...FRACTION OF REMAINING LIQUID WATER TO FREEZE...TTFRZ IS THE
1043 !...TEMP AT WHICH FREEZING BEGINS, TBFRZ THE TEMP BELOW WHICH ALL
1044 !...LIQUID WATER IS FROZEN AT EACH LEVEL...
1046 IF(TU(NK1).LE.TTFRZ)THEN
1047 IF(TU(NK1).GT.TBFRZ)THEN
1048 IF(TTEMP.GT.TTFRZ)TTEMP=TTFRZ
1049 FRC1=(TTEMP-TU(NK1))/(TTEMP-TBFRZ)
1056 ! DETERMINE THE EFFECTS OF LIQUID WATER FREEZING WHEN TEMPERATURE
1057 !...IS BELOW TTFRZ...
1059 QFRZ = (QLIQ(NK1)+QNEWLQ)*FRC1
1060 QNEWIC=QNEWIC+QNEWLQ*FRC1
1061 QNEWLQ=QNEWLQ-QNEWLQ*FRC1
1062 QICE(NK1) = QICE(NK1)+QLIQ(NK1)*FRC1
1063 QLIQ(NK1) = QLIQ(NK1)-QLIQ(NK1)*FRC1
1064 CALL DTFRZNEW(TU(NK1),P0(NK1),THETEU(NK1),QU(NK1),QFRZ, &
1065 QICE(NK1),ALIQ,BLIQ,CLIQ,DLIQ)
1067 TVU(NK1)=TU(NK1)*(1.+0.608*QU(NK1))
1069 ! CALCULATE UPDRAFT VERTICAL VELOCITY AND PRECIPITATION FALLOUT...
1072 BE=(TVLCL+TVU(NK1))/(TVEN+TV0(NK1))-1.
1073 BOTERM=2.*(Z0(NK1)-ZLCL)*G*BE/1.5
1076 BE=(TVU(NK)+TVU(NK1))/(TV0(NK)+TV0(NK1))-1.
1077 BOTERM=2.*DZA(NK)*G*BE/1.5
1080 ENTERM=2.*REI*WTW/UPOLD
1082 CALL CONDLOAD(QLIQ(NK1),QICE(NK1),WTW,DZZ,BOTERM,ENTERM, &
1083 RATE,QNEWLQ,QNEWIC,QLQOUT(NK1),QICOUT(NK1),G)
1085 !...IF VERT VELOCITY IS LESS THAN ZERO, EXIT THE UPDRAFT LOOP AND,
1086 !...IF CLOUD IS TALL ENOUGH, FINALIZE UPDRAFT CALCULATIONS...
1088 IF(WTW.LT.1.E-3)THEN
1093 !...Calculate value of THETA-E in environment to entrain into updraft...
1095 CALL ENVIRTHT(P0(NK1),T0(NK1),Q0(NK1),THETEE(NK1),ALIQ,BLIQ,CLIQ,DLIQ)
1097 !...REI IS THE RATE OF ENVIRONMENTAL INFLOW...
1099 REI=VMFLCL*DP(NK1)*0.03/RAD ! KF (1990) Eq. 1; Kain (2004) Eq. 5
1100 TVQU(NK1)=TU(NK1)*(1.+0.608*QU(NK1)-QLIQ(NK1)-QICE(NK1))
1102 DILBE=((TVLCL+TVQU(NK1))/(TVEN+TV0(NK1))-1.)*DZZ
1104 DILBE=((TVQU(NK)+TVQU(NK1))/(TV0(NK)+TV0(NK1))-1.)*DZZ
1106 IF(DILBE.GT.0.)ABE=ABE+DILBE*G
1108 !...IF CLOUD PARCELS ARE VIRTUALLY COLDER THAN THE ENVIRONMENT, MINIMAL
1109 !...ENTRAINMENT (0.5*REI) IS IMPOSED...
1111 IF(TVQU(NK1).LE.TV0(NK1))THEN ! Entrain/Detrain IF BLOCK
1112 EE2=0.5 ! Kain (2004) Eq. 4
1119 !...DETERMINE THE CRITICAL MIXED FRACTION OF UPDRAFT AND ENVIRONMENTAL AIR...
1123 THTTMP=F1*THETEE(NK1)+F2*THETEU(NK1)
1124 QTMP=F1*Q0(NK1)+F2*QU(NK1)
1127 call tpmix2(p0(nk1),thttmp,ttmp,qtmp,tmpliq,tmpice, &
1128 qnewlq,qnewic,XLV1,XLV0)
1129 TU95=TTMP*(1.+0.608*QTMP-TMPLIQ-TMPICE)
1130 IF(TU95.GT.TV0(NK1))THEN
1137 THTTMP=F1*THETEE(NK1)+F2*THETEU(NK1)
1138 QTMP=F1*Q0(NK1)+F2*QU(NK1)
1141 call tpmix2(p0(nk1),thttmp,ttmp,qtmp,tmpliq,tmpice, &
1142 qnewlq,qnewic,XLV1,XLV0)
1143 TU10=TTMP*(1.+0.608*QTMP-TMPLIQ-TMPICE)
1144 TVDIFF = ABS(TU10-TVQU(NK1))
1145 IF(TVDIFF.LT.1.e-3)THEN
1150 EQFRC(NK1)=(TV0(NK1)-TVQU(NK1))*F1/(TU10-TVQU(NK1))
1151 EQFRC(NK1)=AMAX1(0.0,EQFRC(NK1))
1152 EQFRC(NK1)=AMIN1(1.0,EQFRC(NK1))
1153 IF(EQFRC(NK1).EQ.1)THEN
1156 ELSEIF(EQFRC(NK1).EQ.0.)THEN
1161 !...SUBROUTINE PROF5 INTEGRATES OVER THE GAUSSIAN DIST TO DETERMINE THE
1162 ! FRACTIONAL ENTRAINMENT AND DETRAINMENT RATES...
1164 CALL PROF5(EQFRC(NK1),EE2,UD2)
1168 ENDIF ! End of Entrain/Detrain IF BLOCK
1171 !...NET ENTRAINMENT AND DETRAINMENT RATES ARE GIVEN BY THE AVERAGE FRACTIONAL
1172 ! VALUES IN THE LAYER...
1174 EE2 = AMAX1(EE2,0.5)
1176 UER(NK1)=0.5*REI*(EE1+EE2)
1177 UDR(NK1)=0.5*REI*(UD1+UD2)
1179 !...IF THE CALCULATED UPDRAFT DETRAINMENT RATE IS GREATER THAN THE TOTAL
1180 ! UPDRAFT MASS FLUX, ALL CLOUD MASS DETRAINS, EXIT UPDRAFT CALCULATIONS...
1182 IF(UMF(NK)-UDR(NK1).LT.10.)THEN
1184 !...IF THE CALCULATED DETRAINED MASS FLUX IS GREATER THAN THE TOTAL UPD MASS
1185 ! FLUX, IMPOSE TOTAL DETRAINMENT OF UPDRAFT MASS AT THE PREVIOUS MODEL LVL..
1186 ! First, correct ABE calculation if needed...
1192 ! WRITE(98,1015)P0(NK1)/100.
1197 UPOLD=UMF(NK)-UDR(NK1)
1198 UPNEW=UPOLD+UER(NK1)
1200 DILFRC(NK1) = UPNEW/UPOLD
1202 !...DETLQ AND DETIC ARE THE RATES OF DETRAINMENT OF LIQUID AND
1203 !...ICE IN THE DETRAINING UPDRAFT MASS...
1205 DETLQ(NK1)=QLIQ(NK1)*UDR(NK1)
1206 DETIC(NK1)=QICE(NK1)*UDR(NK1)
1208 QU(NK1)=(UPOLD*QU(NK1)+UER(NK1)*Q0(NK1))/UPNEW
1209 THETEU(NK1)=(THETEU(NK1)*UPOLD+THETEE(NK1)*UER(NK1))/UPNEW
1210 QLIQ(NK1)=QLIQ(NK1)*UPOLD/UPNEW
1211 QICE(NK1)=QICE(NK1)*UPOLD/UPNEW
1213 !...PPTLIQ IS THE RATE OF GENERATION (FALLOUT) OF
1214 !...LIQUID PRECIP AT A GIVEN MODEL LVL, PPTICE THE SAME FOR ICE,
1215 !...TRPPT IS THE TOTAL RATE OF PRODUCTION OF PRECIP UP TO THE
1216 !...CURRENT MODEL LEVEL...
1218 PPTLIQ(NK1)=QLQOUT(NK1)*UMF(NK)
1219 PPTICE(NK1)=QICOUT(NK1)*UMF(NK)
1221 TRPPT=TRPPT+PPTLIQ(NK1)+PPTICE(NK1)
1222 IF(NK1.LE.KPBL)UER(NK1)=UER(NK1)+VMFLCL*DP(NK1)/DPTHMX
1227 !...CHECK CLOUD DEPTH...IF CLOUD IS TALL ENOUGH, ESTIMATE THE EQUILIBRIUM
1228 ! TEMPERATURE LEVEL (LET) AND ADJUST MASS FLUX PROFILE AT CLOUD TOP SO
1229 ! THAT MASS FLUX DECREASES TO ZERO AS A LINEAR FUNCTION OF PRESSURE BETWEEN
1230 ! THE LET AND CLOUD TOP...
1232 !...LTOP IS THE MODEL LEVEL JUST BELOW THE LEVEL AT WHICH VERTICAL VELOCITY
1233 ! FIRST BECOMES NEGATIVE...
1236 CLDHGT(LC)=Z0(LTOP)-ZLCL
1238 !...Instead of using the same minimum cloud height (for deep convection)
1239 !...everywhere, try specifying minimum cloud depth as a function of TLCL...
1243 IF(TLCL.GT.293.)THEN
1245 ELSEIF(TLCL.LE.293. .and. TLCL.GE.273)THEN
1246 CHMIN = 2.E3 + 100.*(TLCL-273.)
1247 ELSEIF(TLCL.LT.273.)THEN
1252 !...If cloud top height is less than the specified minimum for deep
1253 !...convection, save value to consider this level as source for
1254 !...shallow convection, go back up to check next level...
1256 !...Try specifying minimum cloud depth as a function of TLCL...
1259 !...DO NOT ALLOW ANY CLOUD FROM THIS LAYER IF:
1261 !... 1.) if there is no CAPE, or
1262 !... 2.) cloud top is at model level just above LCL, or
1263 !... 3.) cloud top is within updraft source layer, or
1264 !... 4.) cloud-top detrainment layer begins within
1265 !... updraft source layer.
1267 IF(LTOP.LE.KLCL .or. LTOP.LE.KPBL .or. LET+1.LE.KPBL)THEN ! No Convection Allowed
1279 ELSEIF(CLDHGT(LC).GT.CHMIN .and. ABE.GT.1)THEN ! Deep Convection allowed
1284 !...TO DISALLOW SHALLOW CONVECTION, COMMENT OUT NEXT LINE !!!!!!!!
1287 EXIT usl ! Shallow Convection from this layer
1289 ! Remember this layer (by virtue of non-zero CLDHGT) as potential shallow-cloud layer
1304 KSTART=MAX0(KPBL,KLCL)
1308 !...IF THE LET AND LTOP ARE THE SAME, DETRAIN ALL OF THE UPDRAFT MASS FL
1312 UDR(LTOP)=UMF(LTOP)+UDR(LTOP)-UER(LTOP)
1313 DETLQ(LTOP)=QLIQ(LTOP)*UDR(LTOP)*UPNEW/UPOLD
1314 DETIC(LTOP)=QICE(LTOP)*UDR(LTOP)*UPNEW/UPOLD
1319 ! BEGIN TOTAL DETRAINMENT AT THE LEVEL ABOVE THE LET...
1325 DUMFDP=UMF(LET)/DPTT
1327 !...ADJUST MASS FLUX PROFILES, DETRAINMENT RATES, AND PRECIPITATION FALL
1328 ! RATES TO REFLECT THE LINEAR DECREASE IN MASS FLX BETWEEN THE LET AND
1332 !...entrainment is allowed at every level except for LTOP, so disallow
1333 !...entrainment at LTOP and adjust entrainment rates between LET and LTOP
1334 !...so the the dilution factor due to entyrianment is not changed but
1335 !...the actual entrainment rate will change due due forced total
1336 !...detrainment in this layer...
1341 DETLQ(NK) = UDR(NK)*QLIQ(NK)*DILFRC(NK)
1342 DETIC(NK) = UDR(NK)*QICE(NK)*DILFRC(NK)
1344 UMF(NK)=UMF(NK-1)-DP(NK)*DUMFDP
1345 UER(NK)=UMF(NK)*(1.-1./DILFRC(NK))
1346 UDR(NK)=UMF(NK-1)-UMF(NK)+UER(NK)
1347 DETLQ(NK)=UDR(NK)*QLIQ(NK)*DILFRC(NK)
1348 DETIC(NK)=UDR(NK)*QICE(NK)*DILFRC(NK)
1351 TRPPT=TRPPT-PPTLIQ(NK)-PPTICE(NK)
1352 PPTLIQ(NK)=UMF(NK-1)*QLQOUT(NK)
1353 PPTICE(NK)=UMF(NK-1)*QICOUT(NK)
1354 TRPPT=TRPPT+PPTLIQ(NK)+PPTICE(NK)
1359 ! Initialize some arrays below cloud base and above cloud top...
1362 IF(T0(NK).GT.T00)ML=NK
1367 UMF(NK)=VMFLCL*DP(NK)/DPTHMX
1368 UER(NK)=VMFLCL*DP(NK)/DPTHMX
1369 ELSEIF(NK.LE.KPBL)THEN
1370 UER(NK)=VMFLCL*DP(NK)/DPTHMX
1371 UMF(NK)=UMF(NK-1)+UER(NK)
1376 TU(NK)=TMIX+(Z0(NK)-ZMIX)*GDRY
1397 CALL ENVIRTHT(P0(NK),T0(NK),Q0(NK),THETEE(NK),ALIQ,BLIQ,CLIQ,DLIQ)
1404 !...DEFINE VARIABLES ABOVE CLOUD TOP...
1438 EMS(NK)=DP(NK)*DXSQ/G
1441 !...INITIALIZE SOME VARIABLES TO BE USED LATER IN THE VERT ADVECTION SCHEME
1443 EXN(NK)=(P00/P0(NK))**(0.2854*(1.-0.28*QDT(NK)))
1444 THTAU(NK)=TU(NK)*EXN(NK)
1445 EXN(NK)=(P00/P0(NK))**(0.2854*(1.-0.28*Q0(NK)))
1446 THTA0(NK)=T0(NK)*EXN(NK)
1447 DDILFRC(NK) = 1./DILFRC(NK)
1450 ! IF (XTIME.LT.10.)THEN
1451 ! WRITE(98,1025)KLCL,ZLCL,DTLCL,LTOP,P0(LTOP),IFLAG,
1452 ! * TMIX-T00,PMIX,QMIX,ABE
1453 ! WRITE(98,1030)P0(LET)/100.,P0(LTOP)/100.,VMFLCL,PLCL/100.,
1457 !...COMPUTE CONVECTIVE TIME SCALE(TIMEC). THE MEAN WIND AT THE LCL
1458 !...AND MIDTROPOSPHERE IS USED.
1460 WSPD(KLCL)=SQRT(U0(KLCL)*U0(KLCL)+V0(KLCL)*V0(KLCL))
1461 WSPD(L5)=SQRT(U0(L5)*U0(L5)+V0(L5)*V0(L5))
1462 WSPD(LTOP)=SQRT(U0(LTOP)*U0(LTOP)+V0(LTOP)*V0(LTOP))
1463 VCONV=.5*(WSPD(KLCL)+WSPD(L5))
1464 !...for ETA model, DX is a function of location...
1465 ! TIMEC=DX(I,J)/VCONV
1468 TIMEC=AMAX1(1800.,TIMEC) ! 30 minutes >= TIMEC <= 60 minutes
1469 TIMEC=AMIN1(3600.,TIMEC)
1470 IF(ISHALL.EQ.1)TIMEC=2400. ! shallow convection TIMEC = 40 minutes
1474 !...COMPUTE WIND SHEAR AND PRECIPITATION EFFICIENCY.
1476 IF(WSPD(LTOP).GT.WSPD(KLCL))THEN
1481 VWS=(U0(LTOP)-U0(KLCL))*(U0(LTOP)-U0(KLCL))+(V0(LTOP)-V0(KLCL))* &
1483 VWS=1.E3*SHSIGN*SQRT(VWS)/(Z0(LTOP)-Z0(LCL))
1484 PEF=1.591+VWS*(-.639+VWS*(9.53E-2-VWS*4.96E-3))
1488 !...PRECIPITATION EFFICIENCY IS A FUNCTION OF THE HEIGHT OF CLOUD BASE.
1490 CBH=(ZLCL-Z0(1))*3.281E-3
1494 RCBH=.96729352+CBH*(-.70034167+CBH*(.162179896+CBH*(- &
1495 1.2569798E-2+CBH*(4.2772E-4-CBH*5.44E-6))))
1497 IF(CBH.GT.25)RCBH=2.4
1499 PEFCBH=AMIN1(PEFCBH,.9)
1501 !... MEAN PEF. IS USED TO COMPUTE RAINFALL.
1503 PEFF=.5*(PEF+PEFCBH)
1504 PEFF2 = PEFF ! JSK MODS
1506 ! WRITE(98,1035)PEF,PEFCBH,LC,LET,WKL,VWS
1507 WRITE(message,1035)PEF,PEFCBH,LC,LET,WKL,VWS
1508 CALL wrf_message( message )
1511 ! WRITE(98,1035)PEF,PEFCBH,LC,LET,WKL,VWS
1512 !*****************************************************************
1514 ! COMPUTE DOWNDRAFT PROPERTIES *
1516 !*****************************************************************
1520 devap:IF(ISHALL.EQ.1)THEN
1524 !...start downdraft about 150 mb above cloud base...
1526 ! KSTART=MAX0(KPBL,KLCL)
1527 ! KSTART=KPBL ! Changed 7/23/99
1528 KSTART=KPBL+1 ! Changed 7/23/99
1531 DPPP = P0(KSTART)-P0(NK)
1532 ! IF(DPPP.GT.200.E2)THEN
1533 IF(DPPP.GT.150.E2)THEN
1538 KLFS = MIN0(KLFS,LET-1)
1541 !...if LFS is not at least 50 mb above cloud base (implying that the
1542 !...level of equil temp, LET, is just above cloud base) do not allow a
1545 IF((P0(KSTART)-P0(LFS)).GT.50.E2)THEN
1546 THETED(LFS) = THETEE(LFS)
1549 !...call tpmix2dd to find wet-bulb temp, qv...
1551 call tpmix2dd(p0(lfs),theted(lfs),tz(lfs),qss,i,j)
1552 THTAD(LFS)=TZ(LFS)*(P00/P0(LFS))**(0.2854*(1.-0.28*QSS))
1554 !...TAKE A FIRST GUESS AT THE INITIAL DOWNDRAFT MASS FLUX...
1556 TVD(LFS)=TZ(LFS)*(1.+0.608*QSS)
1557 RDD=P0(LFS)/(R*TVD(LFS))
1562 RHBAR = RH(LFS)*DP(LFS)
1564 DO ND = LFS-1,KSTART,-1
1566 DER(ND)=DER(LFS)*EMS(ND)/EMS(LFS)
1568 DMF(ND)=DMF(ND1)+DER(ND)
1569 THETED(ND)=(THETED(ND1)*DMF(ND1)+THETEE(ND)*DER(ND))/DMF(ND)
1570 QD(ND)=(QD(ND1)*DMF(ND1)+Q0(ND)*DER(ND))/DMF(ND)
1572 RHBAR = RHBAR+RH(ND)*DP(ND)
1575 DMFFRC = 2.*(1.-RHBAR) ! Kain (2004) eq. 11
1577 !...Calculate melting effect
1578 !... first, compute total frozen precipitation generated...
1582 PPTMLT = PPTMLT+PPTICE(NK)
1585 !...For now, calculate melting effect as if DMF = -UMF at KLCL, i.e., as
1586 !...if DMFFRC=1. Otherwise, for small DMFFRC, DTMELT gets too large!
1588 DTMELT = RLF*PPTMLT/(CP*UMF(KLCL))
1592 LDT = MIN0(LFS-1,KSTART-1)
1594 call tpmix2dd(p0(kstart),theted(kstart),tz(kstart),qss,i,j)
1596 tz(kstart) = tz(kstart)-dtmelt
1597 ES=ALIQ*EXP((BLIQ*TZ(KSTART)-CLIQ)/(TZ(KSTART)-DLIQ))
1598 QSS=0.622*ES/(P0(KSTART)-ES)
1599 THETED(KSTART)=TZ(KSTART)*(1.E5/P0(KSTART))**(0.2854*(1.-0.28*QSS))* &
1600 EXP((3374.6525/TZ(KSTART)-2.5403)*QSS*(1.+0.81*QSS))
1602 LDT = MIN0(LFS-1,KSTART-1)
1605 THETED(ND) = THETED(KSTART)
1608 !...call tpmix2dd to find wet bulb temp, saturation mixing ratio...
1610 call tpmix2dd(p0(nd),theted(nd),tz(nd),qss,i,j)
1613 !...specify RH decrease of 20%/km in downdraft...
1615 RHH = 1.-0.2/1000.*(Z0(KSTART)-Z0(ND))
1617 !...adjust downdraft TEMP, Q to specified RH:
1620 DSSDT=(CLIQ-BLIQ*DLIQ)/((TZ(ND)-DLIQ)*(TZ(ND)-DLIQ))
1622 DTMP=RL*QSS*(1.-RHH)/(CP+RL*RHH*QSS*DSSDT)
1624 ES=RHH*ALIQ*EXP((BLIQ*T1RH-CLIQ)/(T1RH-DLIQ))
1625 QSRH=0.622*ES/(P0(ND)-ES)
1627 !...CHECK TO SEE IF MIXING RATIO AT SPECIFIED RH IS LESS THAN ACTUAL
1628 !...MIXING RATIO...IF SO, ADJUST TO GIVE ZERO EVAPORATION...
1630 IF(QSRH.LT.QD(ND))THEN
1632 T1RH=TZ(ND)+(QSS-QSRH)*RL/CP
1638 TVD(nd) = tz(nd)*(1.+0.608*qsd(nd))
1639 IF(TVD(ND).GT.TV0(ND).OR.ND.EQ.1)THEN
1644 IF((P0(LDB)-P0(LFS)) .gt. 50.E2)THEN ! minimum Downdraft depth!
1647 DDR(ND) = -DMF(KSTART)*DP(ND)/DPDD
1649 DMF(ND) = DMF(ND1)+DDR(ND)
1650 TDER=TDER+(QSD(nd)-QD(ND))*DDR(ND)
1652 THTAD(ND)=TZ(ND)*(P00/P0(ND))**(0.2854*(1.-0.28*QD(ND)))
1658 !...IF DOWNDRAFT DOES NOT EVAPORATE ANY WATER FOR SPECIFIED RELATIVE
1659 !...HUMIDITY, NO DOWNDRAFT IS ALLOWED...
1661 d_mf: IF(TDER.LT.1.)THEN
1663 !3004 FORMAT(' ','No Downdraft!; I=',I3,2X,'J=',I3,'ISHALL =',I2)
1681 DDINC = -DMFFRC*UMF(KLCL)/DMF(KSTART)
1683 IF(TDER*DDINC.GT.TRPPT)THEN
1688 DMF(NK)=DMF(NK)*DDINC
1689 DER(NK)=DER(NK)*DDINC
1690 DDR(NK)=DDR(NK)*DDINC
1696 ! write(98,*)'PRECIP EFFICIENCY =',PEFF
1697 write(message,*)'PRECIP EFFICIENCY =',PEFF
1698 CALL wrf_message(message)
1703 !...ADJUST UPDRAFT MASS FLUX, MASS DETRAINMENT RATE, AND LIQUID WATER AN
1704 ! DETRAINMENT RATES TO BE CONSISTENT WITH THE TRANSFER OF THE ESTIMATE
1705 ! FROM THE UPDRAFT TO THE DOWNDRAFT AT THE LFS...
1708 ! UMF(NK)=UMF(NK)*UPDINC
1709 ! UDR(NK)=UDR(NK)*UPDINC
1710 ! UER(NK)=UER(NK)*UPDINC
1711 ! PPTLIQ(NK)=PPTLIQ(NK)*UPDINC
1712 ! PPTICE(NK)=PPTICE(NK)*UPDINC
1713 ! DETLQ(NK)=DETLQ(NK)*UPDINC
1714 ! DETIC(NK)=DETIC(NK)*UPDINC
1717 !...ZERO OUT THE ARRAYS FOR DOWNDRAFT DATA AT LEVELS ABOVE AND BELOW THE
1747 !...SET LIMITS ON THE UPDRAFT AND DOWNDRAFT MASS FLUXES SO THAT THE INFLOW
1748 ! INTO CONVECTIVE DRAFTS FROM A GIVEN LAYER IS NO MORE THAN IS AVAILABLE
1749 ! IN THAT LAYER INITIALLY...
1754 IF((UER(NK)-DER(NK)).GT.1.e-3)THEN
1755 AINCM1=EMS(NK)/((UER(NK)-DER(NK))*TIMEC)
1756 AINCMX=AMIN1(AINCMX,AINCM1)
1760 IF(AINCMX.LT.AINC)AINC=AINCMX
1762 !...SAVE THE RELEVENT VARIABLES FOR A UNIT UPDRAFT AND DOWNDRAFT...THEY WILL
1763 !...BE ITERATIVELY ADJUSTED BY THE FACTOR AINC TO SATISFY THE STABILIZATION
1769 DETLQ2(NK)=DETLQ(NK)
1770 DETIC2(NK)=DETIC(NK)
1783 IF(ISHALL.EQ.1)THEN ! First for shallow convection
1785 ! No iteration for shallow convection; if turbulent kinetic energy (TKE) is available
1786 ! from a turbulence parameterization, scale cloud-base updraft mass flux as a function
1787 ! of TKE, but for now, just specify shallow-cloud mass flux using TKEMAX = 5...
1789 !...find the maximum TKE value between LC and KLCL...
1792 ! DO 173 K = LC,KLCL
1794 ! TKEMAX = AMAX1(TKEMAX,Q2(I,J,NK))
1796 ! TKEMAX = AMIN1(TKEMAX,10.)
1797 ! TKEMAX = AMAX1(TKEMAX,5.)
1799 !c...3_24_99...DPMIN was changed for shallow convection so that it is the
1800 !c... the same as for deep convection (5.E3). Since this doubles
1801 !c... (roughly) the value of DPTHMX, add a factor of 0.5 to calcu-
1802 !c... lation of EVAC...
1803 !c EVAC = TKEMAX*0.1
1804 EVAC = 0.5*TKEMAX*0.1
1805 ! AINC = 0.1*DPTHMX*DXIJ*DXIJ/(VMFLCL*G*TIMEC)
1806 ! AINC = EVAC*DPTHMX*DX(I,J)*DX(I,J)/(VMFLCL*G*TIMEC)
1807 AINC = EVAC*DPTHMX*DXSQ/(VMFLCL*G*TIMEC)
1811 UMF(NK)=UMF2(NK)*AINC
1812 DMF(NK)=DMF2(NK)*AINC
1813 DETLQ(NK)=DETLQ2(NK)*AINC
1814 DETIC(NK)=DETIC2(NK)*AINC
1815 UDR(NK)=UDR2(NK)*AINC
1816 UER(NK)=UER2(NK)*AINC
1817 DER(NK)=DER2(NK)*AINC
1818 DDR(NK)=DDR2(NK)*AINC
1820 ENDIF ! Otherwise for deep convection
1821 ! use iterative procedure to find mass fluxes...
1822 iter: DO NCOUNT=1,10
1824 !*****************************************************************
1826 ! COMPUTE PROPERTIES FOR COMPENSATIONAL SUBSIDENCE *
1828 !*****************************************************************
1830 !...DETERMINE OMEGA VALUE NECESSARY AT TOP AND BOTTOM OF EACH LAYER TO
1831 !...SATISFY MASS CONTINUITY...
1835 DOMGDP(NK)=-(UER(NK)-DER(NK)-UDR(NK)-DDR(NK))*EMSD(NK)
1837 OMG(NK)=OMG(NK-1)-DP(NK-1)*DOMGDP(NK-1)
1838 ABSOMG = ABS(OMG(NK))
1839 ABSOMGTC = ABSOMG*TIMEC
1840 FRDP = 0.75*DP(NK-1)
1841 IF(ABSOMGTC.GT.FRDP)THEN
1850 NSTEP=NINT(TIMEC/DTT+1)
1851 DTIME=TIMEC/FLOAT(NSTEP)
1852 FXM(NK)=OMG(NK)*DXSQ/G
1855 !...DO AN UPSTREAM/FORWARD-IN-TIME ADVECTION OF THETA, QV...
1859 !...ASSIGN THETA AND Q VALUES AT THE TOP AND BOTTOM OF EACH LAYER BASED ON
1860 !...SIGN OF OMEGA...
1869 IF(OMG(NK).LE.0.)THEN
1870 THFXIN(NK)=-FXM(NK)*THPA(NK-1)
1871 QFXIN(NK)=-FXM(NK)*QPA(NK-1)
1872 THFXOUT(NK-1)=THFXOUT(NK-1)+THFXIN(NK)
1873 QFXOUT(NK-1)=QFXOUT(NK-1)+QFXIN(NK)
1875 THFXOUT(NK)=FXM(NK)*THPA(NK)
1876 QFXOUT(NK)=FXM(NK)*QPA(NK)
1877 THFXIN(NK-1)=THFXIN(NK-1)+THFXOUT(NK)
1878 QFXIN(NK-1)=QFXIN(NK-1)+QFXOUT(NK)
1882 !...UPDATE THE THETA AND QV VALUES AT EACH LEVEL...
1885 THPA(NK)=THPA(NK)+(THFXIN(NK)+UDR(NK)*THTAU(NK)+DDR(NK)* &
1886 THTAD(NK)-THFXOUT(NK)-(UER(NK)-DER(NK))*THTA0(NK))* &
1888 QPA(NK)=QPA(NK)+(QFXIN(NK)+UDR(NK)*QDT(NK)+DDR(NK)*QD(NK)- &
1889 QFXOUT(NK)-(UER(NK)-DER(NK))*Q0(NK))*DTIME*EMSD(NK)
1897 !...CHECK TO SEE IF MIXING RATIO DIPS BELOW ZERO ANYWHERE; IF SO, BORROW
1898 !...MOISTURE FROM ADJACENT LAYERS TO BRING IT BACK UP ABOVE ZERO...
1901 IF(QG(NK).LT.0.)THEN
1902 IF(NK.EQ.1)THEN ! JSK MODS
1903 ! PRINT *,' PROBLEM WITH KF SCHEME: ' ! JSK MODS
1904 ! PRINT *,'QG = 0 AT THE SURFACE!!!!!!!' ! JSK MODS
1905 CALL wrf_error_fatal ( 'QG, QG(NK).LT.0') ! JSK MODS
1911 TMA=QG(NK1)*EMS(NK1)
1912 TMB=QG(NK-1)*EMS(NK-1)
1913 TMM=(QG(NK)-1.E-9)*EMS(NK )
1914 BCOEFF=-TMM/((TMA*TMA)/TMB+TMB)
1915 ACOEFF=BCOEFF*TMA/TMB
1919 QVDIFF=(QG(NK1)-TMA*EMSD(NK1))*100./QG(NK1)
1920 ! IF(ABS(QVDIFF).GT.1.)THEN
1921 ! PRINT *,'!!!WARNING!!! CLOUD BASE WATER VAPOR CHANGES BY ', &
1923 ! '% WHEN MOISTURE IS BORROWED TO PREVENT NEGATIVE ', &
1924 ! 'VALUES IN KAIN-FRITSCH'
1928 QG(NK1)=TMA*EMSD(NK1)
1929 QG(NK-1)=TMB*EMSD(NK-1)
1932 TOPOMG=(UDR(LTOP)-UER(LTOP))*DP(LTOP)*EMSD(LTOP)
1933 IF(ABS(TOPOMG-OMG(LTOP)).GT.1.E-3)THEN
1934 ! WRITE(99,*)'ERROR: MASS DOES NOT BALANCE IN KF SCHEME; &
1935 ! TOPOMG, OMG =',TOPOMG,OMG(LTOP)
1936 ! TOPOMG, OMG =',TOPOMG,OMG(LTOP)
1942 !...CONVERT THETA TO T...
1945 EXN(NK)=(P00/P0(NK))**(0.2854*(1.-0.28*QG(NK)))
1946 TG(NK)=THTAG(NK)/EXN(NK)
1947 TVG(NK)=TG(NK)*(1.+0.608*QG(NK))
1953 !*******************************************************************
1955 ! COMPUTE NEW CLOUD AND CHANGE IN AVAILABLE BUOYANT ENERGY. *
1957 !*******************************************************************
1959 !...THE FOLLOWING COMPUTATIONS ARE SIMILAR TO THAT FOR UPDRAFT
1965 !...FIND THE THERMODYNAMIC CHARACTERISTICS OF THE LAYER BY
1966 !...MASS-WEIGHTING THE CHARACTERISTICS OF THE INDIVIDUAL MODEL
1970 TMIX=TMIX+DP(NK)*TG(NK)
1971 QMIX=QMIX+DP(NK)*QG(NK)
1975 ES=ALIQ*EXP((TMIX*BLIQ-CLIQ)/(TMIX-DLIQ))
1976 QSS=0.622*ES/(PMIX-ES)
1978 !...REMOVE SUPERSATURATION FOR DIAGNOSTIC PURPOSES, IF NECESSARY...
1982 CPM=CP*(1.+0.887*QMIX)
1983 DSSDT=QSS*(CLIQ-BLIQ*DLIQ)/((TMIX-DLIQ)*(TMIX-DLIQ))
1984 DQ=(QMIX-QSS)/(1.+RL*DSSDT/CPM)
1990 EMIX=QMIX*PMIX/(0.622+QMIX)
1996 value=(indlu-1)*binc+astrt
1997 aintrp=(a1-value)/binc
1998 tlog=aintrp*alu(indlu+1)+(1-aintrp)*alu(indlu)
1999 TDPT=(CLIQ-DLIQ*TLOG)/(BLIQ-TLOG)
2000 TLCL=TDPT-(.212+1.571E-3*(TDPT-T00)-4.36E-4*(TMIX-T00))*(TMIX-TDPT)
2001 TLCL=AMIN1(TLCL,TMIX)
2003 TVLCL=TLCL*(1.+0.608*QMIX)
2004 ZLCL = ZMIX+(TLCL-TMIX)/GDRY
2007 IF(ZLCL.LE.Z0(NK))THEN
2012 DLP=(ZLCL-Z0(K))/(Z0(KLCL)-Z0(K))
2014 !...ESTIMATE ENVIRONMENTAL TEMPERATURE AND MIXING RATIO AT THE LCL...
2016 TENV=TG(K)+(TG(KLCL)-TG(K))*DLP
2017 QENV=QG(K)+(QG(KLCL)-QG(K))*DLP
2018 TVEN=TENV*(1.+0.608*QENV)
2019 PLCL=P0(K)+(P0(KLCL)-P0(K))*DLP
2020 THETEU(K)=TMIX*(1.E5/PMIX)**(0.2854*(1.-0.28*QMIX))* &
2021 EXP((3374.6525/TLCL-2.5403)*QMIX*(1.+0.81*QMIX))
2023 !...COMPUTE ADJUSTED ABE(ABEG).
2028 THETEU(NK1) = THETEU(NK)
2030 call tpmix2dd(p0(nk1),theteu(nk1),tgu(nk1),qgu(nk1),i,j)
2032 TVQU(NK1)=TGU(NK1)*(1.+0.608*QGU(NK1)-QLIQ(NK1)-QICE(NK1))
2035 DILBE=((TVLCL+TVQU(NK1))/(TVEN+TVG(NK1))-1.)*DZZ
2038 DILBE=((TVQU(NK)+TVQU(NK1))/(TVG(NK)+TVG(NK1))-1.)*DZZ
2040 IF(DILBE.GT.0.)ABEG=ABEG+DILBE*G
2042 !...DILUTE BY ENTRAINMENT BY THE RATE AS ORIGINAL UPDRAFT...
2044 CALL ENVIRTHT(P0(NK1),TG(NK1),QG(NK1),THTEEG(NK1),ALIQ,BLIQ,CLIQ,DLIQ)
2045 THETEU(NK1)=THETEU(NK1)*DDILFRC(NK1)+THTEEG(NK1)*(1.-DDILFRC(NK1))
2048 !...ASSUME AT LEAST 90% OF CAPE (ABE) IS REMOVED BY CONVECTION DURING
2049 !...THE PERIOD TIMEC...
2053 ! write(98,*)'TAU, I, J, =',NTSD,I,J
2054 ! WRITE(98,1060)FABE
2058 DABE=AMAX1(ABE-ABEG,0.1*ABE)
2060 IF(FABE.GT.1. .and. ISHALL.EQ.0)THEN
2061 ! WRITE(98,*)'UPDRAFT/DOWNDRAFT COUPLET INCREASES CAPE AT THIS
2062 ! *GRID POINT; NO CONVECTION ALLOWED!'
2066 IF(ABS(AINC-AINCOLD).LT.0.0001)THEN
2071 DFDA=(FABE-FABEOLD)/(AINC-AINCOLD)
2080 IF(AINC/AINCMX.GT.0.999.AND.FABE.GT.1.05-STAB)THEN
2082 ! write(98,*)'TAU, I, J, =',NTSD,I,J
2083 ! WRITE(98,1055)FABE
2087 IF((FABE.LE.1.05-STAB.AND.FABE.GE.0.95-STAB) .or. NCOUNT.EQ.10)THEN
2090 IF(NCOUNT.GT.10)THEN
2092 ! write(98,*)'TAU, I, J, =',NTSD,I,J
2093 ! WRITE(98,1060)FABE
2098 !...IF MORE THAN 10% OF THE ORIGINAL CAPE REMAINS, INCREASE THE CONVECTIVE
2099 !...MASS FLUX BY THE FACTOR AINC:
2104 IF(DABE.LT.1.e-4)THEN
2109 AINC=AINC*STAB*ABE/DABE
2112 ! AINC=AMIN1(AINCMX,AINC)
2113 AINC=AMIN1(AINCMX,AINC)
2114 !...IF AINC BECOMES VERY SMALL, EFFECTS OF CONVECTION ! JSK MODS
2115 !...WILL BE MINIMAL SO JUST IGNORE IT... ! JSK MODS
2116 IF(AINC.LT.0.05)then
2119 ! AINC=AMAX1(AINC,0.05) ! JSK MODS
2122 ! IF (XTIME.LT.10.)THEN
2123 ! WRITE(98,1080)LFS,LDB,LDT,TIMEC,TADVEC,NSTEP,NCOUNT,
2127 UMF(NK)=UMF2(NK)*AINC
2128 DMF(NK)=DMF2(NK)*AINC
2129 DETLQ(NK)=DETLQ2(NK)*AINC
2130 DETIC(NK)=DETIC2(NK)*AINC
2131 UDR(NK)=UDR2(NK)*AINC
2132 UER(NK)=UER2(NK)*AINC
2133 DER(NK)=DER2(NK)*AINC
2134 DDR(NK)=DDR2(NK)*AINC
2137 !...GO BACK UP FOR ANOTHER ITERATION...
2142 !...COMPUTE HYDROMETEOR TENDENCIES AS IS DONE FOR T, QV...
2144 !...FRC2 IS THE FRACTION OF TOTAL CONDENSATE ! PPT FB MODS
2145 !...GENERATED THAT GOES INTO PRECIPITIATION ! PPT FB MODS
2147 ! Redistribute hydormeteors according to the final mass-flux values:
2150 FRC2=PPTFLX/(CPR*AINC) ! PPT FB MODS
2159 RAINFB(NK)=PPTLIQ(NK)*AINC*FBFRC*FRC2 ! PPT FB MODS
2160 SNOWFB(NK)=PPTICE(NK)*AINC*FBFRC*FRC2 ! PPT FB MODS
2164 !...ASSIGN HYDROMETEORS CONCENTRATIONS AT THE TOP AND BOTTOM OF EACH LAYER
2165 !...BASED ON THE SIGN OF OMEGA...
2178 IF(OMG(NK).LE.0.)THEN
2179 QLFXIN(NK)=-FXM(NK)*QLPA(NK-1)
2180 QIFXIN(NK)=-FXM(NK)*QIPA(NK-1)
2181 QRFXIN(NK)=-FXM(NK)*QRPA(NK-1)
2182 QSFXIN(NK)=-FXM(NK)*QSPA(NK-1)
2183 QLFXOUT(NK-1)=QLFXOUT(NK-1)+QLFXIN(NK)
2184 QIFXOUT(NK-1)=QIFXOUT(NK-1)+QIFXIN(NK)
2185 QRFXOUT(NK-1)=QRFXOUT(NK-1)+QRFXIN(NK)
2186 QSFXOUT(NK-1)=QSFXOUT(NK-1)+QSFXIN(NK)
2188 QLFXOUT(NK)=FXM(NK)*QLPA(NK)
2189 QIFXOUT(NK)=FXM(NK)*QIPA(NK)
2190 QRFXOUT(NK)=FXM(NK)*QRPA(NK)
2191 QSFXOUT(NK)=FXM(NK)*QSPA(NK)
2192 QLFXIN(NK-1)=QLFXIN(NK-1)+QLFXOUT(NK)
2193 QIFXIN(NK-1)=QIFXIN(NK-1)+QIFXOUT(NK)
2194 QRFXIN(NK-1)=QRFXIN(NK-1)+QRFXOUT(NK)
2195 QSFXIN(NK-1)=QSFXIN(NK-1)+QSFXOUT(NK)
2199 !...UPDATE THE HYDROMETEOR CONCENTRATION VALUES AT EACH LEVEL...
2202 QLPA(NK)=QLPA(NK)+(QLFXIN(NK)+DETLQ(NK)-QLFXOUT(NK))*DTIME*EMSD(NK)
2203 QIPA(NK)=QIPA(NK)+(QIFXIN(NK)+DETIC(NK)-QIFXOUT(NK))*DTIME*EMSD(NK)
2204 QRPA(NK)=QRPA(NK)+(QRFXIN(NK)-QRFXOUT(NK)+RAINFB(NK))*DTIME*EMSD(NK) ! PPT FB MODS
2205 QSPA(NK)=QSPA(NK)+(QSFXIN(NK)-QSFXOUT(NK)+SNOWFB(NK))*DTIME*EMSD(NK) ! PPT FB MODS
2215 !...CLEAN THINGS UP, CALCULATE CONVECTIVE FEEDBACK TENDENCIES FOR THIS
2218 ! IF (XTIME.LT.10.)THEN
2219 ! WRITE(98,1080)LFS,LDB,LDT,TIMEC,TADVEC,NSTEP,NCOUNT,FABE,AINC
2222 ! WRITE(98,1080)LFS,LDB,LDT,TIMEC,TADVEC,NSTEP,NCOUNT,FABE,AINC
2223 WRITE(message,1080)LFS,LDB,LDT,TIMEC,TADVEC,NSTEP,NCOUNT,FABE,AINC
2224 CALL wrf_message(message)
2228 !...SEND FINAL PARAMETERIZED VALUES TO OUTPUT FILES...
2232 ! if(I.eq.16 .and. J.eq.41)then
2233 ! IF(ISTOP.EQ.1)THEN
2235 ! write(98,*)'At t(h), I, J =',float(NTSD)*72./3600.,I,J
2236 write(message,*)'P(LC), DTP, WKL, WKLCL =',p0(LC)/100., &
2237 TLCL+DTLCL+dtrh-TENV,WKL,WKLCL
2238 call wrf_message(message)
2239 write(message,*)'TLCL, DTLCL, DTRH, TENV =',TLCL,DTLCL, &
2241 call wrf_message(message)
2242 WRITE(message,1025)KLCL,ZLCL,DTLCL,LTOP,P0(LTOP),IFLAG, &
2243 TMIX-T00,PMIX,QMIX,ABE
2244 call wrf_message(message)
2245 WRITE(message,1030)P0(LET)/100.,P0(LTOP)/100.,VMFLCL,PLCL/100., &
2247 call wrf_message(message)
2248 WRITE(message,1035)PEF,PEFCBH,LC,LET,WKL,VWS
2249 call wrf_message(message)
2250 write(message,*)'PRECIP EFFICIENCY =',PEFF
2251 call wrf_message(message)
2252 WRITE(message,1080)LFS,LDB,LDT,TIMEC,TADVEC,NSTEP,NCOUNT,FABE,AINC
2253 call wrf_message(message)
2256 WRITE(message,1070)' P ',' DP ',' DT K/D ',' DR K/D ',' OMG ', &
2257 ' DOMGDP ',' UMF ',' UER ',' UDR ',' DMF ',' DER ' &
2258 ,' DDR ',' EMS ',' W0 ',' DETLQ ',' DETIC '
2259 call wrf_message(message)
2260 write(message,*)'just before DO 300...'
2261 call wrf_message(message)
2265 DTT=(TG(K)-T0(K))*86400./TIMEC
2267 DR=-(QG(K)-Q0(K))*RL*86400./(TIMEC*CP)
2268 UDFRC=UDR(K)*TIMEC*EMSD(K)
2269 UEFRC=UER(K)*TIMEC*EMSD(K)
2270 DDFRC=DDR(K)*TIMEC*EMSD(K)
2271 DEFRC=-DER(K)*TIMEC*EMSD(K)
2272 WRITE(message,1075)P0(K)/100.,DP(K)/100.,DTT,DR,OMG(K),DOMGDP(K)*1.E4, &
2273 UMF(K)/1.E6,UEFRC,UDFRC,DMF(K)/1.E6,DEFRC,DDFRC,EMS(K)/1.E11, &
2274 W0AVG1D(K)*1.E2,DETLQ(K)*TIMEC*EMSD(K)*1.E3,DETIC(K)* &
2276 call wrf_message(message)
2278 WRITE(message,1085)'K','P','Z','T0','TG','DT','TU','TD','Q0','QG', &
2279 'DQ','QU','QD','QLG','QIG','QRG','QSG','RH0','RHG'
2280 call wrf_message(message)
2285 IF(K.LT.LC.OR.K.GT.LTOP)TUC=0.
2287 IF((K.LT.LDB.OR.K.GT.LDT).AND.K.NE.LFS)TDC=0.
2288 IF(T0(K).LT.T00)THEN
2289 ES=ALIQ*EXP((BLIQ*TG(K)-CLIQ)/(TG(K)-DLIQ))
2291 ES=ALIQ*EXP((BLIQ*TG(K)-CLIQ)/(TG(K)-DLIQ))
2293 QGS=ES*0.622/(P0(K)-ES)
2296 WRITE(message,1090)K,P0(K)/100.,Z0(K),T0(K)-T00,TG(K)-T00,DTT,TUC, &
2297 TDC,Q0(K)*1000.,QG(K)*1000.,(QG(K)-Q0(K))*1000.,QU(K)* &
2298 1000.,QD(K)*1000.,QLG(K)*1000.,QIG(K)*1000.,QRG(K)*1000., &
2299 QSG(K)*1000.,RH0,RHG
2300 call wrf_message(message)
2303 !...IF CALCULATIONS ABOVE SHOW AN ERROR IN THE MASS BUDGET, PRINT OUT A
2304 !...TO BE USED LATER FOR DIAGNOSTIC PURPOSES, THEN ABORT RUN...
2306 ! IF(ISTOP.EQ.1 .or. ISHALL.EQ.1)THEN
2308 ! IF(ISHALL.NE.1)THEN
2309 ! write(98,4421)i,j,iyr,imo,idy,ihr,imn
2310 ! write(98)i,j,iyr,imo,idy,ihr,imn,kl
2316 write(98,4455) p0(k)/100.,t0(k)-273.16,q0(k)*1000., &
2317 u0(k),v0(k),W0AVG1D(K),dp(k),tke(k)
2318 ! write(98) p0,t0,q0,u0,v0,w0,dp,tke
2319 ! WRITE(98,1115)Z0(K),P0(K)/100.,T0(K)-273.16,Q0(K)*1000.,
2320 ! * U0(K),V0(K),DP(K)/100.,W0AVG(I,J,K)
2323 CALL wrf_error_fatal ( 'KAIN-FRITSCH, istop=1, diags' )
2328 CNDTNF=(1.-EQFRC(LFS))*(QLIQ(LFS)+QICE(LFS))*DMF(LFS)
2329 PRATEC(I,J)=PPTFLX*(1.-FBFRC)/DXSQ
2330 RAINCV(I,J)=DT*PRATEC(I,J) ! PPT FB MODS
2331 ! RAINCV(I,J)=.1*.5*DT*PPTFLX/DXSQ ! PPT FB MODS
2332 ! RNC=0.1*TIMEC*PPTFLX/DXSQ
2334 IF(ISHALL.EQ.0.AND.IPRNT)write (98,909)I,J,RNC
2336 ! WRITE(98,1095)CPR*AINC,TDER+PPTFLX+CNDTNF
2338 ! EVALUATE MOISTURE BUDGET...
2346 QINIT=QINIT+Q0(NK)*EMS(NK)
2347 QFNL=QFNL+QG(NK)*EMS(NK)
2348 QFNL=QFNL+(QLG(NK)+QIG(NK)+QRG(NK)+QSG(NK))*EMS(NK)
2350 QFNL=QFNL+PPTFLX*TIMEC*(1.-FBFRC) ! PPT FB MODS
2351 ! QFNL=QFNL+PPTFLX*TIMEC ! PPT FB MODS
2352 ERR2=(QFNL-QINIT)*100./QINIT
2353 IF(IPRNT)WRITE(98,1110)QINIT,QFNL,ERR2
2354 IF(ABS(ERR2).GT.0.05 .AND. ISTOP.EQ.0)THEN
2355 ! write(99,*)'!!!!!!!! MOISTURE BUDGET ERROR IN KFPARA !!!'
2356 ! WRITE(99,1110)QINIT,QFNL,ERR2
2363 ! write(99,4455) p0(k)/100.,t0(k)-273.16,q0(k)*1000., &
2364 ! u0(k),v0(k),W0AVG1D(K),dp(k)
2365 ! write(98) p0,t0,q0,u0,v0,w0,dp,tke
2366 ! WRITE(98,1115)P0(K)/100.,T0(K)-273.16,Q0(K)*1000., &
2367 ! U0(K),V0(K),W0AVG1D(K),dp(k)/100.,tke(k)
2368 WRITE(98,4456)P0(K)/100.,T0(K)-273.16,Q0(K)*1000., &
2369 U0(K),V0(K),W0AVG1D(K),dp(k)/100.,tke(k)
2376 1115 FORMAT (2X,F7.2,2X,F5.1,2X,F6.3,2(2X,F5.1),2X,F7.2,2X,F7.4)
2378 IF(PPTFLX.GT.0.)THEN
2379 RELERR=ERR2*QINIT/(PPTFLX*TIMEC)
2384 WRITE(98,1120)RELERR
2385 WRITE(98,*)'TDER, CPR, TRPPT =', &
2386 TDER,CPR*AINC,TRPPT*AINC
2389 !...FEEDBACK TO RESOLVABLE SCALE TENDENCIES.
2391 !...IF THE ADVECTIVE TIME PERIOD (TADVEC) IS LESS THAN SPECIFIED MINIMUM
2392 !...TIMEC, ALLOW FEEDBACK TO OCCUR ONLY DURING TADVEC...
2394 IF(TADVEC.LT.TIMEC)NIC=NINT(TADVEC/DT)
2395 NCA(I,J) = REAL(NIC)*DT
2403 ! IF(IMOIST(INEST).NE.2)THEN
2405 !...IF HYDROMETEORS ARE NOT ALLOWED, THEY MUST BE EVAPORATED OR SUBLIMATED
2406 !...AND FED BACK AS VAPOR, ALONG WITH ASSOCIATED CHANGES IN TEMPERATURE.
2407 !...NOTE: THIS WILL INTRODUCE CHANGES IN THE CONVECTIVE TEMPERATURE AND
2408 !...WATER VAPOR FEEDBACK TENDENCIES AND MAY LEAD TO SUPERSATURATED VALUE
2411 ! RLC=XLV0-XLV1*TG(K)
2412 ! RLS=XLS0-XLS1*TG(K)
2413 ! CPM=CP*(1.+0.887*QG(K))
2414 ! TG(K)=TG(K)-(RLC*(QLG(K)+QRG(K))+RLS*(QIG(K)+QSG(K)))/CPM
2415 ! QG(K)=QG(K)+(QLG(K)+QRG(K)+QIG(K)+QSG(K))
2422 !...IF ICE PHASE IS NOT ALLOWED, MELT ALL FROZEN HYDROMETEORS...
2424 IF(.NOT. F_QI .and. warm_rain)THEN
2426 CPM=CP*(1.+0.887*QG(K))
2427 TG(K)=TG(K)-(QIG(K)+QSG(K))*RLF/CPM
2428 DQCDT(K)=(QLG(K)+QIG(K)-QL0(K)-QI0(K))/TIMEC
2430 DQRDT(K)=(QRG(K)+QSG(K)-QR0(K)-QS0(K))/TIMEC
2432 ELSEIF(.NOT. F_QI .and. .not. warm_rain)THEN
2434 !...IF ICE PHASE IS ALLOWED, BUT MIXED PHASE IS NOT, MELT FROZEN HYDROMETEORS
2435 !...BELOW THE MELTING LEVEL, FREEZE LIQUID WATER ABOVE THE MELTING LEVEL
2437 CPM=CP*(1.+0.887*QG(K))
2439 TG(K)=TG(K)-(QIG(K)+QSG(K))*RLF/CPM
2441 TG(K)=TG(K)+(QLG(K)+QRG(K))*RLF/CPM
2443 DQCDT(K)=(QLG(K)+QIG(K)-QL0(K)-QI0(K))/TIMEC
2445 DQRDT(K)=(QRG(K)+QSG(K)-QR0(K)-QS0(K))/TIMEC
2449 !...IF MIXED PHASE HYDROMETEORS ARE ALLOWED, FEED BACK CONVECTIVE TENDENCIES
2450 !...OF HYDROMETEORS DIRECTLY...
2452 DQCDT(K)=(QLG(K)-QL0(K))/TIMEC
2453 DQIDT(K)=(QIG(K)-QI0(K))/TIMEC
2454 DQRDT(K)=(QRG(K)-QR0(K))/TIMEC
2456 DQSDT(K)=(QSG(K)-QS0(K))/TIMEC
2458 DQIDT(K)=DQIDT(K)+(QSG(K)-QS0(K))/TIMEC
2461 ! PRINT *,'THIS COMBINATION OF IMOIST, IEXICE, IICE NOT ALLOWED!'
2462 CALL wrf_error_fatal ( 'KAIN-FRITSCH, THIS COMBINATION OF IMOIST, IEXICE, IICE NOT ALLOWED' )
2464 DTDT(K)=(TG(K)-T0(K))/TIMEC
2465 DQDT(K)=(QG(K)-Q0(K))/TIMEC
2467 PRATEC(I,J)=PPTFLX*(1.-FBFRC)/DXSQ
2468 RAINCV(I,J)=DT*PRATEC(I,J)
2469 ! RAINCV(I,J)=.1*.5*DT*PPTFLX/DXSQ ! PPT FB MODS
2470 ! RNC=0.1*TIMEC*PPTFLX/DXSQ
2472 909 FORMAT('AT I, J =',i3,1x,i3,' CONVECTIVE RAINFALL =',F8.4,' mm')
2473 ! write (98,909)I,J,RNC
2474 ! write (6,909)I,J,RNC
2475 ! WRITE(98,*)'at NTSD =',NTSD,',No. of KF points activated =',
2478 1000 FORMAT(' ',10A8)
2479 1005 FORMAT(' ',F6.0,2X,F6.4,2X,F7.3,1X,F6.4,2X,4(F6.3,2X),2(F7.3,1X))
2480 1010 FORMAT(' ',' VERTICAL VELOCITY IS NEGATIVE AT ',F4.0,' MB')
2481 1015 FORMAT(' ','ALL REMAINING MASS DETRAINS BELOW ',F4.0,' MB')
2482 1025 FORMAT(5X,' KLCL=',I2,' ZLCL=',F7.1,'M', &
2483 ' DTLCL=',F5.2,' LTOP=',I2,' P0(LTOP)=',-2PF5.1,'MB FRZ LV=', &
2484 I2,' TMIX=',0PF4.1,1X,'PMIX=',-2PF6.1,' QMIX=',3PF5.1, &
2486 1030 FORMAT(' ',' P0(LET) = ',F6.1,' P0(LTOP) = ',F6.1,' VMFLCL =', &
2487 E12.3,' PLCL =',F6.1,' WLCL =',F6.3,' CLDHGT =', &
2489 1035 FORMAT(1X,'PEF(WS)=',F4.2,'(CB)=',F4.2,'LC,LET=',2I3,'WKL=' &
2491 !1055 FORMAT('*** DEGREE OF STABILIZATION =',F5.3, &
2492 ! ', NO MORE MASS FLUX IS ALLOWED!')
2493 !1060 FORMAT(' ITERATION DOES NOT CONVERGE TO GIVE THE SPECIFIED &
2494 ! &DEGREE OF STABILIZATION! FABE= ',F6.4)
2496 1075 FORMAT (F8.2,3(F8.2),2(F8.3),F8.2,2F8.3,F8.2,6F8.3)
2497 1080 FORMAT(2X,'LFS,LDB,LDT =',3I3,' TIMEC, TADVEC, NSTEP=', &
2498 2(1X,F5.0),I3,'NCOUNT, FABE, AINC=',I2,1X,F5.3,F6.2)
2499 1085 FORMAT (A3,16A7,2A8)
2500 1090 FORMAT (I3,F7.2,F7.0,10F7.2,4F7.3,2F8.3)
2501 1095 FORMAT(' ',' PPT PRODUCTION RATE= ',F10.0,' TOTAL EVAP+PPT= ',F10.0)
2502 1105 FORMAT(' ','NET LATENT HEAT RELEASE =',E12.5,' ACTUAL HEATING =',&
2503 E12.5,' J/KG-S, DIFFERENCE = ',F9.3,'%')
2504 1110 FORMAT(' ','INITIAL WATER =',E12.5,' FINAL WATER =',E12.5, &
2505 ' TOTAL WATER CHANGE =',F8.2,'%')
2506 ! 1115 FORMAT (2X,F6.0,2X,F7.2,2X,F5.1,2X,F6.3,2(2X,F5.1),2X,F7.2,2X,F7.4)
2507 1120 FORMAT(' ','MOISTURE ERROR AS FUNCTION OF TOTAL PPT =',F9.3,'%')
2509 !-----------------------------------------------------------------------
2510 !--------------SAVE CLOUD TOP AND BOTTOM FOR RADIATION------------------
2511 !-----------------------------------------------------------------------
2513 CUTOP(I,J)=REAL(LTOP)
2514 CUBOT(I,J)=REAL(LCL)
2516 !-----------------------------------------------------------------------
2517 END SUBROUTINE KF_eta_PARA
2518 !********************************************************************
2519 ! ***********************************************************************
2520 SUBROUTINE TPMIX2(p,thes,tu,qu,qliq,qice,qnewlq,qnewic,XLV1,XLV0)
2522 ! Lookup table variables:
2523 ! INTEGER, PARAMETER :: (KFNT=250,KFNP=220)
2524 ! REAL, SAVE, DIMENSION(1:KFNT,1:KFNP) :: TTAB,QSTAB
2525 ! REAL, SAVE, DIMENSION(1:KFNP) :: THE0K
2526 ! REAL, SAVE, DIMENSION(1:200) :: ALU
2527 ! REAL, SAVE :: RDPR,RDTHK,PLUTOP
2528 ! End of Lookup table variables:
2529 !-----------------------------------------------------------------------
2531 !-----------------------------------------------------------------------
2532 REAL, INTENT(IN ) :: P,THES,XLV1,XLV0
2533 REAL, INTENT(OUT ) :: QNEWLQ,QNEWIC
2534 REAL, INTENT(INOUT) :: TU,QU,QLIQ,QICE
2535 REAL :: TP,QQ,BTH,TTH,PP,T00,T10,T01,T11,Q00,Q10,Q01,Q11, &
2536 TEMP,QS,QNEW,DQ,QTOT,RLL,CPP
2537 INTEGER :: IPTB,ITHTB
2538 !-----------------------------------------------------------------------
2540 !c******** LOOKUP TABLE VARIABLES... ****************************
2541 ! parameter(kfnt=250,kfnp=220)
2543 ! COMMON/KFLUT/ ttab(kfnt,kfnp),qstab(kfnt,kfnp),the0k(kfnp),
2544 ! * alu(200),rdpr,rdthk,plutop
2545 !C***************************************************************
2547 !c***********************************************************************
2548 !c scaling pressure and tt table index
2549 !c***********************************************************************
2556 !***********************************************************************
2557 ! base and scaling factor for the
2558 !***********************************************************************
2560 ! scaling the and tt table index
2561 bth=(the0k(iptb+1)-the0k(iptb))*qq+the0k(iptb)
2562 tth=(thes-bth)*rdthk
2565 IF(IPTB.GE.220 .OR. IPTB.LE.1 .OR. ITHTB.GE.250 .OR. ITHTB.LE.1)THEN
2566 write(98,*)'**** OUT OF BOUNDS *********'
2570 t00=ttab(ithtb ,iptb )
2571 t10=ttab(ithtb+1,iptb )
2572 t01=ttab(ithtb ,iptb+1)
2573 t11=ttab(ithtb+1,iptb+1)
2575 q00=qstab(ithtb ,iptb )
2576 q10=qstab(ithtb+1,iptb )
2577 q01=qstab(ithtb ,iptb+1)
2578 q11=qstab(ithtb+1,iptb+1)
2580 !***********************************************************************
2581 ! parcel temperature
2582 !***********************************************************************
2584 temp=(t00+(t10-t00)*pp+(t01-t00)*qq+(t00-t10-t01+t11)*pp*qq)
2586 qs=(q00+(q10-q00)*pp+(q01-q00)*qq+(q00-q10-q01+q11)*pp*qq)
2594 ! IF THE PARCEL IS SUBSATURATED, TEMPERATURE AND MIXING RATIO MUST BE
2595 ! ADJUSTED...IF LIQUID WATER IS PRESENT, IT IS ALLOWED TO EVAPORATE
2600 ! IF THERE IS ENOUGH LIQUID OR ICE TO SATURATE THE PARCEL, TEMP STAYS AT ITS
2601 ! WET BULB VALUE, VAPOR MIXING RATIO IS AT SATURATED LEVEL, AND THE MIXING
2602 ! RATIOS OF LIQUID AND ICE ARE ADJUSTED TO MAKE UP THE ORIGINAL SATURATION
2603 ! DEFICIT... OTHERWISE, ANY AVAILABLE LIQ OR ICE VAPORIZES AND APPROPRIATE
2604 ! ADJUSTMENTS TO PARCEL TEMP; VAPOR, LIQUID, AND ICE MIXING RATIOS ARE MADE.
2606 !...subsaturated values only occur in calculations involving various mixtures of
2607 !...updraft and environmental air for estimation of entrainment and detrainment.
2608 !...For these purposes, assume that reasonable estimates can be given using
2609 !...liquid water saturation calculations only - i.e., ignore the effect of the
2610 !...ice phase in this process only...will not affect conservative properties...
2613 qliq=qliq-dq*qliq/(qtot+1.e-10)
2614 qice=qice-dq*qice/(qtot+1.e-10)
2618 CPP=1004.5*(1.+0.89*QU)
2619 IF(QTOT.LT.1.E-10)THEN
2621 !...IF NO LIQUID WATER OR ICE IS AVAILABLE, TEMPERATURE IS GIVEN BY:
2622 TEMP=TEMP+RLL*(DQ/(1.+DQ))/CPP
2625 !...IF SOME LIQ WATER/ICE IS AVAILABLE, BUT NOT ENOUGH TO ACHIEVE SATURATION,
2626 ! THE TEMPERATURE IS GIVEN BY:
2628 TEMP=TEMP+RLL*((DQ-QTOT)/(1+DQ-QTOT))/CPP
2640 END SUBROUTINE TPMIX2
2641 !******************************************************************************
2642 SUBROUTINE DTFRZNEW(TU,P,THTEU,QU,QFRZ,QICE,ALIQ,BLIQ,CLIQ,DLIQ)
2643 !-----------------------------------------------------------------------
2645 !-----------------------------------------------------------------------
2646 REAL, INTENT(IN ) :: P,QFRZ,ALIQ,BLIQ,CLIQ,DLIQ
2647 REAL, INTENT(INOUT) :: TU,THTEU,QU,QICE
2648 REAL :: RLC,RLS,RLF,CPP,A,DTFRZ,ES,QS,DQEVAP,PII
2649 !-----------------------------------------------------------------------
2651 !...ALLOW THE FREEZING OF LIQUID WATER IN THE UPDRAFT TO PROCEED AS AN
2652 !...APPROXIMATELY LINEAR FUNCTION OF TEMPERATURE IN THE TEMPERATURE RANGE
2653 !...TTFRZ TO TBFRZ...
2654 !...FOR COLDER TEMPERATURES, FREEZE ALL LIQUID WATER...
2655 !...THERMODYNAMIC PROPERTIES ARE STILL CALCULATED WITH RESPECT TO LIQUID WATER
2656 !...TO ALLOW THE USE OF LOOKUP TABLE TO EXTRACT TMP FROM THETAE...
2658 RLC=2.5E6-2369.276*(TU-273.16)
2659 RLS=2833922.-259.532*(TU-273.16)
2661 CPP=1004.5*(1.+0.89*QU)
2663 ! A = D(es)/DT IS THAT CALCULATED FROM BUCK (1981) EMPERICAL FORMULAS
2664 ! FOR SATURATION VAPOR PRESSURE...
2666 A=(CLIQ-BLIQ*DLIQ)/((TU-DLIQ)*(TU-DLIQ))
2667 DTFRZ = RLF*QFRZ/(CPP+RLS*QU*A)
2670 ES = ALIQ*EXP((BLIQ*TU-CLIQ)/(TU-DLIQ))
2671 QS = ES*0.622/(P-ES)
2673 !...FREEZING WARMS THE AIR AND IT BECOMES UNSATURATED...ASSUME THAT SOME OF THE
2674 !...LIQUID WATER THAT IS AVAILABLE FOR FREEZING EVAPORATES TO MAINTAIN SATURA-
2675 !...TION...SINCE THIS WATER HAS ALREADY BEEN TRANSFERRED TO THE ICE CATEGORY,
2676 !...SUBTRACT IT FROM ICE CONCENTRATION, THEN SET UPDRAFT MIXING RATIO AT THE NEW
2677 !...TEMPERATURE TO THE SATURATION VALUE...
2682 PII=(1.E5/P)**(0.2854*(1.-0.28*QU))
2683 THTEU=TU*PII*EXP((3374.6525/TU-2.5403)*QU*(1.+0.81*QU))
2685 END SUBROUTINE DTFRZNEW
2686 ! --------------------------------------------------------------------------------
2688 SUBROUTINE CONDLOAD(QLIQ,QICE,WTW,DZ,BOTERM,ENTERM,RATE,QNEWLQ, &
2689 QNEWIC,QLQOUT,QICOUT,G)
2691 !-----------------------------------------------------------------------
2693 !-----------------------------------------------------------------------
2694 ! 9/18/88...THIS PRECIPITATION FALLOUT SCHEME IS BASED ON THE SCHEME US
2695 ! BY OGURA AND CHO (1973). LIQUID WATER FALLOUT FROM A PARCEL IS CAL-
2696 ! CULATED USING THE EQUATION DQ=-RATE*Q*DT, BUT TO SIMULATE A QUASI-
2697 ! CONTINUOUS PROCESS, AND TO ELIMINATE A DEPENDENCY ON VERTICAL
2698 ! RESOLUTION THIS IS EXPRESSED AS Q=Q*EXP(-RATE*DZ).
2700 REAL, INTENT(IN ) :: G
2701 REAL, INTENT(IN ) :: DZ,BOTERM,ENTERM,RATE
2702 REAL, INTENT(INOUT) :: QLQOUT,QICOUT,WTW,QLIQ,QICE,QNEWLQ,QNEWIC
2703 REAL :: QTOT,QNEW,QEST,G1,WAVG,CONV,RATIO3,OLDQ,RATIO4,DQ,PPTDRG
2708 ! ESTIMATE THE VERTICAL VELOCITY SO THAT AN AVERAGE VERTICAL VELOCITY
2709 ! BE CALCULATED TO ESTIMATE THE TIME REQUIRED FOR ASCENT BETWEEN MODEL
2712 QEST=0.5*(QTOT+QNEW)
2713 G1=WTW+BOTERM-ENTERM-2.*G*DZ*QEST/1.5
2715 WAVG=0.5*(SQRT(WTW)+SQRT(G1))
2716 CONV=RATE*DZ/WAVG ! KF90 Eq. 9
2718 ! RATIO3 IS THE FRACTION OF LIQUID WATER IN FRESH CONDENSATE, RATIO4 IS
2719 ! THE FRACTION OF LIQUID WATER IN THE TOTAL AMOUNT OF CONDENSATE INVOLV
2720 ! IN THE PRECIPITATION PROCESS - NOTE THAT ONLY 60% OF THE FRESH CONDEN
2721 ! SATE IS IS ALLOWED TO PARTICIPATE IN THE CONVERSION PROCESS...
2723 RATIO3=QNEWLQ/(QNEW+1.E-8)
2727 RATIO4=(0.6*QNEWLQ+QLIQ)/(QTOT+1.E-8)
2728 QTOT=QTOT*EXP(-CONV) ! KF90 Eq. 9
2730 ! DETERMINE THE AMOUNT OF PRECIPITATION THAT FALLS OUT OF THE UPDRAFT
2731 ! PARCEL AT THIS LEVEL...
2735 QICOUT=(1.-RATIO4)*DQ
2737 ! ESTIMATE THE MEAN LOAD OF CONDENSATE ON THE UPDRAFT IN THE LAYER, CAL
2738 ! LATE VERTICAL VELOCITY
2740 PPTDRG=0.5*(OLDQ+QTOT-0.2*QNEW)
2741 WTW=WTW+BOTERM-ENTERM-2.*G*DZ*PPTDRG/1.5
2742 IF(ABS(WTW).LT.1.E-4)WTW=1.E-4
2744 ! DETERMINE THE NEW LIQUID WATER AND ICE CONCENTRATIONS INCLUDING LOSSE
2745 ! DUE TO PRECIPITATION AND GAINS FROM CONDENSATION...
2747 QLIQ=RATIO4*QTOT+RATIO3*0.4*QNEW
2748 QICE=(1.-RATIO4)*QTOT+(1.-RATIO3)*0.4*QNEW
2752 END SUBROUTINE CONDLOAD
2754 ! ----------------------------------------------------------------------
2755 SUBROUTINE PROF5(EQ,EE,UD)
2757 !***********************************************************************
2758 !***** GAUSSIAN TYPE MIXING PROFILE....******************************
2759 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2760 ! THIS SUBROUTINE INTEGRATES THE AREA UNDER THE CURVE IN THE GAUSSIAN
2761 ! DISTRIBUTION...THE NUMERICAL APPROXIMATION TO THE INTEGRAL IS TAKEN FROM
2762 ! "HANDBOOK OF MATHEMATICAL FUNCTIONS WITH FORMULAS, GRAPHS AND MATHEMATICS TABLES"
2763 ! ED. BY ABRAMOWITZ AND STEGUN, NATL BUREAU OF STANDARDS APPLIED
2764 ! MATHEMATICS SERIES. JUNE, 1964., MAY, 1968.
2767 ! Solves for KF90 Eq. 2
2769 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2770 !-----------------------------------------------------------------------
2772 !-----------------------------------------------------------------------
2773 REAL, INTENT(IN ) :: EQ
2774 REAL, INTENT(INOUT) :: EE,UD
2775 REAL :: SQRT2P,A1,A2,A3,P,SIGMA,FE,X,Y,EY,E45,T1,T2,C1,C2
2777 DATA SQRT2P,A1,A2,A3,P,SIGMA,FE/2.506628,0.4361836,-0.1201676, &
2778 0.9372980,0.33267,0.166666667,0.202765151/
2785 C1=A1*T1+A2*T1*T1+A3*T1*T1*T1
2786 C2=A1*T2+A2*T2*T2+A3*T2*T2*T2
2788 EE=SIGMA*(0.5*(SQRT2P-E45*C1-EY*C2)+SIGMA*(E45-EY))-E45*EQ*EQ/2.
2789 UD=SIGMA*(0.5*(EY*C2-E45*C1)+SIGMA*(E45-EY))-E45*(0.5+EQ*EQ/2.- &
2792 EE=SIGMA*(0.5*(EY*C2-E45*C1)+SIGMA*(E45-EY))-E45*EQ*EQ/2.
2793 UD=SIGMA*(0.5*(SQRT2P-E45*C1-EY*C2)+SIGMA*(E45-EY))-E45*(0.5+EQ* &
2799 END SUBROUTINE PROF5
2801 ! ------------------------------------------------------------------------
2802 SUBROUTINE TPMIX2DD(p,thes,ts,qs,i,j)
2804 ! Lookup table variables:
2805 ! INTEGER, PARAMETER :: (KFNT=250,KFNP=220)
2806 ! REAL, SAVE, DIMENSION(1:KFNT,1:KFNP) :: TTAB,QSTAB
2807 ! REAL, SAVE, DIMENSION(1:KFNP) :: THE0K
2808 ! REAL, SAVE, DIMENSION(1:200) :: ALU
2809 ! REAL, SAVE :: RDPR,RDTHK,PLUTOP
2810 ! End of Lookup table variables:
2811 !-----------------------------------------------------------------------
2813 !-----------------------------------------------------------------------
2814 REAL, INTENT(IN ) :: P,THES
2815 REAL, INTENT(INOUT) :: TS,QS
2816 INTEGER, INTENT(IN ) :: i,j ! avail for debugging
2817 REAL :: TP,QQ,BTH,TTH,PP,T00,T10,T01,T11,Q00,Q10,Q01,Q11
2818 INTEGER :: IPTB,ITHTB
2819 CHARACTER*256 :: MESS
2820 !-----------------------------------------------------------------------
2823 !******** LOOKUP TABLE VARIABLES (F77 format)... ****************************
2824 ! parameter(kfnt=250,kfnp=220)
2826 ! COMMON/KFLUT/ ttab(kfnt,kfnp),qstab(kfnt,kfnp),the0k(kfnp), &
2827 ! alu(200),rdpr,rdthk,plutop
2828 !***************************************************************
2830 !***********************************************************************
2831 ! scaling pressure and tt table index
2832 !***********************************************************************
2838 !***********************************************************************
2839 ! base and scaling factor for the
2840 !***********************************************************************
2842 ! scaling the and tt table index
2843 bth=(the0k(iptb+1)-the0k(iptb))*qq+the0k(iptb)
2844 tth=(thes-bth)*rdthk
2848 t00=ttab(ithtb ,iptb )
2849 t10=ttab(ithtb+1,iptb )
2850 t01=ttab(ithtb ,iptb+1)
2851 t11=ttab(ithtb+1,iptb+1)
2853 q00=qstab(ithtb ,iptb )
2854 q10=qstab(ithtb+1,iptb )
2855 q01=qstab(ithtb ,iptb+1)
2856 q11=qstab(ithtb+1,iptb+1)
2858 !***********************************************************************
2859 ! parcel temperature and saturation mixing ratio
2860 !***********************************************************************
2862 ts=(t00+(t10-t00)*pp+(t01-t00)*qq+(t00-t10-t01+t11)*pp*qq)
2864 qs=(q00+(q10-q00)*pp+(q01-q00)*qq+(q00-q10-q01+q11)*pp*qq)
2866 END SUBROUTINE TPMIX2DD
2868 ! -----------------------------------------------------------------------
2869 SUBROUTINE ENVIRTHT(P1,T1,Q1,THT1,ALIQ,BLIQ,CLIQ,DLIQ)
2871 !-----------------------------------------------------------------------
2873 !-----------------------------------------------------------------------
2874 REAL, INTENT(IN ) :: P1,T1,Q1,ALIQ,BLIQ,CLIQ,DLIQ
2875 REAL, INTENT(INOUT) :: THT1
2876 REAL :: EE,TLOG,ASTRT,AINC,A1,TP,VALUE,AINTRP,TDPT,TSAT,THT, &
2877 T00,P00,C1,C2,C3,C4,C5
2879 !-----------------------------------------------------------------------
2880 DATA T00,P00,C1,C2,C3,C4,C5/273.16,1.E5,3374.6525,2.5403,3114.834, &
2883 ! CALCULATE ENVIRONMENTAL EQUIVALENT POTENTIAL TEMPERATURE...
2885 ! NOTE: Calculations for mixed/ice phase no longer used...jsk 8/00
2886 ! For example, KF90 Eq. 10 no longer used
2889 ! TLOG=ALOG(EE/ALIQ)
2890 ! ...calculate LOG term using lookup table...
2897 value=(indlu-1)*ainc+astrt
2898 aintrp=(a1-value)/ainc
2899 tlog=aintrp*alu(indlu+1)+(1-aintrp)*alu(indlu)
2901 TDPT=(CLIQ-DLIQ*TLOG)/(BLIQ-TLOG)
2902 TSAT=TDPT-(.212+1.571E-3*(TDPT-T00)-4.36E-4*(T1-T00))*(T1-TDPT)
2903 THT=T1*(P00/P1)**(0.2854*(1.-0.28*Q1))
2904 THT1=THT*EXP((C1/TSAT-C2)*Q1*(1.+0.81*Q1))
2906 END SUBROUTINE ENVIRTHT
2907 ! ***********************************************************************
2908 !====================================================================
2909 SUBROUTINE kf_eta_init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, &
2910 RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS, &
2911 SVP1,SVP2,SVP3,SVPT0, &
2912 P_FIRST_SCALAR,restart,allowed_to_read, &
2913 ids, ide, jds, jde, kds, kde, &
2914 ims, ime, jms, jme, kms, kme, &
2915 its, ite, jts, jte, kts, kte )
2916 !--------------------------------------------------------------------
2918 !--------------------------------------------------------------------
2919 LOGICAL , INTENT(IN) :: restart,allowed_to_read
2920 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
2921 ims, ime, jms, jme, kms, kme, &
2922 its, ite, jts, jte, kts, kte
2923 INTEGER , INTENT(IN) :: P_QI,P_QS,P_FIRST_SCALAR
2925 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
2933 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
2935 REAL, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: NCA
2937 INTEGER :: i, j, k, itf, jtf, ktf
2938 REAL, INTENT(IN) :: SVP1,SVP2,SVP3,SVPT0
2944 IF(.not.restart)THEN
2957 IF (P_QI .ge. P_FIRST_SCALAR) THEN
2967 IF (P_QS .ge. P_FIRST_SCALAR) THEN
2993 CALL KF_LUTAB(SVP1,SVP2,SVP3,SVPT0)
2995 END SUBROUTINE kf_eta_init
2997 !-------------------------------------------------------
2999 subroutine kf_lutab(SVP1,SVP2,SVP3,SVPT0)
3001 ! This subroutine is a lookup table.
3002 ! Given a series of series of saturation equivalent potential
3003 ! temperatures, the temperature is calculated.
3005 !--------------------------------------------------------------------
3007 !--------------------------------------------------------------------
3008 ! Lookup table variables
3009 ! INTEGER, SAVE, PARAMETER :: KFNT=250,KFNP=220
3010 ! REAL, SAVE, DIMENSION(1:KFNT,1:KFNP) :: TTAB,QSTAB
3011 ! REAL, SAVE, DIMENSION(1:KFNP) :: THE0K
3012 ! REAL, SAVE, DIMENSION(1:200) :: ALU
3013 ! REAL, SAVE :: RDPR,RDTHK,PLUTOP
3014 ! End of Lookup table variables
3016 INTEGER :: KP,IT,ITCNT,I
3017 REAL :: DTH,TMIN,TOLER,PBOT,DPR, &
3018 TEMP,P,ES,QS,PI,THES,TGUES,THGUES,F0,T1,T0,THGS,F1,DT, &
3020 ! REAL :: ALIQ,BLIQ,CLIQ,DLIQ,SVP1,SVP2,SVP3,SVPT0
3021 REAL :: ALIQ,BLIQ,CLIQ,DLIQ
3022 REAL, INTENT(IN) :: SVP1,SVP2,SVP3,SVPT0
3024 ! equivalent potential temperature increment
3026 ! minimum starting temp
3028 ! tolerance for accuracy of temperature
3030 ! top pressure (pascals)
3032 ! bottom pressure (pascals)
3041 ! compute parameters
3043 ! 1._over_(sat. equiv. theta increment)
3045 ! pressure increment
3047 DPR=(PBOT-PLUTOP)/REAL(KFNP-1)
3048 ! dpr=(pbot-plutop)/REAL(kfnp-1)
3049 ! 1._over_(pressure increment)
3051 ! compute the spread of thes
3052 ! thespd=dth*(kfnt-1)
3054 ! calculate the starting sat. equiv. theta
3060 es=aliq*exp((bliq*temp-cliq)/(temp-dliq))
3062 pi=(1.e5/p)**(0.2854*(1.-0.28*qs))
3063 the0k(kp)=temp*pi*exp((3374.6525/temp-2.5403)*qs* &
3067 ! compute temperatures for each sat. equiv. potential temp.
3074 ! define sat. equiv. pot. temp.
3076 ! iterate to find temperature
3077 ! find initial guess
3083 es=aliq*exp((bliq*tgues-cliq)/(tgues-dliq))
3085 pi=(1.e5/p)**(0.2854*(1.-0.28*qs))
3086 thgues=tgues*pi*exp((3374.6525/tgues-2.5403)*qs* &
3094 es=aliq*exp((bliq*t1-cliq)/(t1-dliq))
3096 pi=(1.e5/p)**(0.2854*(1.-0.28*qs))
3097 thtgs=t1*pi*exp((3374.6525/t1-2.5403)*qs*(1.+0.81*qs))
3099 if(abs(f1).lt.toler)then
3103 dt=f1*(t1-t0)/(f1-f0)
3113 ! lookup table for tlog(emix/aliq)
3115 ! set up intial values for lookup tables
3126 END SUBROUTINE KF_LUTAB
3128 END MODULE module_cu_kfeta