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 &
22 ,DT,KTAU,DX,CUDT,CURR_SECS,ADAPT_STEP_FLAG &
23 ,rho,RAINCV,PRATEC,NCA &
24 ,U,V,TH,T,W,dz8w,Pcps,pi &
25 ,W0AVG,XLV0,XLV1,XLS0,XLS1,CP,R,G,EP1 &
26 ,EP2,SVP1,SVP2,SVP3,SVPT0 &
27 ,STEPCU,CU_ACT_FLAG,warm_rain,CUTOP,CUBOT &
30 ,F_QV ,F_QC ,F_QR ,F_QI ,F_QS &
31 ,RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN &
35 !-------------------------------------------------------------
37 !-------------------------------------------------------------
38 INTEGER, INTENT(IN ) :: &
39 ids,ide, jds,jde, kds,kde, &
40 ims,ime, jms,jme, kms,kme, &
41 its,ite, jts,jte, kts,kte
43 INTEGER, INTENT(IN ) :: STEPCU
44 LOGICAL, INTENT(IN ) :: warm_rain
46 REAL, INTENT(IN ) :: XLV0,XLV1,XLS0,XLS1
47 REAL, INTENT(IN ) :: CP,R,G,EP1,EP2
48 REAL, INTENT(IN ) :: SVP1,SVP2,SVP3,SVPT0
50 INTEGER, INTENT(IN ) :: KTAU
52 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
65 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
69 REAL, INTENT(IN ) :: DT, DX
70 REAL, INTENT(IN ) :: CUDT
71 REAL, INTENT(IN ) :: CURR_SECS
72 LOGICAL,INTENT(IN ) :: ADAPT_STEP_FLAG
74 REAL, DIMENSION( ims:ime , jms:jme ), &
75 INTENT(INOUT) :: RAINCV
77 REAL, DIMENSION( ims:ime , jms:jme ), &
78 INTENT(INOUT) :: PRATEC
80 REAL, DIMENSION( ims:ime , jms:jme ), &
83 REAL, DIMENSION( ims:ime , jms:jme ), &
84 INTENT(OUT) :: CUBOT, &
87 LOGICAL, DIMENSION( ims:ime , jms:jme ), &
88 INTENT(INOUT) :: CU_ACT_FLAG
94 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
105 ! Flags relating to the optional tendency arrays declared above
106 ! Models that carry the optional tendencies will provdide the
107 ! optional arguments at compile time; these flags all the model
108 ! to determine at run-time whether a particular tracer is in
111 LOGICAL, OPTIONAL :: &
121 LOGICAL :: flag_qr, flag_qi, flag_qs
123 REAL, DIMENSION( kts:kte ) :: &
133 REAL, DIMENSION( kts:kte ):: &
141 REAL :: TST,tv,PRS,RHOE,W0,SCR1,DXSQ,tmp
143 INTEGER :: i,j,k,NTST
144 REAL :: lastdt = -1.0
145 REAL :: W0AVGfctr, W0fctr, W0den
151 !----------------------
157 IF ( PRESENT(F_QR) ) flag_qr = F_QR
158 IF ( PRESENT(F_QI) ) flag_qi = F_QI
159 IF ( PRESENT(F_QS) ) flag_qs = F_QS
165 if (ADAPT_STEP_FLAG) then
166 W0AVGfctr = 2 * MAX(CUDT*60,dt) - dt
168 W0den = 2 * MAX(CUDT*60,dt)
178 ! SCR1=-5.0E-4*G*rho(I,K,J)*(w(I,K,J)+w(I,K+1,J))
179 ! TV=T(I,K,J)*(1.+EP1*QV(I,K,J))
180 ! RHOE=Pcps(I,K,J)/(R*TV)
181 ! W0=-101.9368*SCR1/RHOE
182 W0=0.5*(w(I,K,J)+w(I,K+1,J))
186 ! W0AVG(I,K,J)=(W0AVG(I,K,J)*(TST-1.)+W0)/TST
188 ! New, to support adaptive time step:
190 W0AVG(I,K,J) = ( W0AVG(I,K,J) * W0AVGfctr + W0 * W0fctr ) / W0den
198 !...CHECK FOR CONVECTIVE INITIATION EVERY 5 MINUTES (OR NTST/2)...
200 !----------------------
203 ! Modified for adaptive time step
205 if (ADAPT_STEP_FLAG) then
206 if ( (KTAU .eq. 1) .or. (cudt .eq. 0) .or. &
207 ( CURR_SECS + dt >= &
208 ( int( CURR_SECS / ( cudt * 60 ) ) + 1 ) * cudt * 60 ) ) then
215 if (MOD(KTAU,NTST) .EQ. 0 .or. KTAU .eq. 1) then
226 CU_ACT_FLAG(i,j) = .true.
234 IF ( NCA(I,J) .ge. 0.5*DT ) then
235 CU_ACT_FLAG(i,j) = .false.
251 ! assign vars from 3D to 1D
260 W0AVG1D(K) =W0AVG(I,K,J)
263 CALL KF_eta_PARA(I, J, &
264 U1D,V1D,T1D,QV1D,P1D,DZ1D, &
265 W0AVG1D,DT,DX,DXSQ,RHO1D, &
266 XLV0,XLV1,XLS0,XLS1,CP,R,G, &
267 EP2,SVP1,SVP2,SVP3,SVPT0, &
268 DQDT,DQIDT,DQCDT,DQRDT,DQSDT,DTDT, &
270 flag_QI,flag_QS,warm_rain, &
272 ids,ide, jds,jde, kds,kde, &
273 ims,ime, jms,jme, kms,kme, &
274 its,ite, jts,jte, kts,kte)
275 IF(PRESENT(rthcuten).AND.PRESENT(rqvcuten)) THEN
277 RTHCUTEN(I,K,J)=DTDT(K)/pi(I,K,J)
278 RQVCUTEN(I,K,J)=DQDT(K)
282 IF(PRESENT(rqrcuten).AND.PRESENT(rqccuten)) THEN
285 RQRCUTEN(I,K,J)=DQRDT(K)
286 RQCCUTEN(I,K,J)=DQCDT(K)
289 ! This is the case for Eta microphysics without 3d rain field
292 RQCCUTEN(I,K,J)=DQRDT(K)+DQCDT(K)
297 !...... QSTEN STORES GRAUPEL TENDENCY IF IT EXISTS, OTHERISE SNOW (V2)
300 IF(PRESENT( rqicuten )) THEN
303 RQICUTEN(I,K,J)=DQIDT(K)
308 IF(PRESENT( rqscuten )) THEN
311 RQSCUTEN(I,K,J)=DQSDT(K)
321 END SUBROUTINE KF_eta_CPS
322 ! ****************************************************************************
323 !-----------------------------------------------------------
324 SUBROUTINE KF_eta_PARA (I, J, &
325 U0,V0,T0,QV0,P0,DZQ,W0AVG1D, &
327 XLV0,XLV1,XLS0,XLS1,CP,R,G, &
328 EP2,SVP1,SVP2,SVP3,SVPT0, &
329 DQDT,DQIDT,DQCDT,DQRDT,DQSDT,DTDT, &
331 F_QI,F_QS,warm_rain, &
333 ids,ide, jds,jde, kds,kde, &
334 ims,ime, jms,jme, kms,kme, &
335 its,ite, jts,jte, kts,kte)
336 !-----------------------------------------------------------
337 !***** The KF scheme that is currently used in experimental runs of EMCs
338 !***** Eta model....jsk 8/00
341 !-----------------------------------------------------------
342 INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde, &
343 ims,ime, jms,jme, kms,kme, &
344 its,ite, jts,jte, kts,kte, &
346 ! ,P_QI,P_QS,P_FIRST_SCALAR
348 LOGICAL, INTENT(IN ) :: F_QI, F_QS
350 LOGICAL, INTENT(IN ) :: warm_rain
352 REAL, DIMENSION( kts:kte ), &
362 REAL, INTENT(IN ) :: DT,DX,DXSQ
365 REAL, INTENT(IN ) :: XLV0,XLV1,XLS0,XLS1,CP,R,G
366 REAL, INTENT(IN ) :: EP2,SVP1,SVP2,SVP3,SVPT0
369 REAL, DIMENSION( kts:kte ), INTENT(INOUT) :: &
377 REAL, DIMENSION( ims:ime , jms:jme ), &
380 REAL, DIMENSION( ims:ime , jms:jme ), &
381 INTENT(INOUT) :: RAINCV
383 REAL, DIMENSION( ims:ime , jms:jme ), &
384 INTENT(INOUT) :: PRATEC
386 REAL, DIMENSION( ims:ime , jms:jme ), &
387 INTENT(OUT) :: CUBOT, &
389 REAL, INTENT(IN ) :: CUDT
391 !...DEFINE LOCAL VARIABLES...
393 REAL, DIMENSION( kts:kte ) :: &
394 Q0,Z0,TV0,TU,TVU,QU,TZ,TVD, &
395 QD,QES,THTES,TG,TVG,QG,WU,WD,W0,EMS,EMSD, &
396 UMF,UER,UDR,DMF,DER,DDR,UMF2,UER2, &
397 UDR2,DMF2,DER2,DDR2,DZA,THTA0,THETEE, &
398 THTAU,THETEU,THTAD,THETED,QLIQ,QICE, &
399 QLQOUT,QICOUT,PPTLIQ,PPTICE,DETLQ,DETIC, &
400 DETLQ2,DETIC2,RATIO,RATIO2
403 REAL, DIMENSION( kts:kte ) :: &
404 DOMGDP,EXN,TVQU,DP,RH,EQFRC,WSPD, &
405 QDT,FXM,THTAG,THPA,THFXOUT, &
406 THFXIN,QPA,QFXOUT,QFXIN,QLPA,QLFXIN, &
407 QLFXOUT,QIPA,QIFXIN,QIFXOUT,QRPA, &
408 QRFXIN,QRFXOUT,QSPA,QSFXIN,QSFXOUT, &
409 QL0,QLG,QI0,QIG,QR0,QRG,QS0,QSG
412 REAL, DIMENSION( kts:kte+1 ) :: OMG
413 REAL, DIMENSION( kts:kte ) :: RAINFB,SNOWFB
414 REAL, DIMENSION( kts:kte ) :: &
415 CLDHGT,QSD,DILFRC,DDILFRC,TKE,TGU,QGU,THTEEG
419 REAL :: P00,T00,RLF,RHIC,RHBC,PIE, &
421 REAL :: GDRY,ROCP,ALIQ,BLIQ, &
423 REAL :: FBFRC,P300,DPTHMX,THMIX,QMIX,ZMIX,PMIX, &
424 ROCPQ,TMIX,EMIX,TLOG,TDPT,TLCL,TVLCL, &
425 CPORQ,PLCL,ES,DLP,TENV,QENV,TVEN,TVBAR, &
426 ZLCL,WKL,WABS,TRPPT,WSIGNE,DTLCL,GDT,WLCL,&
427 TVAVG,QESE,WTW,RHOLCL,AU0,VMFLCL,UPOLD, &
428 UPNEW,ABE,WKLCL,TTEMP,FRC1, &
429 QNEWIC,RL,R1,QNWFRZ,EFFQ,BE,BOTERM,ENTERM,&
430 DZZ,UDLBE,REI,EE2,UD2,TTMP,F1,F2, &
431 THTTMP,QTMP,TMPLIQ,TMPICE,TU95,TU10,EE1, &
432 UD1,DPTT,QNEWLQ,DUMFDP,EE,TSAT, &
433 THTA,VCONV,TIMEC,SHSIGN,VWS,PEF, &
434 CBH,RCBH,PEFCBH,PEFF,PEFF2,TDER,THTMIN, &
435 DTMLTD,QS,TADVEC,DPDD,FRC,DPT,RDD,A1, &
436 DSSDT,DTMP,T1RH,QSRH,PPTFLX,CPR,CNDTNF, &
437 UPDINC,AINCM2,DEVDMF,PPR,RCED,DPPTDF, &
438 DMFLFS,DMFLFS2,RCED2,DDINC,AINCMX,AINCM1, &
439 AINC,TDER2,PPTFL2,FABE,STAB,DTT,DTT1, &
440 DTIME,TMA,TMB,TMM,BCOEFF,ACOEFF,QVDIFF, &
441 TOPOMG,CPM,DQ,ABEG,DABE,DFDA,FRC2,DR, &
442 UDFRC,TUC,QGS,RH0,RHG,QINIT,QFNL,ERR2, &
443 RELERR,RLC,RLS,RNC,FABEOLD,AINCOLD,UEFRC, &
444 DDFRC,TDC,DEFRC,RHBAR,DMFFRC,DPMIN,DILBE
445 REAL :: ASTRT,TP,VALUE,AINTRP,TKEMAX,QFRZ,&
446 QSS,PPTMLT,DTMELT,RHH,EVAC,BINC
448 INTEGER :: INDLU,NU,NUCHM,NNN,KLFS
449 REAL :: CHMIN,PM15,CHMAX,DTRH,RAD,DPPP
450 REAL :: TVDIFF,DTTOT,ABSOMG,ABSOMGTC,FRDP
455 INTEGER, DIMENSION (kts:kte) :: KCHECK
457 INTEGER :: ISTOP,ML,L5,KMIX,LOW, &
458 LC,MXLAYR,LLFC,NLAYRS,NK, &
459 KPBL,KLCL,LCL,LET,IFLAG, &
461 LTOPM1,LVF,KSTART,KMIN,LFS, &
462 ND,NIC,LDB,LDT,ND1,NDK, &
463 NM,LMAX,NCOUNT,NOITR, &
464 NSTEP,NTC,NCHM,ISHALL,NSHALL
466 CHARACTER*1024 message
468 DATA P00,T00/1.E5,273.16/
470 DATA RHIC,RHBC/1.,0.90/
471 DATA PIE,TTFRZ,TBFRZ,C5/3.141592654,268.16,248.16,1.0723E-3/
473 !-----------------------------------------------------------
491 !****************************************************************************
493 !...OPTION TO FEED CONVECTIVELY GENERATED RAINWATER ! PPT FB MODS
494 !...INTO GRID-RESOLVED RAINWATER (OR SNOW/GRAUPEL) ! PPT FB MODS
495 !...FIELD. "FBFRC" IS THE FRACTION OF AVAILABLE ! PPT FB MODS
496 !...PRECIPITATION TO BE FED BACK (0.0 - 1.0)... ! PPT FB MODS
497 FBFRC=0.0 ! PPT FB MODS
498 !...mods to allow shallow convection...
505 !...PRESSURE PERTURBATION TERM IS ONLY DEFINED AT MID-POINT OF
506 !...VERTICAL LAYERS...SINCE TOTAL PRESSURE IS NEEDED AT THE TOP AND
507 !...BOTTOM OF LAYERS BELOW, DO AN INTERPOLATION...
509 !...INPUT A VERTICAL SOUNDING ... NOTE THAT MODEL LAYERS ARE NUMBERED
510 !...FROM BOTTOM-UP IN THE KF SCHEME...
513 !SUE tmprpsb=1./PSB(I,J)
514 !SUE CELL=PTOP*tmprpsb
518 !...IF Q0 IS ABOVE SATURATION VALUE, REDUCE IT TO SATURATION LEVEL...
520 ES=ALIQ*EXP((BLIQ*T0(K)-CLIQ)/(T0(K)-DLIQ))
521 QES(K)=0.622*ES/(P0(K)-ES)
522 Q0(K)=AMIN1(QES(K),QV0(K))
523 Q0(K)=AMAX1(0.000001,Q0(K))
530 TV0(K)=T0(K)*(1.+0.608*Q0(K))
531 ! RHOE(K)=P0(K)/(R*TV0(K))
532 ! DP IS THE PRESSURE INTERVAL BETWEEN FULL SIGMA LEVELS...
533 DP(K)=rhoe(k)*g*DZQ(k)
534 ! IF Turbulent Kinetic Energy (TKE) is available from turbulent mixing scheme
535 ! use it for shallow convection...For now, assume it is not available....
536 ! TKE(K) = Q2(I,J,NK)
539 ! IF(P0(K).GE.500E2)L5=K
540 IF(P0(K).GE.0.5*P0(1))L5=K
541 IF(P0(K).GE.P300)LLFC=K
544 !...DZQ IS DZ BETWEEN SIGMA SURFACES, DZA IS DZ BETWEEN MODEL HALF LEVEL
548 Z0(K)=Z0(K-1)+.5*(DZQ(K)+DZQ(K-1))
549 DZA(K-1)=Z0(K)-Z0(K-1)
554 ! To save time, specify a pressure interval to move up in sequential
555 ! check of different ~50 mb deep groups of adjacent model layers in
556 ! the process of identifying updraft source layer (USL). Note that
557 ! this search is terminated as soon as a buoyant parcel is found and
558 ! this parcel can produce a cloud greater than specifed minimum depth
559 ! (CHMIN)...For now, set interval at 15 mb...
565 IF(P0(K).LT.PM15)THEN
582 IF(CLDHGT(NNN).GT.CHMAX)THEN
600 !...ASSUME THAT IN ORDER TO SUPPORT A DEEP UPDRAFT YOU NEED A LAYER OF
601 !...UNSTABLE AIR AT LEAST 50 mb DEEP...TO APPROXIMATE THIS, ISOLATE A
602 !...GROUP OF ADJACENT INDIVIDUAL MODEL LAYERS, WITH THE BASE AT LEVEL
603 !...LC, SUCH THAT THE COMBINED DEPTH OF THESE LAYERS IS AT LEAST 50 mb..
608 IF ( NK+1 .LT. KTS ) THEN
609 WRITE(message,*)'WOULD GO OFF BOTTOM: KF_ETA_PARA I,J,NK',I,J,NK
610 CALL wrf_message (TRIM(message))
614 IF ( NK .GT. KTE ) THEN
615 WRITE(message,*)'WOULD GO OFF TOP: KF_ETA_PARA I,J,DPTHMX,DPMIN',I,J,DPTHMX,DPMIN
616 CALL wrf_message (TRIM(message))
621 IF(DPTHMX.GT.DPMIN)THEN
626 IF(DPTHMX.LT.DPMIN)THEN
631 !...********************************************************
632 !...for computational simplicity without much loss in accuracy,
633 !...mix temperature instead of theta for evaluating convective
634 !...initiation (triggering) potential...
641 !...FIND THE THERMODYNAMIC CHARACTERISTICS OF THE LAYER BY
642 !...MASS-WEIGHTING THE CHARACTERISTICS OF THE INDIVIDUAL MODEL
647 TMIX=TMIX+DP(NK)*T0(NK)
648 QMIX=QMIX+DP(NK)*Q0(NK)
649 ZMIX=ZMIX+DP(NK)*Z0(NK)
650 PMIX=PMIX+DP(NK)*P0(NK)
657 EMIX=QMIX*PMIX/(0.622+QMIX)
659 !...FIND THE TEMPERATURE OF THE MIXTURE AT ITS LCL...
661 ! TLOG=ALOG(EMIX/ALIQ)
662 ! ...calculate dewpoint using lookup table...
669 value=(indlu-1)*ainc+astrt
670 aintrp=(a1-value)/ainc
671 tlog=aintrp*alu(indlu+1)+(1-aintrp)*alu(indlu)
672 TDPT=(CLIQ-DLIQ*TLOG)/(BLIQ-TLOG)
673 TLCL=TDPT-(.212+1.571E-3*(TDPT-T00)-4.36E-4*(TMIX-T00))*(TMIX-TDPT)
674 TLCL=AMIN1(TLCL,TMIX)
675 TVLCL=TLCL*(1.+0.608*QMIX)
676 ZLCL = ZMIX+(TLCL-TMIX)/GDRY
681 IF(ZLCL.LE.Z0(NK) .or. NK.GT.KL)THEN
689 DLP=(ZLCL-Z0(K))/(Z0(KLCL)-Z0(K))
691 !...ESTIMATE ENVIRONMENTAL TEMPERATURE AND MIXING RATIO AT THE LCL...
693 TENV=T0(K)+(T0(KLCL)-T0(K))*DLP
694 QENV=Q0(K)+(Q0(KLCL)-Q0(K))*DLP
695 TVEN=TENV*(1.+0.608*QENV)
697 !...CHECK TO SEE IF CLOUD IS BUOYANT USING FRITSCH-CHAPPELL TRIGGER
698 !...FUNCTION DESCRIBED IN KAIN AND FRITSCH (1992)...W0 IS AN
699 !...APROXIMATE VALUE FOR THE RUNNING-MEAN GRID-SCALE VERTICAL
700 !...VELOCITY, WHICH GIVES SMOOTHER FIELDS OF CONVECTIVE INITIATION
701 !...THAN THE INSTANTANEOUS VALUE...FORMULA RELATING TEMPERATURE
702 !...PERTURBATION TO VERTICAL VELOCITY HAS BEEN USED WITH THE MOST
703 !...SUCCESS AT GRID LENGTHS NEAR 25 km. FOR DIFFERENT GRID-LENGTHS,
704 !...ADJUST VERTICAL VELOCITY TO EQUIVALENT VALUE FOR 25 KM GRID
705 !...LENGTH, ASSUMING LINEAR DEPENDENCE OF W ON GRID LENGTH...
712 WKL=(W0AVG1D(K)+(W0AVG1D(KLCL)-W0AVG1D(K))*DLP)*DX/25.E3-WKLCL
713 IF(WKL.LT.0.0001)THEN
719 !...for ETA model, give parcel an extra temperature perturbation based
720 !...the threshold RH for condensation (U00)...
722 !...for now, just assume U00=0.75...
723 !...!!!!!! for MM5, SET DTRH = 0. !!!!!!!!
726 ! QSLCL=QES(K)+(QES(KLCL)-QES(K))*DLP
728 ! DQSSDT = QMIX*(CLIQ-BLIQ*DLIQ)/((TLCL-DLIQ)*(TLCL-DLIQ))
729 ! IF(RHLCL.ge.0.75 .and. RHLCL.le.0.95)then
730 ! DTRH = 0.25*(RHLCL-0.75)*QMIX/DQSSDT
731 ! ELSEIF(RHLCL.GT.0.95)THEN
732 ! DTRH = (1./RHLCL-1.)*QMIX/DQSSDT
737 ! IF(ISHALL.EQ.1)IPRNT=.TRUE.
739 ! IF(TLCL+DTLCL.GT.TENV)GOTO 45
741 trigger: IF(TLCL+DTLCL+DTRH.LT.TENV)THEN
743 ! Parcel not buoyant, CYCLE back to start of trigger and evaluate next potential USL...
747 ELSE ! Parcel is buoyant, determine updraft
749 !...CONVECTIVE TRIGGERING CRITERIA HAS BEEN SATISFIED...COMPUTE
750 !...EQUIVALENT POTENTIAL TEMPERATURE
751 !...(THETEU) AND VERTICAL VELOCITY OF THE RISING PARCEL AT THE LCL...
753 CALL ENVIRTHT(PMIX,TMIX,QMIX,THETEU(K),ALIQ,BLIQ,CLIQ,DLIQ)
755 !...modify calculation of initial parcel vertical velocity...jsk 11/26/97
758 IF(DTTOT.GT.1.E-4)THEN
759 GDT=2.*G*DTTOT*500./TVEN
760 WLCL=1.+0.5*SQRT(GDT)
761 WLCL = AMIN1(WLCL,3.)
765 PLCL=P0(K)+(P0(KLCL)-P0(K))*DLP
768 TVLCL=TLCL*(1.+0.608*QMIX)
769 RHOLCL=PLCL/(R*TVLCL)
773 ! make RAD a function of background vertical velocity...
776 ELSEIF(WKL.GT.0.1)THEN
779 RAD = 1000.+1000*WKL/0.1
782 !*******************************************************************
784 ! COMPUTE UPDRAFT PROPERTIES *
786 !*******************************************************************
790 !...ESTIMATE INITIAL UPDRAFT MASS FLUX (UMF(K))...
799 !...RATIO2 IS THE DEGREE OF GLACIATION IN THE CLOUD (0 TO 1),
800 !...UER IS THE ENVIR ENTRAINMENT RATE, ABE IS AVAILABLE
801 !...BUOYANT ENERGY, TRPPT IS THE TOTAL RATE OF PRECIPITATION
822 !...TTEMP IS USED DURING CALCULATION OF THE LINEAR GLACIATION
823 !...PROCESS; IT IS INITIALLY SET TO THE TEMPERATURE AT WHICH
824 !...FREEZING IS SPECIFIED TO BEGIN. WITHIN THE GLACIATION
825 !...INTERVAL, IT IS SET EQUAL TO THE UPDRAFT TEMP AT THE
826 !...PREVIOUS MODEL LEVEL...
830 !...ENTER THE LOOP FOR UPDRAFT CALCULATIONS...CALCULATE UPDRAFT TEMP,
831 !...MIXING RATIO, VERTICAL MASS FLUX, LATERAL DETRAINMENT OF MASS AND
832 !...MOISTURE, PRECIPITATION RATES AT EACH MODEL LEVEL...
839 updraft: DO NK=K,KL-1
841 RATIO2(NK1)=RATIO2(NK)
844 THETEU(NK1)=THETEU(NK)
848 call tpmix2(p0(nk1),theteu(nk1),tu(nk1),qu(nk1),qliq(nk1), &
849 qice(nk1),qnewlq,qnewic,XLV1,XLV0)
852 !...CHECK TO SEE IF UPDRAFT TEMP IS ABOVE THE TEMPERATURE AT WHICH
853 !...GLACIATION IS ASSUMED TO INITIATE; IF IT IS, CALCULATE THE
854 !...FRACTION OF REMAINING LIQUID WATER TO FREEZE...TTFRZ IS THE
855 !...TEMP AT WHICH FREEZING BEGINS, TBFRZ THE TEMP BELOW WHICH ALL
856 !...LIQUID WATER IS FROZEN AT EACH LEVEL...
858 IF(TU(NK1).LE.TTFRZ)THEN
859 IF(TU(NK1).GT.TBFRZ)THEN
860 IF(TTEMP.GT.TTFRZ)TTEMP=TTFRZ
861 FRC1=(TTEMP-TU(NK1))/(TTEMP-TBFRZ)
868 ! DETERMINE THE EFFECTS OF LIQUID WATER FREEZING WHEN TEMPERATURE
869 !...IS BELOW TTFRZ...
871 QFRZ = (QLIQ(NK1)+QNEWLQ)*FRC1
872 QNEWIC=QNEWIC+QNEWLQ*FRC1
873 QNEWLQ=QNEWLQ-QNEWLQ*FRC1
874 QICE(NK1) = QICE(NK1)+QLIQ(NK1)*FRC1
875 QLIQ(NK1) = QLIQ(NK1)-QLIQ(NK1)*FRC1
876 CALL DTFRZNEW(TU(NK1),P0(NK1),THETEU(NK1),QU(NK1),QFRZ, &
877 QICE(NK1),ALIQ,BLIQ,CLIQ,DLIQ)
879 TVU(NK1)=TU(NK1)*(1.+0.608*QU(NK1))
881 ! CALCULATE UPDRAFT VERTICAL VELOCITY AND PRECIPITATION FALLOUT...
884 BE=(TVLCL+TVU(NK1))/(TVEN+TV0(NK1))-1.
885 BOTERM=2.*(Z0(NK1)-ZLCL)*G*BE/1.5
888 BE=(TVU(NK)+TVU(NK1))/(TV0(NK)+TV0(NK1))-1.
889 BOTERM=2.*DZA(NK)*G*BE/1.5
892 ENTERM=2.*REI*WTW/UPOLD
894 CALL CONDLOAD(QLIQ(NK1),QICE(NK1),WTW,DZZ,BOTERM,ENTERM, &
895 RATE,QNEWLQ,QNEWIC,QLQOUT(NK1),QICOUT(NK1),G)
897 !...IF VERT VELOCITY IS LESS THAN ZERO, EXIT THE UPDRAFT LOOP AND,
898 !...IF CLOUD IS TALL ENOUGH, FINALIZE UPDRAFT CALCULATIONS...
905 !...Calculate value of THETA-E in environment to entrain into updraft...
907 CALL ENVIRTHT(P0(NK1),T0(NK1),Q0(NK1),THETEE(NK1),ALIQ,BLIQ,CLIQ,DLIQ)
909 !...REI IS THE RATE OF ENVIRONMENTAL INFLOW...
911 REI=VMFLCL*DP(NK1)*0.03/RAD
912 TVQU(NK1)=TU(NK1)*(1.+0.608*QU(NK1)-QLIQ(NK1)-QICE(NK1))
914 DILBE=((TVLCL+TVQU(NK1))/(TVEN+TV0(NK1))-1.)*DZZ
916 DILBE=((TVQU(NK)+TVQU(NK1))/(TV0(NK)+TV0(NK1))-1.)*DZZ
918 IF(DILBE.GT.0.)ABE=ABE+DILBE*G
920 !...IF CLOUD PARCELS ARE VIRTUALLY COLDER THAN THE ENVIRONMENT, MINIMAL
921 !...ENTRAINMENT (0.5*REI) IS IMPOSED...
923 IF(TVQU(NK1).LE.TV0(NK1))THEN ! Entrain/Detrain IF BLOCK
931 !...DETERMINE THE CRITICAL MIXED FRACTION OF UPDRAFT AND ENVIRONMENTAL AIR...
935 THTTMP=F1*THETEE(NK1)+F2*THETEU(NK1)
936 QTMP=F1*Q0(NK1)+F2*QU(NK1)
939 call tpmix2(p0(nk1),thttmp,ttmp,qtmp,tmpliq,tmpice, &
940 qnewlq,qnewic,XLV1,XLV0)
941 TU95=TTMP*(1.+0.608*QTMP-TMPLIQ-TMPICE)
942 IF(TU95.GT.TV0(NK1))THEN
949 THTTMP=F1*THETEE(NK1)+F2*THETEU(NK1)
950 QTMP=F1*Q0(NK1)+F2*QU(NK1)
953 call tpmix2(p0(nk1),thttmp,ttmp,qtmp,tmpliq,tmpice, &
954 qnewlq,qnewic,XLV1,XLV0)
955 TU10=TTMP*(1.+0.608*QTMP-TMPLIQ-TMPICE)
956 TVDIFF = ABS(TU10-TVQU(NK1))
957 IF(TVDIFF.LT.1.e-3)THEN
962 EQFRC(NK1)=(TV0(NK1)-TVQU(NK1))*F1/(TU10-TVQU(NK1))
963 EQFRC(NK1)=AMAX1(0.0,EQFRC(NK1))
964 EQFRC(NK1)=AMIN1(1.0,EQFRC(NK1))
965 IF(EQFRC(NK1).EQ.1)THEN
968 ELSEIF(EQFRC(NK1).EQ.0.)THEN
973 !...SUBROUTINE PROF5 INTEGRATES OVER THE GAUSSIAN DIST TO DETERMINE THE
974 ! FRACTIONAL ENTRAINMENT AND DETRAINMENT RATES...
976 CALL PROF5(EQFRC(NK1),EE2,UD2)
980 ENDIF ! End of Entrain/Detrain IF BLOCK
983 !...NET ENTRAINMENT AND DETRAINMENT RATES ARE GIVEN BY THE AVERAGE FRACTIONAL
984 ! VALUES IN THE LAYER...
988 UER(NK1)=0.5*REI*(EE1+EE2)
989 UDR(NK1)=0.5*REI*(UD1+UD2)
991 !...IF THE CALCULATED UPDRAFT DETRAINMENT RATE IS GREATER THAN THE TOTAL
992 ! UPDRAFT MASS FLUX, ALL CLOUD MASS DETRAINS, EXIT UPDRAFT CALCULATIONS...
994 IF(UMF(NK)-UDR(NK1).LT.10.)THEN
996 !...IF THE CALCULATED DETRAINED MASS FLUX IS GREATER THAN THE TOTAL UPD MASS
997 ! FLUX, IMPOSE TOTAL DETRAINMENT OF UPDRAFT MASS AT THE PREVIOUS MODEL LVL..
998 ! First, correct ABE calculation if needed...
1004 ! WRITE(98,1015)P0(NK1)/100.
1009 UPOLD=UMF(NK)-UDR(NK1)
1010 UPNEW=UPOLD+UER(NK1)
1012 DILFRC(NK1) = UPNEW/UPOLD
1014 !...DETLQ AND DETIC ARE THE RATES OF DETRAINMENT OF LIQUID AND
1015 !...ICE IN THE DETRAINING UPDRAFT MASS...
1017 DETLQ(NK1)=QLIQ(NK1)*UDR(NK1)
1018 DETIC(NK1)=QICE(NK1)*UDR(NK1)
1020 QU(NK1)=(UPOLD*QU(NK1)+UER(NK1)*Q0(NK1))/UPNEW
1021 THETEU(NK1)=(THETEU(NK1)*UPOLD+THETEE(NK1)*UER(NK1))/UPNEW
1022 QLIQ(NK1)=QLIQ(NK1)*UPOLD/UPNEW
1023 QICE(NK1)=QICE(NK1)*UPOLD/UPNEW
1025 !...PPTLIQ IS THE RATE OF GENERATION (FALLOUT) OF
1026 !...LIQUID PRECIP AT A GIVEN MODEL LVL, PPTICE THE SAME FOR ICE,
1027 !...TRPPT IS THE TOTAL RATE OF PRODUCTION OF PRECIP UP TO THE
1028 !...CURRENT MODEL LEVEL...
1030 PPTLIQ(NK1)=QLQOUT(NK1)*UMF(NK)
1031 PPTICE(NK1)=QICOUT(NK1)*UMF(NK)
1033 TRPPT=TRPPT+PPTLIQ(NK1)+PPTICE(NK1)
1034 IF(NK1.LE.KPBL)UER(NK1)=UER(NK1)+VMFLCL*DP(NK1)/DPTHMX
1039 !...CHECK CLOUD DEPTH...IF CLOUD IS TALL ENOUGH, ESTIMATE THE EQUILIBRIU
1040 ! TEMPERATURE LEVEL (LET) AND ADJUST MASS FLUX PROFILE AT CLOUD TOP SO
1041 ! THAT MASS FLUX DECREASES TO ZERO AS A LINEAR FUNCTION OF PRESSURE BE
1042 ! THE LET AND CLOUD TOP...
1044 !...LTOP IS THE MODEL LEVEL JUST BELOW THE LEVEL AT WHICH VERTICAL VELOC
1045 ! FIRST BECOMES NEGATIVE...
1048 CLDHGT(LC)=Z0(LTOP)-ZLCL
1050 !...Instead of using the same minimum cloud height (for deep convection)
1051 !...everywhere, try specifying minimum cloud depth as a function of TLCL...
1055 IF(TLCL.GT.293.)THEN
1057 ELSEIF(TLCL.LE.293. .and. TLCL.GE.273)THEN
1058 CHMIN = 2.E3 + 100.*(TLCL-273.)
1059 ELSEIF(TLCL.LT.273.)THEN
1064 !...If cloud top height is less than the specified minimum for deep
1065 !...convection, save value to consider this level as source for
1066 !...shallow convection, go back up to check next level...
1068 !...Try specifying minimum cloud depth as a function of TLCL...
1071 !...DO NOT ALLOW ANY CLOUD FROM THIS LAYER IF:
1073 !... 1.) if there is no CAPE, or
1074 !... 2.) cloud top is at model level just above LCL, or
1075 !... 3.) cloud top is within updraft source layer, or
1076 !... 4.) cloud-top detrainment layer begins within
1077 !... updraft source layer.
1079 IF(LTOP.LE.KLCL .or. LTOP.LE.KPBL .or. LET+1.LE.KPBL)THEN ! No Convection Allowed
1091 ELSEIF(CLDHGT(LC).GT.CHMIN .and. ABE.GT.1)THEN ! Deep Convection allowed
1096 !...TO DISALLOW SHALLOW CONVECTION, COMMENT OUT NEXT LINE !!!!!!!!
1099 EXIT usl ! Shallow Convection from this layer
1101 ! Remember this layer (by virtue of non-zero CLDHGT) as potential shallow-cloud layer
1116 KSTART=MAX0(KPBL,KLCL)
1120 !...IF THE LET AND LTOP ARE THE SAME, DETRAIN ALL OF THE UPDRAFT MASS FL
1124 UDR(LTOP)=UMF(LTOP)+UDR(LTOP)-UER(LTOP)
1125 DETLQ(LTOP)=QLIQ(LTOP)*UDR(LTOP)*UPNEW/UPOLD
1126 DETIC(LTOP)=QICE(LTOP)*UDR(LTOP)*UPNEW/UPOLD
1131 ! BEGIN TOTAL DETRAINMENT AT THE LEVEL ABOVE THE LET...
1137 DUMFDP=UMF(LET)/DPTT
1139 !...ADJUST MASS FLUX PROFILES, DETRAINMENT RATES, AND PRECIPITATION FALL
1140 ! RATES TO REFLECT THE LINEAR DECREASE IN MASS FLX BETWEEN THE LET AND
1144 !...entrainment is allowed at every level except for LTOP, so disallow
1145 !...entrainment at LTOP and adjust entrainment rates between LET and LTOP
1146 !...so the the dilution factor due to entyrianment is not changed but
1147 !...the actual entrainment rate will change due due forced total
1148 !...detrainment in this layer...
1153 DETLQ(NK) = UDR(NK)*QLIQ(NK)*DILFRC(NK)
1154 DETIC(NK) = UDR(NK)*QICE(NK)*DILFRC(NK)
1156 UMF(NK)=UMF(NK-1)-DP(NK)*DUMFDP
1157 UER(NK)=UMF(NK)*(1.-1./DILFRC(NK))
1158 UDR(NK)=UMF(NK-1)-UMF(NK)+UER(NK)
1159 DETLQ(NK)=UDR(NK)*QLIQ(NK)*DILFRC(NK)
1160 DETIC(NK)=UDR(NK)*QICE(NK)*DILFRC(NK)
1163 TRPPT=TRPPT-PPTLIQ(NK)-PPTICE(NK)
1164 PPTLIQ(NK)=UMF(NK-1)*QLQOUT(NK)
1165 PPTICE(NK)=UMF(NK-1)*QICOUT(NK)
1166 TRPPT=TRPPT+PPTLIQ(NK)+PPTICE(NK)
1171 ! Initialize some arrays below cloud base and above cloud top...
1174 IF(T0(NK).GT.T00)ML=NK
1179 UMF(NK)=VMFLCL*DP(NK)/DPTHMX
1180 UER(NK)=VMFLCL*DP(NK)/DPTHMX
1181 ELSEIF(NK.LE.KPBL)THEN
1182 UER(NK)=VMFLCL*DP(NK)/DPTHMX
1183 UMF(NK)=UMF(NK-1)+UER(NK)
1188 TU(NK)=TMIX+(Z0(NK)-ZMIX)*GDRY
1209 CALL ENVIRTHT(P0(NK),T0(NK),Q0(NK),THETEE(NK),ALIQ,BLIQ,CLIQ,DLIQ)
1216 !...DEFINE VARIABLES ABOVE CLOUD TOP...
1250 EMS(NK)=DP(NK)*DXSQ/G
1253 !...INITIALIZE SOME VARIABLES TO BE USED LATER IN THE VERT ADVECTION SCH
1255 EXN(NK)=(P00/P0(NK))**(0.2854*(1.-0.28*QDT(NK)))
1256 THTAU(NK)=TU(NK)*EXN(NK)
1257 EXN(NK)=(P00/P0(NK))**(0.2854*(1.-0.28*Q0(NK)))
1258 THTA0(NK)=T0(NK)*EXN(NK)
1259 DDILFRC(NK) = 1./DILFRC(NK)
1262 ! IF (XTIME.LT.10.)THEN
1263 ! WRITE(98,1025)KLCL,ZLCL,DTLCL,LTOP,P0(LTOP),IFLAG,
1264 ! * TMIX-T00,PMIX,QMIX,ABE
1265 ! WRITE(98,1030)P0(LET)/100.,P0(LTOP)/100.,VMFLCL,PLCL/100.,
1269 !...COMPUTE CONVECTIVE TIME SCALE(TIMEC). THE MEAN WIND AT THE LCL
1270 !...AND MIDTROPOSPHERE IS USED.
1272 WSPD(KLCL)=SQRT(U0(KLCL)*U0(KLCL)+V0(KLCL)*V0(KLCL))
1273 WSPD(L5)=SQRT(U0(L5)*U0(L5)+V0(L5)*V0(L5))
1274 WSPD(LTOP)=SQRT(U0(LTOP)*U0(LTOP)+V0(LTOP)*V0(LTOP))
1275 VCONV=.5*(WSPD(KLCL)+WSPD(L5))
1276 !...for ETA model, DX is a function of location...
1277 ! TIMEC=DX(I,J)/VCONV
1280 TIMEC=AMAX1(1800.,TIMEC)
1281 TIMEC=AMIN1(3600.,TIMEC)
1282 IF(ISHALL.EQ.1)TIMEC=2400.
1286 !...COMPUTE WIND SHEAR AND PRECIPITATION EFFICIENCY.
1288 IF(WSPD(LTOP).GT.WSPD(KLCL))THEN
1293 VWS=(U0(LTOP)-U0(KLCL))*(U0(LTOP)-U0(KLCL))+(V0(LTOP)-V0(KLCL))* &
1295 VWS=1.E3*SHSIGN*SQRT(VWS)/(Z0(LTOP)-Z0(LCL))
1296 PEF=1.591+VWS*(-.639+VWS*(9.53E-2-VWS*4.96E-3))
1300 !...PRECIPITATION EFFICIENCY IS A FUNCTION OF THE HEIGHT OF CLOUD BASE.
1302 CBH=(ZLCL-Z0(1))*3.281E-3
1306 RCBH=.96729352+CBH*(-.70034167+CBH*(.162179896+CBH*(- &
1307 1.2569798E-2+CBH*(4.2772E-4-CBH*5.44E-6))))
1309 IF(CBH.GT.25)RCBH=2.4
1311 PEFCBH=AMIN1(PEFCBH,.9)
1313 !... MEAN PEF. IS USED TO COMPUTE RAINFALL.
1315 PEFF=.5*(PEF+PEFCBH)
1316 PEFF2 = PEFF ! JSK MODS
1318 WRITE(98,1035)PEF,PEFCBH,LC,LET,WKL,VWS
1321 ! WRITE(98,1035)PEF,PEFCBH,LC,LET,WKL,VWS
1322 !*****************************************************************
1324 ! COMPUTE DOWNDRAFT PROPERTIES *
1326 !*****************************************************************
1330 devap:IF(ISHALL.EQ.1)THEN
1334 !...start downdraft about 150 mb above cloud base...
1336 ! KSTART=MAX0(KPBL,KLCL)
1337 ! KSTART=KPBL ! Changed 7/23/99
1338 KSTART=KPBL+1 ! Changed 7/23/99
1341 DPPP = P0(KSTART)-P0(NK)
1342 ! IF(DPPP.GT.200.E2)THEN
1343 IF(DPPP.GT.150.E2)THEN
1348 KLFS = MIN0(KLFS,LET-1)
1351 !...if LFS is not at least 50 mb above cloud base (implying that the
1352 !...level of equil temp, LET, is just above cloud base) do not allow a
1355 IF((P0(KSTART)-P0(LFS)).GT.50.E2)THEN
1356 THETED(LFS) = THETEE(LFS)
1359 !...call tpmix2dd to find wet-bulb temp, qv...
1361 call tpmix2dd(p0(lfs),theted(lfs),tz(lfs),qss,i,j)
1362 THTAD(LFS)=TZ(LFS)*(P00/P0(LFS))**(0.2854*(1.-0.28*QSS))
1364 !...TAKE A FIRST GUESS AT THE INITIAL DOWNDRAFT MASS FLUX...
1366 TVD(LFS)=TZ(LFS)*(1.+0.608*QSS)
1367 RDD=P0(LFS)/(R*TVD(LFS))
1372 RHBAR = RH(LFS)*DP(LFS)
1374 DO ND = LFS-1,KSTART,-1
1376 DER(ND)=DER(LFS)*EMS(ND)/EMS(LFS)
1378 DMF(ND)=DMF(ND1)+DER(ND)
1379 THETED(ND)=(THETED(ND1)*DMF(ND1)+THETEE(ND)*DER(ND))/DMF(ND)
1380 QD(ND)=(QD(ND1)*DMF(ND1)+Q0(ND)*DER(ND))/DMF(ND)
1382 RHBAR = RHBAR+RH(ND)*DP(ND)
1385 DMFFRC = 2.*(1.-RHBAR)
1387 !...Calculate melting effect
1388 !... first, compute total frozen precipitation generated...
1392 PPTMLT = PPTMLT+PPTICE(NK)
1395 !...For now, calculate melting effect as if DMF = -UMF at KLCL, i.e., as
1396 !...if DMFFRC=1. Otherwise, for small DMFFRC, DTMELT gets too large!
1398 DTMELT = RLF*PPTMLT/(CP*UMF(KLCL))
1402 LDT = MIN0(LFS-1,KSTART-1)
1404 call tpmix2dd(p0(kstart),theted(kstart),tz(kstart),qss,i,j)
1406 tz(kstart) = tz(kstart)-dtmelt
1407 ES=ALIQ*EXP((BLIQ*TZ(KSTART)-CLIQ)/(TZ(KSTART)-DLIQ))
1408 QSS=0.622*ES/(P0(KSTART)-ES)
1409 THETED(KSTART)=TZ(KSTART)*(1.E5/P0(KSTART))**(0.2854*(1.-0.28*QSS))* &
1410 EXP((3374.6525/TZ(KSTART)-2.5403)*QSS*(1.+0.81*QSS))
1412 LDT = MIN0(LFS-1,KSTART-1)
1415 THETED(ND) = THETED(KSTART)
1418 !...call tpmix2dd to find wet bulb temp, saturation mixing ratio...
1420 call tpmix2dd(p0(nd),theted(nd),tz(nd),qss,i,j)
1423 !...specify RH decrease of 20%/km in downdraft...
1425 RHH = 1.-0.2/1000.*(Z0(KSTART)-Z0(ND))
1427 !...adjust downdraft TEMP, Q to specified RH:
1430 DSSDT=(CLIQ-BLIQ*DLIQ)/((TZ(ND)-DLIQ)*(TZ(ND)-DLIQ))
1432 DTMP=RL*QSS*(1.-RHH)/(CP+RL*RHH*QSS*DSSDT)
1434 ES=RHH*ALIQ*EXP((BLIQ*T1RH-CLIQ)/(T1RH-DLIQ))
1435 QSRH=0.622*ES/(P0(ND)-ES)
1437 !...CHECK TO SEE IF MIXING RATIO AT SPECIFIED RH IS LESS THAN ACTUAL
1438 !...MIXING RATIO...IF SO, ADJUST TO GIVE ZERO EVAPORATION...
1440 IF(QSRH.LT.QD(ND))THEN
1442 T1RH=TZ(ND)+(QSS-QSRH)*RL/CP
1448 TVD(nd) = tz(nd)*(1.+0.608*qsd(nd))
1449 IF(TVD(ND).GT.TV0(ND).OR.ND.EQ.1)THEN
1454 IF((P0(LDB)-P0(LFS)) .gt. 50.E2)THEN ! minimum Downdraft depth!
1457 DDR(ND) = -DMF(KSTART)*DP(ND)/DPDD
1459 DMF(ND) = DMF(ND1)+DDR(ND)
1460 TDER=TDER+(QSD(nd)-QD(ND))*DDR(ND)
1462 THTAD(ND)=TZ(ND)*(P00/P0(ND))**(0.2854*(1.-0.28*QD(ND)))
1468 !...IF DOWNDRAFT DOES NOT EVAPORATE ANY WATER FOR SPECIFIED RELATIVE
1469 !...HUMIDITY, NO DOWNDRAFT IS ALLOWED...
1471 d_mf: IF(TDER.LT.1.)THEN
1473 !3004 FORMAT(' ','No Downdraft!; I=',I3,2X,'J=',I3,'ISHALL =',I2)
1491 DDINC = -DMFFRC*UMF(KLCL)/DMF(KSTART)
1493 IF(TDER*DDINC.GT.TRPPT)THEN
1498 DMF(NK)=DMF(NK)*DDINC
1499 DER(NK)=DER(NK)*DDINC
1500 DDR(NK)=DDR(NK)*DDINC
1506 write(98,*)'PRECIP EFFICIENCY =',PEFF
1511 !...ADJUST UPDRAFT MASS FLUX, MASS DETRAINMENT RATE, AND LIQUID WATER AN
1512 ! DETRAINMENT RATES TO BE CONSISTENT WITH THE TRANSFER OF THE ESTIMATE
1513 ! FROM THE UPDRAFT TO THE DOWNDRAFT AT THE LFS...
1516 ! UMF(NK)=UMF(NK)*UPDINC
1517 ! UDR(NK)=UDR(NK)*UPDINC
1518 ! UER(NK)=UER(NK)*UPDINC
1519 ! PPTLIQ(NK)=PPTLIQ(NK)*UPDINC
1520 ! PPTICE(NK)=PPTICE(NK)*UPDINC
1521 ! DETLQ(NK)=DETLQ(NK)*UPDINC
1522 ! DETIC(NK)=DETIC(NK)*UPDINC
1525 !...ZERO OUT THE ARRAYS FOR DOWNDRAFT DATA AT LEVELS ABOVE AND BELOW THE
1555 !...SET LIMITS ON THE UPDRAFT AND DOWNDRAFT MASS FLUXES SO THAT THE INFL
1556 ! INTO CONVECTIVE DRAFTS FROM A GIVEN LAYER IS NO MORE THAN IS AVAILAB
1557 ! IN THAT LAYER INITIALLY...
1562 IF((UER(NK)-DER(NK)).GT.1.e-3)THEN
1563 AINCM1=EMS(NK)/((UER(NK)-DER(NK))*TIMEC)
1564 AINCMX=AMIN1(AINCMX,AINCM1)
1568 IF(AINCMX.LT.AINC)AINC=AINCMX
1570 !...SAVE THE RELEVENT VARIABLES FOR A UNIT UPDRAFT AND DOWNDRAFT...THEY WILL
1571 !...BE ITERATIVELY ADJUSTED BY THE FACTOR AINC TO SATISFY THE STABILIZATION
1577 DETLQ2(NK)=DETLQ(NK)
1578 DETIC2(NK)=DETIC(NK)
1591 IF(ISHALL.EQ.1)THEN ! First for shallow convection
1593 ! No iteration for shallow convection; if turbulent kinetic energy (TKE) is available
1594 ! from a turbulence parameterization, scale cloud-base updraft mass flux as a function
1595 ! of TKE, but for now, just specify shallow-cloud mass flux using TKEMAX = 5...
1597 !...find the maximum TKE value between LC and KLCL...
1600 ! DO 173 K = LC,KLCL
1602 ! TKEMAX = AMAX1(TKEMAX,Q2(I,J,NK))
1604 ! TKEMAX = AMIN1(TKEMAX,10.)
1605 ! TKEMAX = AMAX1(TKEMAX,5.)
1607 !c...3_24_99...DPMIN was changed for shallow convection so that it is the
1608 !c... the same as for deep convection (5.E3). Since this doubles
1609 !c... (roughly) the value of DPTHMX, add a factor of 0.5 to calcu-
1610 !c... lation of EVAC...
1611 !c EVAC = TKEMAX*0.1
1612 EVAC = 0.5*TKEMAX*0.1
1613 ! AINC = 0.1*DPTHMX*DXIJ*DXIJ/(VMFLCL*G*TIMEC)
1614 ! AINC = EVAC*DPTHMX*DX(I,J)*DX(I,J)/(VMFLCL*G*TIMEC)
1615 AINC = EVAC*DPTHMX*DXSQ/(VMFLCL*G*TIMEC)
1619 UMF(NK)=UMF2(NK)*AINC
1620 DMF(NK)=DMF2(NK)*AINC
1621 DETLQ(NK)=DETLQ2(NK)*AINC
1622 DETIC(NK)=DETIC2(NK)*AINC
1623 UDR(NK)=UDR2(NK)*AINC
1624 UER(NK)=UER2(NK)*AINC
1625 DER(NK)=DER2(NK)*AINC
1626 DDR(NK)=DDR2(NK)*AINC
1628 ENDIF ! Otherwise for deep convection
1629 ! use iterative procedure to find mass fluxes...
1630 iter: DO NCOUNT=1,10
1632 !*****************************************************************
1634 ! COMPUTE PROPERTIES FOR COMPENSATIONAL SUBSIDENCE *
1636 !*****************************************************************
1638 !...DETERMINE OMEGA VALUE NECESSARY AT TOP AND BOTTOM OF EACH LAYER TO
1639 !...SATISFY MASS CONTINUITY...
1643 DOMGDP(NK)=-(UER(NK)-DER(NK)-UDR(NK)-DDR(NK))*EMSD(NK)
1645 OMG(NK)=OMG(NK-1)-DP(NK-1)*DOMGDP(NK-1)
1646 ABSOMG = ABS(OMG(NK))
1647 ABSOMGTC = ABSOMG*TIMEC
1648 FRDP = 0.75*DP(NK-1)
1649 IF(ABSOMGTC.GT.FRDP)THEN
1658 NSTEP=NINT(TIMEC/DTT+1)
1659 DTIME=TIMEC/FLOAT(NSTEP)
1660 FXM(NK)=OMG(NK)*DXSQ/G
1663 !...DO AN UPSTREAM/FORWARD-IN-TIME ADVECTION OF THETA, QV...
1667 !...ASSIGN THETA AND Q VALUES AT THE TOP AND BOTTOM OF EACH LAYER BASED
1668 !...SIGN OF OMEGA...
1677 IF(OMG(NK).LE.0.)THEN
1678 THFXIN(NK)=-FXM(NK)*THPA(NK-1)
1679 QFXIN(NK)=-FXM(NK)*QPA(NK-1)
1680 THFXOUT(NK-1)=THFXOUT(NK-1)+THFXIN(NK)
1681 QFXOUT(NK-1)=QFXOUT(NK-1)+QFXIN(NK)
1683 THFXOUT(NK)=FXM(NK)*THPA(NK)
1684 QFXOUT(NK)=FXM(NK)*QPA(NK)
1685 THFXIN(NK-1)=THFXIN(NK-1)+THFXOUT(NK)
1686 QFXIN(NK-1)=QFXIN(NK-1)+QFXOUT(NK)
1690 !...UPDATE THE THETA AND QV VALUES AT EACH LEVEL...
1693 THPA(NK)=THPA(NK)+(THFXIN(NK)+UDR(NK)*THTAU(NK)+DDR(NK)* &
1694 THTAD(NK)-THFXOUT(NK)-(UER(NK)-DER(NK))*THTA0(NK))* &
1696 QPA(NK)=QPA(NK)+(QFXIN(NK)+UDR(NK)*QDT(NK)+DDR(NK)*QD(NK)- &
1697 QFXOUT(NK)-(UER(NK)-DER(NK))*Q0(NK))*DTIME*EMSD(NK)
1705 !...CHECK TO SEE IF MIXING RATIO DIPS BELOW ZERO ANYWHERE; IF SO, BORRO
1706 !...MOISTURE FROM ADJACENT LAYERS TO BRING IT BACK UP ABOVE ZERO...
1709 IF(QG(NK).LT.0.)THEN
1710 IF(NK.EQ.1)THEN ! JSK MODS
1711 ! PRINT *,' PROBLEM WITH KF SCHEME: ' ! JSK MODS
1712 ! PRINT *,'QG = 0 AT THE SURFACE!!!!!!!' ! JSK MODS
1713 CALL wrf_error_fatal ( 'QG, QG(NK).LT.0') ! JSK MODS
1719 TMA=QG(NK1)*EMS(NK1)
1720 TMB=QG(NK-1)*EMS(NK-1)
1721 TMM=(QG(NK)-1.E-9)*EMS(NK )
1722 BCOEFF=-TMM/((TMA*TMA)/TMB+TMB)
1723 ACOEFF=BCOEFF*TMA/TMB
1727 QVDIFF=(QG(NK1)-TMA*EMSD(NK1))*100./QG(NK1)
1728 ! IF(ABS(QVDIFF).GT.1.)THEN
1729 ! PRINT *,'!!!WARNING!!! CLOUD BASE WATER VAPOR CHANGES BY ', &
1731 ! '% WHEN MOISTURE IS BORROWED TO PREVENT NEGATIVE ', &
1732 ! 'VALUES IN KAIN-FRITSCH'
1736 QG(NK1)=TMA*EMSD(NK1)
1737 QG(NK-1)=TMB*EMSD(NK-1)
1740 TOPOMG=(UDR(LTOP)-UER(LTOP))*DP(LTOP)*EMSD(LTOP)
1741 IF(ABS(TOPOMG-OMG(LTOP)).GT.1.E-3)THEN
1742 ! WRITE(99,*)'ERROR: MASS DOES NOT BALANCE IN KF SCHEME; &
1743 ! TOPOMG, OMG =',TOPOMG,OMG(LTOP)
1744 ! TOPOMG, OMG =',TOPOMG,OMG(LTOP)
1750 !...CONVERT THETA TO T...
1753 EXN(NK)=(P00/P0(NK))**(0.2854*(1.-0.28*QG(NK)))
1754 TG(NK)=THTAG(NK)/EXN(NK)
1755 TVG(NK)=TG(NK)*(1.+0.608*QG(NK))
1761 !*******************************************************************
1763 ! COMPUTE NEW CLOUD AND CHANGE IN AVAILABLE BUOYANT ENERGY. *
1765 !*******************************************************************
1767 !...THE FOLLOWING COMPUTATIONS ARE SIMILAR TO THAT FOR UPDRAFT
1773 !...FIND THE THERMODYNAMIC CHARACTERISTICS OF THE LAYER BY
1774 !...MASS-WEIGHTING THE CHARACTERISTICS OF THE INDIVIDUAL MODEL
1778 TMIX=TMIX+DP(NK)*TG(NK)
1779 QMIX=QMIX+DP(NK)*QG(NK)
1783 ES=ALIQ*EXP((TMIX*BLIQ-CLIQ)/(TMIX-DLIQ))
1784 QSS=0.622*ES/(PMIX-ES)
1786 !...REMOVE SUPERSATURATION FOR DIAGNOSTIC PURPOSES, IF NECESSARY...
1790 CPM=CP*(1.+0.887*QMIX)
1791 DSSDT=QSS*(CLIQ-BLIQ*DLIQ)/((TMIX-DLIQ)*(TMIX-DLIQ))
1792 DQ=(QMIX-QSS)/(1.+RL*DSSDT/CPM)
1798 EMIX=QMIX*PMIX/(0.622+QMIX)
1804 value=(indlu-1)*binc+astrt
1805 aintrp=(a1-value)/binc
1806 tlog=aintrp*alu(indlu+1)+(1-aintrp)*alu(indlu)
1807 TDPT=(CLIQ-DLIQ*TLOG)/(BLIQ-TLOG)
1808 TLCL=TDPT-(.212+1.571E-3*(TDPT-T00)-4.36E-4*(TMIX-T00))*(TMIX-TDPT)
1809 TLCL=AMIN1(TLCL,TMIX)
1811 TVLCL=TLCL*(1.+0.608*QMIX)
1812 ZLCL = ZMIX+(TLCL-TMIX)/GDRY
1815 IF(ZLCL.LE.Z0(NK))THEN
1820 DLP=(ZLCL-Z0(K))/(Z0(KLCL)-Z0(K))
1822 !...ESTIMATE ENVIRONMENTAL TEMPERATURE AND MIXING RATIO AT THE LCL...
1824 TENV=TG(K)+(TG(KLCL)-TG(K))*DLP
1825 QENV=QG(K)+(QG(KLCL)-QG(K))*DLP
1826 TVEN=TENV*(1.+0.608*QENV)
1827 PLCL=P0(K)+(P0(KLCL)-P0(K))*DLP
1828 THETEU(K)=TMIX*(1.E5/PMIX)**(0.2854*(1.-0.28*QMIX))* &
1829 EXP((3374.6525/TLCL-2.5403)*QMIX*(1.+0.81*QMIX))
1831 !...COMPUTE ADJUSTED ABE(ABEG).
1836 THETEU(NK1) = THETEU(NK)
1838 call tpmix2dd(p0(nk1),theteu(nk1),tgu(nk1),qgu(nk1),i,j)
1840 TVQU(NK1)=TGU(NK1)*(1.+0.608*QGU(NK1)-QLIQ(NK1)-QICE(NK1))
1843 DILBE=((TVLCL+TVQU(NK1))/(TVEN+TVG(NK1))-1.)*DZZ
1846 DILBE=((TVQU(NK)+TVQU(NK1))/(TVG(NK)+TVG(NK1))-1.)*DZZ
1848 IF(DILBE.GT.0.)ABEG=ABEG+DILBE*G
1850 !...DILUTE BY ENTRAINMENT BY THE RATE AS ORIGINAL UPDRAFT...
1852 CALL ENVIRTHT(P0(NK1),TG(NK1),QG(NK1),THTEEG(NK1),ALIQ,BLIQ,CLIQ,DLIQ)
1853 THETEU(NK1)=THETEU(NK1)*DDILFRC(NK1)+THTEEG(NK1)*(1.-DDILFRC(NK1))
1856 !...ASSUME AT LEAST 90% OF CAPE (ABE) IS REMOVED BY CONVECTION DURING
1857 !...THE PERIOD TIMEC...
1861 ! write(98,*)'TAU, I, J, =',NTSD,I,J
1862 ! WRITE(98,1060)FABE
1866 DABE=AMAX1(ABE-ABEG,0.1*ABE)
1868 IF(FABE.GT.1. .and. ISHALL.EQ.0)THEN
1869 ! WRITE(98,*)'UPDRAFT/DOWNDRAFT COUPLET INCREASES CAPE AT THIS
1870 ! *GRID POINT; NO CONVECTION ALLOWED!'
1874 IF(ABS(AINC-AINCOLD).LT.0.0001)THEN
1879 DFDA=(FABE-FABEOLD)/(AINC-AINCOLD)
1888 IF(AINC/AINCMX.GT.0.999.AND.FABE.GT.1.05-STAB)THEN
1890 ! write(98,*)'TAU, I, J, =',NTSD,I,J
1891 ! WRITE(98,1055)FABE
1895 IF((FABE.LE.1.05-STAB.AND.FABE.GE.0.95-STAB) .or. NCOUNT.EQ.10)THEN
1898 IF(NCOUNT.GT.10)THEN
1900 ! write(98,*)'TAU, I, J, =',NTSD,I,J
1901 ! WRITE(98,1060)FABE
1906 !...IF MORE THAN 10% OF THE ORIGINAL CAPE REMAINS, INCREASE THE CONVECTI
1907 !...MASS FLUX BY THE FACTOR AINC:
1912 IF(DABE.LT.1.e-4)THEN
1917 AINC=AINC*STAB*ABE/DABE
1920 ! AINC=AMIN1(AINCMX,AINC)
1921 AINC=AMIN1(AINCMX,AINC)
1922 !...IF AINC BECOMES VERY SMALL, EFFECTS OF CONVECTION ! JSK MODS
1923 !...WILL BE MINIMAL SO JUST IGNORE IT... ! JSK MODS
1924 IF(AINC.LT.0.05)then
1927 ! AINC=AMAX1(AINC,0.05) ! JSK MODS
1930 ! IF (XTIME.LT.10.)THEN
1931 ! WRITE(98,1080)LFS,LDB,LDT,TIMEC,TADVEC,NSTEP,NCOUNT,
1935 UMF(NK)=UMF2(NK)*AINC
1936 DMF(NK)=DMF2(NK)*AINC
1937 DETLQ(NK)=DETLQ2(NK)*AINC
1938 DETIC(NK)=DETIC2(NK)*AINC
1939 UDR(NK)=UDR2(NK)*AINC
1940 UER(NK)=UER2(NK)*AINC
1941 DER(NK)=DER2(NK)*AINC
1942 DDR(NK)=DDR2(NK)*AINC
1945 !...GO BACK UP FOR ANOTHER ITERATION...
1950 !...COMPUTE HYDROMETEOR TENDENCIES AS IS DONE FOR T, QV...
1952 !...FRC2 IS THE FRACTION OF TOTAL CONDENSATE ! PPT FB MODS
1953 !...GENERATED THAT GOES INTO PRECIPITIATION ! PPT FB MODS
1955 ! Redistribute hydormeteors according to the final mass-flux values:
1958 FRC2=PPTFLX/(CPR*AINC) ! PPT FB MODS
1967 RAINFB(NK)=PPTLIQ(NK)*AINC*FBFRC*FRC2 ! PPT FB MODS
1968 SNOWFB(NK)=PPTICE(NK)*AINC*FBFRC*FRC2 ! PPT FB MODS
1972 !...ASSIGN HYDROMETEORS CONCENTRATIONS AT THE TOP AND BOTTOM OF EACH LAY
1973 !...BASED ON THE SIGN OF OMEGA...
1986 IF(OMG(NK).LE.0.)THEN
1987 QLFXIN(NK)=-FXM(NK)*QLPA(NK-1)
1988 QIFXIN(NK)=-FXM(NK)*QIPA(NK-1)
1989 QRFXIN(NK)=-FXM(NK)*QRPA(NK-1)
1990 QSFXIN(NK)=-FXM(NK)*QSPA(NK-1)
1991 QLFXOUT(NK-1)=QLFXOUT(NK-1)+QLFXIN(NK)
1992 QIFXOUT(NK-1)=QIFXOUT(NK-1)+QIFXIN(NK)
1993 QRFXOUT(NK-1)=QRFXOUT(NK-1)+QRFXIN(NK)
1994 QSFXOUT(NK-1)=QSFXOUT(NK-1)+QSFXIN(NK)
1996 QLFXOUT(NK)=FXM(NK)*QLPA(NK)
1997 QIFXOUT(NK)=FXM(NK)*QIPA(NK)
1998 QRFXOUT(NK)=FXM(NK)*QRPA(NK)
1999 QSFXOUT(NK)=FXM(NK)*QSPA(NK)
2000 QLFXIN(NK-1)=QLFXIN(NK-1)+QLFXOUT(NK)
2001 QIFXIN(NK-1)=QIFXIN(NK-1)+QIFXOUT(NK)
2002 QRFXIN(NK-1)=QRFXIN(NK-1)+QRFXOUT(NK)
2003 QSFXIN(NK-1)=QSFXIN(NK-1)+QSFXOUT(NK)
2007 !...UPDATE THE HYDROMETEOR CONCENTRATION VALUES AT EACH LEVEL...
2010 QLPA(NK)=QLPA(NK)+(QLFXIN(NK)+DETLQ(NK)-QLFXOUT(NK))*DTIME*EMSD(NK)
2011 QIPA(NK)=QIPA(NK)+(QIFXIN(NK)+DETIC(NK)-QIFXOUT(NK))*DTIME*EMSD(NK)
2012 QRPA(NK)=QRPA(NK)+(QRFXIN(NK)-QRFXOUT(NK)+RAINFB(NK))*DTIME*EMSD(NK) ! PPT FB MODS
2013 QSPA(NK)=QSPA(NK)+(QSFXIN(NK)-QSFXOUT(NK)+SNOWFB(NK))*DTIME*EMSD(NK) ! PPT FB MODS
2023 !...CLEAN THINGS UP, CALCULATE CONVECTIVE FEEDBACK TENDENCIES FOR THIS
2026 ! IF (XTIME.LT.10.)THEN
2027 ! WRITE(98,1080)LFS,LDB,LDT,TIMEC,TADVEC,NSTEP,NCOUNT,FABE,AINC
2030 WRITE(98,1080)LFS,LDB,LDT,TIMEC,TADVEC,NSTEP,NCOUNT,FABE,AINC
2034 !...SEND FINAL PARAMETERIZED VALUES TO OUTPUT FILES...
2038 ! if(I.eq.16 .and. J.eq.41)then
2039 ! IF(ISTOP.EQ.1)THEN
2041 ! write(98,*)'At t(h), I, J =',float(NTSD)*72./3600.,I,J
2042 write(98,*)'P(LC), DTP, WKL, WKLCL =',p0(LC)/100., &
2043 TLCL+DTLCL+dtrh-TENV,WKL,WKLCL
2044 write(98,*)'TLCL, DTLCL, DTRH, TENV =',TLCL,DTLCL, &
2046 WRITE(98,1025)KLCL,ZLCL,DTLCL,LTOP,P0(LTOP),IFLAG, &
2047 TMIX-T00,PMIX,QMIX,ABE
2048 WRITE(98,1030)P0(LET)/100.,P0(LTOP)/100.,VMFLCL,PLCL/100., &
2050 WRITE(98,1035)PEF,PEFCBH,LC,LET,WKL,VWS
2051 write(98,*)'PRECIP EFFICIENCY =',PEFF
2052 WRITE(98,1080)LFS,LDB,LDT,TIMEC,TADVEC,NSTEP,NCOUNT,FABE,AINC
2055 WRITE(98,1070)' P ',' DP ',' DT K/D ',' DR K/D ',' OMG ', &
2056 ' DOMGDP ',' UMF ',' UER ',' UDR ',' DMF ',' DER ' &
2057 ,' DDR ',' EMS ',' W0 ',' DETLQ ',' DETIC '
2058 write(98,*)'just before DO 300...'
2062 DTT=(TG(K)-T0(K))*86400./TIMEC
2064 DR=-(QG(K)-Q0(K))*RL*86400./(TIMEC*CP)
2065 UDFRC=UDR(K)*TIMEC*EMSD(K)
2066 UEFRC=UER(K)*TIMEC*EMSD(K)
2067 DDFRC=DDR(K)*TIMEC*EMSD(K)
2068 DEFRC=-DER(K)*TIMEC*EMSD(K)
2069 WRITE(98,1075)P0(K)/100.,DP(K)/100.,DTT,DR,OMG(K),DOMGDP(K)*1.E4, &
2070 UMF(K)/1.E6,UEFRC,UDFRC,DMF(K)/1.E6,DEFRC,DDFRC,EMS(K)/1.E11, &
2071 W0AVG1D(K)*1.E2,DETLQ(K)*TIMEC*EMSD(K)*1.E3,DETIC(K)* &
2074 WRITE(98,1085)'K','P','Z','T0','TG','DT','TU','TD','Q0','QG', &
2075 'DQ','QU','QD','QLG','QIG','QRG','QSG','RH0','RHG'
2080 IF(K.LT.LC.OR.K.GT.LTOP)TUC=0.
2082 IF((K.LT.LDB.OR.K.GT.LDT).AND.K.NE.LFS)TDC=0.
2083 IF(T0(K).LT.T00)THEN
2084 ES=ALIQ*EXP((BLIQ*TG(K)-CLIQ)/(TG(K)-DLIQ))
2086 ES=ALIQ*EXP((BLIQ*TG(K)-CLIQ)/(TG(K)-DLIQ))
2088 QGS=ES*0.622/(P0(K)-ES)
2091 WRITE(98,1090)K,P0(K)/100.,Z0(K),T0(K)-T00,TG(K)-T00,DTT,TUC, &
2092 TDC,Q0(K)*1000.,QG(K)*1000.,(QG(K)-Q0(K))*1000.,QU(K)* &
2093 1000.,QD(K)*1000.,QLG(K)*1000.,QIG(K)*1000.,QRG(K)*1000., &
2094 QSG(K)*1000.,RH0,RHG
2097 !...IF CALCULATIONS ABOVE SHOW AN ERROR IN THE MASS BUDGET, PRINT OUT A
2098 !...TO BE USED LATER FOR DIAGNOSTIC PURPOSES, THEN ABORT RUN...
2100 ! IF(ISTOP.EQ.1 .or. ISHALL.EQ.1)THEN
2102 ! IF(ISHALL.NE.1)THEN
2103 ! write(98,4421)i,j,iyr,imo,idy,ihr,imn
2104 ! write(98)i,j,iyr,imo,idy,ihr,imn,kl
2110 write(98,4455) p0(k)/100.,t0(k)-273.16,q0(k)*1000., &
2111 u0(k),v0(k),W0AVG1D(K),dp(k),tke(k)
2112 ! write(98) p0,t0,q0,u0,v0,w0,dp,tke
2113 ! WRITE(98,1115)Z0(K),P0(K)/100.,T0(K)-273.16,Q0(K)*1000.,
2114 ! * U0(K),V0(K),DP(K)/100.,W0AVG(I,J,K)
2117 CALL wrf_error_fatal ( 'KAIN-FRITSCH, istop=1, diags' )
2122 CNDTNF=(1.-EQFRC(LFS))*(QLIQ(LFS)+QICE(LFS))*DMF(LFS)
2123 PRATEC(I,J)=PPTFLX*(1.-FBFRC)/DXSQ
2124 RAINCV(I,J)=DT*PRATEC(I,J) ! PPT FB MODS
2125 ! RAINCV(I,J)=.1*.5*DT*PPTFLX/DXSQ ! PPT FB MODS
2126 ! RNC=0.1*TIMEC*PPTFLX/DXSQ
2128 IF(ISHALL.EQ.0.AND.IPRNT)write (98,909)I,J,RNC
2130 ! WRITE(98,1095)CPR*AINC,TDER+PPTFLX+CNDTNF
2132 ! EVALUATE MOISTURE BUDGET...
2140 QINIT=QINIT+Q0(NK)*EMS(NK)
2141 QFNL=QFNL+QG(NK)*EMS(NK)
2142 QFNL=QFNL+(QLG(NK)+QIG(NK)+QRG(NK)+QSG(NK))*EMS(NK)
2144 QFNL=QFNL+PPTFLX*TIMEC*(1.-FBFRC) ! PPT FB MODS
2145 ! QFNL=QFNL+PPTFLX*TIMEC ! PPT FB MODS
2146 ERR2=(QFNL-QINIT)*100./QINIT
2147 IF(IPRNT)WRITE(98,1110)QINIT,QFNL,ERR2
2148 IF(ABS(ERR2).GT.0.05 .AND. ISTOP.EQ.0)THEN
2149 ! write(99,*)'!!!!!!!! MOISTURE BUDGET ERROR IN KFPARA !!!'
2150 ! WRITE(99,1110)QINIT,QFNL,ERR2
2157 ! write(99,4455) p0(k)/100.,t0(k)-273.16,q0(k)*1000., &
2158 ! u0(k),v0(k),W0AVG1D(K),dp(k)
2159 ! write(98) p0,t0,q0,u0,v0,w0,dp,tke
2160 ! WRITE(98,1115)P0(K)/100.,T0(K)-273.16,Q0(K)*1000., &
2161 ! U0(K),V0(K),W0AVG1D(K),dp(k)/100.,tke(k)
2162 WRITE(98,4456)P0(K)/100.,T0(K)-273.16,Q0(K)*1000., &
2163 U0(K),V0(K),W0AVG1D(K),dp(k)/100.,tke(k)
2170 1115 FORMAT (2X,F7.2,2X,F5.1,2X,F6.3,2(2X,F5.1),2X,F7.2,2X,F7.4)
2172 IF(PPTFLX.GT.0.)THEN
2173 RELERR=ERR2*QINIT/(PPTFLX*TIMEC)
2178 WRITE(98,1120)RELERR
2179 WRITE(98,*)'TDER, CPR, TRPPT =', &
2180 TDER,CPR*AINC,TRPPT*AINC
2183 !...FEEDBACK TO RESOLVABLE SCALE TENDENCIES.
2185 !...IF THE ADVECTIVE TIME PERIOD (TADVEC) IS LESS THAN SPECIFIED MINIMUM
2186 !...TIMEC, ALLOW FEEDBACK TO OCCUR ONLY DURING TADVEC...
2188 IF(TADVEC.LT.TIMEC)NIC=NINT(TADVEC/DT)
2197 ! IF(IMOIST(INEST).NE.2)THEN
2199 !...IF HYDROMETEORS ARE NOT ALLOWED, THEY MUST BE EVAPORATED OR SUBLIMAT
2200 !...AND FED BACK AS VAPOR, ALONG WITH ASSOCIATED CHANGES IN TEMPERATURE.
2201 !...NOTE: THIS WILL INTRODUCE CHANGES IN THE CONVECTIVE TEMPERATURE AND
2202 !...WATER VAPOR FEEDBACK TENDENCIES AND MAY LEAD TO SUPERSATURATED VALUE
2205 ! RLC=XLV0-XLV1*TG(K)
2206 ! RLS=XLS0-XLS1*TG(K)
2207 ! CPM=CP*(1.+0.887*QG(K))
2208 ! TG(K)=TG(K)-(RLC*(QLG(K)+QRG(K))+RLS*(QIG(K)+QSG(K)))/CPM
2209 ! QG(K)=QG(K)+(QLG(K)+QRG(K)+QIG(K)+QSG(K))
2216 !...IF ICE PHASE IS NOT ALLOWED, MELT ALL FROZEN HYDROMETEORS...
2218 IF(.NOT. F_QI .and. warm_rain)THEN
2220 CPM=CP*(1.+0.887*QG(K))
2221 TG(K)=TG(K)-(QIG(K)+QSG(K))*RLF/CPM
2222 DQCDT(K)=(QLG(K)+QIG(K)-QL0(K)-QI0(K))/TIMEC
2224 DQRDT(K)=(QRG(K)+QSG(K)-QR0(K)-QS0(K))/TIMEC
2226 ELSEIF(.NOT. F_QI .and. .not. warm_rain)THEN
2228 !...IF ICE PHASE IS ALLOWED, BUT MIXED PHASE IS NOT, MELT FROZEN HYDROME
2229 !...BELOW THE MELTING LEVEL, FREEZE LIQUID WATER ABOVE THE MELTING LEVEL
2231 CPM=CP*(1.+0.887*QG(K))
2233 TG(K)=TG(K)-(QIG(K)+QSG(K))*RLF/CPM
2235 TG(K)=TG(K)+(QLG(K)+QRG(K))*RLF/CPM
2237 DQCDT(K)=(QLG(K)+QIG(K)-QL0(K)-QI0(K))/TIMEC
2239 DQRDT(K)=(QRG(K)+QSG(K)-QR0(K)-QS0(K))/TIMEC
2243 !...IF MIXED PHASE HYDROMETEORS ARE ALLOWED, FEED BACK CONVECTIVE TENDEN
2244 !...OF HYDROMETEORS DIRECTLY...
2246 DQCDT(K)=(QLG(K)-QL0(K))/TIMEC
2247 DQIDT(K)=(QIG(K)-QI0(K))/TIMEC
2248 DQRDT(K)=(QRG(K)-QR0(K))/TIMEC
2250 DQSDT(K)=(QSG(K)-QS0(K))/TIMEC
2252 DQIDT(K)=DQIDT(K)+(QSG(K)-QS0(K))/TIMEC
2255 ! PRINT *,'THIS COMBINATION OF IMOIST, IEXICE, IICE NOT ALLOWED!'
2256 CALL wrf_error_fatal ( 'KAIN-FRITSCH, THIS COMBINATION OF IMOIST, IEXICE, IICE NOT ALLOWED' )
2258 DTDT(K)=(TG(K)-T0(K))/TIMEC
2259 DQDT(K)=(QG(K)-Q0(K))/TIMEC
2261 PRATEC(I,J)=PPTFLX*(1.-FBFRC)/DXSQ
2262 RAINCV(I,J)=DT*PRATEC(I,J)
2263 ! RAINCV(I,J)=.1*.5*DT*PPTFLX/DXSQ ! PPT FB MODS
2264 ! RNC=0.1*TIMEC*PPTFLX/DXSQ
2266 909 FORMAT('AT I, J =',i3,1x,i3,' CONVECTIVE RAINFALL =',F8.4,' mm')
2267 ! write (98,909)I,J,RNC
2268 ! write (6,909)I,J,RNC
2269 ! WRITE(98,*)'at NTSD =',NTSD,',No. of KF points activated =',
2272 1000 FORMAT(' ',10A8)
2273 1005 FORMAT(' ',F6.0,2X,F6.4,2X,F7.3,1X,F6.4,2X,4(F6.3,2X),2(F7.3,1X))
2274 1010 FORMAT(' ',' VERTICAL VELOCITY IS NEGATIVE AT ',F4.0,' MB')
2275 1015 FORMAT(' ','ALL REMAINING MASS DETRAINS BELOW ',F4.0,' MB')
2276 1025 FORMAT(5X,' KLCL=',I2,' ZLCL=',F7.1,'M', &
2277 ' DTLCL=',F5.2,' LTOP=',I2,' P0(LTOP)=',-2PF5.1,'MB FRZ LV=', &
2278 I2,' TMIX=',0PF4.1,1X,'PMIX=',-2PF6.1,' QMIX=',3PF5.1, &
2280 1030 FORMAT(' ',' P0(LET) = ',F6.1,' P0(LTOP) = ',F6.1,' VMFLCL =', &
2281 E12.3,' PLCL =',F6.1,' WLCL =',F6.3,' CLDHGT =', &
2283 1035 FORMAT(1X,'PEF(WS)=',F4.2,'(CB)=',F4.2,'LC,LET=',2I3,'WKL=' &
2285 !1055 FORMAT('*** DEGREE OF STABILIZATION =',F5.3, &
2286 ! ', NO MORE MASS FLUX IS ALLOWED!')
2287 !1060 FORMAT(' ITERATION DOES NOT CONVERGE TO GIVE THE SPECIFIED &
2288 ! &DEGREE OF STABILIZATION! FABE= ',F6.4)
2290 1075 FORMAT (F8.2,3(F8.2),2(F8.3),F8.2,2F8.3,F8.2,6F8.3)
2291 1080 FORMAT(2X,'LFS,LDB,LDT =',3I3,' TIMEC, TADVEC, NSTEP=', &
2292 2(1X,F5.0),I3,'NCOUNT, FABE, AINC=',I2,1X,F5.3,F6.2)
2293 1085 FORMAT (A3,16A7,2A8)
2294 1090 FORMAT (I3,F7.2,F7.0,10F7.2,4F7.3,2F8.3)
2295 1095 FORMAT(' ',' PPT PRODUCTION RATE= ',F10.0,' TOTAL EVAP+PPT= ',F10.0)
2296 1105 FORMAT(' ','NET LATENT HEAT RELEASE =',E12.5,' ACTUAL HEATING =',&
2297 E12.5,' J/KG-S, DIFFERENCE = ',F9.3,'%')
2298 1110 FORMAT(' ','INITIAL WATER =',E12.5,' FINAL WATER =',E12.5, &
2299 ' TOTAL WATER CHANGE =',F8.2,'%')
2300 ! 1115 FORMAT (2X,F6.0,2X,F7.2,2X,F5.1,2X,F6.3,2(2X,F5.1),2X,F7.2,2X,F7.4)
2301 1120 FORMAT(' ','MOISTURE ERROR AS FUNCTION OF TOTAL PPT =',F9.3,'%')
2303 !-----------------------------------------------------------------------
2304 !--------------SAVE CLOUD TOP AND BOTTOM FOR RADIATION------------------
2305 !-----------------------------------------------------------------------
2307 CUTOP(I,J)=REAL(LTOP)
2308 CUBOT(I,J)=REAL(LCL)
2310 !-----------------------------------------------------------------------
2311 END SUBROUTINE KF_eta_PARA
2312 !********************************************************************
2313 ! ***********************************************************************
2314 SUBROUTINE TPMIX2(p,thes,tu,qu,qliq,qice,qnewlq,qnewic,XLV1,XLV0)
2316 ! Lookup table variables:
2317 ! INTEGER, PARAMETER :: (KFNT=250,KFNP=220)
2318 ! REAL, SAVE, DIMENSION(1:KFNT,1:KFNP) :: TTAB,QSTAB
2319 ! REAL, SAVE, DIMENSION(1:KFNP) :: THE0K
2320 ! REAL, SAVE, DIMENSION(1:200) :: ALU
2321 ! REAL, SAVE :: RDPR,RDTHK,PLUTOP
2322 ! End of Lookup table variables:
2323 !-----------------------------------------------------------------------
2325 !-----------------------------------------------------------------------
2326 REAL, INTENT(IN ) :: P,THES,XLV1,XLV0
2327 REAL, INTENT(OUT ) :: QNEWLQ,QNEWIC
2328 REAL, INTENT(INOUT) :: TU,QU,QLIQ,QICE
2329 REAL :: TP,QQ,BTH,TTH,PP,T00,T10,T01,T11,Q00,Q10,Q01,Q11, &
2330 TEMP,QS,QNEW,DQ,QTOT,RLL,CPP
2331 INTEGER :: IPTB,ITHTB
2332 !-----------------------------------------------------------------------
2334 !c******** LOOKUP TABLE VARIABLES... ****************************
2335 ! parameter(kfnt=250,kfnp=220)
2337 ! COMMON/KFLUT/ ttab(kfnt,kfnp),qstab(kfnt,kfnp),the0k(kfnp),
2338 ! * alu(200),rdpr,rdthk,plutop
2339 !C***************************************************************
2341 !c***********************************************************************
2342 !c scaling pressure and tt table index
2343 !c***********************************************************************
2350 !***********************************************************************
2351 ! base and scaling factor for the
2352 !***********************************************************************
2354 ! scaling the and tt table index
2355 bth=(the0k(iptb+1)-the0k(iptb))*qq+the0k(iptb)
2356 tth=(thes-bth)*rdthk
2359 IF(IPTB.GE.220 .OR. IPTB.LE.1 .OR. ITHTB.GE.250 .OR. ITHTB.LE.1)THEN
2360 write(98,*)'**** OUT OF BOUNDS *********'
2364 t00=ttab(ithtb ,iptb )
2365 t10=ttab(ithtb+1,iptb )
2366 t01=ttab(ithtb ,iptb+1)
2367 t11=ttab(ithtb+1,iptb+1)
2369 q00=qstab(ithtb ,iptb )
2370 q10=qstab(ithtb+1,iptb )
2371 q01=qstab(ithtb ,iptb+1)
2372 q11=qstab(ithtb+1,iptb+1)
2374 !***********************************************************************
2375 ! parcel temperature
2376 !***********************************************************************
2378 temp=(t00+(t10-t00)*pp+(t01-t00)*qq+(t00-t10-t01+t11)*pp*qq)
2380 qs=(q00+(q10-q00)*pp+(q01-q00)*qq+(q00-q10-q01+q11)*pp*qq)
2388 ! IF THE PARCEL IS SUBSATURATED, TEMPERATURE AND MIXING RATIO MUST BE
2389 ! ADJUSTED...IF LIQUID WATER IS PRESENT, IT IS ALLOWED TO EVAPORATE
2394 ! IF THERE IS ENOUGH LIQUID OR ICE TO SATURATE THE PARCEL, TEMP STAYS AT ITS
2395 ! WET BULB VALUE, VAPOR MIXING RATIO IS AT SATURATED LEVEL, AND THE MIXING
2396 ! RATIOS OF LIQUID AND ICE ARE ADJUSTED TO MAKE UP THE ORIGINAL SATURATION
2397 ! DEFICIT... OTHERWISE, ANY AVAILABLE LIQ OR ICE VAPORIZES AND APPROPRIATE
2398 ! ADJUSTMENTS TO PARCEL TEMP; VAPOR, LIQUID, AND ICE MIXING RATIOS ARE MADE.
2400 !...subsaturated values only occur in calculations involving various mixtures of
2401 !...updraft and environmental air for estimation of entrainment and detrainment.
2402 !...For these purposes, assume that reasonable estimates can be given using
2403 !...liquid water saturation calculations only - i.e., ignore the effect of the
2404 !...ice phase in this process only...will not affect conservative properties...
2407 qliq=qliq-dq*qliq/(qtot+1.e-10)
2408 qice=qice-dq*qice/(qtot+1.e-10)
2412 CPP=1004.5*(1.+0.89*QU)
2413 IF(QTOT.LT.1.E-10)THEN
2415 !...IF NO LIQUID WATER OR ICE IS AVAILABLE, TEMPERATURE IS GIVEN BY:
2416 TEMP=TEMP+RLL*(DQ/(1.+DQ))/CPP
2419 !...IF SOME LIQ WATER/ICE IS AVAILABLE, BUT NOT ENOUGH TO ACHIEVE SATURATION,
2420 ! THE TEMPERATURE IS GIVEN BY:
2422 TEMP=TEMP+RLL*((DQ-QTOT)/(1+DQ-QTOT))/CPP
2434 END SUBROUTINE TPMIX2
2435 !******************************************************************************
2436 SUBROUTINE DTFRZNEW(TU,P,THTEU,QU,QFRZ,QICE,ALIQ,BLIQ,CLIQ,DLIQ)
2437 !-----------------------------------------------------------------------
2439 !-----------------------------------------------------------------------
2440 REAL, INTENT(IN ) :: P,QFRZ,ALIQ,BLIQ,CLIQ,DLIQ
2441 REAL, INTENT(INOUT) :: TU,THTEU,QU,QICE
2442 REAL :: RLC,RLS,RLF,CPP,A,DTFRZ,ES,QS,DQEVAP,PII
2443 !-----------------------------------------------------------------------
2445 !...ALLOW THE FREEZING OF LIQUID WATER IN THE UPDRAFT TO PROCEED AS AN
2446 !...APPROXIMATELY LINEAR FUNCTION OF TEMPERATURE IN THE TEMPERATURE RANGE
2447 !...TTFRZ TO TBFRZ...
2448 !...FOR COLDER TERMPERATURES, FREEZE ALL LIQUID WATER...
2449 !...THERMODYNAMIC PROPERTIES ARE STILL CALCULATED WITH RESPECT TO LIQUID WATER
2450 !...TO ALLOW THE USE OF LOOKUP TABLE TO EXTRACT TMP FROM THETAE...
2452 RLC=2.5E6-2369.276*(TU-273.16)
2453 RLS=2833922.-259.532*(TU-273.16)
2455 CPP=1004.5*(1.+0.89*QU)
2457 ! A = D(es)/DT IS THAT CALCULATED FROM BUCK (1981) EMPERICAL FORMULAS
2458 ! FOR SATURATION VAPOR PRESSURE...
2460 A=(CLIQ-BLIQ*DLIQ)/((TU-DLIQ)*(TU-DLIQ))
2461 DTFRZ = RLF*QFRZ/(CPP+RLS*QU*A)
2464 ES = ALIQ*EXP((BLIQ*TU-CLIQ)/(TU-DLIQ))
2465 QS = ES*0.622/(P-ES)
2467 !...FREEZING WARMS THE AIR AND IT BECOMES UNSATURATED...ASSUME THAT SOME OF THE
2468 !...LIQUID WATER THAT IS AVAILABLE FOR FREEZING EVAPORATES TO MAINTAIN SATURA-
2469 !...TION...SINCE THIS WATER HAS ALREADY BEEN TRANSFERRED TO THE ICE CATEGORY,
2470 !...SUBTRACT IT FROM ICE CONCENTRATION, THEN SET UPDRAFT MIXING RATIO AT THE NEW
2471 !...TEMPERATURE TO THE SATURATION VALUE...
2476 PII=(1.E5/P)**(0.2854*(1.-0.28*QU))
2477 THTEU=TU*PII*EXP((3374.6525/TU-2.5403)*QU*(1.+0.81*QU))
2479 END SUBROUTINE DTFRZNEW
2480 ! --------------------------------------------------------------------------------
2482 SUBROUTINE CONDLOAD(QLIQ,QICE,WTW,DZ,BOTERM,ENTERM,RATE,QNEWLQ, &
2483 QNEWIC,QLQOUT,QICOUT,G)
2485 !-----------------------------------------------------------------------
2487 !-----------------------------------------------------------------------
2488 ! 9/18/88...THIS PRECIPITATION FALLOUT SCHEME IS BASED ON THE SCHEME US
2489 ! BY OGURA AND CHO (1973). LIQUID WATER FALLOUT FROM A PARCEL IS CAL-
2490 ! CULATED USING THE EQUATION DQ=-RATE*Q*DT, BUT TO SIMULATE A QUASI-
2491 ! CONTINUOUS PROCESS, AND TO ELIMINATE A DEPENDENCY ON VERTICAL
2492 ! RESOLUTION THIS IS EXPRESSED AS Q=Q*EXP(-RATE*DZ).
2494 REAL, INTENT(IN ) :: G
2495 REAL, INTENT(IN ) :: DZ,BOTERM,ENTERM,RATE
2496 REAL, INTENT(INOUT) :: QLQOUT,QICOUT,WTW,QLIQ,QICE,QNEWLQ,QNEWIC
2497 REAL :: QTOT,QNEW,QEST,G1,WAVG,CONV,RATIO3,OLDQ,RATIO4,DQ,PPTDRG
2500 ! 9/18/88...THIS PRECIPITATION FALLOUT SCHEME IS BASED ON THE SCHEME US
2501 ! BY OGURA AND CHO (1973). LIQUID WATER FALLOUT FROM A PARCEL IS CAL-
2502 ! CULATED USING THE EQUATION DQ=-RATE*Q*DT, BUT TO SIMULATE A QUASI-
2503 ! CONTINUOUS PROCESS, AND TO ELIMINATE A DEPENDENCY ON VERTICAL
2504 ! RESOLUTION THIS IS EXPRESSED AS Q=Q*EXP(-RATE*DZ).
2508 ! ESTIMATE THE VERTICAL VELOCITY SO THAT AN AVERAGE VERTICAL VELOCITY
2509 ! BE CALCULATED TO ESTIMATE THE TIME REQUIRED FOR ASCENT BETWEEN MODEL
2512 QEST=0.5*(QTOT+QNEW)
2513 G1=WTW+BOTERM-ENTERM-2.*G*DZ*QEST/1.5
2515 WAVG=0.5*(SQRT(WTW)+SQRT(G1))
2518 ! RATIO3 IS THE FRACTION OF LIQUID WATER IN FRESH CONDENSATE, RATIO4 IS
2519 ! THE FRACTION OF LIQUID WATER IN THE TOTAL AMOUNT OF CONDENSATE INVOLV
2520 ! IN THE PRECIPITATION PROCESS - NOTE THAT ONLY 60% OF THE FRESH CONDEN
2521 ! SATE IS IS ALLOWED TO PARTICIPATE IN THE CONVERSION PROCESS...
2523 RATIO3=QNEWLQ/(QNEW+1.E-8)
2527 RATIO4=(0.6*QNEWLQ+QLIQ)/(QTOT+1.E-8)
2528 QTOT=QTOT*EXP(-CONV)
2530 ! DETERMINE THE AMOUNT OF PRECIPITATION THAT FALLS OUT OF THE UPDRAFT
2531 ! PARCEL AT THIS LEVEL...
2535 QICOUT=(1.-RATIO4)*DQ
2537 ! ESTIMATE THE MEAN LOAD OF CONDENSATE ON THE UPDRAFT IN THE LAYER, CAL
2538 ! LATE VERTICAL VELOCITY
2540 PPTDRG=0.5*(OLDQ+QTOT-0.2*QNEW)
2541 WTW=WTW+BOTERM-ENTERM-2.*G*DZ*PPTDRG/1.5
2542 IF(ABS(WTW).LT.1.E-4)WTW=1.E-4
2544 ! DETERMINE THE NEW LIQUID WATER AND ICE CONCENTRATIONS INCLUDING LOSSE
2545 ! DUE TO PRECIPITATION AND GAINS FROM CONDENSATION...
2547 QLIQ=RATIO4*QTOT+RATIO3*0.4*QNEW
2548 QICE=(1.-RATIO4)*QTOT+(1.-RATIO3)*0.4*QNEW
2552 END SUBROUTINE CONDLOAD
2554 ! ----------------------------------------------------------------------
2555 SUBROUTINE PROF5(EQ,EE,UD)
2557 !***********************************************************************
2558 !***** GAUSSIAN TYPE MIXING PROFILE....******************************
2559 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2560 ! THIS SUBROUTINE INTEGRATES THE AREA UNDER THE CURVE IN THE GAUSSIAN
2561 ! DISTRIBUTION...THE NUMERICAL APPROXIMATION TO THE INTEGRAL IS TAKEN FROM
2562 ! "HANDBOOK OF MATHEMATICAL FUNCTIONS WITH FORMULAS, GRAPHS AND MATHEMATICS TABLES"
2563 ! ED. BY ABRAMOWITZ AND STEGUN, NATL BUREAU OF STANDARDS APPLIED
2564 ! MATHEMATICS SERIES. JUNE, 1964., MAY, 1968.
2567 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2568 !-----------------------------------------------------------------------
2570 !-----------------------------------------------------------------------
2571 REAL, INTENT(IN ) :: EQ
2572 REAL, INTENT(INOUT) :: EE,UD
2573 REAL :: SQRT2P,A1,A2,A3,P,SIGMA,FE,X,Y,EY,E45,T1,T2,C1,C2
2575 DATA SQRT2P,A1,A2,A3,P,SIGMA,FE/2.506628,0.4361836,-0.1201676, &
2576 0.9372980,0.33267,0.166666667,0.202765151/
2583 C1=A1*T1+A2*T1*T1+A3*T1*T1*T1
2584 C2=A1*T2+A2*T2*T2+A3*T2*T2*T2
2586 EE=SIGMA*(0.5*(SQRT2P-E45*C1-EY*C2)+SIGMA*(E45-EY))-E45*EQ*EQ/2.
2587 UD=SIGMA*(0.5*(EY*C2-E45*C1)+SIGMA*(E45-EY))-E45*(0.5+EQ*EQ/2.- &
2590 EE=SIGMA*(0.5*(EY*C2-E45*C1)+SIGMA*(E45-EY))-E45*EQ*EQ/2.
2591 UD=SIGMA*(0.5*(SQRT2P-E45*C1-EY*C2)+SIGMA*(E45-EY))-E45*(0.5+EQ* &
2597 END SUBROUTINE PROF5
2599 ! ------------------------------------------------------------------------
2600 SUBROUTINE TPMIX2DD(p,thes,ts,qs,i,j)
2602 ! Lookup table variables:
2603 ! INTEGER, PARAMETER :: (KFNT=250,KFNP=220)
2604 ! REAL, SAVE, DIMENSION(1:KFNT,1:KFNP) :: TTAB,QSTAB
2605 ! REAL, SAVE, DIMENSION(1:KFNP) :: THE0K
2606 ! REAL, SAVE, DIMENSION(1:200) :: ALU
2607 ! REAL, SAVE :: RDPR,RDTHK,PLUTOP
2608 ! End of Lookup table variables:
2609 !-----------------------------------------------------------------------
2611 !-----------------------------------------------------------------------
2612 REAL, INTENT(IN ) :: P,THES
2613 REAL, INTENT(INOUT) :: TS,QS
2614 INTEGER, INTENT(IN ) :: i,j ! avail for debugging
2615 REAL :: TP,QQ,BTH,TTH,PP,T00,T10,T01,T11,Q00,Q10,Q01,Q11
2616 INTEGER :: IPTB,ITHTB
2617 CHARACTER*256 :: MESS
2618 !-----------------------------------------------------------------------
2621 !******** LOOKUP TABLE VARIABLES (F77 format)... ****************************
2622 ! parameter(kfnt=250,kfnp=220)
2624 ! COMMON/KFLUT/ ttab(kfnt,kfnp),qstab(kfnt,kfnp),the0k(kfnp), &
2625 ! alu(200),rdpr,rdthk,plutop
2626 !***************************************************************
2628 !***********************************************************************
2629 ! scaling pressure and tt table index
2630 !***********************************************************************
2636 !***********************************************************************
2637 ! base and scaling factor for the
2638 !***********************************************************************
2640 ! scaling the and tt table index
2641 bth=(the0k(iptb+1)-the0k(iptb))*qq+the0k(iptb)
2642 tth=(thes-bth)*rdthk
2646 t00=ttab(ithtb ,iptb )
2647 t10=ttab(ithtb+1,iptb )
2648 t01=ttab(ithtb ,iptb+1)
2649 t11=ttab(ithtb+1,iptb+1)
2651 q00=qstab(ithtb ,iptb )
2652 q10=qstab(ithtb+1,iptb )
2653 q01=qstab(ithtb ,iptb+1)
2654 q11=qstab(ithtb+1,iptb+1)
2656 !***********************************************************************
2657 ! parcel temperature and saturation mixing ratio
2658 !***********************************************************************
2660 ts=(t00+(t10-t00)*pp+(t01-t00)*qq+(t00-t10-t01+t11)*pp*qq)
2662 qs=(q00+(q10-q00)*pp+(q01-q00)*qq+(q00-q10-q01+q11)*pp*qq)
2664 END SUBROUTINE TPMIX2DD
2666 ! -----------------------------------------------------------------------
2667 SUBROUTINE ENVIRTHT(P1,T1,Q1,THT1,ALIQ,BLIQ,CLIQ,DLIQ)
2669 !-----------------------------------------------------------------------
2671 !-----------------------------------------------------------------------
2672 REAL, INTENT(IN ) :: P1,T1,Q1,ALIQ,BLIQ,CLIQ,DLIQ
2673 REAL, INTENT(INOUT) :: THT1
2674 REAL :: EE,TLOG,ASTRT,AINC,A1,TP,VALUE,AINTRP,TDPT,TSAT,THT, &
2675 T00,P00,C1,C2,C3,C4,C5
2677 !-----------------------------------------------------------------------
2678 DATA T00,P00,C1,C2,C3,C4,C5/273.16,1.E5,3374.6525,2.5403,3114.834, &
2681 ! CALCULATE ENVIRONMENTAL EQUIVALENT POTENTIAL TEMPERATURE...
2683 ! NOTE: Calculations for mixed/ice phase no longer used...jsk 8/00
2686 ! TLOG=ALOG(EE/ALIQ)
2687 ! ...calculate LOG term using lookup table...
2694 value=(indlu-1)*ainc+astrt
2695 aintrp=(a1-value)/ainc
2696 tlog=aintrp*alu(indlu+1)+(1-aintrp)*alu(indlu)
2698 TDPT=(CLIQ-DLIQ*TLOG)/(BLIQ-TLOG)
2699 TSAT=TDPT-(.212+1.571E-3*(TDPT-T00)-4.36E-4*(T1-T00))*(T1-TDPT)
2700 THT=T1*(P00/P1)**(0.2854*(1.-0.28*Q1))
2701 THT1=THT*EXP((C1/TSAT-C2)*Q1*(1.+0.81*Q1))
2703 END SUBROUTINE ENVIRTHT
2704 ! ***********************************************************************
2705 !====================================================================
2706 SUBROUTINE kf_eta_init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, &
2707 RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS, &
2708 SVP1,SVP2,SVP3,SVPT0, &
2709 P_FIRST_SCALAR,restart,allowed_to_read, &
2710 ids, ide, jds, jde, kds, kde, &
2711 ims, ime, jms, jme, kms, kme, &
2712 its, ite, jts, jte, kts, kte )
2713 !--------------------------------------------------------------------
2715 !--------------------------------------------------------------------
2716 LOGICAL , INTENT(IN) :: restart,allowed_to_read
2717 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
2718 ims, ime, jms, jme, kms, kme, &
2719 its, ite, jts, jte, kts, kte
2720 INTEGER , INTENT(IN) :: P_QI,P_QS,P_FIRST_SCALAR
2722 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
2730 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
2732 REAL, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: NCA
2734 INTEGER :: i, j, k, itf, jtf, ktf
2735 REAL, INTENT(IN) :: SVP1,SVP2,SVP3,SVPT0
2741 IF(.not.restart)THEN
2754 IF (P_QI .ge. P_FIRST_SCALAR) THEN
2764 IF (P_QS .ge. P_FIRST_SCALAR) THEN
2790 CALL KF_LUTAB(SVP1,SVP2,SVP3,SVPT0)
2792 END SUBROUTINE kf_eta_init
2794 !-------------------------------------------------------
2796 subroutine kf_lutab(SVP1,SVP2,SVP3,SVPT0)
2798 ! This subroutine is a lookup table.
2799 ! Given a series of series of saturation equivalent potential
2800 ! temperatures, the temperature is calculated.
2802 !--------------------------------------------------------------------
2804 !--------------------------------------------------------------------
2805 ! Lookup table variables
2806 ! INTEGER, SAVE, PARAMETER :: KFNT=250,KFNP=220
2807 ! REAL, SAVE, DIMENSION(1:KFNT,1:KFNP) :: TTAB,QSTAB
2808 ! REAL, SAVE, DIMENSION(1:KFNP) :: THE0K
2809 ! REAL, SAVE, DIMENSION(1:200) :: ALU
2810 ! REAL, SAVE :: RDPR,RDTHK,PLUTOP
2811 ! End of Lookup table variables
2813 INTEGER :: KP,IT,ITCNT,I
2814 REAL :: DTH,TMIN,TOLER,PBOT,DPR, &
2815 TEMP,P,ES,QS,PI,THES,TGUES,THGUES,F0,T1,T0,THGS,F1,DT, &
2817 ! REAL :: ALIQ,BLIQ,CLIQ,DLIQ,SVP1,SVP2,SVP3,SVPT0
2818 REAL :: ALIQ,BLIQ,CLIQ,DLIQ
2819 REAL, INTENT(IN) :: SVP1,SVP2,SVP3,SVPT0
2821 ! equivalent potential temperature increment
2823 ! minimum starting temp
2825 ! tolerance for accuracy of temperature
2827 ! top pressure (pascals)
2829 ! bottom pressure (pascals)
2838 ! compute parameters
2840 ! 1._over_(sat. equiv. theta increment)
2842 ! pressure increment
2844 DPR=(PBOT-PLUTOP)/REAL(KFNP-1)
2845 ! dpr=(pbot-plutop)/REAL(kfnp-1)
2846 ! 1._over_(pressure increment)
2848 ! compute the spread of thes
2849 ! thespd=dth*(kfnt-1)
2851 ! calculate the starting sat. equiv. theta
2857 es=aliq*exp((bliq*temp-cliq)/(temp-dliq))
2859 pi=(1.e5/p)**(0.2854*(1.-0.28*qs))
2860 the0k(kp)=temp*pi*exp((3374.6525/temp-2.5403)*qs* &
2864 ! compute temperatures for each sat. equiv. potential temp.
2871 ! define sat. equiv. pot. temp.
2873 ! iterate to find temperature
2874 ! find initial guess
2880 es=aliq*exp((bliq*tgues-cliq)/(tgues-dliq))
2882 pi=(1.e5/p)**(0.2854*(1.-0.28*qs))
2883 thgues=tgues*pi*exp((3374.6525/tgues-2.5403)*qs* &
2891 es=aliq*exp((bliq*t1-cliq)/(t1-dliq))
2893 pi=(1.e5/p)**(0.2854*(1.-0.28*qs))
2894 thtgs=t1*pi*exp((3374.6525/t1-2.5403)*qs*(1.+0.81*qs))
2896 if(abs(f1).lt.toler)then
2900 dt=f1*(t1-t0)/(f1-f0)
2910 ! lookup table for tlog(emix/aliq)
2912 ! set up intial values for lookup tables
2923 END SUBROUTINE KF_LUTAB
2925 END MODULE module_cu_kfeta