6 ! V3.3: A new trigger function is added based Ma and Tan (2009):
7 ! Ma, L.-M. and Z.-M. Tan, 2009: Improving the behavior of
8 ! the cumulus parameterization for tropical cyclone prediction:
9 ! Convection trigger. Atmospheric Research, 92, 190 - 211.
12 ! WRF v3.5 with diagnosed deep and shallow KF cloud fraction using
13 ! CAM3-CAM5 methodology, along with captured liquid and ice condensates.
14 ! JAH & KA (U.S. EPA) -- May 2013
16 !--------------------------------------------------------------------
17 ! Lookup table variables:
18 INTEGER, PARAMETER, PRIVATE :: KFNT=250,KFNP=220!wig, 24-Aug-2006: added private to prevent CuP conflicts !BSINGH - For WRFCuP scheme
19 REAL, DIMENSION(KFNT,KFNP),PRIVATE, SAVE :: TTAB,QSTAB
20 REAL, DIMENSION(KFNP),PRIVATE, SAVE :: THE0K
21 REAL, DIMENSION(200),PRIVATE, SAVE :: ALU
22 REAL, PRIVATE, SAVE :: RDPR,RDTHK,PLUTOP
23 ! Note: KF Lookup table is used by subroutines KF_eta_PARA, TPMIX2,
25 ! End of Lookup table variables:
29 SUBROUTINE KF_eta_CPS( &
30 ids,ide, jds,jde, kds,kde &
31 ,ims,ime, jms,jme, kms,kme &
32 ,its,ite, jts,jte, kts,kte &
34 ,DT,KTAU,DX,CUDT,ADAPT_STEP_FLAG &
35 ,rho,RAINCV,PRATEC,NCA &
36 ,U,V,TH,T,W,dz8w,Pcps,pi &
37 ,W0AVG,XLV0,XLV1,XLS0,XLS1,CP,R,G,EP1 &
38 ,EP2,SVP1,SVP2,SVP3,SVPT0 &
39 ,STEPCU,CU_ACT_FLAG,warm_rain,CUTOP,CUBOT &
41 ,shall & !BSINGH - For WRFCuP scheme added "shall"
43 ,F_QV ,F_QC ,F_QR ,F_QI ,F_QS &
44 ,RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN &
45 ,RQICUTEN,RQSCUTEN, RQVFTEN &
47 ,cldfra_dp_KF,cldfra_sh_KF &
52 ,TIMEC_KF,KF_EDRATES &
55 !-------------------------------------------------------------
57 !-------------------------------------------------------------
58 INTEGER, INTENT(IN ) :: &
59 ids,ide, jds,jde, kds,kde, &
60 ims,ime, jms,jme, kms,kme, &
61 its,ite, jts,jte, kts,kte
63 INTEGER, INTENT(IN ) :: trigger
64 INTEGER, INTENT(IN ) :: STEPCU
65 LOGICAL, INTENT(IN ) :: warm_rain
67 REAL, INTENT(IN ) :: XLV0,XLV1,XLS0,XLS1
68 REAL, INTENT(IN ) :: CP,R,G,EP1,EP2
69 REAL, INTENT(IN ) :: SVP1,SVP2,SVP3,SVPT0
71 INTEGER, INTENT(IN ) :: KTAU
73 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
86 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
90 REAL, INTENT(IN ) :: DT, DX
91 REAL, INTENT(IN ) :: CUDT
92 LOGICAL,OPTIONAL,INTENT(IN ) :: ADAPT_STEP_FLAG
94 REAL, DIMENSION( ims:ime , jms:jme ), &
95 INTENT(INOUT) :: RAINCV
97 REAL, DIMENSION( ims:ime , jms:jme ), &
98 INTENT(INOUT) :: PRATEC
100 REAL, DIMENSION( ims:ime , jms:jme ), &
103 REAL, DIMENSION( ims:ime , jms:jme ), OPTIONAL, &
104 INTENT(INOUT) :: SHALL !BSINGH - For WRFCuP scheme
106 REAL, DIMENSION( ims:ime , jms:jme ), &
107 INTENT(OUT) :: CUBOT, &
110 LOGICAL, DIMENSION( ims:ime , jms:jme ), &
111 INTENT(INOUT) :: CU_ACT_FLAG
117 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
128 ! Flags relating to the optional tendency arrays declared above
129 ! Models that carry the optional tendencies will provdide the
130 ! optional arguments at compile time; these flags all the model
131 ! to determine at run-time whether a particular tracer is in
134 LOGICAL, OPTIONAL :: &
142 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
150 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
157 REAL, DIMENSION( ims:ime , jms:jme ) , &
161 INTEGER, INTENT(IN) :: KF_EDRATES
165 LOGICAL :: flag_qr, flag_qi, flag_qs
167 REAL, DIMENSION( kts:kte ) :: &
179 REAL, DIMENSION( kts:kte ):: &
187 REAL, DIMENSION (its-1:ite+1,kts:kte,jts-1:jte+1) :: aveh_t, aveh_q
188 REAL, DIMENSION (its:ite,kts:kte,jts:jte) :: aveh_qmax, aveh_qmin
189 REAL, DIMENSION (its:ite,kts:kte,jts:jte) :: avev_t, avev_q
190 REAL, DIMENSION (its:ite,kts:kte,jts:jte) :: avev_qmax, avev_qmin
191 REAL, DIMENSION (its:ite,kts:kte,jts:jte) :: coef_v, coef_h, tpart_h, tpart_v
195 REAL, DIMENSION (kts:kte) :: z0
197 REAL :: TST,tv,PRS,RHOE,W0,SCR1,DXSQ,tmp
198 integer :: ibegh,iendh,jbegh,jendh
199 integer :: istart,iend,jstart,jend
200 INTEGER :: i,j,k,NTST
201 INTEGER :: ishall !BSINGH - For WRFCuP Scheme
202 REAL :: lastdt = -1.0
203 REAL :: W0AVGfctr, W0fctr, W0den
208 !----------------------
214 IF ( PRESENT(F_QR) ) flag_qr = F_QR
215 IF ( PRESENT(F_QI) ) flag_qi = F_QI
216 IF ( PRESENT(F_QS) ) flag_qs = F_QS
222 if (ADAPT_STEP_FLAG) then
223 W0AVGfctr = 2 * MAX(CUDT*60,dt) - dt
225 W0den = 2 * MAX(CUDT*60,dt)
235 ! SCR1=-5.0E-4*G*rho(I,K,J)*(w(I,K,J)+w(I,K+1,J))
236 ! TV=T(I,K,J)*(1.+EP1*QV(I,K,J))
237 ! RHOE=Pcps(I,K,J)/(R*TV)
238 ! W0=-101.9368*SCR1/RHOE
239 W0=0.5*(w(I,K,J)+w(I,K+1,J))
243 ! W0AVG(I,K,J)=(W0AVG(I,K,J)*(TST-1.)+W0)/TST
245 ! New, to support adaptive time step:
247 W0AVG(I,K,J) = ( W0AVG(I,K,J) * W0AVGfctr + W0 * W0fctr ) / W0den
253 ! New trigger function
254 IF (trigger.eq.2) THEN
256 ! calculate 9-point average of moisture advection and temperature using halo (Horizontal)
258 aveh_t=-999 ! horizontal 9-point ave
260 avev_t=0 ! vertical 3-level ave
270 ibegh=max(its-1, ids+1) ! start from 2
271 jbegh=max(jts-1, jds+1)
272 iendh=min(ite+1, ide-2) ! end at ide-2
273 jendh=min(jte+1, jde-2)
277 aveh_t(i,k,j)=(T(i-1,k,j-1)+T(i-1,k,j) +T(i-1,k,j+1)+ &
278 T(i,k,j-1) +T(i,k,j) +T(i,k,j+1)+ &
279 T(i+1,k,j-1) +T(i+1,k,j) +T(i+1,k,j+1))/9.
280 aveh_q(i,k,j)=(rqvften(i-1,k,j-1)+rqvften(i-1,k,j) +rqvften(i-1,k,j+1)+ &
281 rqvften(i,k,j-1) +rqvften(i,k,j) +rqvften(i,k,j+1)+ &
282 rqvften(i+1,k,j-1) +rqvften(i+1,k,j) +rqvften(i+1,k,j+1))/9.
286 ! boundary value ( all processors will do the following? Or just those processsors handling sub-area including boundary)
292 aveh_t(i,k,j)=aveh_t(i+1,k,j)
293 aveh_q(i,k,j)=aveh_q(i+1,k,j)
294 elseif(i.eq.ide-1) then
295 aveh_t(i,k,j)=aveh_t(i-1,k,j)
296 aveh_q(i,k,j)=aveh_q(i-1,k,j)
300 aveh_t(i,k,j)=aveh_t(i,k,j+1)
301 aveh_q(i,k,j)=aveh_q(i,k,j+1)
302 elseif(j.eq.jde-1) then
303 aveh_t(i,k,j)=aveh_t(i,k,j-1)
304 aveh_q(i,k,j)=aveh_q(i,k,j-1)
307 if(j.eq.jds.and.i.eq.ids) then
308 aveh_q(i,k,j)=aveh_q(i+1,k,j+1)
309 aveh_t(i,k,j)=aveh_t(i+1,k,j+1)
312 if(j.eq.jde-1.and.i.eq.ids) then
313 aveh_q(i,k,j)=aveh_q(i+1,k,j-1)
314 aveh_t(i,k,j)=aveh_t(i+1,k,j-1)
317 if(j.eq.jde-1.and.i.eq.ide-1) then
318 aveh_q(i,k,j)=aveh_q(i-1,k,j-1)
319 aveh_t(i,k,j)=aveh_t(i-1,k,j-1)
322 if(j.eq.jds.and.i.eq.ide-1) then
323 aveh_q(i,k,j)=aveh_q(i-1,k,j+1)
324 aveh_t(i,k,j)=aveh_t(i-1,k,j+1)
330 ! search for max/min moisture advection in 9-point range, calculate horizontal T-perturbation (tpart_h)
331 istart=max(its, ids+1) ! start from 2
332 jstart=max(jts, jds+1)
333 iend=min(ite, ide-2) ! end at ide-2
338 aveh_qmax(i,k,j)=aveh_q(i,k,j)
339 aveh_qmin(i,k,j)=aveh_q(i,k,j)
342 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)
343 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)
346 if(aveh_qmax(i,k,j).gt.aveh_qmin(i,k,j))then
347 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))
351 coef_h(i,k,j)=amin1(coef_h(i,k,j),1.0)
352 coef_h(i,k,j)=amax1(coef_h(i,k,j),0.0)
353 tpart_h(i,k,j)=coef_h(i,k,j)*(T(i,k,j)-aveh_t(i,k,j))
358 ! vertical 3-layer calculation
361 z0(1) = 0.5 * dz8w(i,1,j)
363 Z0(K) = Z0(K-1) + .5 * (DZ8W(i,K,j) + DZ8W(i,K-1,j))
366 ttop = t(i,k,j) + ((t(i,k,j) - t(i,k+1,j)) / (z0(k) - z0(k+1))) * (z0(k)-z0(k-1))
367 avev_t(i,k,j)=(T(i,k-1,j) + T(i,k,j) + ttop)/3.
368 ! avev_t(i,k,j)=(T(i,k-1,j)+T(i,k,j) + T(i,k+1,j))/3.
369 avev_q(i,k,j)=(rqvften(i,k-1,j)+rqvften(i,k,j) + rqvften(i,k+1,j))/3.
371 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)?
372 avev_q(i,kts,j)=avev_q(i,kts+1,j)
373 avev_t(i,kte,j)=avev_t(i,kte-1,j) ! highest level value
374 avev_q(i,kte,j)=avev_q(i,kte-1,j)
381 avev_qmax(i,k,j)=avev_q(i,k,j)
382 avev_qmin(i,k,j)=avev_q(i,k,j)
384 if(avev_q(i,k+kk,j).gt.avev_qmax(i,k,j)) avev_qmax(i,k,j)=avev_q(i,k+kk,j)
385 if(avev_q(i,k+kk,j).lt.avev_qmin(i,k,j)) avev_qmin(i,k,j)=avev_q(i,k+kk,j)
387 if(avev_qmax(i,k,j).gt.avev_qmin(i,k,j)) then
388 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))
392 tpart_v(i,k,j)=coef_v(i,k,j)*(T(i,k,j)-avev_t(i,k,j))
394 tpart_v(i,kts,j)= tpart_v(i,kts+1,j) ! lowest level
395 tpart_v(i,kte,j)= tpart_v(i,kte-1,j) ! highest level
398 ENDIF ! endif (trigger.eq.2)
402 CU_ACT_FLAG(i,j) = .true.
410 IF ( NCA(I,J) .ge. 0.5*DT ) then
411 CU_ACT_FLAG(i,j) = .false.
422 cldfra_dp_KF(I,k,J)=0.
423 cldfra_sh_KF(I,k,J)=0.
428 IF (KF_EDRATES == 1) THEN
442 ! assign vars from 3D to 1D
451 W0AVG1D(K) =W0AVG(I,K,J)
453 IF (trigger.eq.2) THEN
454 tpart_h1D(K) =tpart_h(I,K,J)
455 tpart_v1D(K) =tpart_v(I,K,J)
461 CALL KF_eta_PARA(I, J, &
462 U1D,V1D,T1D,QV1D,P1D,DZ1D,W0AVG1D, &
463 tpart_h1D,tpart_v1D, &
466 XLV0,XLV1,XLS0,XLS1,CP,R,G, &
467 EP2,SVP1,SVP2,SVP3,SVPT0, &
468 DQDT,DQIDT,DQCDT,DQRDT,DQSDT,DTDT, &
470 flag_QI,flag_QS,warm_rain, &
471 CUTOP,CUBOT,ishall,CUDT, & !BSINGH - Added ishall as arg for WRFCuP
472 ids,ide, jds,jde, kds,kde, &
473 ims,ime, jms,jme, kms,kme, &
474 its,ite, jts,jte, kts,kte, &
476 cldfra_dp_KF,cldfra_sh_KF, &
481 TIMEC_KF,KF_EDRATES )
482 if(present(shall))shall(i,j) = ishall !,BSINGH - For WRFCuP scheme
485 IF(PRESENT(rthcuten).AND.PRESENT(rqvcuten)) THEN
487 RTHCUTEN(I,K,J)=DTDT(K)/pi(I,K,J)
488 RQVCUTEN(I,K,J)=DQDT(K)
492 IF(PRESENT(rqrcuten).AND.PRESENT(rqccuten)) THEN
495 RQRCUTEN(I,K,J)=DQRDT(K)
496 RQCCUTEN(I,K,J)=DQCDT(K)
499 ! This is the case for Eta microphysics without 3d rain field
502 RQCCUTEN(I,K,J)=DQRDT(K)+DQCDT(K)
507 !...... QSTEN STORES GRAUPEL TENDENCY IF IT EXISTS, OTHERISE SNOW (V2)
510 IF(PRESENT( rqicuten )) THEN
513 RQICUTEN(I,K,J)=DQIDT(K)
518 IF(PRESENT( rqscuten )) THEN
521 RQSCUTEN(I,K,J)=DQSDT(K)
530 END SUBROUTINE KF_eta_CPS
531 ! ****************************************************************************
532 !-----------------------------------------------------------
533 SUBROUTINE KF_eta_PARA (I, J, &
534 U0,V0,T0,QV0,P0,DZQ,W0AVG1D, &
538 XLV0,XLV1,XLS0,XLS1,CP,R,G, &
539 EP2,SVP1,SVP2,SVP3,SVPT0, &
540 DQDT,DQIDT,DQCDT,DQRDT,DQSDT,DTDT, &
542 F_QI,F_QS,warm_rain, &
543 CUTOP,CUBOT,ishall,CUDT, & !BSINGH - For WRFCuP scheme
544 ids,ide, jds,jde, kds,kde, &
545 ims,ime, jms,jme, kms,kme, &
546 its,ite, jts,jte, kts,kte, &
548 cldfra_dp_KF,cldfra_sh_KF, &
553 TIMEC_KF,KF_EDRATES )
554 !-----------------------------------------------------------
555 !***** The KF scheme that is currently used in experimental runs of EMCs
556 !***** Eta model....jsk 8/00
559 !-----------------------------------------------------------
560 INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde, &
561 ims,ime, jms,jme, kms,kme, &
562 its,ite, jts,jte, kts,kte, &
564 ! ,P_QI,P_QS,P_FIRST_SCALAR
565 INTEGER, INTENT(IN ) :: trigger
567 LOGICAL, INTENT(IN ) :: F_QI, F_QS
569 LOGICAL, INTENT(IN ) :: warm_rain
571 REAL, DIMENSION( kts:kte ), &
583 REAL, INTENT(IN ) :: DT,DX,DXSQ
586 REAL, INTENT(IN ) :: XLV0,XLV1,XLS0,XLS1,CP,R,G
587 REAL, INTENT(IN ) :: EP2,SVP1,SVP2,SVP3,SVPT0
590 INTEGER, INTENT(INOUT) :: ISHALL
591 REAL, DIMENSION( kts:kte ), INTENT(INOUT) :: &
599 REAL, DIMENSION( ims:ime , jms:jme ), &
603 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
604 INTENT(INOUT) :: cldfra_dp_KF, &
609 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
610 INTENT(INOUT) :: UDR_KF, &
615 REAL, DIMENSION( ims:ime , jms:jme ), &
616 INTENT(INOUT) :: TIMEC_KF
618 INTEGER, INTENT(IN) :: KF_EDRATES
620 REAL, DIMENSION( ims:ime , jms:jme ), &
621 INTENT(INOUT) :: RAINCV
623 REAL, DIMENSION( ims:ime , jms:jme ), &
624 INTENT(INOUT) :: PRATEC
626 REAL, DIMENSION( ims:ime , jms:jme ), &
627 INTENT(OUT) :: CUBOT, &
629 REAL, INTENT(IN ) :: CUDT
631 !...DEFINE LOCAL VARIABLES...
633 REAL, DIMENSION( kts:kte ) :: &
634 Q0,Z0,TV0,TU,TVU,QU,TZ,TVD, &
635 QD,QES,THTES,TG,TVG,QG,WU,WD,W0,EMS,EMSD, &
636 UMF,UER,UDR,DMF,DER,DDR,UMF2,UER2, &
637 UDR2,DMF2,DER2,DDR2,DZA,THTA0,THETEE, &
638 THTAU,THETEU,THTAD,THETED,QLIQ,QICE, &
639 QLQOUT,QICOUT,PPTLIQ,PPTICE,DETLQ,DETIC, &
640 DETLQ2,DETIC2,RATIO,RATIO2
643 REAL, DIMENSION( kts:kte ) :: &
644 DOMGDP,EXN,TVQU,DP,RH,EQFRC,WSPD, &
645 QDT,FXM,THTAG,THPA,THFXOUT, &
646 THFXIN,QPA,QFXOUT,QFXIN,QLPA,QLFXIN, &
647 QLFXOUT,QIPA,QIFXIN,QIFXOUT,QRPA, &
648 QRFXIN,QRFXOUT,QSPA,QSFXIN,QSFXOUT, &
649 QL0,QLG,QI0,QIG,QR0,QRG,QS0,QSG
652 REAL, DIMENSION( kts:kte+1 ) :: OMG
653 REAL, DIMENSION( kts:kte ) :: RAINFB,SNOWFB
654 REAL, DIMENSION( kts:kte ) :: &
655 CLDHGT,QSD,DILFRC,DDILFRC,TKE,TGU,QGU,THTEEG
659 REAL :: P00,T00,RLF,RHIC,RHBC,PIE, &
661 REAL :: GDRY,ROCP,ALIQ,BLIQ, &
663 REAL :: FBFRC,P300,DPTHMX,THMIX,QMIX,ZMIX,PMIX, &
664 ROCPQ,TMIX,EMIX,TLOG,TDPT,TLCL,TVLCL, &
665 CPORQ,PLCL,ES,DLP,TENV,QENV,TVEN,TVBAR, &
666 ZLCL,WKL,WABS,TRPPT,WSIGNE,DTLCL,GDT,WLCL,&
667 TVAVG,QESE,WTW,RHOLCL,AU0,VMFLCL,UPOLD, &
668 UPNEW,ABE,WKLCL,TTEMP,FRC1, &
669 QNEWIC,RL,R1,QNWFRZ,EFFQ,BE,BOTERM,ENTERM,&
670 DZZ,UDLBE,REI,EE2,UD2,TTMP,F1,F2, &
671 THTTMP,QTMP,TMPLIQ,TMPICE,TU95,TU10,EE1, &
672 UD1,DPTT,QNEWLQ,DUMFDP,EE,TSAT, &
673 THTA,VCONV,TIMEC,SHSIGN,VWS,PEF, &
674 CBH,RCBH,PEFCBH,PEFF,PEFF2,TDER,THTMIN, &
675 DTMLTD,QS,TADVEC,DPDD,FRC,DPT,RDD,A1, &
676 DSSDT,DTMP,T1RH,QSRH,PPTFLX,CPR,CNDTNF, &
677 UPDINC,AINCM2,DEVDMF,PPR,RCED,DPPTDF, &
678 DMFLFS,DMFLFS2,RCED2,DDINC,AINCMX,AINCM1, &
679 AINC,TDER2,PPTFL2,FABE,STAB,DTT,DTT1, &
680 DTIME,TMA,TMB,TMM,BCOEFF,ACOEFF,QVDIFF, &
681 TOPOMG,CPM,DQ,ABEG,DABE,DFDA,FRC2,DR, &
682 UDFRC,TUC,QGS,RH0,RHG,QINIT,QFNL,ERR2, &
683 RELERR,RLC,RLS,RNC,FABEOLD,AINCOLD,UEFRC, &
684 DDFRC,TDC,DEFRC,RHBAR,DMFFRC,DPMIN,DILBE
685 REAL :: ASTRT,TP,VALUE,AINTRP,TKEMAX,QFRZ,&
686 QSS,PPTMLT,DTMELT,RHH,EVAC,BINC
688 INTEGER :: INDLU,NU,NUCHM,NNN,KLFS
689 REAL :: CHMIN,PM15,CHMAX,DTRH,RAD,DPPP
690 REAL :: TVDIFF,DTTOT,ABSOMG,ABSOMGTC,FRDP
692 REAL :: xcldfra,UMF_new
697 INTEGER, DIMENSION (kts:kte) :: KCHECK
699 INTEGER :: ISTOP,ML,L5,KMIX,LOW, &
700 LC,MXLAYR,LLFC,NLAYRS,NK, &
701 KPBL,KLCL,LCL,LET,IFLAG, &
703 LTOPM1,LVF,KSTART,KMIN,LFS, &
704 ND,NIC,LDB,LDT,ND1,NDK, &
705 NM,LMAX,NCOUNT,NOITR, &
706 NSTEP,NTC,NCHM,NSHALL
708 REAL :: u00,qslcl,rhlcl,dqssdt !jfb
709 CHARACTER*1024 message
711 DATA P00,T00/1.E5,273.16/
713 DATA RHIC,RHBC/1.,0.90/
714 DATA PIE,TTFRZ,TBFRZ,C5/3.141592654,268.16,248.16,1.0723E-3/
715 DATA RATE/0.03/ ! wrf default
716 ! DATA RATE/0.01/ ! value used in NRCM
717 ! DATA RATE/0.001/ ! effectively turn off autoconversion
718 !-----------------------------------------------------------
736 !****************************************************************************
738 !...OPTION TO FEED CONVECTIVELY GENERATED RAINWATER ! PPT FB MODS
739 !...INTO GRID-RESOLVED RAINWATER (OR SNOW/GRAUPEL) ! PPT FB MODS
740 !...FIELD. "FBFRC" IS THE FRACTION OF AVAILABLE ! PPT FB MODS
741 !...PRECIPITATION TO BE FED BACK (0.0 - 1.0)... ! PPT FB MODS
742 FBFRC=0.0 ! PPT FB MODS
743 !...mods to allow shallow convection...
750 !...PRESSURE PERTURBATION TERM IS ONLY DEFINED AT MID-POINT OF
751 !...VERTICAL LAYERS...SINCE TOTAL PRESSURE IS NEEDED AT THE TOP AND
752 !...BOTTOM OF LAYERS BELOW, DO AN INTERPOLATION...
754 !...INPUT A VERTICAL SOUNDING ... NOTE THAT MODEL LAYERS ARE NUMBERED
755 !...FROM BOTTOM-UP IN THE KF SCHEME...
758 !SUE tmprpsb=1./PSB(I,J)
759 !SUE CELL=PTOP*tmprpsb
763 ! Saturation vapor pressure (ES) is calculated following Buck (1981)
764 !...IF Q0 IS ABOVE SATURATION VALUE, REDUCE IT TO SATURATION LEVEL...
766 ES=ALIQ*EXP((BLIQ*T0(K)-CLIQ)/(T0(K)-DLIQ))
767 QES(K)=0.622*ES/(P0(K)-ES)
768 Q0(K)=AMIN1(QES(K),QV0(K))
769 Q0(K)=AMAX1(0.000001,Q0(K))
776 TV0(K)=T0(K)*(1.+0.608*Q0(K))
777 ! RHOE(K)=P0(K)/(R*TV0(K))
778 ! DP IS THE PRESSURE INTERVAL BETWEEN FULL SIGMA LEVELS...
779 DP(K)=rhoe(k)*g*DZQ(k)
780 ! IF Turbulent Kinetic Energy (TKE) is available from turbulent mixing scheme
781 ! use it for shallow convection...For now, assume it is not available....
782 ! TKE(K) = Q2(I,J,NK)
785 ! IF(P0(K).GE.500E2)L5=K
786 IF(P0(K).GE.0.5*P0(1))L5=K
787 IF(P0(K).GE.P300)LLFC=K
790 !...DZQ IS DZ BETWEEN SIGMA SURFACES, DZA IS DZ BETWEEN MODEL HALF LEVEL
794 Z0(K)=Z0(K-1)+.5*(DZQ(K)+DZQ(K-1))
795 DZA(K-1)=Z0(K)-Z0(K-1)
800 ! To save time, specify a pressure interval to move up in sequential
801 ! check of different ~50 mb deep groups of adjacent model layers in
802 ! the process of identifying updraft source layer (USL). Note that
803 ! this search is terminated as soon as a buoyant parcel is found and
804 ! this parcel can produce a cloud greater than specifed minimum depth
805 ! (CHMIN)...For now, set interval at 15 mb...
811 IF(P0(K).LT.PM15)THEN
828 IF(CLDHGT(NNN).GT.CHMAX)THEN
838 !BSINGH - For WRFCuP scheme
839 ! wig, 29-Aug-2006: I think this is where no convecion occurs. So, force
840 ! ishall to a flag value to indicate this for accounting purposes.
851 !...ASSUME THAT IN ORDER TO SUPPORT A DEEP UPDRAFT YOU NEED A LAYER OF
852 !...UNSTABLE AIR AT LEAST 50 mb DEEP...TO APPROXIMATE THIS, ISOLATE A
853 !...GROUP OF ADJACENT INDIVIDUAL MODEL LAYERS, WITH THE BASE AT LEVEL
854 !...LC, SUCH THAT THE COMBINED DEPTH OF THESE LAYERS IS AT LEAST 50 mb..
859 IF ( NK+1 .LT. KTS ) THEN
860 WRITE(message,*)'WOULD GO OFF BOTTOM: KF_ETA_PARA I,J,NK',I,J,NK
861 CALL wrf_message (TRIM(message))
865 IF ( NK .GT. KTE ) THEN
866 WRITE(message,*)'WOULD GO OFF TOP: KF_ETA_PARA I,J,DPTHMX,DPMIN',I,J,DPTHMX,DPMIN
867 CALL wrf_message (TRIM(message))
872 IF(DPTHMX.GT.DPMIN)THEN
877 IF(DPTHMX.LT.DPMIN)THEN
878 !BSINGH - For WRFCuP scheme
879 ! wig, 29-Aug-2006: Indicate no convection occurred in ishall.
886 !...********************************************************
887 !...for computational simplicity without much loss in accuracy,
888 !...mix temperature instead of theta for evaluating convective
889 !...initiation (triggering) potential...
896 !...FIND THE THERMODYNAMIC CHARACTERISTICS OF THE LAYER BY
897 !...MASS-WEIGHTING THE CHARACTERISTICS OF THE INDIVIDUAL MODEL
902 TMIX=TMIX+DP(NK)*T0(NK)
903 QMIX=QMIX+DP(NK)*Q0(NK)
904 ZMIX=ZMIX+DP(NK)*Z0(NK)
905 PMIX=PMIX+DP(NK)*P0(NK)
912 EMIX=QMIX*PMIX/(0.622+QMIX)
914 !...FIND THE TEMPERATURE OF THE MIXTURE AT ITS LCL...
916 ! TLOG=ALOG(EMIX/ALIQ)
917 ! ...calculate dewpoint using lookup table...
924 value=(indlu-1)*ainc+astrt
925 aintrp=(a1-value)/ainc
926 tlog=aintrp*alu(indlu+1)+(1-aintrp)*alu(indlu)
927 TDPT=(CLIQ-DLIQ*TLOG)/(BLIQ-TLOG)
928 TLCL=TDPT-(.212+1.571E-3*(TDPT-T00)-4.36E-4*(TMIX-T00))*(TMIX-TDPT)
929 TLCL=AMIN1(TLCL,TMIX)
930 TVLCL=TLCL*(1.+0.608*QMIX)
931 ZLCL = ZMIX+(TLCL-TMIX)/GDRY
936 ! IF(ZLCL.LE.Z0(NK) .or. NK.GT.KL)THEN
946 IF ( ZLCL.LE.Z0(NK) ) EXIT
948 IF ( ZLCL.GT.Z0(KL) ) then
949 !BSINGH - For WRFCuP scheme
950 !BSINGH - Improvised based on the following reason
951 !Before every "RETURN" statement assign ishall=2
952 ! wig, 29-Aug-2006: Indicate no convection occurred in ishall.
959 ! calculate DLP using Z instead of log(P)
960 DLP=(ZLCL-Z0(K))/(Z0(KLCL)-Z0(K))
962 !...ESTIMATE ENVIRONMENTAL TEMPERATURE AND MIXING RATIO AT THE LCL...
964 TENV=T0(K)+(T0(KLCL)-T0(K))*DLP
965 QENV=Q0(K)+(Q0(KLCL)-Q0(K))*DLP
966 TVEN=TENV*(1.+0.608*QENV)
968 !...CHECK TO SEE IF CLOUD IS BUOYANT USING FRITSCH-CHAPPELL TRIGGER
969 !...FUNCTION DESCRIBED IN KAIN AND FRITSCH (1992)...W0 IS AN
970 !...APROXIMATE VALUE FOR THE RUNNING-MEAN GRID-SCALE VERTICAL
971 !...VELOCITY, WHICH GIVES SMOOTHER FIELDS OF CONVECTIVE INITIATION
972 !...THAN THE INSTANTANEOUS VALUE...FORMULA RELATING TEMPERATURE
973 !...PERTURBATION TO VERTICAL VELOCITY HAS BEEN USED WITH THE MOST
974 !...SUCCESS AT GRID LENGTHS NEAR 25 km. FOR DIFFERENT GRID-LENGTHS,
975 !...ADJUST VERTICAL VELOCITY TO EQUIVALENT VALUE FOR 25 KM GRID
976 !...LENGTH, ASSUMING LINEAR DEPENDENCE OF W ON GRID LENGTH...
978 IF(ZLCL.LT.2.E3)THEN ! Kain (2004) Eq. 2
981 WKLCL=0.02 ! units of m/s
983 WKL=(W0AVG1D(K)+(W0AVG1D(KLCL)-W0AVG1D(K))*DLP)*DX/25.E3-WKLCL
984 IF(WKL.LT.0.0001)THEN
987 DTLCL=4.64*WKL**0.33 ! Kain (2004) Eq. 1
990 ! New trigger function
991 IF(trigger.eq.2) then
992 DTLCL=amax1(TPART_H0(KLCL)+TPART_V0(KLCL),0.0)
994 ! end for trigger function
997 if (trigger .eq. 3) then
998 !...for ETA model, give parcel an extra temperature perturbation based
999 !...the threshold RH for condensation (U00)...
1000 ! as described in Narita and Ohmori (2007, 12th Mesoscale Conf.
1002 !...for now, just assume U00=0.75...
1003 !...!!!!!! for MM5, SET DTRH = 0. !!!!!!!!
1006 QSLCL=QES(K)+(QES(KLCL)-QES(K))*DLP
1008 DQSSDT = QMIX*(CLIQ-BLIQ*DLIQ)/((TLCL-DLIQ)*(TLCL-DLIQ))
1009 IF(RHLCL.ge.0.75 .and. RHLCL.le.0.95)then
1010 DTRH = 0.25*(RHLCL-0.75)*QMIX/DQSSDT
1011 ELSEIF(RHLCL.GT.0.95)THEN
1012 DTRH = (1./RHLCL-1.)*QMIX/DQSSDT
1018 ! IF(ISHALL.EQ.1)IPRNT=.TRUE.
1020 ! IF(TLCL+DTLCL.GT.TENV)GOTO 45
1022 trigger2: IF(TLCL+DTLCL+DTRH.LT.TENV)THEN
1024 ! Parcel not buoyant, CYCLE back to start of trigger and evaluate next potential USL...
1028 ELSE ! Parcel is buoyant, determine updraft
1030 !...CONVECTIVE TRIGGERING CRITERIA HAS BEEN SATISFIED...COMPUTE
1031 !...EQUIVALENT POTENTIAL TEMPERATURE
1032 !...(THETEU) AND VERTICAL VELOCITY OF THE RISING PARCEL AT THE LCL...
1034 CALL ENVIRTHT(PMIX,TMIX,QMIX,THETEU(K),ALIQ,BLIQ,CLIQ,DLIQ)
1036 !...modify calculation of initial parcel vertical velocity...jsk 11/26/97
1039 IF(DTTOT.GT.1.E-4)THEN
1040 GDT=2.*G*DTTOT*500./TVEN ! Kain (2004) Eq. 3 (sort of)
1041 WLCL=1.+0.5*SQRT(GDT)
1042 WLCL = AMIN1(WLCL,3.)
1046 PLCL=P0(K)+(P0(KLCL)-P0(K))*DLP
1049 TVLCL=TLCL*(1.+0.608*QMIX)
1050 RHOLCL=PLCL/(R*TVLCL)
1054 ! make RAD a function of background vertical velocity... (Kain (2004) Eq. 6)
1057 ELSEIF(WKL.GT.0.1)THEN
1060 RAD = 1000.+1000*WKL/0.1
1063 !*******************************************************************
1065 ! COMPUTE UPDRAFT PROPERTIES *
1067 !*******************************************************************
1071 !...ESTIMATE INITIAL UPDRAFT MASS FLUX (UMF(K))...
1080 !...RATIO2 IS THE DEGREE OF GLACIATION IN THE CLOUD (0 TO 1),
1081 !...UER IS THE ENVIR ENTRAINMENT RATE, ABE IS AVAILABLE
1082 !...BUOYANT ENERGY, TRPPT IS THE TOTAL RATE OF PRECIPITATION
1103 !...TTEMP IS USED DURING CALCULATION OF THE LINEAR GLACIATION
1104 !...PROCESS; IT IS INITIALLY SET TO THE TEMPERATURE AT WHICH
1105 !...FREEZING IS SPECIFIED TO BEGIN. WITHIN THE GLACIATION
1106 !...INTERVAL, IT IS SET EQUAL TO THE UPDRAFT TEMP AT THE
1107 !...PREVIOUS MODEL LEVEL...
1111 !...ENTER THE LOOP FOR UPDRAFT CALCULATIONS...CALCULATE UPDRAFT TEMP,
1112 !...MIXING RATIO, VERTICAL MASS FLUX, LATERAL DETRAINMENT OF MASS AND
1113 !...MOISTURE, PRECIPITATION RATES AT EACH MODEL LEVEL...
1115 ! **1 variables indicate the bottom of a model layer
1116 ! **2 variables indicate the top of a model layer
1122 updraft: DO NK=K,KL-1
1124 RATIO2(NK1)=RATIO2(NK)
1127 THETEU(NK1)=THETEU(NK)
1131 call tpmix2(p0(nk1),theteu(nk1),tu(nk1),qu(nk1),qliq(nk1), &
1132 qice(nk1),qnewlq,qnewic,XLV1,XLV0)
1135 !...CHECK TO SEE IF UPDRAFT TEMP IS ABOVE THE TEMPERATURE AT WHICH
1136 !...GLACIATION IS ASSUMED TO INITIATE; IF IT IS, CALCULATE THE
1137 !...FRACTION OF REMAINING LIQUID WATER TO FREEZE...TTFRZ IS THE
1138 !...TEMP AT WHICH FREEZING BEGINS, TBFRZ THE TEMP BELOW WHICH ALL
1139 !...LIQUID WATER IS FROZEN AT EACH LEVEL...
1141 IF(TU(NK1).LE.TTFRZ)THEN
1142 IF(TU(NK1).GT.TBFRZ)THEN
1143 IF(TTEMP.GT.TTFRZ)TTEMP=TTFRZ
1144 FRC1=(TTEMP-TU(NK1))/(TTEMP-TBFRZ)
1151 ! DETERMINE THE EFFECTS OF LIQUID WATER FREEZING WHEN TEMPERATURE
1152 !...IS BELOW TTFRZ...
1154 QFRZ = (QLIQ(NK1)+QNEWLQ)*FRC1
1155 QNEWIC=QNEWIC+QNEWLQ*FRC1
1156 QNEWLQ=QNEWLQ-QNEWLQ*FRC1
1157 QICE(NK1) = QICE(NK1)+QLIQ(NK1)*FRC1
1158 QLIQ(NK1) = QLIQ(NK1)-QLIQ(NK1)*FRC1
1159 CALL DTFRZNEW(TU(NK1),P0(NK1),THETEU(NK1),QU(NK1),QFRZ, &
1160 QICE(NK1),ALIQ,BLIQ,CLIQ,DLIQ)
1162 TVU(NK1)=TU(NK1)*(1.+0.608*QU(NK1))
1164 ! CALCULATE UPDRAFT VERTICAL VELOCITY AND PRECIPITATION FALLOUT...
1167 BE=(TVLCL+TVU(NK1))/(TVEN+TV0(NK1))-1.
1168 BOTERM=2.*(Z0(NK1)-ZLCL)*G*BE/1.5
1171 BE=(TVU(NK)+TVU(NK1))/(TV0(NK)+TV0(NK1))-1.
1172 BOTERM=2.*DZA(NK)*G*BE/1.5
1175 ENTERM=2.*REI*WTW/UPOLD
1177 CALL CONDLOAD(QLIQ(NK1),QICE(NK1),WTW,DZZ,BOTERM,ENTERM, &
1178 RATE,QNEWLQ,QNEWIC,QLQOUT(NK1),QICOUT(NK1),G)
1180 !...IF VERT VELOCITY IS LESS THAN ZERO, EXIT THE UPDRAFT LOOP AND,
1181 !...IF CLOUD IS TALL ENOUGH, FINALIZE UPDRAFT CALCULATIONS...
1183 IF(WTW.LT.1.E-3)THEN
1188 !...Calculate value of THETA-E in environment to entrain into updraft...
1190 CALL ENVIRTHT(P0(NK1),T0(NK1),Q0(NK1),THETEE(NK1),ALIQ,BLIQ,CLIQ,DLIQ)
1192 !...REI IS THE RATE OF ENVIRONMENTAL INFLOW...
1194 REI=VMFLCL*DP(NK1)*0.03/RAD ! KF (1990) Eq. 1; Kain (2004) Eq. 5
1195 TVQU(NK1)=TU(NK1)*(1.+0.608*QU(NK1)-QLIQ(NK1)-QICE(NK1))
1197 DILBE=((TVLCL+TVQU(NK1))/(TVEN+TV0(NK1))-1.)*DZZ
1199 DILBE=((TVQU(NK)+TVQU(NK1))/(TV0(NK)+TV0(NK1))-1.)*DZZ
1201 IF(DILBE.GT.0.)ABE=ABE+DILBE*G
1203 !...IF CLOUD PARCELS ARE VIRTUALLY COLDER THAN THE ENVIRONMENT, MINIMAL
1204 !...ENTRAINMENT (0.5*REI) IS IMPOSED...
1206 IF(TVQU(NK1).LE.TV0(NK1))THEN ! Entrain/Detrain IF BLOCK
1207 EE2=0.5 ! Kain (2004) Eq. 4
1214 !...DETERMINE THE CRITICAL MIXED FRACTION OF UPDRAFT AND ENVIRONMENTAL AIR...
1218 THTTMP=F1*THETEE(NK1)+F2*THETEU(NK1)
1219 QTMP=F1*Q0(NK1)+F2*QU(NK1)
1222 call tpmix2(p0(nk1),thttmp,ttmp,qtmp,tmpliq,tmpice, &
1223 qnewlq,qnewic,XLV1,XLV0)
1224 TU95=TTMP*(1.+0.608*QTMP-TMPLIQ-TMPICE)
1225 IF(TU95.GT.TV0(NK1))THEN
1232 THTTMP=F1*THETEE(NK1)+F2*THETEU(NK1)
1233 QTMP=F1*Q0(NK1)+F2*QU(NK1)
1236 call tpmix2(p0(nk1),thttmp,ttmp,qtmp,tmpliq,tmpice, &
1237 qnewlq,qnewic,XLV1,XLV0)
1238 TU10=TTMP*(1.+0.608*QTMP-TMPLIQ-TMPICE)
1239 TVDIFF = ABS(TU10-TVQU(NK1))
1240 IF(TVDIFF.LT.1.e-3)THEN
1245 EQFRC(NK1)=(TV0(NK1)-TVQU(NK1))*F1/(TU10-TVQU(NK1))
1246 EQFRC(NK1)=AMAX1(0.0,EQFRC(NK1))
1247 EQFRC(NK1)=AMIN1(1.0,EQFRC(NK1))
1248 IF(EQFRC(NK1).EQ.1)THEN
1251 ELSEIF(EQFRC(NK1).EQ.0.)THEN
1256 !...SUBROUTINE PROF5 INTEGRATES OVER THE GAUSSIAN DIST TO DETERMINE THE
1257 ! FRACTIONAL ENTRAINMENT AND DETRAINMENT RATES...
1259 CALL PROF5(EQFRC(NK1),EE2,UD2)
1263 ENDIF ! End of Entrain/Detrain IF BLOCK
1266 !...NET ENTRAINMENT AND DETRAINMENT RATES ARE GIVEN BY THE AVERAGE FRACTIONAL
1267 ! VALUES IN THE LAYER...
1269 EE2 = AMAX1(EE2,0.5)
1271 UER(NK1)=0.5*REI*(EE1+EE2)
1272 UDR(NK1)=0.5*REI*(UD1+UD2)
1274 !...IF THE CALCULATED UPDRAFT DETRAINMENT RATE IS GREATER THAN THE TOTAL
1275 ! UPDRAFT MASS FLUX, ALL CLOUD MASS DETRAINS, EXIT UPDRAFT CALCULATIONS...
1277 IF(UMF(NK)-UDR(NK1).LT.10.)THEN
1279 !...IF THE CALCULATED DETRAINED MASS FLUX IS GREATER THAN THE TOTAL UPD MASS
1280 ! FLUX, IMPOSE TOTAL DETRAINMENT OF UPDRAFT MASS AT THE PREVIOUS MODEL LVL..
1281 ! First, correct ABE calculation if needed...
1287 ! WRITE(98,1015)P0(NK1)/100.
1292 UPOLD=UMF(NK)-UDR(NK1)
1293 UPNEW=UPOLD+UER(NK1)
1295 DILFRC(NK1) = UPNEW/UPOLD
1297 !...DETLQ AND DETIC ARE THE RATES OF DETRAINMENT OF LIQUID AND
1298 !...ICE IN THE DETRAINING UPDRAFT MASS...
1300 DETLQ(NK1)=QLIQ(NK1)*UDR(NK1)
1301 DETIC(NK1)=QICE(NK1)*UDR(NK1)
1303 QU(NK1)=(UPOLD*QU(NK1)+UER(NK1)*Q0(NK1))/UPNEW
1304 THETEU(NK1)=(THETEU(NK1)*UPOLD+THETEE(NK1)*UER(NK1))/UPNEW
1305 QLIQ(NK1)=QLIQ(NK1)*UPOLD/UPNEW
1306 QICE(NK1)=QICE(NK1)*UPOLD/UPNEW
1308 !...PPTLIQ IS THE RATE OF GENERATION (FALLOUT) OF
1309 !...LIQUID PRECIP AT A GIVEN MODEL LVL, PPTICE THE SAME FOR ICE,
1310 !...TRPPT IS THE TOTAL RATE OF PRODUCTION OF PRECIP UP TO THE
1311 !...CURRENT MODEL LEVEL...
1313 PPTLIQ(NK1)=QLQOUT(NK1)*UMF(NK)
1314 PPTICE(NK1)=QICOUT(NK1)*UMF(NK)
1316 TRPPT=TRPPT+PPTLIQ(NK1)+PPTICE(NK1)
1317 IF(NK1.LE.KPBL)UER(NK1)=UER(NK1)+VMFLCL*DP(NK1)/DPTHMX
1322 !...CHECK CLOUD DEPTH...IF CLOUD IS TALL ENOUGH, ESTIMATE THE EQUILIBRIUM
1323 ! TEMPERATURE LEVEL (LET) AND ADJUST MASS FLUX PROFILE AT CLOUD TOP SO
1324 ! THAT MASS FLUX DECREASES TO ZERO AS A LINEAR FUNCTION OF PRESSURE BETWEEN
1325 ! THE LET AND CLOUD TOP...
1327 !...LTOP IS THE MODEL LEVEL JUST BELOW THE LEVEL AT WHICH VERTICAL VELOCITY
1328 ! FIRST BECOMES NEGATIVE...
1331 CLDHGT(LC)=Z0(LTOP)-ZLCL
1333 !...Instead of using the same minimum cloud height (for deep convection)
1334 !...everywhere, try specifying minimum cloud depth as a function of TLCL...
1338 IF(TLCL.GT.293.)THEN
1340 ELSEIF(TLCL.LE.293. .and. TLCL.GE.273)THEN
1341 CHMIN = 2.E3 + 100.*(TLCL-273.)
1342 ELSEIF(TLCL.LT.273.)THEN
1347 qc_KF(I,NK,J)=QLIQ(NK)
1348 qi_KF(I,NK,J)=QICE(NK)
1352 !...If cloud top height is less than the specified minimum for deep
1353 !...convection, save value to consider this level as source for
1354 !...shallow convection, go back up to check next level...
1356 !...Try specifying minimum cloud depth as a function of TLCL...
1359 !...DO NOT ALLOW ANY CLOUD FROM THIS LAYER IF:
1361 !... 1.) if there is no CAPE, or
1362 !... 2.) cloud top is at model level just above LCL, or
1363 !... 3.) cloud top is within updraft source layer, or
1364 !... 4.) cloud-top detrainment layer begins within
1365 !... updraft source layer.
1367 IF(LTOP.LE.KLCL .or. LTOP.LE.KPBL .or. LET+1.LE.KPBL)THEN ! No Convection Allowed
1378 cldfra_dp_KF(I,NK,J)=0.
1379 cldfra_sh_KF(I,NK,J)=0.
1384 ELSEIF(CLDHGT(LC).GT.CHMIN .and. ABE.GT.1)THEN ! Deep Convection allowed
1388 cldfra_sh_KF(I,NK,J)=0.
1393 !...TO DISALLOW SHALLOW CONVECTION, COMMENT OUT NEXT LINE !!!!!!!!
1397 cldfra_dp_KF(I,NK,J)=0.
1400 EXIT usl ! Shallow Convection from this layer
1402 ! Remember this layer (by virtue of non-zero CLDHGT) as potential shallow-cloud layer
1412 cldfra_dp_KF(I,NK,J)=0.
1413 cldfra_sh_KF(I,NK,J)=0.
1422 KSTART=MAX0(KPBL,KLCL)
1426 !...IF THE LET AND LTOP ARE THE SAME, DETRAIN ALL OF THE UPDRAFT MASS FL
1430 UDR(LTOP)=UMF(LTOP)+UDR(LTOP)-UER(LTOP)
1431 DETLQ(LTOP)=QLIQ(LTOP)*UDR(LTOP)*UPNEW/UPOLD
1432 DETIC(LTOP)=QICE(LTOP)*UDR(LTOP)*UPNEW/UPOLD
1437 ! BEGIN TOTAL DETRAINMENT AT THE LEVEL ABOVE THE LET...
1443 DUMFDP=UMF(LET)/DPTT
1445 !...ADJUST MASS FLUX PROFILES, DETRAINMENT RATES, AND PRECIPITATION FALL
1446 ! RATES TO REFLECT THE LINEAR DECREASE IN MASS FLX BETWEEN THE LET AND
1450 !...entrainment is allowed at every level except for LTOP, so disallow
1451 !...entrainment at LTOP and adjust entrainment rates between LET and LTOP
1452 !...so the the dilution factor due to entrainment is not changed but
1453 !...the actual entrainment rate will change due due forced total
1454 !...detrainment in this layer...
1459 DETLQ(NK) = UDR(NK)*QLIQ(NK)*DILFRC(NK)
1460 DETIC(NK) = UDR(NK)*QICE(NK)*DILFRC(NK)
1462 UMF(NK)=UMF(NK-1)-DP(NK)*DUMFDP
1463 UER(NK)=UMF(NK)*(1.-1./DILFRC(NK))
1464 UDR(NK)=UMF(NK-1)-UMF(NK)+UER(NK)
1465 DETLQ(NK)=UDR(NK)*QLIQ(NK)*DILFRC(NK)
1466 DETIC(NK)=UDR(NK)*QICE(NK)*DILFRC(NK)
1469 TRPPT=TRPPT-PPTLIQ(NK)-PPTICE(NK)
1470 PPTLIQ(NK)=UMF(NK-1)*QLQOUT(NK)
1471 PPTICE(NK)=UMF(NK-1)*QICOUT(NK)
1472 TRPPT=TRPPT+PPTLIQ(NK)+PPTICE(NK)
1477 ! Initialize some arrays below cloud base and above cloud top...
1480 IF(T0(NK).GT.T00)ML=NK
1485 UMF(NK)=VMFLCL*DP(NK)/DPTHMX
1486 UER(NK)=VMFLCL*DP(NK)/DPTHMX
1487 ELSEIF(NK.LE.KPBL)THEN
1488 UER(NK)=VMFLCL*DP(NK)/DPTHMX
1489 UMF(NK)=UMF(NK-1)+UER(NK)
1494 TU(NK)=TMIX+(Z0(NK)-ZMIX)*GDRY
1504 cldfra_dp_KF(I,NK,J)=0.
1505 cldfra_sh_KF(I,NK,J)=0.
1520 CALL ENVIRTHT(P0(NK),T0(NK),Q0(NK),THETEE(NK),ALIQ,BLIQ,CLIQ,DLIQ)
1527 !...DEFINE VARIABLES ABOVE CLOUD TOP...
1547 cldfra_dp_KF(I,NK,J)=0.
1548 cldfra_sh_KF(I,NK,J)=0.
1566 EMS(NK)=DP(NK)*DXSQ/G
1569 !...INITIALIZE SOME VARIABLES TO BE USED LATER IN THE VERT ADVECTION SCHEME
1571 EXN(NK)=(P00/P0(NK))**(0.2854*(1.-0.28*QDT(NK)))
1572 THTAU(NK)=TU(NK)*EXN(NK)
1573 EXN(NK)=(P00/P0(NK))**(0.2854*(1.-0.28*Q0(NK)))
1574 THTA0(NK)=T0(NK)*EXN(NK)
1575 DDILFRC(NK) = 1./DILFRC(NK)
1578 ! IF (XTIME.LT.10.)THEN
1579 ! WRITE(98,1025)KLCL,ZLCL,DTLCL,LTOP,P0(LTOP),IFLAG,
1580 ! * TMIX-T00,PMIX,QMIX,ABE
1581 ! WRITE(98,1030)P0(LET)/100.,P0(LTOP)/100.,VMFLCL,PLCL/100.,
1585 !...COMPUTE CONVECTIVE TIME SCALE(TIMEC). THE MEAN WIND AT THE LCL
1586 !...AND MIDTROPOSPHERE IS USED.
1588 WSPD(KLCL)=SQRT(U0(KLCL)*U0(KLCL)+V0(KLCL)*V0(KLCL))
1589 WSPD(L5)=SQRT(U0(L5)*U0(L5)+V0(L5)*V0(L5))
1590 WSPD(LTOP)=SQRT(U0(LTOP)*U0(LTOP)+V0(LTOP)*V0(LTOP))
1591 VCONV=.5*(WSPD(KLCL)+WSPD(L5))
1592 !...for ETA model, DX is a function of location...
1593 ! TIMEC=DX(I,J)/VCONV
1596 TIMEC=AMAX1(1800.,TIMEC) ! 30 minutes >= TIMEC <= 60 minutes
1597 TIMEC=AMIN1(3600.,TIMEC)
1598 IF(ISHALL.EQ.1)TIMEC=2400. ! shallow convection TIMEC = 40 minutes
1602 !...COMPUTE WIND SHEAR AND PRECIPITATION EFFICIENCY.
1604 IF(WSPD(LTOP).GT.WSPD(KLCL))THEN
1609 VWS=(U0(LTOP)-U0(KLCL))*(U0(LTOP)-U0(KLCL))+(V0(LTOP)-V0(KLCL))* &
1611 VWS=1.E3*SHSIGN*SQRT(VWS)/(Z0(LTOP)-Z0(LCL))
1612 PEF=1.591+VWS*(-.639+VWS*(9.53E-2-VWS*4.96E-3))
1616 !...PRECIPITATION EFFICIENCY IS A FUNCTION OF THE HEIGHT OF CLOUD BASE.
1618 CBH=(ZLCL-Z0(1))*3.281E-3
1622 RCBH=.96729352+CBH*(-.70034167+CBH*(.162179896+CBH*(- &
1623 1.2569798E-2+CBH*(4.2772E-4-CBH*5.44E-6))))
1625 IF(CBH.GT.25)RCBH=2.4
1627 PEFCBH=AMIN1(PEFCBH,.9)
1629 !... MEAN PEF. IS USED TO COMPUTE RAINFALL.
1631 PEFF=.5*(PEF+PEFCBH)
1632 PEFF2 = PEFF ! JSK MODS
1634 ! WRITE(98,1035)PEF,PEFCBH,LC,LET,WKL,VWS
1635 WRITE(message,1035)PEF,PEFCBH,LC,LET,WKL,VWS
1636 CALL wrf_message( message )
1639 ! WRITE(98,1035)PEF,PEFCBH,LC,LET,WKL,VWS
1640 !*****************************************************************
1642 ! COMPUTE DOWNDRAFT PROPERTIES *
1644 !*****************************************************************
1648 devap:IF(ISHALL.EQ.1)THEN
1652 !...start downdraft about 150 mb above cloud base...
1654 ! KSTART=MAX0(KPBL,KLCL)
1655 ! KSTART=KPBL ! Changed 7/23/99
1656 KSTART=KPBL+1 ! Changed 7/23/99
1659 DPPP = P0(KSTART)-P0(NK)
1660 ! IF(DPPP.GT.200.E2)THEN
1661 IF(DPPP.GT.150.E2)THEN
1666 KLFS = MIN0(KLFS,LET-1)
1669 !...if LFS is not at least 50 mb above cloud base (implying that the
1670 !...level of equil temp, LET, is just above cloud base) do not allow a
1673 IF((P0(KSTART)-P0(LFS)).GT.50.E2)THEN
1674 THETED(LFS) = THETEE(LFS)
1677 !...call tpmix2dd to find wet-bulb temp, qv...
1679 call tpmix2dd(p0(lfs),theted(lfs),tz(lfs),qss,i,j)
1680 THTAD(LFS)=TZ(LFS)*(P00/P0(LFS))**(0.2854*(1.-0.28*QSS))
1682 !...TAKE A FIRST GUESS AT THE INITIAL DOWNDRAFT MASS FLUX...
1684 TVD(LFS)=TZ(LFS)*(1.+0.608*QSS)
1685 RDD=P0(LFS)/(R*TVD(LFS))
1690 RHBAR = RH(LFS)*DP(LFS)
1692 DO ND = LFS-1,KSTART,-1
1694 DER(ND)=DER(LFS)*EMS(ND)/EMS(LFS)
1696 DMF(ND)=DMF(ND1)+DER(ND)
1697 THETED(ND)=(THETED(ND1)*DMF(ND1)+THETEE(ND)*DER(ND))/DMF(ND)
1698 QD(ND)=(QD(ND1)*DMF(ND1)+Q0(ND)*DER(ND))/DMF(ND)
1700 RHBAR = RHBAR+RH(ND)*DP(ND)
1703 DMFFRC = 2.*(1.-RHBAR) ! Kain (2004) eq. 11
1705 !...Calculate melting effect
1706 !... first, compute total frozen precipitation generated...
1710 PPTMLT = PPTMLT+PPTICE(NK)
1713 !...For now, calculate melting effect as if DMF = -UMF at KLCL, i.e., as
1714 !...if DMFFRC=1. Otherwise, for small DMFFRC, DTMELT gets too large!
1716 DTMELT = RLF*PPTMLT/(CP*UMF(KLCL))
1720 LDT = MIN0(LFS-1,KSTART-1)
1722 call tpmix2dd(p0(kstart),theted(kstart),tz(kstart),qss,i,j)
1724 tz(kstart) = tz(kstart)-dtmelt
1725 ES=ALIQ*EXP((BLIQ*TZ(KSTART)-CLIQ)/(TZ(KSTART)-DLIQ))
1726 QSS=0.622*ES/(P0(KSTART)-ES)
1727 THETED(KSTART)=TZ(KSTART)*(1.E5/P0(KSTART))**(0.2854*(1.-0.28*QSS))* &
1728 EXP((3374.6525/TZ(KSTART)-2.5403)*QSS*(1.+0.81*QSS))
1730 LDT = MIN0(LFS-1,KSTART-1)
1733 THETED(ND) = THETED(KSTART)
1736 !...call tpmix2dd to find wet bulb temp, saturation mixing ratio...
1738 call tpmix2dd(p0(nd),theted(nd),tz(nd),qss,i,j)
1741 !...specify RH decrease of 20%/km in downdraft...
1743 RHH = 1.-0.2/1000.*(Z0(KSTART)-Z0(ND))
1745 !...adjust downdraft TEMP, Q to specified RH:
1748 DSSDT=(CLIQ-BLIQ*DLIQ)/((TZ(ND)-DLIQ)*(TZ(ND)-DLIQ))
1750 DTMP=RL*QSS*(1.-RHH)/(CP+RL*RHH*QSS*DSSDT)
1752 ES=RHH*ALIQ*EXP((BLIQ*T1RH-CLIQ)/(T1RH-DLIQ))
1753 QSRH=0.622*ES/(P0(ND)-ES)
1755 !...CHECK TO SEE IF MIXING RATIO AT SPECIFIED RH IS LESS THAN ACTUAL
1756 !...MIXING RATIO...IF SO, ADJUST TO GIVE ZERO EVAPORATION...
1758 IF(QSRH.LT.QD(ND))THEN
1760 T1RH=TZ(ND)+(QSS-QSRH)*RL/CP
1766 TVD(nd) = tz(nd)*(1.+0.608*qsd(nd))
1767 IF(TVD(ND).GT.TV0(ND).OR.ND.EQ.1)THEN
1772 IF((P0(LDB)-P0(LFS)) .gt. 50.E2)THEN ! minimum Downdraft depth!
1775 DDR(ND) = -DMF(KSTART)*DP(ND)/DPDD
1777 DMF(ND) = DMF(ND1)+DDR(ND)
1778 TDER=TDER+(QSD(nd)-QD(ND))*DDR(ND)
1780 THTAD(ND)=TZ(ND)*(P00/P0(ND))**(0.2854*(1.-0.28*QD(ND)))
1786 !...IF DOWNDRAFT DOES NOT EVAPORATE ANY WATER FOR SPECIFIED RELATIVE
1787 !...HUMIDITY, NO DOWNDRAFT IS ALLOWED...
1789 d_mf: IF(TDER.LT.1.)THEN
1791 !3004 FORMAT(' ','No Downdraft!; I=',I3,2X,'J=',I3,'ISHALL =',I2)
1809 DDINC = -DMFFRC*UMF(KLCL)/DMF(KSTART)
1811 IF(TDER*DDINC.GT.TRPPT)THEN
1816 DMF(NK)=DMF(NK)*DDINC
1817 DER(NK)=DER(NK)*DDINC
1818 DDR(NK)=DDR(NK)*DDINC
1824 ! write(98,*)'PRECIP EFFICIENCY =',PEFF
1825 write(message,*)'PRECIP EFFICIENCY =',PEFF
1826 CALL wrf_message(message)
1831 !...ADJUST UPDRAFT MASS FLUX, MASS DETRAINMENT RATE, AND LIQUID WATER AN
1832 ! DETRAINMENT RATES TO BE CONSISTENT WITH THE TRANSFER OF THE ESTIMATE
1833 ! FROM THE UPDRAFT TO THE DOWNDRAFT AT THE LFS...
1836 ! UMF(NK)=UMF(NK)*UPDINC
1837 ! UDR(NK)=UDR(NK)*UPDINC
1838 ! UER(NK)=UER(NK)*UPDINC
1839 ! PPTLIQ(NK)=PPTLIQ(NK)*UPDINC
1840 ! PPTICE(NK)=PPTICE(NK)*UPDINC
1841 ! DETLQ(NK)=DETLQ(NK)*UPDINC
1842 ! DETIC(NK)=DETIC(NK)*UPDINC
1845 !...ZERO OUT THE ARRAYS FOR DOWNDRAFT DATA AT LEVELS ABOVE AND BELOW THE
1875 !...SET LIMITS ON THE UPDRAFT AND DOWNDRAFT MASS FLUXES SO THAT THE INFLOW
1876 ! INTO CONVECTIVE DRAFTS FROM A GIVEN LAYER IS NO MORE THAN IS AVAILABLE
1877 ! IN THAT LAYER INITIALLY...
1882 IF((UER(NK)-DER(NK)).GT.1.e-3)THEN
1883 AINCM1=EMS(NK)/((UER(NK)-DER(NK))*TIMEC)
1884 AINCMX=AMIN1(AINCMX,AINCM1)
1888 IF(AINCMX.LT.AINC)AINC=AINCMX
1890 !...SAVE THE RELEVENT VARIABLES FOR A UNIT UPDRAFT AND DOWNDRAFT...THEY WILL
1891 !...BE ITERATIVELY ADJUSTED BY THE FACTOR AINC TO SATISFY THE STABILIZATION
1897 DETLQ2(NK)=DETLQ(NK)
1898 DETIC2(NK)=DETIC(NK)
1911 IF(ISHALL.EQ.1)THEN ! First for shallow convection
1913 ! No iteration for shallow convection; if turbulent kinetic energy (TKE) is available
1914 ! from a turbulence parameterization, scale cloud-base updraft mass flux as a function
1915 ! of TKE, but for now, just specify shallow-cloud mass flux using TKEMAX = 5...
1917 !...find the maximum TKE value between LC and KLCL...
1920 ! DO 173 K = LC,KLCL
1922 ! TKEMAX = AMAX1(TKEMAX,Q2(I,J,NK))
1924 ! TKEMAX = AMIN1(TKEMAX,10.)
1925 ! TKEMAX = AMAX1(TKEMAX,5.)
1927 !c...3_24_99...DPMIN was changed for shallow convection so that it is the
1928 !c... the same as for deep convection (5.E3). Since this doubles
1929 !c... (roughly) the value of DPTHMX, add a factor of 0.5 to calcu-
1930 !c... lation of EVAC...
1931 !c EVAC = TKEMAX*0.1
1932 EVAC = 0.5*TKEMAX*0.1
1933 ! AINC = 0.1*DPTHMX*DXIJ*DXIJ/(VMFLCL*G*TIMEC)
1934 ! AINC = EVAC*DPTHMX*DX(I,J)*DX(I,J)/(VMFLCL*G*TIMEC)
1935 AINC = EVAC*DPTHMX*DXSQ/(VMFLCL*G*TIMEC)
1939 UMF(NK)=UMF2(NK)*AINC
1940 DMF(NK)=DMF2(NK)*AINC
1941 DETLQ(NK)=DETLQ2(NK)*AINC
1942 DETIC(NK)=DETIC2(NK)*AINC
1943 UDR(NK)=UDR2(NK)*AINC
1944 UER(NK)=UER2(NK)*AINC
1945 DER(NK)=DER2(NK)*AINC
1946 DDR(NK)=DDR2(NK)*AINC
1948 ENDIF ! Otherwise for deep convection
1949 ! use iterative procedure to find mass fluxes...
1950 iter: DO NCOUNT=1,10
1952 !*****************************************************************
1954 ! COMPUTE PROPERTIES FOR COMPENSATIONAL SUBSIDENCE *
1956 !*****************************************************************
1958 !...DETERMINE OMEGA VALUE NECESSARY AT TOP AND BOTTOM OF EACH LAYER TO
1959 !...SATISFY MASS CONTINUITY...
1963 DOMGDP(NK)=-(UER(NK)-DER(NK)-UDR(NK)-DDR(NK))*EMSD(NK)
1965 OMG(NK)=OMG(NK-1)-DP(NK-1)*DOMGDP(NK-1)
1966 ABSOMG = ABS(OMG(NK))
1967 ABSOMGTC = ABSOMG*TIMEC
1968 FRDP = 0.75*DP(NK-1)
1969 IF(ABSOMGTC.GT.FRDP)THEN
1978 NSTEP=NINT(TIMEC/DTT+1)
1979 DTIME=TIMEC/FLOAT(NSTEP)
1980 FXM(NK)=OMG(NK)*DXSQ/G
1983 !...DO AN UPSTREAM/FORWARD-IN-TIME ADVECTION OF THETA, QV...
1987 !...ASSIGN THETA AND Q VALUES AT THE TOP AND BOTTOM OF EACH LAYER BASED ON
1988 !...SIGN OF OMEGA...
1997 IF(OMG(NK).LE.0.)THEN
1998 THFXIN(NK)=-FXM(NK)*THPA(NK-1)
1999 QFXIN(NK)=-FXM(NK)*QPA(NK-1)
2000 THFXOUT(NK-1)=THFXOUT(NK-1)+THFXIN(NK)
2001 QFXOUT(NK-1)=QFXOUT(NK-1)+QFXIN(NK)
2003 THFXOUT(NK)=FXM(NK)*THPA(NK)
2004 QFXOUT(NK)=FXM(NK)*QPA(NK)
2005 THFXIN(NK-1)=THFXIN(NK-1)+THFXOUT(NK)
2006 QFXIN(NK-1)=QFXIN(NK-1)+QFXOUT(NK)
2010 !...UPDATE THE THETA AND QV VALUES AT EACH LEVEL...
2013 THPA(NK)=THPA(NK)+(THFXIN(NK)+UDR(NK)*THTAU(NK)+DDR(NK)* &
2014 THTAD(NK)-THFXOUT(NK)-(UER(NK)-DER(NK))*THTA0(NK))* &
2016 QPA(NK)=QPA(NK)+(QFXIN(NK)+UDR(NK)*QDT(NK)+DDR(NK)*QD(NK)- &
2017 QFXOUT(NK)-(UER(NK)-DER(NK))*Q0(NK))*DTIME*EMSD(NK)
2025 !...CHECK TO SEE IF MIXING RATIO DIPS BELOW ZERO ANYWHERE; IF SO, BORROW
2026 !...MOISTURE FROM ADJACENT LAYERS TO BRING IT BACK UP ABOVE ZERO...
2029 IF(QG(NK).LT.0.)THEN
2030 IF(NK.EQ.1)THEN ! JSK MODS
2031 ! PRINT *,' PROBLEM WITH KF SCHEME: ' ! JSK MODS
2032 ! PRINT *,'QG = 0 AT THE SURFACE!!!!!!!' ! JSK MODS
2033 CALL wrf_error_fatal ( 'QG, QG(NK).LT.0') ! JSK MODS
2039 TMA=QG(NK1)*EMS(NK1)
2040 TMB=QG(NK-1)*EMS(NK-1)
2041 TMM=(QG(NK)-1.E-9)*EMS(NK )
2042 BCOEFF=-TMM/((TMA*TMA)/TMB+TMB)
2043 ACOEFF=BCOEFF*TMA/TMB
2047 QVDIFF=(QG(NK1)-TMA*EMSD(NK1))*100./QG(NK1)
2048 ! IF(ABS(QVDIFF).GT.1.)THEN
2049 ! PRINT *,'!!!WARNING!!! CLOUD BASE WATER VAPOR CHANGES BY ', &
2051 ! '% WHEN MOISTURE IS BORROWED TO PREVENT NEGATIVE ', &
2052 ! 'VALUES IN KAIN-FRITSCH'
2056 QG(NK1)=TMA*EMSD(NK1)
2057 QG(NK-1)=TMB*EMSD(NK-1)
2060 TOPOMG=(UDR(LTOP)-UER(LTOP))*DP(LTOP)*EMSD(LTOP)
2061 IF(ABS(TOPOMG-OMG(LTOP)).GT.1.E-3)THEN
2062 ! WRITE(99,*)'ERROR: MASS DOES NOT BALANCE IN KF SCHEME; &
2063 ! TOPOMG, OMG =',TOPOMG,OMG(LTOP)
2064 ! TOPOMG, OMG =',TOPOMG,OMG(LTOP)
2070 !...CONVERT THETA TO T...
2073 EXN(NK)=(P00/P0(NK))**(0.2854*(1.-0.28*QG(NK)))
2074 TG(NK)=THTAG(NK)/EXN(NK)
2075 TVG(NK)=TG(NK)*(1.+0.608*QG(NK))
2081 !*******************************************************************
2083 ! COMPUTE NEW CLOUD AND CHANGE IN AVAILABLE BUOYANT ENERGY. *
2085 !*******************************************************************
2087 !...THE FOLLOWING COMPUTATIONS ARE SIMILAR TO THAT FOR UPDRAFT
2093 !...FIND THE THERMODYNAMIC CHARACTERISTICS OF THE LAYER BY
2094 !...MASS-WEIGHTING THE CHARACTERISTICS OF THE INDIVIDUAL MODEL
2098 TMIX=TMIX+DP(NK)*TG(NK)
2099 QMIX=QMIX+DP(NK)*QG(NK)
2103 ES=ALIQ*EXP((TMIX*BLIQ-CLIQ)/(TMIX-DLIQ))
2104 QSS=0.622*ES/(PMIX-ES)
2106 !...REMOVE SUPERSATURATION FOR DIAGNOSTIC PURPOSES, IF NECESSARY...
2110 CPM=CP*(1.+0.887*QMIX)
2111 DSSDT=QSS*(CLIQ-BLIQ*DLIQ)/((TMIX-DLIQ)*(TMIX-DLIQ))
2112 DQ=(QMIX-QSS)/(1.+RL*DSSDT/CPM)
2118 EMIX=QMIX*PMIX/(0.622+QMIX)
2124 value=(indlu-1)*binc+astrt
2125 aintrp=(a1-value)/binc
2126 tlog=aintrp*alu(indlu+1)+(1-aintrp)*alu(indlu)
2127 TDPT=(CLIQ-DLIQ*TLOG)/(BLIQ-TLOG)
2128 TLCL=TDPT-(.212+1.571E-3*(TDPT-T00)-4.36E-4*(TMIX-T00))*(TMIX-TDPT)
2129 TLCL=AMIN1(TLCL,TMIX)
2131 TVLCL=TLCL*(1.+0.608*QMIX)
2132 ZLCL = ZMIX+(TLCL-TMIX)/GDRY
2135 IF(ZLCL.LE.Z0(NK))THEN
2140 DLP=(ZLCL-Z0(K))/(Z0(KLCL)-Z0(K))
2142 !...ESTIMATE ENVIRONMENTAL TEMPERATURE AND MIXING RATIO AT THE LCL...
2144 TENV=TG(K)+(TG(KLCL)-TG(K))*DLP
2145 QENV=QG(K)+(QG(KLCL)-QG(K))*DLP
2146 TVEN=TENV*(1.+0.608*QENV)
2147 PLCL=P0(K)+(P0(KLCL)-P0(K))*DLP
2148 THETEU(K)=TMIX*(1.E5/PMIX)**(0.2854*(1.-0.28*QMIX))* &
2149 EXP((3374.6525/TLCL-2.5403)*QMIX*(1.+0.81*QMIX))
2151 !...COMPUTE ADJUSTED ABE(ABEG).
2156 THETEU(NK1) = THETEU(NK)
2158 call tpmix2dd(p0(nk1),theteu(nk1),tgu(nk1),qgu(nk1),i,j)
2160 TVQU(NK1)=TGU(NK1)*(1.+0.608*QGU(NK1)-QLIQ(NK1)-QICE(NK1))
2163 DILBE=((TVLCL+TVQU(NK1))/(TVEN+TVG(NK1))-1.)*DZZ
2166 DILBE=((TVQU(NK)+TVQU(NK1))/(TVG(NK)+TVG(NK1))-1.)*DZZ
2168 IF(DILBE.GT.0.)ABEG=ABEG+DILBE*G
2170 !...DILUTE BY ENTRAINMENT BY THE RATE AS ORIGINAL UPDRAFT...
2172 CALL ENVIRTHT(P0(NK1),TG(NK1),QG(NK1),THTEEG(NK1),ALIQ,BLIQ,CLIQ,DLIQ)
2173 THETEU(NK1)=THETEU(NK1)*DDILFRC(NK1)+THTEEG(NK1)*(1.-DDILFRC(NK1))
2176 !...ASSUME AT LEAST 90% OF CAPE (ABE) IS REMOVED BY CONVECTION DURING
2177 !...THE PERIOD TIMEC...
2181 ! write(98,*)'TAU, I, J, =',NTSD,I,J
2182 ! WRITE(98,1060)FABE
2186 DABE=AMAX1(ABE-ABEG,0.1*ABE)
2188 IF(FABE.GT.1. .and. ISHALL.EQ.0)THEN
2189 ! WRITE(98,*)'UPDRAFT/DOWNDRAFT COUPLET INCREASES CAPE AT THIS
2190 ! *GRID POINT; NO CONVECTION ALLOWED!'
2191 !BSINGH - For WRFCuP scheme
2192 !BSINGH - Improvised based on the following reason
2193 !Before every "RETURN" statement assign ishall=2
2194 ! wig, 29-Aug-2006: Indicate no convection occurred in ishall.
2200 IF(ABS(AINC-AINCOLD).LT.0.0001)THEN
2205 DFDA=(FABE-FABEOLD)/(AINC-AINCOLD)
2214 IF(AINC/AINCMX.GT.0.999.AND.FABE.GT.1.05-STAB)THEN
2216 ! write(98,*)'TAU, I, J, =',NTSD,I,J
2217 ! WRITE(98,1055)FABE
2221 IF((FABE.LE.1.05-STAB.AND.FABE.GE.0.95-STAB) .or. NCOUNT.EQ.10)THEN
2224 IF(NCOUNT.GT.10)THEN
2226 ! write(98,*)'TAU, I, J, =',NTSD,I,J
2227 ! WRITE(98,1060)FABE
2232 !...IF MORE THAN 10% OF THE ORIGINAL CAPE REMAINS, INCREASE THE CONVECTIVE
2233 !...MASS FLUX BY THE FACTOR AINC:
2238 IF(DABE.LT.1.e-4)THEN
2243 AINC=AINC*STAB*ABE/DABE
2246 ! AINC=AMIN1(AINCMX,AINC)
2247 AINC=AMIN1(AINCMX,AINC)
2248 !...IF AINC BECOMES VERY SMALL, EFFECTS OF CONVECTION ! JSK MODS
2249 !...WILL BE MINIMAL SO JUST IGNORE IT... ! JSK MODS
2250 IF(AINC.LT.0.05)then
2251 !BSINGH - For WRFCuP scheme
2252 !BSINGH - Improvised based on the following reason
2253 !Before every "RETURN" statement assign ishall=2
2254 ! wig, 29-Aug-2006: Indicate no convection occurred in ishall.
2260 ! AINC=AMAX1(AINC,0.05) ! JSK MODS
2263 ! IF (XTIME.LT.10.)THEN
2264 ! WRITE(98,1080)LFS,LDB,LDT,TIMEC,TADVEC,NSTEP,NCOUNT,
2268 UMF(NK)=UMF2(NK)*AINC
2269 DMF(NK)=DMF2(NK)*AINC
2270 DETLQ(NK)=DETLQ2(NK)*AINC
2271 DETIC(NK)=DETIC2(NK)*AINC
2272 UDR(NK)=UDR2(NK)*AINC
2273 UER(NK)=UER2(NK)*AINC
2274 DER(NK)=DER2(NK)*AINC
2275 DDR(NK)=DDR2(NK)*AINC
2278 !...GO BACK UP FOR ANOTHER ITERATION...
2283 ! get the cloud fraction for layer NK+1=NK1
2284 IF(ISHALL.EQ.1) THEN
2286 UMF_new = UMF(NK)/DXSQ
2287 xcldfra = 0.07*alog(1.+(500.*UMF_new))
2288 xcldfra = amax1(0.01,xcldfra)
2289 cldfra_sh_KF(I,NK,J) = amin1(0.2,xcldfra)
2293 UMF_new = UMF(NK)/DXSQ
2294 xcldfra = 0.14*alog(1.+(500.*UMF_new))
2295 xcldfra = amax1(0.01,xcldfra)
2296 cldfra_dp_KF(I,NK,J) = amin1(0.6,xcldfra)
2301 !Save up/down entrainment/detrainment rates as 3D variables
2302 IF (KF_EDRATES == 1) THEN
2304 UDR_KF(I,NK,J)=UDR(NK)
2305 DDR_KF(I,NK,J)=DDR(NK)
2306 UER_KF(I,NK,J)=UER(NK)
2307 DER_KF(I,NK,J)=DER(NK)
2311 !...COMPUTE HYDROMETEOR TENDENCIES AS IS DONE FOR T, QV...
2313 !...FRC2 IS THE FRACTION OF TOTAL CONDENSATE ! PPT FB MODS
2314 !...GENERATED THAT GOES INTO PRECIPITIATION ! PPT FB MODS
2316 ! Redistribute hydormeteors according to the final mass-flux values:
2319 FRC2=PPTFLX/(CPR*AINC) ! PPT FB MODS
2328 RAINFB(NK)=PPTLIQ(NK)*AINC*FBFRC*FRC2 ! PPT FB MODS
2329 SNOWFB(NK)=PPTICE(NK)*AINC*FBFRC*FRC2 ! PPT FB MODS
2333 !...ASSIGN HYDROMETEORS CONCENTRATIONS AT THE TOP AND BOTTOM OF EACH LAYER
2334 !...BASED ON THE SIGN OF OMEGA...
2347 IF(OMG(NK).LE.0.)THEN
2348 QLFXIN(NK)=-FXM(NK)*QLPA(NK-1)
2349 QIFXIN(NK)=-FXM(NK)*QIPA(NK-1)
2350 QRFXIN(NK)=-FXM(NK)*QRPA(NK-1)
2351 QSFXIN(NK)=-FXM(NK)*QSPA(NK-1)
2352 QLFXOUT(NK-1)=QLFXOUT(NK-1)+QLFXIN(NK)
2353 QIFXOUT(NK-1)=QIFXOUT(NK-1)+QIFXIN(NK)
2354 QRFXOUT(NK-1)=QRFXOUT(NK-1)+QRFXIN(NK)
2355 QSFXOUT(NK-1)=QSFXOUT(NK-1)+QSFXIN(NK)
2357 QLFXOUT(NK)=FXM(NK)*QLPA(NK)
2358 QIFXOUT(NK)=FXM(NK)*QIPA(NK)
2359 QRFXOUT(NK)=FXM(NK)*QRPA(NK)
2360 QSFXOUT(NK)=FXM(NK)*QSPA(NK)
2361 QLFXIN(NK-1)=QLFXIN(NK-1)+QLFXOUT(NK)
2362 QIFXIN(NK-1)=QIFXIN(NK-1)+QIFXOUT(NK)
2363 QRFXIN(NK-1)=QRFXIN(NK-1)+QRFXOUT(NK)
2364 QSFXIN(NK-1)=QSFXIN(NK-1)+QSFXOUT(NK)
2368 !...UPDATE THE HYDROMETEOR CONCENTRATION VALUES AT EACH LEVEL...
2371 QLPA(NK)=QLPA(NK)+(QLFXIN(NK)+DETLQ(NK)-QLFXOUT(NK))*DTIME*EMSD(NK)
2372 QIPA(NK)=QIPA(NK)+(QIFXIN(NK)+DETIC(NK)-QIFXOUT(NK))*DTIME*EMSD(NK)
2373 QRPA(NK)=QRPA(NK)+(QRFXIN(NK)-QRFXOUT(NK)+RAINFB(NK))*DTIME*EMSD(NK) ! PPT FB MODS
2374 QSPA(NK)=QSPA(NK)+(QSFXIN(NK)-QSFXOUT(NK)+SNOWFB(NK))*DTIME*EMSD(NK) ! PPT FB MODS
2385 !Save convective timescale (TIMEC) as 2D variable
2386 IF (KF_EDRATES == 1) THEN
2390 !...CLEAN THINGS UP, CALCULATE CONVECTIVE FEEDBACK TENDENCIES FOR THIS
2393 ! IF (XTIME.LT.10.)THEN
2394 ! WRITE(98,1080)LFS,LDB,LDT,TIMEC,TADVEC,NSTEP,NCOUNT,FABE,AINC
2397 ! WRITE(98,1080)LFS,LDB,LDT,TIMEC,TADVEC,NSTEP,NCOUNT,FABE,AINC
2398 WRITE(message,1080)LFS,LDB,LDT,TIMEC,TADVEC,NSTEP,NCOUNT,FABE,AINC
2399 CALL wrf_message(message)
2403 !...SEND FINAL PARAMETERIZED VALUES TO OUTPUT FILES...
2407 ! if(I.eq.16 .and. J.eq.41)then
2408 ! IF(ISTOP.EQ.1)THEN
2410 ! write(98,*)'At t(h), I, J =',float(NTSD)*72./3600.,I,J
2411 write(message,*)'P(LC), DTP, WKL, WKLCL =',p0(LC)/100., &
2412 TLCL+DTLCL+dtrh-TENV,WKL,WKLCL
2413 call wrf_message(message)
2414 write(message,*)'TLCL, DTLCL, DTRH, TENV =',TLCL,DTLCL, &
2416 call wrf_message(message)
2417 WRITE(message,1025)KLCL,ZLCL,DTLCL,LTOP,P0(LTOP),IFLAG, &
2418 TMIX-T00,PMIX,QMIX,ABE
2419 call wrf_message(message)
2420 WRITE(message,1030)P0(LET)/100.,P0(LTOP)/100.,VMFLCL,PLCL/100., &
2422 call wrf_message(message)
2423 WRITE(message,1035)PEF,PEFCBH,LC,LET,WKL,VWS
2424 call wrf_message(message)
2425 write(message,*)'PRECIP EFFICIENCY =',PEFF
2426 call wrf_message(message)
2427 WRITE(message,1080)LFS,LDB,LDT,TIMEC,TADVEC,NSTEP,NCOUNT,FABE,AINC
2428 call wrf_message(message)
2431 WRITE(message,1070)' P ',' DP ',' DT K/D ',' DR K/D ',' OMG ', &
2432 ' DOMGDP ',' UMF ',' UER ',' UDR ',' DMF ',' DER ' &
2433 ,' DDR ',' EMS ',' W0 ',' DETLQ ',' DETIC '
2434 call wrf_message(message)
2435 write(message,*)'just before DO 300...'
2436 call wrf_message(message)
2440 DTT=(TG(K)-T0(K))*86400./TIMEC
2442 DR=-(QG(K)-Q0(K))*RL*86400./(TIMEC*CP)
2443 UDFRC=UDR(K)*TIMEC*EMSD(K)
2444 UEFRC=UER(K)*TIMEC*EMSD(K)
2445 DDFRC=DDR(K)*TIMEC*EMSD(K)
2446 DEFRC=-DER(K)*TIMEC*EMSD(K)
2447 WRITE(message,1075)P0(K)/100.,DP(K)/100.,DTT,DR,OMG(K),DOMGDP(K)*1.E4, &
2448 UMF(K)/1.E6,UEFRC,UDFRC,DMF(K)/1.E6,DEFRC,DDFRC,EMS(K)/1.E11, &
2449 W0AVG1D(K)*1.E2,DETLQ(K)*TIMEC*EMSD(K)*1.E3,DETIC(K)* &
2451 call wrf_message(message)
2453 WRITE(message,1085)'K','P','Z','T0','TG','DT','TU','TD','Q0','QG', &
2454 'DQ','QU','QD','QLG','QIG','QRG','QSG','RH0','RHG'
2455 call wrf_message(message)
2460 IF(K.LT.LC.OR.K.GT.LTOP)TUC=0.
2462 IF((K.LT.LDB.OR.K.GT.LDT).AND.K.NE.LFS)TDC=0.
2463 IF(T0(K).LT.T00)THEN
2464 ES=ALIQ*EXP((BLIQ*TG(K)-CLIQ)/(TG(K)-DLIQ))
2466 ES=ALIQ*EXP((BLIQ*TG(K)-CLIQ)/(TG(K)-DLIQ))
2468 QGS=ES*0.622/(P0(K)-ES)
2471 WRITE(message,1090)K,P0(K)/100.,Z0(K),T0(K)-T00,TG(K)-T00,DTT,TUC, &
2472 TDC,Q0(K)*1000.,QG(K)*1000.,(QG(K)-Q0(K))*1000.,QU(K)* &
2473 1000.,QD(K)*1000.,QLG(K)*1000.,QIG(K)*1000.,QRG(K)*1000., &
2474 QSG(K)*1000.,RH0,RHG
2475 call wrf_message(message)
2478 !...IF CALCULATIONS ABOVE SHOW AN ERROR IN THE MASS BUDGET, PRINT OUT A
2479 !...TO BE USED LATER FOR DIAGNOSTIC PURPOSES, THEN ABORT RUN...
2481 ! IF(ISTOP.EQ.1 .or. ISHALL.EQ.1)THEN
2483 ! IF(ISHALL.NE.1)THEN
2484 ! write(98,4421)i,j,iyr,imo,idy,ihr,imn
2485 ! write(98)i,j,iyr,imo,idy,ihr,imn,kl
2491 write(98,4455) p0(k)/100.,t0(k)-273.16,q0(k)*1000., &
2492 u0(k),v0(k),W0AVG1D(K),dp(k),tke(k)
2493 ! write(98) p0,t0,q0,u0,v0,w0,dp,tke
2494 ! WRITE(98,1115)Z0(K),P0(K)/100.,T0(K)-273.16,Q0(K)*1000.,
2495 ! * U0(K),V0(K),DP(K)/100.,W0AVG(I,J,K)
2498 CALL wrf_error_fatal ( 'KAIN-FRITSCH, istop=1, diags' )
2503 CNDTNF=(1.-EQFRC(LFS))*(QLIQ(LFS)+QICE(LFS))*DMF(LFS)
2504 PRATEC(I,J)=PPTFLX*(1.-FBFRC)/DXSQ
2505 RAINCV(I,J)=DT*PRATEC(I,J) ! PPT FB MODS
2506 ! RAINCV(I,J)=.1*.5*DT*PPTFLX/DXSQ ! PPT FB MODS
2507 ! RNC=0.1*TIMEC*PPTFLX/DXSQ
2509 IF(ISHALL.EQ.0.AND.IPRNT)write (98,909)I,J,RNC
2511 ! WRITE(98,1095)CPR*AINC,TDER+PPTFLX+CNDTNF
2513 ! EVALUATE MOISTURE BUDGET...
2521 QINIT=QINIT+Q0(NK)*EMS(NK)
2522 QFNL=QFNL+QG(NK)*EMS(NK)
2523 QFNL=QFNL+(QLG(NK)+QIG(NK)+QRG(NK)+QSG(NK))*EMS(NK)
2525 QFNL=QFNL+PPTFLX*TIMEC*(1.-FBFRC) ! PPT FB MODS
2526 ! QFNL=QFNL+PPTFLX*TIMEC ! PPT FB MODS
2527 ERR2=(QFNL-QINIT)*100./QINIT
2528 IF(IPRNT)WRITE(98,1110)QINIT,QFNL,ERR2
2529 IF(ABS(ERR2).GT.0.05 .AND. ISTOP.EQ.0)THEN
2530 ! write(99,*)'!!!!!!!! MOISTURE BUDGET ERROR IN KFPARA !!!'
2531 ! WRITE(99,1110)QINIT,QFNL,ERR2
2538 ! write(99,4455) p0(k)/100.,t0(k)-273.16,q0(k)*1000., &
2539 ! u0(k),v0(k),W0AVG1D(K),dp(k)
2540 ! write(98) p0,t0,q0,u0,v0,w0,dp,tke
2541 ! WRITE(98,1115)P0(K)/100.,T0(K)-273.16,Q0(K)*1000., &
2542 ! U0(K),V0(K),W0AVG1D(K),dp(k)/100.,tke(k)
2543 WRITE(98,4456)P0(K)/100.,T0(K)-273.16,Q0(K)*1000., &
2544 U0(K),V0(K),W0AVG1D(K),dp(k)/100.,tke(k)
2551 1115 FORMAT (2X,F7.2,2X,F5.1,2X,F6.3,2(2X,F5.1),2X,F7.2,2X,F7.4)
2553 IF(PPTFLX.GT.0.)THEN
2554 RELERR=ERR2*QINIT/(PPTFLX*TIMEC)
2559 WRITE(98,1120)RELERR
2560 WRITE(98,*)'TDER, CPR, TRPPT =', &
2561 TDER,CPR*AINC,TRPPT*AINC
2564 !...FEEDBACK TO RESOLVABLE SCALE TENDENCIES.
2566 !...IF THE ADVECTIVE TIME PERIOD (TADVEC) IS LESS THAN SPECIFIED MINIMUM
2567 !...TIMEC, ALLOW FEEDBACK TO OCCUR ONLY DURING TADVEC...
2569 IF(TADVEC.LT.TIMEC)NIC=NINT(TADVEC/DT)
2570 NCA(I,J) = REAL(NIC)*DT
2578 ! IF(IMOIST(INEST).NE.2)THEN
2580 !...IF HYDROMETEORS ARE NOT ALLOWED, THEY MUST BE EVAPORATED OR SUBLIMATED
2581 !...AND FED BACK AS VAPOR, ALONG WITH ASSOCIATED CHANGES IN TEMPERATURE.
2582 !...NOTE: THIS WILL INTRODUCE CHANGES IN THE CONVECTIVE TEMPERATURE AND
2583 !...WATER VAPOR FEEDBACK TENDENCIES AND MAY LEAD TO SUPERSATURATED VALUE
2586 ! RLC=XLV0-XLV1*TG(K)
2587 ! RLS=XLS0-XLS1*TG(K)
2588 ! CPM=CP*(1.+0.887*QG(K))
2589 ! TG(K)=TG(K)-(RLC*(QLG(K)+QRG(K))+RLS*(QIG(K)+QSG(K)))/CPM
2590 ! QG(K)=QG(K)+(QLG(K)+QRG(K)+QIG(K)+QSG(K))
2597 !...IF ICE PHASE IS NOT ALLOWED, MELT ALL FROZEN HYDROMETEORS...
2601 CPM=CP*(1.+0.887*QG(K))
2602 TG(K)=TG(K)-(QIG(K)+QSG(K))*RLF/CPM
2603 DQCDT(K)=(QLG(K)+QIG(K)-QL0(K)-QI0(K))/TIMEC
2605 DQRDT(K)=(QRG(K)+QSG(K)-QR0(K)-QS0(K))/TIMEC
2607 ELSEIF(.NOT. F_QS)THEN
2609 !...IF ICE PHASE IS ALLOWED, BUT MIXED PHASE IS NOT, MELT FROZEN HYDROMETEORS
2610 !...BELOW THE MELTING LEVEL, FREEZE LIQUID WATER ABOVE THE MELTING LEVEL
2612 CPM=CP*(1.+0.887*QG(K))
2614 TG(K)=TG(K)-(QIG(K)+QSG(K))*RLF/CPM
2616 TG(K)=TG(K)+(QLG(K)+QRG(K))*RLF/CPM
2618 DQCDT(K)=(QLG(K)+QIG(K)-QL0(K)-QI0(K))/TIMEC
2620 DQRDT(K)=(QRG(K)+QSG(K)-QR0(K)-QS0(K))/TIMEC
2624 !...IF MIXED PHASE HYDROMETEORS ARE ALLOWED, FEED BACK CONVECTIVE TENDENCIES
2625 !...OF HYDROMETEORS DIRECTLY...
2627 DQCDT(K)=(QLG(K)-QL0(K))/TIMEC
2628 DQSDT(K)=(QSG(K)-QS0(K))/TIMEC
2629 DQRDT(K)=(QRG(K)-QR0(K))/TIMEC
2631 DQIDT(K)=(QIG(K)-QI0(K))/TIMEC
2633 DQSDT(K)=DQSDT(K)+(QIG(K)-QI0(K))/TIMEC
2636 ! PRINT *,'THIS COMBINATION OF IMOIST, IEXICE, IICE NOT ALLOWED!'
2637 CALL wrf_error_fatal ( 'KAIN-FRITSCH, THIS MICROPHYSICS CHOICE IS NOT ALLOWED' )
2639 DTDT(K)=(TG(K)-T0(K))/TIMEC
2640 DQDT(K)=(QG(K)-Q0(K))/TIMEC
2642 PRATEC(I,J)=PPTFLX*(1.-FBFRC)/DXSQ
2643 RAINCV(I,J)=DT*PRATEC(I,J)
2644 ! RAINCV(I,J)=.1*.5*DT*PPTFLX/DXSQ ! PPT FB MODS
2645 ! RNC=0.1*TIMEC*PPTFLX/DXSQ
2647 909 FORMAT('AT I, J =',i3,1x,i3,' CONVECTIVE RAINFALL =',F8.4,' mm')
2648 ! write (98,909)I,J,RNC
2649 ! write (6,909)I,J,RNC
2650 ! WRITE(98,*)'at NTSD =',NTSD,',No. of KF points activated =',
2653 1000 FORMAT(' ',10A8)
2654 1005 FORMAT(' ',F6.0,2X,F6.4,2X,F7.3,1X,F6.4,2X,4(F6.3,2X),2(F7.3,1X))
2655 1010 FORMAT(' ',' VERTICAL VELOCITY IS NEGATIVE AT ',F4.0,' MB')
2656 1015 FORMAT(' ','ALL REMAINING MASS DETRAINS BELOW ',F4.0,' MB')
2657 1025 FORMAT(5X,' KLCL=',I2,' ZLCL=',F7.1,'M', &
2658 ' DTLCL=',F5.2,' LTOP=',I2,' P0(LTOP)=',-2PF5.1,'MB FRZ LV=', &
2659 I2,' TMIX=',0PF4.1,1X,'PMIX=',-2PF6.1,' QMIX=',3PF5.1, &
2661 1030 FORMAT(' ',' P0(LET) = ',F6.1,' P0(LTOP) = ',F6.1,' VMFLCL =', &
2662 E12.3,' PLCL =',F6.1,' WLCL =',F6.3,' CLDHGT =', &
2664 1035 FORMAT(1X,'PEF(WS)=',F4.2,'(CB)=',F4.2,'LC,LET=',2I3,'WKL=' &
2666 !1055 FORMAT('*** DEGREE OF STABILIZATION =',F5.3, &
2667 ! ', NO MORE MASS FLUX IS ALLOWED!')
2668 !1060 FORMAT(' ITERATION DOES NOT CONVERGE TO GIVE THE SPECIFIED &
2669 ! &DEGREE OF STABILIZATION! FABE= ',F6.4)
2671 1075 FORMAT (F8.2,3(F8.2),2(F8.3),F8.2,2F8.3,F8.2,6F8.3)
2672 1080 FORMAT(2X,'LFS,LDB,LDT =',3I3,' TIMEC, TADVEC, NSTEP=', &
2673 2(1X,F5.0),I3,'NCOUNT, FABE, AINC=',I2,1X,F5.3,F6.2)
2674 1085 FORMAT (A3,16A7,2A8)
2675 1090 FORMAT (I3,F7.2,F7.0,10F7.2,4F7.3,2F8.3)
2676 1095 FORMAT(' ',' PPT PRODUCTION RATE= ',F10.0,' TOTAL EVAP+PPT= ',F10.0)
2677 1105 FORMAT(' ','NET LATENT HEAT RELEASE =',E12.5,' ACTUAL HEATING =',&
2678 E12.5,' J/KG-S, DIFFERENCE = ',F9.3,'%')
2679 1110 FORMAT(' ','INITIAL WATER =',E12.5,' FINAL WATER =',E12.5, &
2680 ' TOTAL WATER CHANGE =',F8.2,'%')
2681 ! 1115 FORMAT (2X,F6.0,2X,F7.2,2X,F5.1,2X,F6.3,2(2X,F5.1),2X,F7.2,2X,F7.4)
2682 1120 FORMAT(' ','MOISTURE ERROR AS FUNCTION OF TOTAL PPT =',F9.3,'%')
2684 !-----------------------------------------------------------------------
2685 !--------------SAVE CLOUD TOP AND BOTTOM FOR RADIATION------------------
2686 !-----------------------------------------------------------------------
2688 CUTOP(I,J)=REAL(LTOP)
2689 CUBOT(I,J)=REAL(LCL)
2691 !-----------------------------------------------------------------------
2692 END SUBROUTINE KF_eta_PARA
2693 !********************************************************************
2694 ! ***********************************************************************
2695 SUBROUTINE TPMIX2(p,thes,tu,qu,qliq,qice,qnewlq,qnewic,XLV1,XLV0)
2697 ! Lookup table variables:
2698 ! INTEGER, PARAMETER :: (KFNT=250,KFNP=220)
2699 ! REAL, SAVE, DIMENSION(1:KFNT,1:KFNP) :: TTAB,QSTAB
2700 ! REAL, SAVE, DIMENSION(1:KFNP) :: THE0K
2701 ! REAL, SAVE, DIMENSION(1:200) :: ALU
2702 ! REAL, SAVE :: RDPR,RDTHK,PLUTOP
2703 ! End of Lookup table variables:
2704 !-----------------------------------------------------------------------
2706 !-----------------------------------------------------------------------
2707 REAL, INTENT(IN ) :: P,THES,XLV1,XLV0
2708 REAL, INTENT(OUT ) :: QNEWLQ,QNEWIC
2709 REAL, INTENT(INOUT) :: TU,QU,QLIQ,QICE
2710 REAL :: TP,QQ,BTH,TTH,PP,T00,T10,T01,T11,Q00,Q10,Q01,Q11, &
2711 TEMP,QS,QNEW,DQ,QTOT,RLL,CPP
2712 INTEGER :: IPTB,ITHTB
2713 !-----------------------------------------------------------------------
2715 !c******** LOOKUP TABLE VARIABLES... ****************************
2716 ! parameter(kfnt=250,kfnp=220)
2718 ! COMMON/KFLUT/ ttab(kfnt,kfnp),qstab(kfnt,kfnp),the0k(kfnp),
2719 ! * alu(200),rdpr,rdthk,plutop
2720 !C***************************************************************
2722 !c***********************************************************************
2723 !c scaling pressure and tt table index
2724 !c***********************************************************************
2731 !***********************************************************************
2732 ! base and scaling factor for the
2733 !***********************************************************************
2735 ! scaling the and tt table index
2736 bth=(the0k(iptb+1)-the0k(iptb))*qq+the0k(iptb)
2737 tth=(thes-bth)*rdthk
2740 IF(IPTB.GE.220 .OR. IPTB.LE.1 .OR. ITHTB.GE.250 .OR. ITHTB.LE.1)THEN
2741 write(98,*)'**** OUT OF BOUNDS *********'
2745 t00=ttab(ithtb ,iptb )
2746 t10=ttab(ithtb+1,iptb )
2747 t01=ttab(ithtb ,iptb+1)
2748 t11=ttab(ithtb+1,iptb+1)
2750 q00=qstab(ithtb ,iptb )
2751 q10=qstab(ithtb+1,iptb )
2752 q01=qstab(ithtb ,iptb+1)
2753 q11=qstab(ithtb+1,iptb+1)
2755 !***********************************************************************
2756 ! parcel temperature
2757 !***********************************************************************
2759 temp=(t00+(t10-t00)*pp+(t01-t00)*qq+(t00-t10-t01+t11)*pp*qq)
2761 qs=(q00+(q10-q00)*pp+(q01-q00)*qq+(q00-q10-q01+q11)*pp*qq)
2769 ! IF THE PARCEL IS SUBSATURATED, TEMPERATURE AND MIXING RATIO MUST BE
2770 ! ADJUSTED...IF LIQUID WATER IS PRESENT, IT IS ALLOWED TO EVAPORATE
2775 ! IF THERE IS ENOUGH LIQUID OR ICE TO SATURATE THE PARCEL, TEMP STAYS AT ITS
2776 ! WET BULB VALUE, VAPOR MIXING RATIO IS AT SATURATED LEVEL, AND THE MIXING
2777 ! RATIOS OF LIQUID AND ICE ARE ADJUSTED TO MAKE UP THE ORIGINAL SATURATION
2778 ! DEFICIT... OTHERWISE, ANY AVAILABLE LIQ OR ICE VAPORIZES AND APPROPRIATE
2779 ! ADJUSTMENTS TO PARCEL TEMP; VAPOR, LIQUID, AND ICE MIXING RATIOS ARE MADE.
2781 !...subsaturated values only occur in calculations involving various mixtures of
2782 !...updraft and environmental air for estimation of entrainment and detrainment.
2783 !...For these purposes, assume that reasonable estimates can be given using
2784 !...liquid water saturation calculations only - i.e., ignore the effect of the
2785 !...ice phase in this process only...will not affect conservative properties...
2788 qliq=qliq-dq*qliq/(qtot+1.e-10)
2789 qice=qice-dq*qice/(qtot+1.e-10)
2793 CPP=1004.5*(1.+0.89*QU)
2794 IF(QTOT.LT.1.E-10)THEN
2796 !...IF NO LIQUID WATER OR ICE IS AVAILABLE, TEMPERATURE IS GIVEN BY:
2797 TEMP=TEMP+RLL*(DQ/(1.+DQ))/CPP
2800 !...IF SOME LIQ WATER/ICE IS AVAILABLE, BUT NOT ENOUGH TO ACHIEVE SATURATION,
2801 ! THE TEMPERATURE IS GIVEN BY:
2803 TEMP=TEMP+RLL*((DQ-QTOT)/(1+DQ-QTOT))/CPP
2815 END SUBROUTINE TPMIX2
2816 !******************************************************************************
2817 SUBROUTINE DTFRZNEW(TU,P,THTEU,QU,QFRZ,QICE,ALIQ,BLIQ,CLIQ,DLIQ)
2818 !-----------------------------------------------------------------------
2820 !-----------------------------------------------------------------------
2821 REAL, INTENT(IN ) :: P,QFRZ,ALIQ,BLIQ,CLIQ,DLIQ
2822 REAL, INTENT(INOUT) :: TU,THTEU,QU,QICE
2823 REAL :: RLC,RLS,RLF,CPP,A,DTFRZ,ES,QS,DQEVAP,PII
2824 !-----------------------------------------------------------------------
2826 !...ALLOW THE FREEZING OF LIQUID WATER IN THE UPDRAFT TO PROCEED AS AN
2827 !...APPROXIMATELY LINEAR FUNCTION OF TEMPERATURE IN THE TEMPERATURE RANGE
2828 !...TTFRZ TO TBFRZ...
2829 !...FOR COLDER TEMPERATURES, FREEZE ALL LIQUID WATER...
2830 !...THERMODYNAMIC PROPERTIES ARE STILL CALCULATED WITH RESPECT TO LIQUID WATER
2831 !...TO ALLOW THE USE OF LOOKUP TABLE TO EXTRACT TMP FROM THETAE...
2833 RLC=2.5E6-2369.276*(TU-273.16)
2834 RLS=2833922.-259.532*(TU-273.16)
2836 CPP=1004.5*(1.+0.89*QU)
2838 ! A = D(es)/DT IS THAT CALCULATED FROM BUCK (1981) EMPERICAL FORMULAS
2839 ! FOR SATURATION VAPOR PRESSURE...
2841 A=(CLIQ-BLIQ*DLIQ)/((TU-DLIQ)*(TU-DLIQ))
2842 DTFRZ = RLF*QFRZ/(CPP+RLS*QU*A)
2845 ES = ALIQ*EXP((BLIQ*TU-CLIQ)/(TU-DLIQ))
2846 QS = ES*0.622/(P-ES)
2848 !...FREEZING WARMS THE AIR AND IT BECOMES UNSATURATED...ASSUME THAT SOME OF THE
2849 !...LIQUID WATER THAT IS AVAILABLE FOR FREEZING EVAPORATES TO MAINTAIN SATURA-
2850 !...TION...SINCE THIS WATER HAS ALREADY BEEN TRANSFERRED TO THE ICE CATEGORY,
2851 !...SUBTRACT IT FROM ICE CONCENTRATION, THEN SET UPDRAFT MIXING RATIO AT THE NEW
2852 !...TEMPERATURE TO THE SATURATION VALUE...
2857 PII=(1.E5/P)**(0.2854*(1.-0.28*QU))
2858 THTEU=TU*PII*EXP((3374.6525/TU-2.5403)*QU*(1.+0.81*QU))
2860 END SUBROUTINE DTFRZNEW
2861 ! --------------------------------------------------------------------------------
2863 SUBROUTINE CONDLOAD(QLIQ,QICE,WTW,DZ,BOTERM,ENTERM,RATE,QNEWLQ, &
2864 QNEWIC,QLQOUT,QICOUT,G)
2866 !-----------------------------------------------------------------------
2868 !-----------------------------------------------------------------------
2869 ! 9/18/88...THIS PRECIPITATION FALLOUT SCHEME IS BASED ON THE SCHEME US
2870 ! BY OGURA AND CHO (1973). LIQUID WATER FALLOUT FROM A PARCEL IS CAL-
2871 ! CULATED USING THE EQUATION DQ=-RATE*Q*DT, BUT TO SIMULATE A QUASI-
2872 ! CONTINUOUS PROCESS, AND TO ELIMINATE A DEPENDENCY ON VERTICAL
2873 ! RESOLUTION THIS IS EXPRESSED AS Q=Q*EXP(-RATE*DZ).
2875 REAL, INTENT(IN ) :: G
2876 REAL, INTENT(IN ) :: DZ,BOTERM,ENTERM,RATE
2877 REAL, INTENT(INOUT) :: QLQOUT,QICOUT,WTW,QLIQ,QICE,QNEWLQ,QNEWIC
2878 REAL :: QTOT,QNEW,QEST,G1,WAVG,CONV,RATIO3,OLDQ,RATIO4,DQ,PPTDRG
2883 ! ESTIMATE THE VERTICAL VELOCITY SO THAT AN AVERAGE VERTICAL VELOCITY
2884 ! BE CALCULATED TO ESTIMATE THE TIME REQUIRED FOR ASCENT BETWEEN MODEL
2887 QEST=0.5*(QTOT+QNEW)
2888 G1=WTW+BOTERM-ENTERM-2.*G*DZ*QEST/1.5
2890 WAVG=0.5*(SQRT(WTW)+SQRT(G1))
2891 CONV=RATE*DZ/WAVG ! KF90 Eq. 9
2893 ! RATIO3 IS THE FRACTION OF LIQUID WATER IN FRESH CONDENSATE, RATIO4 IS
2894 ! THE FRACTION OF LIQUID WATER IN THE TOTAL AMOUNT OF CONDENSATE INVOLV
2895 ! IN THE PRECIPITATION PROCESS - NOTE THAT ONLY 60% OF THE FRESH CONDEN
2896 ! SATE IS IS ALLOWED TO PARTICIPATE IN THE CONVERSION PROCESS...
2898 RATIO3=QNEWLQ/(QNEW+1.E-8)
2902 RATIO4=(0.6*QNEWLQ+QLIQ)/(QTOT+1.E-8)
2903 QTOT=QTOT*EXP(-CONV) ! KF90 Eq. 9
2905 ! DETERMINE THE AMOUNT OF PRECIPITATION THAT FALLS OUT OF THE UPDRAFT
2906 ! PARCEL AT THIS LEVEL...
2910 QICOUT=(1.-RATIO4)*DQ
2912 ! ESTIMATE THE MEAN LOAD OF CONDENSATE ON THE UPDRAFT IN THE LAYER, CAL
2913 ! LATE VERTICAL VELOCITY
2915 PPTDRG=0.5*(OLDQ+QTOT-0.2*QNEW)
2916 WTW=WTW+BOTERM-ENTERM-2.*G*DZ*PPTDRG/1.5
2917 IF(ABS(WTW).LT.1.E-4)WTW=1.E-4
2919 ! DETERMINE THE NEW LIQUID WATER AND ICE CONCENTRATIONS INCLUDING LOSSE
2920 ! DUE TO PRECIPITATION AND GAINS FROM CONDENSATION...
2922 QLIQ=RATIO4*QTOT+RATIO3*0.4*QNEW
2923 QICE=(1.-RATIO4)*QTOT+(1.-RATIO3)*0.4*QNEW
2927 END SUBROUTINE CONDLOAD
2929 ! ----------------------------------------------------------------------
2930 SUBROUTINE PROF5(EQ,EE,UD)
2932 !***********************************************************************
2933 !***** GAUSSIAN TYPE MIXING PROFILE....******************************
2934 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2935 ! THIS SUBROUTINE INTEGRATES THE AREA UNDER THE CURVE IN THE GAUSSIAN
2936 ! DISTRIBUTION...THE NUMERICAL APPROXIMATION TO THE INTEGRAL IS TAKEN FROM
2937 ! "HANDBOOK OF MATHEMATICAL FUNCTIONS WITH FORMULAS, GRAPHS AND MATHEMATICS TABLES"
2938 ! ED. BY ABRAMOWITZ AND STEGUN, NATL BUREAU OF STANDARDS APPLIED
2939 ! MATHEMATICS SERIES. JUNE, 1964., MAY, 1968.
2942 ! Solves for KF90 Eq. 2
2944 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2945 !-----------------------------------------------------------------------
2947 !-----------------------------------------------------------------------
2948 REAL, INTENT(IN ) :: EQ
2949 REAL, INTENT(INOUT) :: EE,UD
2950 REAL :: SQRT2P,A1,A2,A3,P,SIGMA,FE,X,Y,EY,E45,T1,T2,C1,C2
2952 DATA SQRT2P,A1,A2,A3,P,SIGMA,FE/2.506628,0.4361836,-0.1201676, &
2953 0.9372980,0.33267,0.166666667,0.202765151/
2960 C1=A1*T1+A2*T1*T1+A3*T1*T1*T1
2961 C2=A1*T2+A2*T2*T2+A3*T2*T2*T2
2963 EE=SIGMA*(0.5*(SQRT2P-E45*C1-EY*C2)+SIGMA*(E45-EY))-E45*EQ*EQ/2.
2964 UD=SIGMA*(0.5*(EY*C2-E45*C1)+SIGMA*(E45-EY))-E45*(0.5+EQ*EQ/2.- &
2967 EE=SIGMA*(0.5*(EY*C2-E45*C1)+SIGMA*(E45-EY))-E45*EQ*EQ/2.
2968 UD=SIGMA*(0.5*(SQRT2P-E45*C1-EY*C2)+SIGMA*(E45-EY))-E45*(0.5+EQ* &
2974 END SUBROUTINE PROF5
2976 ! ------------------------------------------------------------------------
2977 SUBROUTINE TPMIX2DD(p,thes,ts,qs,i,j)
2979 ! Lookup table variables:
2980 ! INTEGER, PARAMETER :: (KFNT=250,KFNP=220)
2981 ! REAL, SAVE, DIMENSION(1:KFNT,1:KFNP) :: TTAB,QSTAB
2982 ! REAL, SAVE, DIMENSION(1:KFNP) :: THE0K
2983 ! REAL, SAVE, DIMENSION(1:200) :: ALU
2984 ! REAL, SAVE :: RDPR,RDTHK,PLUTOP
2985 ! End of Lookup table variables:
2986 !-----------------------------------------------------------------------
2988 !-----------------------------------------------------------------------
2989 REAL, INTENT(IN ) :: P,THES
2990 REAL, INTENT(INOUT) :: TS,QS
2991 INTEGER, INTENT(IN ) :: i,j ! avail for debugging
2992 REAL :: TP,QQ,BTH,TTH,PP,T00,T10,T01,T11,Q00,Q10,Q01,Q11
2993 INTEGER :: IPTB,ITHTB
2994 CHARACTER*256 :: MESS
2995 !-----------------------------------------------------------------------
2998 !******** LOOKUP TABLE VARIABLES (F77 format)... ****************************
2999 ! parameter(kfnt=250,kfnp=220)
3001 ! COMMON/KFLUT/ ttab(kfnt,kfnp),qstab(kfnt,kfnp),the0k(kfnp), &
3002 ! alu(200),rdpr,rdthk,plutop
3003 !***************************************************************
3005 !***********************************************************************
3006 ! scaling pressure and tt table index
3007 !***********************************************************************
3013 !***********************************************************************
3014 ! base and scaling factor for the
3015 !***********************************************************************
3017 ! scaling the and tt table index
3018 bth=(the0k(iptb+1)-the0k(iptb))*qq+the0k(iptb)
3019 tth=(thes-bth)*rdthk
3023 t00=ttab(ithtb ,iptb )
3024 t10=ttab(ithtb+1,iptb )
3025 t01=ttab(ithtb ,iptb+1)
3026 t11=ttab(ithtb+1,iptb+1)
3028 q00=qstab(ithtb ,iptb )
3029 q10=qstab(ithtb+1,iptb )
3030 q01=qstab(ithtb ,iptb+1)
3031 q11=qstab(ithtb+1,iptb+1)
3033 !***********************************************************************
3034 ! parcel temperature and saturation mixing ratio
3035 !***********************************************************************
3037 ts=(t00+(t10-t00)*pp+(t01-t00)*qq+(t00-t10-t01+t11)*pp*qq)
3039 qs=(q00+(q10-q00)*pp+(q01-q00)*qq+(q00-q10-q01+q11)*pp*qq)
3041 END SUBROUTINE TPMIX2DD
3043 ! -----------------------------------------------------------------------
3044 SUBROUTINE ENVIRTHT(P1,T1,Q1,THT1,ALIQ,BLIQ,CLIQ,DLIQ)
3046 !-----------------------------------------------------------------------
3048 !-----------------------------------------------------------------------
3049 REAL, INTENT(IN ) :: P1,T1,Q1,ALIQ,BLIQ,CLIQ,DLIQ
3050 REAL, INTENT(INOUT) :: THT1
3051 REAL :: EE,TLOG,ASTRT,AINC,A1,TP,VALUE,AINTRP,TDPT,TSAT,THT, &
3052 T00,P00,C1,C2,C3,C4,C5
3054 !-----------------------------------------------------------------------
3055 DATA T00,P00,C1,C2,C3,C4,C5/273.16,1.E5,3374.6525,2.5403,3114.834, &
3058 ! CALCULATE ENVIRONMENTAL EQUIVALENT POTENTIAL TEMPERATURE...
3060 ! NOTE: Calculations for mixed/ice phase no longer used...jsk 8/00
3061 ! For example, KF90 Eq. 10 no longer used
3064 ! TLOG=ALOG(EE/ALIQ)
3065 ! ...calculate LOG term using lookup table...
3072 value=(indlu-1)*ainc+astrt
3073 aintrp=(a1-value)/ainc
3074 tlog=aintrp*alu(indlu+1)+(1-aintrp)*alu(indlu)
3076 TDPT=(CLIQ-DLIQ*TLOG)/(BLIQ-TLOG)
3077 TSAT=TDPT-(.212+1.571E-3*(TDPT-T00)-4.36E-4*(T1-T00))*(T1-TDPT)
3078 THT=T1*(P00/P1)**(0.2854*(1.-0.28*Q1))
3079 THT1=THT*EXP((C1/TSAT-C2)*Q1*(1.+0.81*Q1))
3081 END SUBROUTINE ENVIRTHT
3082 ! ***********************************************************************
3083 !====================================================================
3084 SUBROUTINE kf_eta_init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, &
3085 RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS, &
3086 SVP1,SVP2,SVP3,SVPT0, &
3087 P_FIRST_SCALAR,restart,allowed_to_read, &
3088 ids, ide, jds, jde, kds, kde, &
3089 ims, ime, jms, jme, kms, kme, &
3090 its, ite, jts, jte, kts, kte )
3091 !--------------------------------------------------------------------
3093 !--------------------------------------------------------------------
3094 LOGICAL , INTENT(IN) :: restart,allowed_to_read
3095 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
3096 ims, ime, jms, jme, kms, kme, &
3097 its, ite, jts, jte, kts, kte
3098 INTEGER , INTENT(IN) :: P_QI,P_QS,P_FIRST_SCALAR
3100 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
3108 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
3110 REAL, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: NCA
3112 INTEGER :: i, j, k, itf, jtf, ktf
3113 REAL, INTENT(IN) :: SVP1,SVP2,SVP3,SVPT0
3119 IF(.not.restart)THEN
3132 IF (P_QI .ge. P_FIRST_SCALAR) THEN
3142 IF (P_QS .ge. P_FIRST_SCALAR) THEN
3168 CALL KF_LUTAB(SVP1,SVP2,SVP3,SVPT0)
3170 END SUBROUTINE kf_eta_init
3172 !-------------------------------------------------------
3174 subroutine kf_lutab(SVP1,SVP2,SVP3,SVPT0)
3176 ! This subroutine is a lookup table.
3177 ! Given a series of series of saturation equivalent potential
3178 ! temperatures, the temperature is calculated.
3180 !--------------------------------------------------------------------
3182 !--------------------------------------------------------------------
3183 ! Lookup table variables
3184 ! INTEGER, SAVE, PARAMETER :: KFNT=250,KFNP=220
3185 ! REAL, SAVE, DIMENSION(1:KFNT,1:KFNP) :: TTAB,QSTAB
3186 ! REAL, SAVE, DIMENSION(1:KFNP) :: THE0K
3187 ! REAL, SAVE, DIMENSION(1:200) :: ALU
3188 ! REAL, SAVE :: RDPR,RDTHK,PLUTOP
3189 ! End of Lookup table variables
3191 INTEGER :: KP,IT,ITCNT,I
3192 REAL :: DTH,TMIN,TOLER,PBOT,DPR, &
3193 TEMP,P,ES,QS,PI,THES,TGUES,THGUES,F0,T1,T0,THGS,F1,DT, &
3195 ! REAL :: ALIQ,BLIQ,CLIQ,DLIQ,SVP1,SVP2,SVP3,SVPT0
3196 REAL :: ALIQ,BLIQ,CLIQ,DLIQ
3197 REAL, INTENT(IN) :: SVP1,SVP2,SVP3,SVPT0
3199 ! equivalent potential temperature increment
3201 ! minimum starting temp
3203 ! tolerance for accuracy of temperature
3205 ! top pressure (pascals)
3207 ! bottom pressure (pascals)
3216 ! compute parameters
3218 ! 1._over_(sat. equiv. theta increment)
3220 ! pressure increment
3222 DPR=(PBOT-PLUTOP)/REAL(KFNP-1)
3223 ! dpr=(pbot-plutop)/REAL(kfnp-1)
3224 ! 1._over_(pressure increment)
3226 ! compute the spread of thes
3227 ! thespd=dth*(kfnt-1)
3229 ! calculate the starting sat. equiv. theta
3235 es=aliq*exp((bliq*temp-cliq)/(temp-dliq))
3237 pi=(1.e5/p)**(0.2854*(1.-0.28*qs))
3238 the0k(kp)=temp*pi*exp((3374.6525/temp-2.5403)*qs* &
3242 ! compute temperatures for each sat. equiv. potential temp.
3249 ! define sat. equiv. pot. temp.
3251 ! iterate to find temperature
3252 ! find initial guess
3258 es=aliq*exp((bliq*tgues-cliq)/(tgues-dliq))
3260 pi=(1.e5/p)**(0.2854*(1.-0.28*qs))
3261 thgues=tgues*pi*exp((3374.6525/tgues-2.5403)*qs* &
3269 es=aliq*exp((bliq*t1-cliq)/(t1-dliq))
3271 pi=(1.e5/p)**(0.2854*(1.-0.28*qs))
3272 thtgs=t1*pi*exp((3374.6525/t1-2.5403)*qs*(1.+0.81*qs))
3274 if(abs(f1).lt.toler)then
3278 dt=f1*(t1-t0)/(f1-f0)
3288 ! lookup table for tlog(emix/aliq)
3290 ! set up intial values for lookup tables
3301 END SUBROUTINE KF_LUTAB
3303 END MODULE module_cu_kfeta