PageRenderTime 66ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 1ms

/wrfv2_fire/phys/module_cu_kf.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 2669 lines | 1750 code | 115 blank | 804 comment | 3 complexity | 6487caca6f6ab8133f78922b148dcf06 MD5 | raw file
Possible License(s): AGPL-1.0
  1. !WRF:MODEL_LAYER:PHYSICS
  2. !
  3. MODULE module_cu_kf
  4. USE module_wrf_error
  5. REAL , PARAMETER :: RAD = 1500.
  6. CONTAINS
  7. !-------------------------------------------------------------
  8. SUBROUTINE KFCPS( &
  9. ids,ide, jds,jde, kds,kde &
  10. ,ims,ime, jms,jme, kms,kme &
  11. ,its,ite, jts,jte, kts,kte &
  12. ,DT,KTAU,DX,CUDT,CURR_SECS,ADAPT_STEP_FLAG &
  13. ,CUDTACTTIME &
  14. ,rho &
  15. ,RAINCV,PRATEC,NCA &
  16. ,U,V,TH,T,W,QV,dz8w,Pcps,pi &
  17. ,W0AVG,XLV0,XLV1,XLS0,XLS1,CP,R,G,EP1 &
  18. ,EP2,SVP1,SVP2,SVP3,SVPT0 &
  19. ,STEPCU,CU_ACT_FLAG,warm_rain &
  20. ! optional arguments
  21. ,F_QV ,F_QC ,F_QR ,F_QI ,F_QS &
  22. ,RQVCUTEN,RQCCUTEN,RQRCUTEN,RQICUTEN,RQSCUTEN &
  23. ,RTHCUTEN &
  24. )
  25. !-------------------------------------------------------------
  26. IMPLICIT NONE
  27. !-------------------------------------------------------------
  28. INTEGER, INTENT(IN ) :: &
  29. ids,ide, jds,jde, kds,kde, &
  30. ims,ime, jms,jme, kms,kme, &
  31. its,ite, jts,jte, kts,kte
  32. INTEGER, INTENT(IN ) :: STEPCU
  33. LOGICAL, INTENT(IN ) :: warm_rain
  34. REAL, INTENT(IN ) :: XLV0,XLV1,XLS0,XLS1
  35. REAL, INTENT(IN ) :: CP,R,G,EP1,EP2
  36. REAL, INTENT(IN ) :: SVP1,SVP2,SVP3,SVPT0
  37. INTEGER, INTENT(IN ) :: KTAU
  38. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
  39. INTENT(IN ) :: &
  40. U, &
  41. V, &
  42. W, &
  43. TH, &
  44. QV, &
  45. T, &
  46. dz8w, &
  47. Pcps, &
  48. rho, &
  49. pi
  50. !
  51. REAL, INTENT(IN ) :: DT, DX
  52. REAL, INTENT(IN ) :: CUDT
  53. REAL, INTENT(IN ) :: CURR_SECS
  54. LOGICAL,OPTIONAL, INTENT(IN ) :: ADAPT_STEP_FLAG
  55. REAL, INTENT (INOUT) :: CUDTACTTIME
  56. REAL, DIMENSION( ims:ime , jms:jme ), &
  57. INTENT(INOUT) :: &
  58. RAINCV &
  59. ,PRATEC &
  60. , NCA
  61. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
  62. INTENT(INOUT) :: &
  63. W0AVG
  64. LOGICAL, DIMENSION( ims:ime , jms:jme ), &
  65. INTENT(INOUT) :: CU_ACT_FLAG
  66. !
  67. ! Optional arguments
  68. !
  69. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
  70. OPTIONAL, &
  71. INTENT(INOUT) :: &
  72. RTHCUTEN &
  73. ,RQVCUTEN &
  74. ,RQCCUTEN &
  75. ,RQRCUTEN &
  76. ,RQICUTEN &
  77. ,RQSCUTEN
  78. !
  79. ! Flags relating to the optional tendency arrays declared above
  80. ! Models that carry the optional tendencies will provdide the
  81. ! optional arguments at compile time; these flags all the model
  82. ! to determine at run-time whether a particular tracer is in
  83. ! use or not.
  84. !
  85. LOGICAL, OPTIONAL :: &
  86. F_QV &
  87. ,F_QC &
  88. ,F_QR &
  89. ,F_QI &
  90. ,F_QS
  91. ! LOCAL VARS
  92. REAL, DIMENSION( kts:kte ) :: &
  93. U1D, &
  94. V1D, &
  95. T1D, &
  96. DZ1D, &
  97. QV1D, &
  98. P1D, &
  99. RHO1D, &
  100. W0AVG1D
  101. REAL, DIMENSION( kts:kte ):: &
  102. DQDT, &
  103. DQIDT, &
  104. DQCDT, &
  105. DQRDT, &
  106. DQSDT, &
  107. DTDT
  108. REAL :: TST,tv,PRS,RHOE,W0,SCR1,DXSQ,tmp
  109. INTEGER :: i,j,k,NTST,ICLDCK
  110. LOGICAL :: qi_flag , qs_flag
  111. ! adjustable time step changes
  112. REAL :: lastdt = -1.0
  113. REAL :: W0AVGfctr, W0fctr, W0den
  114. LOGICAL :: run_param , doing_adapt_dt , decided
  115. !----------------------------------------------------------------------
  116. !--- CALL CUMULUS PARAMETERIZATION
  117. !
  118. !...TST IS THE NUMBER OF TIME STEPS IN 10 MINUTES...W0AVG IS CLOSE TO A
  119. !...RUNNING MEAN VERTICAL VELOCITY...NOTE THAT IF YOU CHANGE TST, IT WIL
  120. !...CHANGE THE FREQUENCY OF THE CONVECTIVE INTITIATION CHECK (SEE BELOW)
  121. !...NOTE THAT THE ORDERING OF VERTICAL LAYERS MUST BE REVERSED FOR W0AVG
  122. !...BECAUSE THE ORDERING IS REVERSED IN KFPARA...
  123. !
  124. DXSQ=DX*DX
  125. qi_flag = .FALSE.
  126. qs_flag = .FALSE.
  127. IF ( PRESENT( F_QI ) ) qi_flag = f_qi
  128. IF ( PRESENT( F_QS ) ) qs_flag = f_qs
  129. !----------------------
  130. NTST=STEPCU
  131. TST=float(NTST*2)
  132. !----------------------
  133. ! NTST=NINT(1200./(DT*2.))
  134. ! TST=float(NTST)
  135. ! NTST=NINT(0.5*TST)
  136. ! NTST=MAX0(NTST,1)
  137. !----------------------
  138. ! ICLDCK=MOD(KTAU,NTST)
  139. !----------------------
  140. ! write(0,*) 'DT = ',DT,' KTAU = ',KTAU,' DX = ',DX
  141. ! write(0,*) 'CUDT = ',CUDT,' CURR_SECS = ',CURR_SECS
  142. ! write(0,*) 'ADAPT_STEP_FLAG = ',ADAPT_STEP_FLAG,' IDS = ',IDS
  143. ! write(0,*) 'STEPCU = ',STEPCU,' warm_rain = ',warm_rain
  144. ! write(0,*) 'F_QV = ',F_QV,' F_QC = ',F_QV
  145. ! write(0,*) 'F_QI = ',F_QI,' F_QS = ',F_QS
  146. ! write(0,*) 'F_QR = ',F_QR
  147. ! stop
  148. if (lastdt < 0) then
  149. lastdt = dt
  150. endif
  151. if (ADAPT_STEP_FLAG) then
  152. W0AVGfctr = 2 * MAX(CUDT*60,dt) - dt
  153. W0fctr = dt
  154. W0den = 2 * MAX(CUDT*60,dt)
  155. else
  156. W0AVGfctr = (TST-1.)
  157. W0fctr = 1.
  158. W0den = TST
  159. endif
  160. DO J = jts,jte
  161. DO K=kts,kte
  162. DO I= its,ite
  163. ! SCR1=-5.0E-4*G*rho(I,K,J)*(w(I,K,J)+w(I,K+1,J))
  164. ! TV=T(I,K,J)*(1.+EP1*QV(I,K,J))
  165. ! RHOE=Pcps(I,K,J)/(R*TV)
  166. ! W0=-101.9368*SCR1/RHOE
  167. W0=0.5*(w(I,K,J)+w(I,K+1,J))
  168. ! Old:
  169. !
  170. ! W0AVG(I,K,J)=(W0AVG(I,K,J)*(TST-1.)+W0)/TST
  171. ! New, to support adaptive time step:
  172. !
  173. W0AVG(I,K,J) = ( W0AVG(I,K,J) * W0AVGfctr + W0 * W0fctr ) / W0den
  174. ENDDO
  175. ENDDO
  176. ENDDO
  177. lastdt = dt
  178. ! Initialization for adaptive time step.
  179. doing_adapt_dt = .FALSE.
  180. IF ( PRESENT(adapt_step_flag) ) THEN
  181. IF ( adapt_step_flag ) THEN
  182. doing_adapt_dt = .TRUE.
  183. IF ( cudtacttime .EQ. 0. ) THEN
  184. cudtacttime = curr_secs + cudt*60.
  185. END IF
  186. END IF
  187. END IF
  188. ! Do we run through this scheme or not?
  189. ! Test 1: If this is the initial model time, then yes.
  190. ! KTAU=1
  191. ! Test 2: If the user asked for the cumulus to be run every time step, then yes.
  192. ! CUDT=0 or STEPCU=1
  193. ! Test 3: If not adaptive dt, and this is on the requested cumulus frequency, then yes.
  194. ! MOD(KTAU,NST)=0
  195. ! Test 4: If using adaptive dt and the current time is past the last requested activate cumulus time, then yes.
  196. ! CURR_SECS >= CUDTACTTIME
  197. ! If we do run through the scheme, we set the flag run_param to TRUE and we set the decided flag
  198. ! to TRUE. The decided flag says that one of these tests was able to say "yes", run the scheme.
  199. ! We only proceed to other tests if the previous tests all have left decided as FALSE.
  200. ! If we set run_param to TRUE and this is adaptive time stepping, we set the time to the next
  201. ! cumulus run.
  202. decided = .FALSE.
  203. run_param = .FALSE.
  204. IF ( ( .NOT. decided ) .AND. &
  205. ( ktau .EQ. 1 ) ) THEN
  206. run_param = .TRUE.
  207. decided = .TRUE.
  208. END IF
  209. IF ( ( .NOT. decided ) .AND. &
  210. ( ( cudt .EQ. 0. ) .OR. ( stepcu .EQ. 1 ) ) ) THEN
  211. run_param = .TRUE.
  212. decided = .TRUE.
  213. END IF
  214. IF ( ( .NOT. decided ) .AND. &
  215. ( .NOT. doing_adapt_dt ) .AND. &
  216. ( MOD(ktau,ntst) .EQ. 0 ) ) THEN
  217. run_param = .TRUE.
  218. decided = .TRUE.
  219. END IF
  220. IF ( ( .NOT. decided ) .AND. &
  221. ( doing_adapt_dt ) .AND. &
  222. ( curr_secs .GE. cudtacttime ) ) THEN
  223. run_param = .TRUE.
  224. decided = .TRUE.
  225. cudtacttime = curr_secs + cudt*60
  226. END IF
  227. IF (run_param) then
  228. DO J = jts,jte
  229. DO I= its,ite
  230. CU_ACT_FLAG(i,j) = .true.
  231. ENDDO
  232. ENDDO
  233. DO J = jts,jte
  234. DO I=its,ite
  235. ! if (i.eq. 110 .and. j .eq. 59 ) then
  236. ! write(0,*) 'nca = ',nca(i,j),' CU_ACT_FLAG = ',CU_ACT_FLAG(i,j)
  237. ! write(0,*) 'dt = ',dt,' ADAPT_STEP_FLAG = ',ADAPT_STEP_FLAG
  238. ! endif
  239. ! IF ( NINT(NCA(I,J)) .gt. 0 ) then
  240. IF ( NCA(I,J) .gt. 0.5*DT ) then
  241. CU_ACT_FLAG(i,j) = .false.
  242. ELSE
  243. DO k=kts,kte
  244. DQDT(k)=0.
  245. DQIDT(k)=0.
  246. DQCDT(k)=0.
  247. DQRDT(k)=0.
  248. DQSDT(k)=0.
  249. DTDT(k)=0.
  250. ENDDO
  251. RAINCV(I,J)=0.
  252. PRATEC(I,J)=0.
  253. !
  254. ! assign vars from 3D to 1D
  255. DO K=kts,kte
  256. U1D(K) =U(I,K,J)
  257. V1D(K) =V(I,K,J)
  258. T1D(K) =T(I,K,J)
  259. RHO1D(K) =rho(I,K,J)
  260. QV1D(K)=QV(I,K,J)
  261. P1D(K) =Pcps(I,K,J)
  262. W0AVG1D(K) =W0AVG(I,K,J)
  263. DZ1D(k)=dz8w(I,K,J)
  264. ENDDO
  265. !
  266. CALL KFPARA(I, J, &
  267. U1D,V1D,T1D,QV1D,P1D,DZ1D, &
  268. W0AVG1D,DT,DX,DXSQ,RHO1D, &
  269. XLV0,XLV1,XLS0,XLS1,CP,R,G, &
  270. EP2,SVP1,SVP2,SVP3,SVPT0, &
  271. DQDT,DQIDT,DQCDT,DQRDT,DQSDT,DTDT, &
  272. RAINCV,PRATEC,NCA, &
  273. warm_rain,qi_flag,qs_flag, &
  274. ids,ide, jds,jde, kds,kde, &
  275. ims,ime, jms,jme, kms,kme, &
  276. its,ite, jts,jte, kts,kte )
  277. IF ( PRESENT( RTHCUTEN ) .AND. PRESENT( RQVCUTEN ) ) THEN
  278. DO K=kts,kte
  279. RTHCUTEN(I,K,J)=DTDT(K)/pi(I,K,J)
  280. RQVCUTEN(I,K,J)=DQDT(K)
  281. ENDDO
  282. ENDIF
  283. IF( PRESENT(RQRCUTEN) .AND. PRESENT(RQCCUTEN) .AND. &
  284. PRESENT(F_QR) ) THEN
  285. IF ( F_QR ) THEN
  286. DO K=kts,kte
  287. RQRCUTEN(I,K,J)=DQRDT(K)
  288. RQCCUTEN(I,K,J)=DQCDT(K)
  289. ENDDO
  290. ELSE
  291. ! This is the case for Eta microphysics without 3d rain field
  292. DO K=kts,kte
  293. RQRCUTEN(I,K,J)=0.
  294. RQCCUTEN(I,K,J)=DQRDT(K)+DQCDT(K)
  295. ENDDO
  296. ENDIF
  297. ENDIF
  298. !...... QSTEN STORES GRAUPEL TENDENCY IF IT EXISTS, OTHERISE SNOW (V2)
  299. IF( PRESENT( RQICUTEN ) .AND. qi_flag )THEN
  300. DO K=kts,kte
  301. RQICUTEN(I,K,J)=DQIDT(K)
  302. ENDDO
  303. ENDIF
  304. IF( PRESENT ( RQSCUTEN ) .AND. qs_flag )THEN
  305. DO K=kts,kte
  306. RQSCUTEN(I,K,J)=DQSDT(K)
  307. ENDDO
  308. ENDIF
  309. !
  310. ENDIF
  311. ENDDO
  312. ENDDO
  313. ENDIF
  314. END SUBROUTINE KFCPS
  315. !-----------------------------------------------------------
  316. SUBROUTINE KFPARA (I, J, &
  317. U0,V0,T0,QV0,P0,DZQ,W0AVG1D, &
  318. DT,DX,DXSQ,rho, &
  319. XLV0,XLV1,XLS0,XLS1,CP,R,G, &
  320. EP2,SVP1,SVP2,SVP3,SVPT0, &
  321. DQDT,DQIDT,DQCDT,DQRDT,DQSDT,DTDT, &
  322. RAINCV,PRATEC,NCA, &
  323. warm_rain,qi_flag,qs_flag, &
  324. ids,ide, jds,jde, kds,kde, &
  325. ims,ime, jms,jme, kms,kme, &
  326. its,ite, jts,jte, kts,kte )
  327. !-----------------------------------------------------------
  328. IMPLICIT NONE
  329. !-----------------------------------------------------------
  330. INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde, &
  331. ims,ime, jms,jme, kms,kme, &
  332. its,ite, jts,jte, kts,kte, &
  333. I,J
  334. LOGICAL, INTENT(IN ) :: warm_rain
  335. LOGICAL :: qi_flag, qs_flag
  336. !
  337. REAL, DIMENSION( kts:kte ), &
  338. INTENT(IN ) :: U0, &
  339. V0, &
  340. T0, &
  341. QV0, &
  342. P0, &
  343. rho, &
  344. DZQ, &
  345. W0AVG1D
  346. !
  347. REAL, INTENT(IN ) :: DT,DX,DXSQ
  348. !
  349. REAL, INTENT(IN ) :: XLV0,XLV1,XLS0,XLS1,CP,R,G
  350. REAL, INTENT(IN ) :: EP2,SVP1,SVP2,SVP3,SVPT0
  351. !
  352. REAL, DIMENSION( kts:kte ), INTENT(INOUT) :: &
  353. DQDT, &
  354. DQIDT, &
  355. DQCDT, &
  356. DQRDT, &
  357. DQSDT, &
  358. DTDT
  359. REAL, DIMENSION( ims:ime , jms:jme ), &
  360. INTENT(INOUT) :: RAINCV, &
  361. PRATEC, &
  362. NCA
  363. !
  364. !...DEFINE LOCAL VARIABLES...
  365. !
  366. REAL, DIMENSION( kts:kte ) :: &
  367. Q0,Z0,TV0,TU,TVU,QU,TZ,TVD, &
  368. QD,QES,THTES,TG,TVG,QG,WU,WD,W0,EMS,EMSD, &
  369. UMF,UER,UDR,DMF,DER,DDR,UMF2,UER2, &
  370. UDR2,DMF2,DER2,DDR2,DZA,THTA0,THETEE, &
  371. THTAU,THETEU,THTAD,THETED,QLIQ,QICE, &
  372. QLQOUT,QICOUT,PPTLIQ,PPTICE,DETLQ,DETIC, &
  373. DETLQ2,DETIC2,RATIO,RATIO2
  374. REAL, DIMENSION( kts:kte ) :: &
  375. DOMGDP,EXN,RHOE,TVQU,DP,RH,EQFRC,WSPD, &
  376. QDT,FXM,THTAG,THTESG,THPA,THFXTOP, &
  377. THFXBOT,QPA,QFXTOP,QFXBOT,QLPA,QLFXIN, &
  378. QLFXOUT,QIPA,QIFXIN,QIFXOUT,QRPA, &
  379. QRFXIN,QRFXOUT,QSPA,QSFXIN,QSFXOUT, &
  380. QL0,QLG,QI0,QIG,QR0,QRG,QS0,QSG
  381. REAL, DIMENSION( kts:kte+1 ) :: OMG
  382. REAL, DIMENSION( kts:kte ) :: RAINFB,SNOWFB
  383. ! LOCAL VARS
  384. REAL :: P00,T00,CV,B61,RLF,RHIC,RHBC,PIE, &
  385. TTFRZ,TBFRZ,C5,RATE
  386. REAL :: GDRY,ROCP,ALIQ,BLIQ, &
  387. CLIQ,DLIQ,AICE,BICE,CICE,DICE
  388. REAL :: FBFRC,P300,DPTHMX,THMIX,QMIX,ZMIX,PMIX, &
  389. ROCPQ,TMIX,EMIX,TLOG,TDPT,TLCL,TVLCL, &
  390. CPORQ,PLCL,ES,DLP,TENV,QENV,TVEN,TVBAR, &
  391. ZLCL,WKL,WABS,TRPPT,WSIGNE,DTLCL,GDT,WLCL,&
  392. TVAVG,QESE,WTW,RHOLCL,AU0,VMFLCL,UPOLD, &
  393. UPNEW,ABE,WKLCL,THTUDL,TUDL,TTEMP,FRC1, &
  394. QNEWIC,RL,R1,QNWFRZ,EFFQ,BE,BOTERM,ENTERM,&
  395. DZZ,WSQ,UDLBE,REI,EE2,UD2,TTMP,F1,F2, &
  396. THTTMP,QTMP,TMPLIQ,TMPICE,TU95,TU10,EE1, &
  397. UD1,CLDHGT,DPTT,QNEWLQ,DUMFDP,EE,TSAT, &
  398. THTA,P150,USR,VCONV,TIMEC,SHSIGN,VWS,PEF, &
  399. CBH,RCBH,PEFCBH,PEFF,PEFF2,TDER,THTMIN, &
  400. DTMLTD,QS,TADVEC,DPDD,FRC,DPT,RDD,A1, &
  401. DSSDT,DTMP,T1RH,QSRH,PPTFLX,CPR,CNDTNF, &
  402. UPDINC,AINCM2,DEVDMF,PPR,RCED,DPPTDF, &
  403. DMFLFS,DMFLFS2,RCED2,DDINC,AINCMX,AINCM1, &
  404. AINC,TDER2,PPTFL2,FABE,STAB,DTT,DTT1, &
  405. DTIME,TMA,TMB,TMM,BCOEFF,ACOEFF,QVDIFF, &
  406. TOPOMG,CPM,DQ,ABEG,DABE,DFDA,FRC2,DR, &
  407. UDFRC,TUC,QGS,RH0,RHG,QINIT,QFNL,ERR2, &
  408. RELERR,RLC,RLS,RNC,FABEOLD,AINCOLD,UEFRC, &
  409. DDFRC,TDC,DEFRC
  410. INTEGER :: KX,K,KL
  411. !
  412. INTEGER :: ISTOP,ML,L5,L4,KMIX,LOW, &
  413. LC,MXLAYR,LLFC,NLAYRS,NK, &
  414. KPBL,KLCL,LCL,LET,IFLAG, &
  415. KFRZ,NK1,LTOP,NJ,LTOP1, &
  416. LTOPM1,LVF,KSTART,KMIN,LFS, &
  417. ND,NIC,LDB,LDT,ND1,NDK, &
  418. NM,LMAX,NCOUNT,NOITR, &
  419. NSTEP,NTC
  420. !
  421. DATA P00,T00/1.E5,273.16/
  422. DATA CV,B61,RLF/717.,0.608,3.339E5/
  423. DATA RHIC,RHBC/1.,0.90/
  424. DATA PIE,TTFRZ,TBFRZ,C5/3.141592654,268.16,248.16,1.0723E-3/
  425. DATA RATE/0.01/
  426. !-----------------------------------------------------------
  427. GDRY=-G/CP
  428. ROCP=R/CP
  429. KL=kte
  430. KX=kte
  431. !
  432. ! ALIQ = 613.3
  433. ! BLIQ = 17.502
  434. ! CLIQ = 4780.8
  435. ! DLIQ = 32.19
  436. ALIQ = SVP1*1000.
  437. BLIQ = SVP2
  438. CLIQ = SVP2*SVPT0
  439. DLIQ = SVP3
  440. AICE = 613.2
  441. BICE = 22.452
  442. CICE = 6133.0
  443. DICE = 0.61
  444. !
  445. !...OPTION TO FEED CONVECTIVELY GENERATED RAINWATER
  446. !...INTO GRID-RESOLVED RAINWATER (OR SNOW/GRAUPEL)
  447. !...FIELD. 'FBFRC' IS THE FRACTION OF AVAILABLE
  448. !...PRECIPITATION TO BE FED BACK (0.0 - 1.0)...
  449. !
  450. FBFRC=0.0
  451. !
  452. !...SCHEME IS CALLED ONCE ON EACH NORTH-SOUTH SLICE, THE LOOP BELOW
  453. !...CHECKS FOR THE POSSIBILITY OF INITIATING PARAMETERIZED
  454. !...CONVECTION AT EACH POINT WITHIN THE SLICE
  455. !
  456. !...SEE IF IT IS NECESSARY TO CHECK FOR CONVECTIVE TRIGGERING AT THIS
  457. !...GRID POINT. IF NCA>0, CONVECTION IS ALREADY ACTIVE AT THIS POINT,
  458. !...JUST FEED BACK THE TENDENCIES SAVED FROM THE TIME WHEN CONVECTION
  459. !...WAS INITIATED. IF NCA<0, CONVECTION IS NOT ACTIVE
  460. !...AND YOU MAY WANT TO CHECK TO SEE IF IT CAN BE ACTIVATED FOR THE
  461. !...CURRENT CONDITIONS. IN PREVIOUS APLICATIONS OF THIS SCHEME,
  462. !...THE VARIABLE ICLDCK WAS USED BELOW TO SAVE TIME BY ONLY CHECKING
  463. !...FOR THE POSSIBILITY OF CONVECTIVE INITIATION EVERY 5 OR 10
  464. !...MINUTES...
  465. !
  466. ! 10 CONTINUE
  467. !SUE P300=1000.*(PSB(I,J)*A(KL)+PTOP-30.)+PP3D(I,J,KL)
  468. P300=P0(1)-30000.
  469. !
  470. !...PRESSURE PERTURBATION TERM IS ONLY DEFINED AT MID-POINT OF
  471. !...VERTICAL LAYERS...SINCE TOTAL PRESSURE IS NEEDED AT THE TOP AND
  472. !...BOTTOM OF LAYERS BELOW, DO AN INTERPOLATION...
  473. !
  474. !...INPUT A VERTICAL SOUNDING ... NOTE THAT MODEL LAYERS ARE NUMBERED
  475. !...FROM BOTTOM-UP IN THE KF SCHEME...
  476. !
  477. ML=0
  478. !SUE tmprpsb=1./PSB(I,J)
  479. !SUE CELL=PTOP*tmprpsb
  480. DO 15 K=1,KX
  481. !SUE P0(K)=1.E3*(A(NK)*PSB(I,J)+PTOP)+PP3D(I,J,NK)
  482. !
  483. !...IF Q0 IS ABOVE SATURATION VALUE, REDUCE IT TO SATURATION LEVEL...
  484. !
  485. ES=ALIQ*EXP((BLIQ*T0(K)-CLIQ)/(T0(K)-DLIQ))
  486. QES(K)=EP2*ES/(P0(K)-ES)
  487. Q0(K)=AMIN1(QES(K),QV0(K))
  488. Q0(K)=AMAX1(0.000001,Q0(K))
  489. QL0(K)=0.
  490. QI0(K)=0.
  491. QR0(K)=0.
  492. QS0(K)=0.
  493. TV0(K)=T0(K)*(1.+B61*Q0(K))
  494. RHOE(K)=P0(K)/(R*TV0(K))
  495. DP(K)=rho(k)*g*DZQ(k)
  496. !
  497. !...DZQ IS DZ BETWEEN SIGMA SURFACES, DZA IS DZ BETWEEN MODEL HALF LEVEL
  498. ! DP IS THE PRESSURE INTERVAL BETWEEN FULL SIGMA LEVELS...
  499. !
  500. IF(P0(K).GE.500E2)L5=K
  501. IF(P0(K).GE.400E2)L4=K
  502. IF(P0(K).GE.P300)LLFC=K
  503. IF(T0(K).GT.T00)ML=K
  504. 15 CONTINUE
  505. Z0(1)=.5*DZQ(1)
  506. DO 20 K=2,KL
  507. Z0(K)=Z0(K-1)+.5*(DZQ(K)+DZQ(K-1))
  508. DZA(K-1)=Z0(K)-Z0(K-1)
  509. 20 CONTINUE
  510. DZA(KL)=0.
  511. KMIX=1
  512. 25 LOW=KMIX
  513. IF(LOW.GT.LLFC)GOTO 325
  514. LC=LOW
  515. MXLAYR=0
  516. !
  517. !...ASSUME THAT IN ORDER TO SUPPORT A DEEP UPDRAFT YOU NEED A LAYER OF
  518. !...UNSTABLE AIR 50 TO 100 mb DEEP...TO APPROXIMATE THIS, ISOLATE A
  519. !...GROUP OF ADJACENT INDIVIDUAL MODEL LAYERS, WITH THE BASE AT LEVEL
  520. !...LC, SUCH THAT THE COMBINED DEPTH OF THESE LAYERS IS AT LEAST 60 mb..
  521. !
  522. NLAYRS=0
  523. DPTHMX=0.
  524. DO 63 NK=LC,KX
  525. DPTHMX=DPTHMX+DP(NK)
  526. NLAYRS=NLAYRS+1
  527. 63 IF(DPTHMX.GT.6.E3)GOTO 64
  528. GOTO 325
  529. 64 KPBL=LC+NLAYRS-1
  530. KMIX=LC+1
  531. 18 THMIX=0.
  532. QMIX=0.
  533. ZMIX=0.
  534. PMIX=0.
  535. DPTHMX=0.
  536. !
  537. !...FIND THE THERMODYNAMIC CHARACTERISTICS OF THE LAYER BY
  538. !...MASS-WEIGHTING THE CHARACTERISTICS OF THE INDIVIDUAL MODEL
  539. !...LAYERS...
  540. !
  541. DO 17 NK=LC,KPBL
  542. DPTHMX=DPTHMX+DP(NK)
  543. ROCPQ=0.2854*(1.-0.28*Q0(NK))
  544. THMIX=THMIX+DP(NK)*T0(NK)*(P00/P0(NK))**ROCPQ
  545. QMIX=QMIX+DP(NK)*Q0(NK)
  546. ZMIX=ZMIX+DP(NK)*Z0(NK)
  547. 17 PMIX=PMIX+DP(NK)*P0(NK)
  548. THMIX=THMIX/DPTHMX
  549. QMIX=QMIX/DPTHMX
  550. ZMIX=ZMIX/DPTHMX
  551. PMIX=PMIX/DPTHMX
  552. ROCPQ=0.2854*(1.-0.28*QMIX)
  553. TMIX=THMIX*(PMIX/P00)**ROCPQ
  554. EMIX=QMIX*PMIX/(EP2+QMIX)
  555. !
  556. !...FIND THE TEMPERATURE OF THE MIXTURE AT ITS LCL, PRESSURE
  557. !...LEVEL OF LCL...
  558. !
  559. TLOG=ALOG(EMIX/ALIQ)
  560. TDPT=(CLIQ-DLIQ*TLOG)/(BLIQ-TLOG)
  561. TLCL=TDPT-(.212+1.571E-3*(TDPT-T00)-4.36E-4*(TMIX-T00))*(TMIX- &
  562. TDPT)
  563. TLCL=AMIN1(TLCL,TMIX)
  564. TVLCL=TLCL*(1.+0.608*QMIX)
  565. CPORQ=1./ROCPQ
  566. PLCL=P00*(TLCL/THMIX)**CPORQ
  567. DO 29 NK=LC,KL
  568. KLCL=NK
  569. IF(PLCL.GE.P0(NK))GOTO 35
  570. 29 CONTINUE
  571. GOTO 325
  572. 35 K=KLCL-1
  573. DLP=ALOG(PLCL/P0(K))/ALOG(P0(KLCL)/P0(K))
  574. !
  575. !...ESTIMATE ENVIRONMENTAL TEMPERATURE AND MIXING RATIO AT THE LCL...
  576. !
  577. TENV=T0(K)+(T0(KLCL)-T0(K))*DLP
  578. QENV=Q0(K)+(Q0(KLCL)-Q0(K))*DLP
  579. TVEN=TENV*(1.+0.608*QENV)
  580. TVBAR=0.5*(TV0(K)+TVEN)
  581. ! ZLCL=Z0(K)+R*TVBAR*ALOG(P0(K)/PLCL)/G
  582. ZLCL=Z0(K)+(Z0(KLCL)-Z0(K))*DLP
  583. !
  584. !...CHECK TO SEE IF CLOUD IS BUOYANT USING FRITSCH-CHAPPELL TRIGGER
  585. !...FUNCTION DESCRIBED IN KAIN AND FRITSCH (1992)...W0AVG IS AN
  586. !...APROXIMATE VALUE FOR THE RUNNING-MEAN GRID-SCALE VERTICAL
  587. !...VELOCITY, WHICH GIVES SMOOTHER FIELDS OF CONVECTIVE INITIATION
  588. !...THAN THE INSTANTANEOUS VALUE...FORMULA RELATING TEMPERATURE
  589. !...PERTURBATION TO VERTICAL VELOCITY HAS BEEN USED WITH THE MOST
  590. !...SUCCESS AT GRID LENGTHS NEAR 25 km. FOR DIFFERENT GRID-LENGTHS,
  591. !...ADJUST VERTICAL VELOCITY TO EQUIVALENT VALUE FOR 25 KM GRID
  592. !...LENGTH, ASSUMING LINEAR DEPENDENCE OF W ON GRID LENGTH...
  593. !
  594. WKLCL=0.02*ZLCL/2.5E3
  595. WKL=(W0AVG1D(K)+(W0AVG1D(KLCL)-W0AVG1D(K))*DLP)*DX/25.E3- &
  596. WKLCL
  597. WABS=ABS(WKL)+1.E-10
  598. WSIGNE=WKL/WABS
  599. DTLCL=4.64*WSIGNE*WABS**0.33
  600. GDT=G*DTLCL*(ZLCL-Z0(LC))/(TV0(LC)+TVEN)
  601. WLCL=1.+.5*WSIGNE*SQRT(ABS(GDT)+1.E-10)
  602. IF(TLCL+DTLCL.GT.TENV)GOTO 45
  603. IF(KPBL.GE.LLFC)GOTO 325
  604. GOTO 25
  605. !
  606. !...CONVECTIVE TRIGGERING CRITERIA HAS BEEN SATISFIED...COMPUTE
  607. !...EQUIVALENT POTENTIAL TEMPERATURE
  608. !...(THETEU) AND VERTICAL VELOCITY OF THE RISING PARCEL AT THE LCL...
  609. !
  610. 45 THETEU(K)=TMIX*(1.E5/PMIX)**(0.2854*(1.-0.28*QMIX))* &
  611. EXP((3374.6525/TLCL-2.5403)*QMIX*(1.+0.81*QMIX))
  612. ES=ALIQ*EXP((TENV*BLIQ-CLIQ)/(TENV-DLIQ))
  613. TVAVG=0.5*(TV0(KLCL)+TENV*(1.+0.608*QENV))
  614. PLCL=P0(KLCL)*EXP(G/(R*TVAVG)*(Z0(KLCL)-ZLCL))
  615. QESE=EP2*ES/(PLCL-ES)
  616. GDT=G*DTLCL*(ZLCL-Z0(LC))/(TV0(LC)+TVEN)
  617. WLCL=1.+.5*WSIGNE*SQRT(ABS(GDT)+1.E-10)
  618. THTES(K)=TENV*(1.E5/PLCL)**(0.2854*(1.-0.28*QESE))* &
  619. EXP((3374.6525/TENV-2.5403)*QESE*(1.+0.81*QESE))
  620. WTW=WLCL*WLCL
  621. IF(WLCL.LT.0.)GOTO 25
  622. TVLCL=TLCL*(1.+0.608*QMIX)
  623. RHOLCL=PLCL/(R*TVLCL)
  624. !
  625. LCL=KLCL
  626. LET=LCL
  627. !
  628. !*******************************************************************
  629. ! *
  630. ! COMPUTE UPDRAFT PROPERTIES *
  631. ! *
  632. !*******************************************************************
  633. !
  634. !
  635. !...ESTIMATE INITIAL UPDRAFT MASS FLUX (UMF(K))...
  636. !
  637. WU(K)=WLCL
  638. AU0=PIE*RAD*RAD
  639. UMF(K)=RHOLCL*AU0
  640. VMFLCL=UMF(K)
  641. UPOLD=VMFLCL
  642. UPNEW=UPOLD
  643. !
  644. !...RATIO2 IS THE DEGREE OF GLACIATION IN THE CLOUD (0 TO 1),
  645. !...UER IS THE ENVIR ENTRAINMENT RATE, ABE IS AVAILABLE BUOYANT ENERGY,
  646. ! TRPPT IS THE TOTAL RATE OF PRECIPITATION PRODUCTION...
  647. !
  648. RATIO2(K)=0.
  649. UER(K)=0.
  650. ABE=0.
  651. TRPPT=0.
  652. TU(K)=TLCL
  653. TVU(K)=TVLCL
  654. QU(K)=QMIX
  655. EQFRC(K)=1.
  656. QLIQ(K)=0.
  657. QICE(K)=0.
  658. QLQOUT(K)=0.
  659. QICOUT(K)=0.
  660. DETLQ(K)=0.
  661. DETIC(K)=0.
  662. PPTLIQ(K)=0.
  663. PPTICE(K)=0.
  664. IFLAG=0
  665. KFRZ=LC
  666. !
  667. !...THE AMOUNT OF CONV AVAIL POT ENERGY (CAPE) IS CALCULATED WITH
  668. ! RESPECT TO UNDILUTE PARCEL ASCENT; EQ POT TEMP OF UNDILUTE
  669. ! PARCEL IS THTUDL, UNDILUTE TEMPERATURE IS GIVEN BY TUDL...
  670. !
  671. THTUDL=THETEU(K)
  672. TUDL=TLCL
  673. !
  674. !...TTEMP IS USED DURING CALCULATION OF THE LINEAR GLACIATION
  675. ! PROCESS; IT IS INITIALLY SET TO THE TEMPERATURE AT WHICH
  676. ! FREEZING IS SPECIFIED TO BEGIN. WITHIN THE GLACIATION
  677. ! INTERVAL, IT IS SET EQUAL TO THE UPDRAFT TEMP AT THE
  678. ! PREVIOUS MODEL LEVEL...
  679. !
  680. TTEMP=TTFRZ
  681. !
  682. !...ENTER THE LOOP FOR UPDRAFT CALCULATIONS...CALCULATE UPDRAFT TEMP,
  683. ! MIXING RATIO, VERTICAL MASS FLUX, LATERAL DETRAINMENT OF MASS AND
  684. ! MOISTURE, PRECIPITATION RATES AT EACH MODEL LEVEL...
  685. !
  686. DO 60 NK=K,KL-1
  687. NK1=NK+1
  688. RATIO2(NK1)=RATIO2(NK)
  689. !
  690. !...UPDATE UPDRAFT PROPERTIES AT THE NEXT MODEL LVL TO REFLECT
  691. ! ENTRAINMENT OF ENVIRONMENTAL AIR...
  692. !
  693. FRC1=0.
  694. TU(NK1)=T0(NK1)
  695. THETEU(NK1)=THETEU(NK)
  696. QU(NK1)=QU(NK)
  697. QLIQ(NK1)=QLIQ(NK)
  698. QICE(NK1)=QICE(NK)
  699. CALL TPMIX(P0(NK1),THETEU(NK1),TU(NK1),QU(NK1),QLIQ(NK1), &
  700. QICE(NK1),QNEWLQ,QNEWIC,RATIO2(NK1),RL,XLV0,XLV1,XLS0, &
  701. XLS1,EP2,ALIQ,BLIQ,CLIQ,DLIQ,AICE,BICE,CICE,DICE)
  702. TVU(NK1)=TU(NK1)*(1.+0.608*QU(NK1))
  703. !
  704. !...CHECK TO SEE IF UPDRAFT TEMP IS WITHIN THE FREEZING INTERVAL,
  705. ! IF IT IS, CALCULATE THE FRACTIONAL CONVERSION TO GLACIATION
  706. ! AND ADJUST QNEWLQ TO REFLECT THE GRADUAL CHANGE IN THETAU
  707. ! SINCE THE LAST MODEL LEVEL...THE GLACIATION EFFECTS WILL BE
  708. ! DETERMINED AFTER THE AMOUNT OF CONDENSATE AVAILABLE AFTER
  709. ! PRECIP FALLOUT IS DETERMINED...TTFRZ IS THE TEMP AT WHICH
  710. ! GLACIATION BEGINS, TBFRZ THE TEMP AT WHICH IT ENDS...
  711. !
  712. IF(TU(NK1).LE.TTFRZ.AND.IFLAG.LT.1)THEN
  713. IF(TU(NK1).GT.TBFRZ)THEN
  714. IF(TTEMP.GT.TTFRZ)TTEMP=TTFRZ
  715. FRC1=(TTEMP-TU(NK1))/(TTFRZ-TBFRZ)
  716. R1=(TTEMP-TU(NK1))/(TTEMP-TBFRZ)
  717. ELSE
  718. FRC1=(TTEMP-TBFRZ)/(TTFRZ-TBFRZ)
  719. R1=1.
  720. IFLAG=1
  721. ENDIF
  722. QNWFRZ=QNEWLQ
  723. QNEWIC=QNEWIC+QNEWLQ*R1*0.5
  724. QNEWLQ=QNEWLQ-QNEWLQ*R1*0.5
  725. EFFQ=(TTFRZ-TBFRZ)/(TTEMP-TBFRZ)
  726. TTEMP=TU(NK1)
  727. ENDIF
  728. !
  729. ! CALCULATE UPDRAFT VERTICAL VELOCITY AND PRECIPITATION FALLOUT...
  730. !
  731. IF(NK.EQ.K)THEN
  732. BE=(TVLCL+TVU(NK1))/(TVEN+TV0(NK1))-1.
  733. BOTERM=2.*(Z0(NK1)-ZLCL)*G*BE/1.5
  734. ENTERM=0.
  735. DZZ=Z0(NK1)-ZLCL
  736. ELSE
  737. BE=(TVU(NK)+TVU(NK1))/(TV0(NK)+TV0(NK1))-1.
  738. BOTERM=2.*DZA(NK)*G*BE/1.5
  739. ENTERM=2.*UER(NK)*WTW/UPOLD
  740. DZZ=DZA(NK)
  741. ENDIF
  742. WSQ=WTW
  743. CALL CONDLOAD(QLIQ(NK1),QICE(NK1),WTW,DZZ,BOTERM,ENTERM,RATE, &
  744. QNEWLQ,QNEWIC,QLQOUT(NK1),QICOUT(NK1), G)
  745. !...IF VERT VELOCITY IS LESS THAN ZERO, EXIT THE UPDRAFT LOOP AND,
  746. ! IF CLOUD IS TALL ENOUGH, FINALIZE UPDRAFT CALCULATIONS...
  747. !
  748. IF(WTW.LE.0.)GOTO 65
  749. WABS=SQRT(ABS(WTW))
  750. WU(NK1)=WTW/WABS
  751. !
  752. ! UPDATE THE ABE FOR UNDILUTE ASCENT...
  753. !
  754. THTES(NK1)=T0(NK1)*(1.E5/P0(NK1))**(0.2854*(1.-0.28*QES(NK1))) &
  755. * &
  756. EXP((3374.6525/T0(NK1)-2.5403)*QES(NK1)*(1.+0.81* &
  757. QES(NK1)))
  758. UDLBE=((2.*THTUDL)/(THTES(NK)+THTES(NK1))-1.)*DZZ
  759. IF(UDLBE.GT.0.)ABE=ABE+UDLBE*G
  760. !
  761. ! DETERMINE THE EFFECTS OF CLOUD GLACIATION IF WITHIN THE SPECIFIED
  762. ! TEMP INTERVAL...
  763. !
  764. IF(FRC1.GT.1.E-6)THEN
  765. CALL DTFRZNEW(TU(NK1),P0(NK1),THETEU(NK1),QU(NK1),QLIQ(NK1), &
  766. QICE(NK1),RATIO2(NK1),TTFRZ,TBFRZ,QNWFRZ,RL,FRC1,EFFQ, &
  767. IFLAG,XLV0,XLV1,XLS0,XLS1,EP2,ALIQ,BLIQ,CLIQ,DLIQ,AICE,BICE &
  768. ,CICE,DICE)
  769. ENDIF
  770. !
  771. ! CALL SUBROUTINE TO CALCULATE ENVIRONMENTAL EQUIVALENT POTENTIAL TEMP.
  772. ! WITHIN GLACIATION INTERVAL, THETAE MUST BE CALCULATED WITH RESPECT TO
  773. ! SAME DEGREE OF GLACIATION FOR ALL ENTRAINING AIR...
  774. !
  775. CALL ENVIRTHT(P0(NK1),T0(NK1),Q0(NK1),THETEE(NK1),RATIO2(NK1), &
  776. RL,EP2,ALIQ,BLIQ,CLIQ,DLIQ,AICE,BICE,CICE,DICE)
  777. !...REI IS THE RATE OF ENVIRONMENTAL INFLOW...
  778. !
  779. REI=VMFLCL*DP(NK1)*0.03/RAD
  780. TVQU(NK1)=TU(NK1)*(1.+0.608*QU(NK1)-QLIQ(NK1)-QICE(NK1))
  781. !
  782. !...IF CLOUD PARCELS ARE VIRTUALLY COLDER THAN THE ENVIRONMENT, NO
  783. ! ENTRAINMENT IS ALLOWED AT THIS LEVEL...
  784. !
  785. IF(TVQU(NK1).LE.TV0(NK1))THEN
  786. UER(NK1)=0.0
  787. UDR(NK1)=REI
  788. EE2=0.
  789. UD2=1.
  790. EQFRC(NK1)=0.
  791. GOTO 55
  792. ENDIF
  793. LET=NK1
  794. TTMP=TVQU(NK1)
  795. !
  796. !...DETERMINE THE CRITICAL MIXED FRACTION OF UPDRAFT AND ENVIRONMENTAL
  797. ! AIR FOR ESTIMATION OF ENTRAINMENT AND DETRAINMENT RATES...
  798. !
  799. F1=0.95
  800. F2=1.-F1
  801. THTTMP=F1*THETEE(NK1)+F2*THETEU(NK1)
  802. QTMP=F1*Q0(NK1)+F2*QU(NK1)
  803. TMPLIQ=F2*QLIQ(NK1)
  804. TMPICE=F2*QICE(NK1)
  805. CALL TPMIX(P0(NK1),THTTMP,TTMP,QTMP,TMPLIQ,TMPICE,QNEWLQ, &
  806. QNEWIC,RATIO2(NK1),RL,XLV0,XLV1,XLS0,XLS1,EP2,ALIQ,BLIQ,CLIQ, &
  807. DLIQ,AICE,BICE,CICE,DICE)
  808. TU95=TTMP*(1.+0.608*QTMP-TMPLIQ-TMPICE)
  809. IF(TU95.GT.TV0(NK1))THEN
  810. EE2=1.
  811. UD2=0.
  812. EQFRC(NK1)=1.0
  813. GOTO 50
  814. ENDIF
  815. F1=0.10
  816. F2=1.-F1
  817. THTTMP=F1*THETEE(NK1)+F2*THETEU(NK1)
  818. QTMP=F1*Q0(NK1)+F2*QU(NK1)
  819. TMPLIQ=F2*QLIQ(NK1)
  820. TMPICE=F2*QICE(NK1)
  821. CALL TPMIX(P0(NK1),THTTMP,TTMP,QTMP,TMPLIQ,TMPICE,QNEWLQ, &
  822. QNEWIC,RATIO2(NK1),RL,XLV0,XLV1,XLS0,XLS1,EP2,ALIQ,BLIQ,CLIQ, &
  823. DLIQ,AICE,BICE,CICE,DICE)
  824. TU10=TTMP*(1.+0.608*QTMP-TMPLIQ-TMPICE)
  825. IF(TU10.EQ.TVQU(NK1))THEN
  826. EE2=1.
  827. UD2=0.
  828. EQFRC(NK1)=1.0
  829. GOTO 50
  830. ENDIF
  831. EQFRC(NK1)=(TV0(NK1)-TVQU(NK1))*F1/(TU10-TVQU(NK1))
  832. EQFRC(NK1)=AMAX1(0.0,EQFRC(NK1))
  833. EQFRC(NK1)=AMIN1(1.0,EQFRC(NK1))
  834. IF(EQFRC(NK1).EQ.1)THEN
  835. EE2=1.
  836. UD2=0.
  837. GOTO 50
  838. ELSEIF(EQFRC(NK1).EQ.0.)THEN
  839. EE2=0.
  840. UD2=1.
  841. GOTO 50
  842. ELSE
  843. !
  844. !...SUBROUTINE PROF5 INTEGRATES OVER THE GAUSSIAN DIST TO DETERMINE THE
  845. ! FRACTIONAL ENTRAINMENT AND DETRAINMENT RATES...
  846. !
  847. CALL PROF5(EQFRC(NK1),EE2,UD2)
  848. ENDIF
  849. !
  850. 50 IF(NK.EQ.K)THEN
  851. EE1=1.
  852. UD1=0.
  853. ENDIF
  854. !
  855. !...NET ENTRAINMENT AND DETRAINMENT RATES ARE GIVEN BY THE AVERAGE
  856. ! FRACTIONAL VALUES IN THE LAYER...
  857. !
  858. UER(NK1)=0.5*REI*(EE1+EE2)
  859. UDR(NK1)=0.5*REI*(UD1+UD2)
  860. !
  861. !...IF THE CALCULATED UPDRAFT DETRAINMENT RATE IS GREATER THAN THE TOTAL
  862. ! UPDRAFT MASS FLUX, ALL CLOUD MASS DETRAINS, EXIT UPDRAFT CALCULATION
  863. !
  864. 55 IF(UMF(NK)-UDR(NK1).LT.10.)THEN
  865. !
  866. !...IF THE CALCULATED DETRAINED MASS FLUX IS GREATER THAN THE TOTAL
  867. ! UPDRAFT FLUX, IMPOSE TOTAL DETRAINMENT OF UPDRAFT MASS AT THE
  868. ! PREVIOUS MODEL
  869. !
  870. IF(UDLBE.GT.0.)ABE=ABE-UDLBE*G
  871. LET=NK
  872. ! WRITE(98,1015)P0(NK1)/100.
  873. GOTO 65
  874. ENDIF
  875. EE1=EE2
  876. UD1=UD2
  877. UPOLD=UMF(NK)-UDR(NK1)
  878. UPNEW=UPOLD+UER(NK1)
  879. UMF(NK1)=UPNEW
  880. !
  881. !...DETLQ AND DETIC ARE THE RATES OF DETRAINMENT OF LIQUID AND ICE IN
  882. ! THE DETRAINING UPDRAFT MASS...
  883. !
  884. DETLQ(NK1)=QLIQ(NK1)*UDR(NK1)
  885. DETIC(NK1)=QICE(NK1)*UDR(NK1)
  886. QDT(NK1)=QU(NK1)
  887. QU(NK1)=(UPOLD*QU(NK1)+UER(NK1)*Q0(NK1))/UPNEW
  888. THETEU(NK1)=(THETEU(NK1)*UPOLD+THETEE(NK1)*UER(NK1))/UPNEW
  889. QLIQ(NK1)=QLIQ(NK1)*UPOLD/UPNEW
  890. QICE(NK1)=QICE(NK1)*UPOLD/UPNEW
  891. !
  892. !...KFRZ IS THE HIGHEST MODEL LEVEL AT WHICH LIQUID CONDENSATE IS
  893. ! GENERATING PPTLIQ IS THE RATE OF GENERATION (FALLOUT) OF LIQUID
  894. ! PRECIP AT A GIVING MODEL LVL, PPTICE THE SAME FOR ICE, TRPPT IS
  895. ! THE TOTAL RATE OF PRODUCTION OF PRECIP UP TO THE CURRENT MODEL LEVEL
  896. !
  897. IF(ABS(RATIO2(NK1)-1.).GT.1.E-6)KFRZ=NK1
  898. PPTLIQ(NK1)=QLQOUT(NK1)*(UMF(NK)-UDR(NK1))
  899. PPTICE(NK1)=QICOUT(NK1)*(UMF(NK)-UDR(NK1))
  900. TRPPT=TRPPT+PPTLIQ(NK1)+PPTICE(NK1)
  901. IF(NK1.LE.KPBL)UER(NK1)=UER(NK1)+VMFLCL*DP(NK1)/DPTHMX
  902. 60 CONTINUE
  903. !
  904. !...CHECK CLOUD DEPTH...IF CLOUD IS TALL ENOUGH, ESTIMATE THE EQUILIBRIU
  905. ! TEMPERATURE LEVEL (LET) AND ADJUST MASS FLUX PROFILE AT CLOUD TOP SO
  906. ! THAT MASS FLUX DECREASES TO ZERO AS A LINEAR FUNCTION OF PRESSURE
  907. ! BETWEEN THE LET AND CLOUD TOP...
  908. !
  909. !...LTOP IS THE MODEL LEVEL JUST BELOW THE LEVEL AT WHICH VERTICAL
  910. ! VELOCITY FIRST BECOMES NEGATIVE...
  911. !
  912. 65 LTOP=NK
  913. CLDHGT=Z0(LTOP)-ZLCL
  914. !
  915. !...IF CLOUD TOP HGT IS LESS THAN SPECIFIED MINIMUM HEIGHT, GO BACK AND
  916. ! THE NEXT HIGHEST 60MB LAYER TO SEE IF A BIGGER CLOUD CAN BE OBTAINED
  917. ! THAT SOURCE AIR...
  918. !
  919. ! IF(CLDHGT.LT.4.E3.OR.ABE.LT.1.)THEN
  920. IF(CLDHGT.LT.3.E3.OR.ABE.LT.1.)THEN
  921. DO 70 NK=K,LTOP
  922. UMF(NK)=0.
  923. UDR(NK)=0.
  924. UER(NK)=0.
  925. DETLQ(NK)=0.
  926. DETIC(NK)=0.
  927. PPTLIQ(NK)=0.
  928. 70 PPTICE(NK)=0.
  929. GOTO 25
  930. ENDIF
  931. !
  932. !...IF THE LET AND LTOP ARE THE SAME, DETRAIN ALL OF THE UPDRAFT MASS
  933. ! FLUX THIS LEVEL...
  934. !
  935. IF(LET.EQ.LTOP)THEN
  936. UDR(LTOP)=UMF(LTOP)+UDR(LTOP)-UER(LTOP)
  937. DETLQ(LTOP)=QLIQ(LTOP)*UDR(LTOP)*UPNEW/UPOLD
  938. DETIC(LTOP)=QICE(LTOP)*UDR(LTOP)*UPNEW/UPOLD
  939. TRPPT=TRPPT-(PPTLIQ(LTOP)+PPTICE(LTOP))
  940. UER(LTOP)=0.
  941. UMF(LTOP)=0.
  942. GOTO 85
  943. ENDIF
  944. !
  945. ! BEGIN TOTAL DETRAINMENT AT THE LEVEL ABOVE THE LET...
  946. !
  947. DPTT=0.
  948. DO 71 NJ=LET+1,LTOP
  949. 71 DPTT=DPTT+DP(NJ)
  950. DUMFDP=UMF(LET)/DPTT
  951. !
  952. !...ADJUST MASS FLUX PROFILES, DETRAINMENT RATES, AND PRECIPITATION FALL
  953. ! RATES TO REFLECT THE LINEAR DECREASE IN MASS FLX BETWEEN THE LET AND
  954. ! PTOP
  955. !
  956. DO 75 NK=LET+1,LTOP
  957. UDR(NK)=DP(NK)*DUMFDP
  958. UMF(NK)=UMF(NK-1)-UDR(NK)
  959. DETLQ(NK)=QLIQ(NK)*UDR(NK)
  960. DETIC(NK)=QICE(NK)*UDR(NK)
  961. TRPPT=TRPPT-PPTLIQ(NK)-PPTICE(NK)
  962. PPTLIQ(NK)=(UMF(NK-1)-UDR(NK))*QLQOUT(NK)
  963. PPTICE(NK)=(UMF(NK-1)-UDR(NK))*QICOUT(NK)
  964. TRPPT=TRPPT+PPTLIQ(NK)+PPTICE(NK)
  965. 75 CONTINUE
  966. !
  967. !...SEND UPDRAFT CHARACTERISTICS TO OUTPUT FILES...
  968. !
  969. 85 CONTINUE
  970. !
  971. !...EXTEND THE UPDRAFT MASS FLUX PROFILE DOWN TO THE SOURCE LAYER FOR
  972. ! THE UPDRAFT AIR...ALSO, DEFINE THETAE FOR LEVELS BELOW THE LCL...
  973. !
  974. DO 90 NK=1,K
  975. IF(NK.GE.LC)THEN
  976. IF(NK.EQ.LC)THEN
  977. UMF(NK)=VMFLCL*DP(NK)/DPTHMX
  978. UER(NK)=VMFLCL*DP(NK)/DPTHMX
  979. ELSEIF(NK.LE.KPBL)THEN
  980. UER(NK)=VMFLCL*DP(NK)/DPTHMX
  981. UMF(NK)=UMF(NK-1)+UER(NK)
  982. ELSE
  983. UMF(NK)=VMFLCL
  984. UER(NK)=0.
  985. ENDIF
  986. TU(NK)=TMIX+(Z0(NK)-ZMIX)*GDRY
  987. QU(NK)=QMIX
  988. WU(NK)=WLCL
  989. ELSE
  990. TU(NK)=0.
  991. QU(NK)=0.
  992. UMF(NK)=0.
  993. WU(NK)=0.
  994. UER(NK)=0.
  995. ENDIF
  996. UDR(NK)=0.
  997. QDT(NK)=0.
  998. QLIQ(NK)=0.
  999. QICE(NK)=0.
  1000. QLQOUT(NK)=0.
  1001. QICOUT(NK)=0.
  1002. PPTLIQ(NK)=0.
  1003. PPTICE(NK)=0.
  1004. DETLQ(NK)=0.
  1005. DETIC(NK)=0.
  1006. RATIO2(NK)=0.
  1007. EE=Q0(NK)*P0(NK)/(EP2+Q0(NK))
  1008. TLOG=ALOG(EE/ALIQ)
  1009. TDPT=(CLIQ-DLIQ*TLOG)/(BLIQ-TLOG)
  1010. TSAT=TDPT-(.212+1.571E-3*(TDPT-T00)-4.36E-4*(T0(NK)-T00))*( &
  1011. T0(NK)-TDPT)
  1012. THTA=T0(NK)*(1.E5/P0(NK))**(0.2854*(1.-0.28*Q0(NK)))
  1013. THETEE(NK)=THTA* &
  1014. EXP((3374.6525/TSAT-2.5403)*Q0(NK)*(1.+0.81*Q0(NK)) &
  1015. )
  1016. THTES(NK)=THTA* &
  1017. EXP((3374.6525/T0(NK)-2.5403)*QES(NK)*(1.+0.81* &
  1018. QES(NK)))
  1019. EQFRC(NK)=1.0
  1020. 90 CONTINUE
  1021. !
  1022. LTOP1=LTOP+1
  1023. LTOPM1=LTOP-1
  1024. !
  1025. !...DEFINE VARIABLES ABOVE CLOUD TOP...
  1026. !
  1027. DO 95 NK=LTOP1,KX
  1028. UMF(NK)=0.
  1029. UDR(NK)=0.
  1030. UER(NK)=0.
  1031. QDT(NK)=0.
  1032. QLIQ(NK)=0.
  1033. QICE(NK)=0.
  1034. QLQOUT(NK)=0.
  1035. QICOUT(NK)=0.
  1036. DETLQ(NK)=0.
  1037. DETIC(NK)=0.
  1038. PPTLIQ(NK)=0.
  1039. PPTICE(NK)=0.
  1040. IF(NK.GT.LTOP1)THEN
  1041. TU(NK)=0.
  1042. QU(NK)=0.
  1043. WU(NK)=0.
  1044. ENDIF
  1045. THTA0(NK)=0.
  1046. THTAU(NK)=0.
  1047. EMS(NK)=DP(NK)*DXSQ/G
  1048. EMSD(NK)=1./EMS(NK)
  1049. TG(NK)=T0(NK)
  1050. QG(NK)=Q0(NK)
  1051. QLG(NK)=0.
  1052. QIG(NK)=0.
  1053. QRG(NK)=0.
  1054. QSG(NK)=0.
  1055. 95 OMG(NK)=0.
  1056. OMG(KL+1)=0.
  1057. P150=P0(KLCL)-1.50E4
  1058. DO 100 NK=1,LTOP
  1059. THTAD(NK)=0.
  1060. EMS(NK)=DP(NK)*DXSQ/G
  1061. EMSD(NK)=1./EMS(NK)
  1062. !
  1063. !...INITIALIZE SOME VARIABLES TO BE USED LATER IN THE VERT ADVECTION
  1064. ! SCHEME
  1065. !
  1066. EXN(NK)=(P00/P0(NK))**(0.2854*(1.-0.28*QDT(NK)))
  1067. THTAU(NK)=TU(NK)*EXN(NK)
  1068. EXN(NK)=(P00/P0(NK))**(0.2854*(1.-0.28*Q0(NK)))
  1069. THTA0(NK)=T0(NK)*EXN(NK)
  1070. !
  1071. !...LVF IS THE LEVEL AT WHICH MOISTURE FLUX IS ESTIMATED AS THE BASIS
  1072. !...FOR PRECIPITATION EFFICIENCY CALCULATIONS...
  1073. !
  1074. IF(P0(NK).GT.P150)LVF=NK
  1075. 100 OMG(NK)=0.
  1076. LVF=MIN0(LVF,LET)
  1077. USR=UMF(LVF+1)*(QU(LVF+1)+QLIQ(LVF+1)+QICE(LVF+1))
  1078. USR=AMIN1(USR,TRPPT)
  1079. IF(USR.LT.1.E-8)USR=TRPPT
  1080. !
  1081. ! WRITE(98,1025)KLCL,ZLCL,DTLCL,LTOP,P0(LTOP),IFLAG,
  1082. ! * TMIX-T00,PMIX,QMIX,ABE
  1083. ! WRITE(98,1030)P0(LET)/100.,P0(LTOP)/100.,VMFLCL,PLCL/100.,
  1084. ! * WLCL,CLDHGT
  1085. !
  1086. !...COMPUTE CONVECTIVE TIME SCALE(TIMEC). THE MEAN WIND AT THE LCL
  1087. !...AND MIDTROPOSPHERE IS USED.
  1088. !
  1089. WSPD(KLCL)=SQRT(U0(KLCL)*U0(KLCL)+V0(KLCL)*V0(KLCL))
  1090. WSPD(L5)=SQRT(U0(L5)*U0(L5)+V0(L5)*V0(L5))
  1091. WSPD(LTOP)=SQRT(U0(LTOP)*U0(LTOP)+V0(LTOP)*V0(LTOP))
  1092. VCONV=.5*(WSPD(KLCL)+WSPD(L5))
  1093. if (VCONV .gt. 0.) then
  1094. TIMEC=DX/VCONV
  1095. else
  1096. TIMEC=3600.
  1097. endif
  1098. ! TIMEC=DX/VCONV
  1099. TADVEC=TIMEC
  1100. TIMEC=AMAX1(1800.,TIMEC)
  1101. TIMEC=AMIN1(3600.,TIMEC)
  1102. NIC=NINT(TIMEC/DT)
  1103. TIMEC=FLOAT(NIC)*DT
  1104. !
  1105. !...COMPUTE WIND SHEAR AND PRECIPITATION EFFICIENCY.
  1106. !
  1107. ! SHSIGN = CVMGT(1.,-1.,WSPD(LTOP).GT.WSPD(KLCL))
  1108. IF(WSPD(LTOP).GT.WSPD(KLCL))THEN
  1109. SHSIGN=1.
  1110. ELSE
  1111. SHSIGN=-1.
  1112. ENDIF
  1113. VWS=(U0(LTOP)-U0(KLCL))*(U0(LTOP)-U0(KLCL))+(V0(LTOP)-V0(KLCL))* &
  1114. (V0(LTOP)-V0(KLCL))
  1115. VWS=1.E3*SHSIGN*SQRT(VWS)/(Z0(LTOP)-Z0(LCL))
  1116. PEF=1.591+VWS*(-.639+VWS*(9.53E-2-VWS*4.96E-3))
  1117. PEF=AMAX1(PEF,.2)
  1118. PEF=AMIN1(PEF,.9)
  1119. !
  1120. !...PRECIPITATION EFFICIENCY IS A FUNCTION OF THE HEIGHT OF CLOUD BASE.
  1121. !
  1122. CBH=(ZLCL-Z0(1))*3.281E-3
  1123. IF(CBH.LT.3.)THEN
  1124. RCBH=.02
  1125. ELSE
  1126. RCBH=.96729352+CBH*(-.70034167+CBH*(.162179896+CBH*(- &
  1127. 1.2569798E-2+CBH*(4.2772E-4-CBH*5.44E-6))))
  1128. ENDIF
  1129. IF(CBH.GT.25)RCBH=2.4
  1130. PEFCBH=1./(1.+RCBH)
  1131. PEFCBH=AMIN1(PEFCBH,.9)
  1132. !
  1133. !... MEAN PEF. IS USED TO COMPUTE RAINFALL.
  1134. !
  1135. PEFF=.5*(PEF+PEFCBH)
  1136. PEFF2=PEFF
  1137. ! WRITE(98,1035)PEF,PEFCBH,LC,LET,WKL,VWS
  1138. !
  1139. !*****************************************************************
  1140. ! *
  1141. ! COMPUTE DOWNDRAFT PROPERTIES *
  1142. ! *
  1143. !*****************************************************************
  1144. !
  1145. !...LET DOWNDRAFT ORIGINATE AT THE LEVEL OF MINIMUM SATURATION EQUIVALEN
  1146. !...POTENTIAL TEMPERATURE (SEQT) IN THE CLOUD LAYER, EXTEND DOWNWARD TO
  1147. !...SURFACE, OR TO THE LAYER BELOW CLOUD BASE AT WHICH ENVIR SEQT IS LES
  1148. !...THAN MIN SEQT IN THE CLOUD LAYER...LET DOWNDRAFT DETRAIN OVER A LAYE
  1149. !...OF SPECIFIED PRESSURE-DEPTH (DPDD)...
  1150. !
  1151. TDER=0.
  1152. KSTART=MAX0(KPBL,KLCL)
  1153. THTMIN=THTES(KSTART+1)
  1154. KMIN=KSTART+1
  1155. DO 104 NK=KSTART+2,LTOP-1
  1156. THTMIN=AMIN1(THTMIN,THTES(NK))
  1157. IF(THTMIN.EQ.THTES(NK))KMIN=NK
  1158. 104 CONTINUE
  1159. LFS=KMIN
  1160. IF(RATIO2(LFS).GT.0.)CALL ENVIRTHT(P0(LFS),T0(LFS),Q0(LFS), &
  1161. THETEE(LFS),0.,RL,EP2,ALIQ,BLIQ,CLIQ,DLIQ,AICE,BICE,CICE,DICE)
  1162. EQFRC(LFS)=(THTES(LFS)-THETEU(LFS))/(THETEE(LFS)-THETEU(LFS))
  1163. EQFRC(LFS)=AMAX1(EQFRC(LFS),0.)
  1164. EQFRC(LFS)=AMIN1(EQFRC(LFS),1.)
  1165. THETED(LFS)=THTES(LFS)
  1166. !
  1167. !...ESTIMATE THE EFFECT OF MELTING PRECIPITATION IN THE DOWNDRAFT...
  1168. !
  1169. IF(ML.GT.0)THEN
  1170. DTMLTD=0.5*(QU(KLCL)-QU(LTOP))*RLF/CP
  1171. ELSE
  1172. DTMLTD=0.
  1173. ENDIF
  1174. TZ(LFS)=T0(LFS)-DTMLTD
  1175. ES=ALIQ*EXP((TZ(LFS)*BLIQ-CLIQ)/(TZ(LFS)-DLIQ))
  1176. QS=EP2*ES/(P0(LFS)-ES)
  1177. QD(LFS)=EQFRC(LFS)*Q0(LFS)+(1.-EQFRC(LFS))*QU(LFS)
  1178. THTAD(LFS)=TZ(LFS)*(P00/P0(LFS))**(0.2854*(1.-0.28*QD(LFS)))
  1179. IF(QD(LFS).GE.QS)THEN
  1180. THETED(LFS)=THTAD(LFS)* &
  1181. EXP((3374.6525/TZ(LFS)-2.5403)*QS*(1.+0.81*QS))
  1182. ELSE
  1183. CALL ENVIRTHT(P0(LFS),TZ(LFS),QD(LFS),THETED(LFS),0.,RL,EP2,ALIQ, &
  1184. BLIQ,CLIQ,DLIQ,AICE,BICE,CICE,DICE)
  1185. ENDIF
  1186. DO 107 NK=1,LFS
  1187. ND=LFS-NK
  1188. IF(THETED(LFS).GT.THTES(ND).OR.ND.EQ.1)THEN
  1189. LDB=ND
  1190. !
  1191. !...IF DOWNDRAFT NEVER BECOMES NEGATIVELY BUOYANT OR IF IT
  1192. !...IS SHALLOWER 50 mb, DON'T ALLOW IT TO OCCUR AT ALL...
  1193. !
  1194. IF(NK.EQ.1.OR.(P0(LDB)-P0(LFS)).LT.50.E2)GOTO 141
  1195. ! testing ---- no downdraft
  1196. ! GOTO 141
  1197. GOTO 110
  1198. ENDIF
  1199. 107 CONTINUE
  1200. !
  1201. !...ALLOW DOWNDRAFT TO DETRAIN IN A SINGLE LAYER, BUT WITH DOWNDRAFT AIR
  1202. !...TYPICALLY FLUSHED UP INTO HIGHER LAYERS AS ALLOWED IN THE TOTAL
  1203. !...VERTICAL ADVECTION CALCULATIONS FARTHER DOWN IN THE CODE...
  1204. !
  1205. 110 DPDD=DP(LDB)
  1206. LDT=LDB
  1207. FRC=1.
  1208. DPT=0.
  1209. ! DO 115 NK=LDB,LFS
  1210. ! DPT=DPT+DP(NK)
  1211. ! IF(DPT.GT.DPDD)THEN
  1212. ! LDT=NK
  1213. ! FRC=(DPDD+DP(NK)-DPT)/DP(NK)
  1214. ! GOTO 120
  1215. ! ENDIF
  1216. ! IF(NK.EQ.LFS-1)THEN
  1217. ! LDT=NK
  1218. ! FRC=1.
  1219. ! DPDD=DPT
  1220. ! GOTO 120
  1221. ! ENDIF
  1222. !115 CONTINUE
  1223. 120 CONTINUE
  1224. !
  1225. !...TAKE A FIRST GUESS AT THE INITIAL DOWNDRAFT MASS FLUX..
  1226. !
  1227. TVD(LFS)=T0(LFS)*(1.+0.608*QES(LFS))
  1228. RDD=P0(LFS)/(R*TVD(LFS))
  1229. A1=(1.-PEFF)*AU0
  1230. DMF(LFS)=-A1*RDD
  1231. DER(LFS)=EQFRC(LFS)*DMF(LFS)
  1232. DDR(LFS)=0.
  1233. DO 140 ND=LFS-1,LDB,-1
  1234. ND1=ND+1
  1235. IF(ND.LE.LDT)THEN
  1236. DER(ND)=0.
  1237. DDR(ND)=-DMF(LDT+1)*DP(ND)*FRC/DPDD
  1238. DMF(ND)=DMF(ND1)+DDR(ND)
  1239. FRC=1.
  1240. THETED(ND)=THETED(ND1)
  1241. QD(ND)=QD(ND1)
  1242. ELSE
  1243. DER(ND)=DMF(LFS)*0.03*DP(ND)/RAD
  1244. DDR(ND)=0.
  1245. DMF(ND)=DMF(ND1)+DER(ND)
  1246. IF(RATIO2(ND).GT.0.)CALL ENVIRTHT(P0(ND),T0(ND),Q0(ND), &
  1247. THETEE(ND),0.,RL,EP2,ALIQ,BLIQ,CLIQ,DLIQ,AICE,BICE,CICE,DICE)
  1248. THETED(ND)=(THETED(ND1)*DMF(ND1)+THETEE(ND)*DER(ND))/DMF(ND)
  1249. QD(ND)=(QD(ND1)*DMF(ND1)+Q0(ND)*DER(ND))/DMF(ND)
  1250. ENDIF
  1251. 140 CONTINUE
  1252. TDER=0.
  1253. !
  1254. !...CALCULATION AN EVAPORATION RATE FOR GIVEN MASS FLUX...
  1255. !
  1256. DO 135 ND=LDB,LDT
  1257. TZ(ND)= &
  1258. TPDD(P0(ND),THETED(LDT),T0(ND),QS,QD(ND),1.0,XLV0,XLV1, &
  1259. EP2,ALIQ,BLIQ,CLIQ,DLIQ,AICE,BICE,CICE,DICE)
  1260. ES=ALIQ*EXP((TZ(ND)*BLIQ-CLIQ)/(TZ(ND)-DLIQ))
  1261. QS=EP2*ES/(P0(ND)-ES)
  1262. DSSDT=(CLIQ-BLIQ*DLIQ)/((TZ(ND)-DLIQ)*(TZ(ND)-DLIQ))
  1263. RL=XLV0-XLV1*TZ(ND)
  1264. DTMP=RL*QS*(1.-RHBC)/(CP+RL*RHBC*QS*DSSDT)
  1265. T1RH=TZ(ND)+DTMP
  1266. ES=RHBC*ALIQ*EXP((BLIQ*T1RH-CLIQ)/(T1RH-DLIQ))
  1267. QSRH=EP2*ES/(P0(ND)-ES)
  1268. !
  1269. !...CHECK TO SEE IF MIXING RATIO AT SPECIFIED RH IS LESS THAN ACTUAL
  1270. !...MIXING RATIO...IF SO, ADJUST TO GIVE ZERO EVAPORATION...
  1271. !
  1272. IF(QSRH.LT.QD(ND))THEN
  1273. QSRH=QD(ND)
  1274. ! T1RH=T1+(QS-QSRH)*RL/CP
  1275. T1RH=TZ(ND)
  1276. ENDIF
  1277. TZ(ND)=T1RH
  1278. QS=QSRH
  1279. TDER=TDER+(QS-QD(ND))*DDR(ND)
  1280. QD(ND)=QS
  1281. 135 THTAD(ND)=TZ(ND)*(P00/P0(ND))**(0.2854*(1.-0.28*QD(ND)))
  1282. !
  1283. !...IF DOWNDRAFT DOES NOT EVAPORATE ANY WATER FOR SPECIFIED RELATIVE
  1284. !...HUMIDITY, NO DOWNDRAFT IS ALLOWED...
  1285. !
  1286. 141 IF(TDER.LT.1.)THEN
  1287. ! WRITE(98,3004)I,J
  1288. 3004 FORMAT(' ','I=',I3,2X,'J=',I3)
  1289. PPTFLX=TRPPT
  1290. CPR=TRPPT
  1291. TDER=0.
  1292. CNDTNF=0.
  1293. UPDINC=1.
  1294. LDB=LFS
  1295. DO 117 NDK=1,LTOP
  1296. DMF(NDK)=0.
  1297. DER(NDK)=0.
  1298. DDR(NDK)=0.
  1299. THTAD(NDK)=0.
  1300. WD(NDK)=0.
  1301. TZ(NDK)=0.
  1302. 117 QD(NDK)=0.
  1303. AINCM2=100.
  1304. GOTO 165
  1305. ENDIF
  1306. !
  1307. !...ADJUST DOWNDRAFT MASS FLUX SO THAT EVAPORATION RATE IN DOWNDRAFT IS
  1308. !...CONSISTENT WITH PRECIPITATION EFFICIENCY RELATIONSHIP...
  1309. !
  1310. DEVDMF=TDER/DMF(LFS)
  1311. PPR=0.
  1312. PPTFLX=PEFF*USR
  1313. RCED=TRPPT-PPTFLX
  1314. !
  1315. !...PPR IS THE TOTAL AMOUNT OF PRECIPITATION THAT FALLS OUT OF THE
  1316. !...UPDRAFT FROM CLOUD BASE TO THE LFS...UPDRAFT MASS FLUX WILL BE
  1317. !...INCREASED UP TO THE LFS TO ACCOUNT FOR UPDRAFT AIR MIXING WITH
  1318. !...ENVIRONMENTAL AIR TO THE UPDRAFT, SO PPR WILL INCREASE
  1319. !...PROPORTIONATELY...
  1320. !
  1321. DO 132 NM=KLCL,LFS
  1322. 132 PPR=PPR+PPTLIQ(NM)+PPTICE(NM)
  1323. IF(LFS.GE.KLCL)THEN
  1324. DPPTDF=(1.-PEFF)*PPR*(1.-EQFRC(LFS))/UMF(LFS)
  1325. ELSE
  1326. DPPTDF=0.
  1327. ENDIF
  1328. !
  1329. !...CNDTNF IS THE AMOUNT OF CONDENSATE TRANSFERRED ALONG WITH UPDRAFT
  1330. !...MASS THE DOWNDRAFT AT THE LFS...
  1331. !
  1332. CNDTNF=(QLIQ(LFS)+QICE(LFS))*(1.-EQFRC(LFS))
  1333. DMFLFS=RCED/(DEVDMF+DPPTDF+CNDTNF)
  1334. IF(DMFLFS.GT.0.)THEN
  1335. TDER=0.
  1336. GOTO 141
  1337. ENDIF
  1338. !
  1339. !...DDINC IS THE FACTOR BY WHICH TO INCREASE THE FIRST-GUESS DOWNDRAFT
  1340. !...MASS FLUX TO SATISFY THE PRECIP EFFICIENCY RELATIONSHIP, UPDINC IS T
  1341. !...WHICH TO INCREASE THE UPDRAFT MASS FLUX BELOW THE LFS TO ACCOUNT FOR
  1342. !...TRANSFER OF MASS FROM UPDRAFT TO DOWNDRAFT...
  1343. !
  1344. ! DDINC=DMFLFS/DMF(LFS)
  1345. IF(LFS.GE.KLCL)THEN
  1346. UPDINC=(UMF(LFS)-(1.-EQFRC(LFS))*DMFLFS)/UMF(LFS)
  1347. !
  1348. !...LIMIT UPDINC TO LESS THAN OR EQUAL TO 1.5...
  1349. !
  1350. IF(UPDINC.GT.1.5)THEN
  1351. UPDINC=1.5
  1352. DMFLFS2=UMF(LFS)*(UPDINC-1.)/(EQFRC(LFS)-1.)
  1353. RCED2=DMFLFS2*(DEVDMF+DPPTDF+CNDTNF)
  1354. PPTFLX=PPTFLX+(RCED-RCED2)
  1355. PEFF2=PPTFLX/USR
  1356. RCED=RCED2
  1357. DMFLFS=DMFLFS2
  1358. ENDIF
  1359. ELSE
  1360. UPDINC=1.
  1361. ENDIF
  1362. DDINC=DMFLFS/DMF(LFS)
  1363. DO 149 NK=LDB,LFS
  1364. DMF(NK)=DMF(NK)*DDINC
  1365. DER(NK)=DER(NK)*DDINC
  1366. DDR(NK)=DDR(NK)*DDINC
  1367. 149 CONTINUE
  1368. CPR=TRPPT+PPR*(UPDINC-1.)
  1369. PPTFLX=PPTFLX+PEFF*PPR*(UPDINC-1.)
  1370. PEFF=PEFF2
  1371. TDER=TDER*DDINC
  1372. !
  1373. !...ADJUST UPDRAFT MASS FLUX, MASS DETRAINMENT RATE, AND LIQUID WATER AN
  1374. ! DETRAINMENT RATES TO BE CONSISTENT WITH THE TRANSFER OF THE ESTIMATE
  1375. ! FROM THE UPDRAFT TO THE DOWNDRAFT AT THE LFS...
  1376. !
  1377. DO 155 NK=LC,LFS
  1378. UMF(NK)=UMF(NK)*UPDINC
  1379. UDR(NK)=UDR(NK)*UPDINC
  1380. UER(NK)=UER(NK)*UPDINC
  1381. PPTLIQ(NK)=PPTLIQ(NK)*UPDINC
  1382. PPTICE(NK)=PPTICE(NK)*UPDINC
  1383. DETLQ(NK)=DETLQ(NK)*UPDINC
  1384. 155 DETIC(NK)=DETIC(NK)*UPDINC
  1385. !
  1386. !...ZERO OUT THE ARRAYS FOR DOWNDRAFT DATA AT LEVELS ABOVE AND BELOW THE
  1387. !...DOWNDRAFT...
  1388. !
  1389. IF(LDB.GT.1)THEN
  1390. DO 156 NK=1,LDB-1
  1391. DMF(NK)=0.
  1392. DER(NK)=0.
  1393. DDR(NK)=0.
  1394. WD(NK)=0.
  1395. TZ(NK)=0.
  1396. QD(NK)=0.
  1397. THTAD(NK)=0.
  1398. 156 CONTINUE
  1399. ENDIF
  1400. DO 157 NK=LFS+1,KX
  1401. DMF(NK)=0.
  1402. DER(NK)=0.
  1403. DDR(NK)=0.
  1404. WD(NK)=0.
  1405. TZ(NK)=0.
  1406. QD(NK)=0.
  1407. THTAD(NK)=0.
  1408. 157 CONTINUE
  1409. DO 158 NK=LDT+1,LFS-1
  1410. TZ(NK)=0.
  1411. QD(NK)=0.
  1412. 158 CONTINUE
  1413. !
  1414. !
  1415. !...SET LIMITS ON THE UPDRAFT AND DOWNDRAFT MASS FLUXES SO THAT THE
  1416. ! INFLOW INTO CONVECTIVE DRAFTS FROM A GIVEN LAYER IS NO MORE THAN
  1417. ! IS AVAILABLE IN THAT LAYER INITIALLY...
  1418. !
  1419. 165 AINCMX=1000.
  1420. LMAX=MAX0(KLCL,LFS)
  1421. DO 166 NK=LC,LMAX
  1422. IF((UER(NK)-DER(NK)).GT.0.)AINCM1=EMS(NK)/((UER(NK)-DER(NK))* &
  1423. TIMEC)
  1424. AINCMX=AMIN1(AINCMX,AINCM1)
  1425. 166 CONTINUE
  1426. AINC=1.
  1427. IF(AINCMX.LT.AINC)AINC=AINCMX
  1428. !
  1429. !...SAVE THE RELEVENT VARIABLES FOR A UNIT UPDRFT AND DOWNDRFT...THEY
  1430. !...WILL ITERATIVELY ADJUSTED BY THE FACTOR AINC TO SATISFY THE
  1431. !...STABILIZATION CLOSURE...
  1432. !
  1433. NCOUNT=0
  1434. TDER2=TDER
  1435. PPTFL2=PPTFLX
  1436. DO 170 NK=1,LTOP
  1437. DETLQ2(NK)=DETLQ(NK)
  1438. DETIC2(NK)=DETIC(NK)
  1439. UDR2(NK)=UDR(NK)
  1440. UER2(NK)=UER(NK)
  1441. DDR2(NK)=DDR(NK)
  1442. DER2(NK)=DER(NK)
  1443. UMF2(NK)=UMF(NK)
  1444. DMF2(NK)=DMF(NK)
  1445. 170 CONTINUE
  1446. FABE=1.
  1447. STAB=0.95
  1448. NOITR=0
  1449. IF(AINC/AINCMX.GT.0.999)THEN
  1450. NCOUNT=0
  1451. GOTO 255
  1452. ENDIF
  1453. ISTOP=0
  1454. 175 NCOUNT=NCOUNT+1
  1455. !
  1456. !*****************************************************************
  1457. ! *
  1458. ! COMPUTE PROPERTIES FOR COMPENSATIONAL SUBSIDENCE *
  1459. ! *
  1460. !*****************************************************************
  1461. !
  1462. !...DETERMINE OMEGA VALUE NECESSARY AT TOP AND BOTTOM OF EACH LAYER TO
  1463. !...SATISFY MASS CONTINUITY...
  1464. !
  1465. 185 CONTINUE
  1466. DTT=TIMEC
  1467. DO 200 NK=1,LTOP
  1468. DOMGDP(NK)=-(UER(NK)-DER(NK)-UDR(NK)-DDR(NK))*EMSD(NK)
  1469. IF(NK.GT.1)THEN
  1470. OMG(NK)=OMG(NK-1)-DP(NK-1)*DOMGDP(NK-1)
  1471. DTT1=0.75*DP(NK-1)/(ABS(OMG(NK))+1.E-10)
  1472. DTT=AMIN1(DTT,DTT1)
  1473. ENDIF
  1474. 200 CONTINUE
  1475. DO 488 NK=1,LTOP
  1476. THPA(NK)=THTA0(NK)
  1477. QPA(NK)=Q0(NK)
  1478. NSTEP=NINT(TIMEC/DTT+1)
  1479. DTIME=TIMEC/FLOAT(NSTEP)
  1480. FXM(NK)=OMG(NK)*DXSQ/G
  1481. 488 CONTINUE
  1482. !
  1483. !...DO AN UPSTREAM/FORWARD-IN-TIME ADVECTION OF THETA, QV...
  1484. !
  1485. DO 495 NTC=1,NSTEP
  1486. !
  1487. !...ASSIGN THETA AND Q VALUES AT THE TOP AND BOTTOM OF EACH LAYER BASED
  1488. !...SIGN OF OMEGA...
  1489. !
  1490. DO 493 NK=1,LTOP
  1491. THFXTOP(NK)=0.
  1492. THFXBOT(NK)=0.
  1493. QFXTOP(NK)=0.
  1494. 493 QFXBOT(NK)=0.
  1495. DO 494 NK=2,LTOP
  1496. IF(OMG(NK).LE.0.)THEN
  1497. THFXBOT(NK)=-FXM(NK)*THPA(NK-1)
  1498. QFXBOT(NK)=-FXM(NK)*QPA(NK-1)
  1499. THFXTOP(NK-1)=THFXTOP(NK-1)-THFXBOT(NK)
  1500. QFXTOP(NK-1)=QFXTOP(NK-1)-QFXBOT(NK)
  1501. ELSE
  1502. THFXBOT(NK)=-FXM(NK)*THPA(NK)
  1503. QFXBOT(NK)=-FXM(NK)*QPA(NK)
  1504. THFXTOP(NK-1)=THFXTOP(NK-1)-THFXBOT(NK)
  1505. QFXTOP(NK-1)=QFXTOP(NK-1)-QFXBOT(NK)
  1506. ENDIF
  1507. 494 CONTINUE
  1508. !
  1509. !...UPDATE THE THETA AND QV VALUES AT EACH LEVEL..
  1510. !
  1511. DO 492 NK=1,LTOP
  1512. THPA(NK)=THPA(NK)+(THFXBOT(NK)+UDR(NK)*THTAU(NK)+DDR(NK)* &
  1513. THTAD(NK)+THFXTOP(NK)-(UER(NK)-DER(NK))*THTA0(NK))* &
  1514. DTIME*EMSD(NK)
  1515. QPA(NK)=QPA(NK)+(QFXBOT(NK)+UDR(NK)*QDT(NK)+DDR(NK)*QD(NK)+ &
  1516. QFXTOP(NK)-(UER(NK)-DER(NK))*Q0(NK))*DTIME*EMSD(NK)
  1517. 492 CONTINUE
  1518. 495 CONTINUE
  1519. DO 498 NK=1,LTOP
  1520. THTAG(NK)=THPA(NK)
  1521. QG(NK)=QPA(NK)
  1522. 498 CONTINUE
  1523. !
  1524. !...CHECK TO SEE IF MIXING RATIO DIPS BELOW ZERO ANYWHERE; IF SO,
  1525. !...BORROW MOISTURE FROM ADJACENT LAYERS TO BRING IT BACK UP ABOVE ZERO.
  1526. !
  1527. DO 499 NK=1,LTOP
  1528. IF(QG(NK).LT.0.)THEN
  1529. IF(NK.EQ.1)THEN
  1530. CALL wrf_error_fatal ( 'module_cu_kf.F: problem with kf scheme: qg = 0 at the surface' )
  1531. ENDIF
  1532. NK1=NK+1
  1533. IF(NK.EQ.LTOP)NK1=KLCL
  1534. TMA=QG(NK1)*EMS(NK1)
  1535. TMB=QG(NK-1)*EMS(NK-1)
  1536. TMM=(QG(NK)-1.E-9)*EMS(NK)
  1537. BCOEFF=-TMM/((TMA*TMA)/TMB+TMB)
  1538. ACOEFF=BCOEFF*TMA/TMB
  1539. TMB=TMB*(1.-BCOEFF)
  1540. TMA=TMA*(1.-ACOEFF)
  1541. IF(NK.EQ.LTOP)THEN
  1542. QVDIFF=(QG(NK1)-TMA*EMSD(NK1))*100./QG(NK1)
  1543. IF(ABS(QVDIFF).GT.1.)THEN
  1544. PRINT *,'--WARNING-- CLOUD BASE WATER VAPOR CHANGES BY ', &
  1545. QVDIFF, &
  1546. ' PERCENT WHEN MOISTURE IS BORROWED TO PREVENT NEG VALUES', &
  1547. ' IN KAIN-FRITSCH'
  1548. ENDIF
  1549. ENDIF
  1550. QG(NK)=1.E-9
  1551. QG(NK1)=TMA*EMSD(NK1)
  1552. QG(NK-1)=TMB*EMSD(NK-1)
  1553. ENDIF
  1554. 499 CONTINUE
  1555. TOPOMG=(UDR(LTOP)-UER(LTOP))*DP(LTOP)*EMSD(LTOP)
  1556. IF(ABS(TOPOMG-OMG(LTOP)).GT.1.E-3)THEN
  1557. ! WRITE(98,*)'ERROR: MASS DOES NOT BALANCE IN KF SCHEME;'
  1558. ! * ,'TOPOMG, OMG =',TOPOMG,OMG(LTOP)
  1559. WRITE(6,*)'ERROR: MASS DOES NOT BALANCE IN KF SCHEME;' &
  1560. ,'TOPOMG, OMG =',TOPOMG,OMG(LTOP)
  1561. ISTOP=1
  1562. GOTO 265
  1563. ENDIF
  1564. !
  1565. !...CONVERT THETA TO T...
  1566. !
  1567. ! PAY ATTENTION ...
  1568. !
  1569. DO 230 NK=1,LTOP
  1570. EXN(NK)=(P00/P0(NK))**(0.2854*(1.-0.28*QG(NK)))
  1571. TG(NK)=THTAG(NK)/EXN(NK)
  1572. TVG(NK)=TG(NK)*(1.+0.608*QG(NK))
  1573. 230 CONTINUE
  1574. !
  1575. !*******************************************************************
  1576. ! *
  1577. ! COMPUTE NEW CLOUD AND CHANGE IN AVAILABLE BUOYANT ENERGY. *
  1578. ! *
  1579. !*******************************************************************
  1580. !
  1581. !...THE FOLLOWING COMPUTATIONS ARE SIMILAR TO THAT FOR UPDRAFT
  1582. !
  1583. THMIX=0.
  1584. QMIX=0.
  1585. PMIX=0.
  1586. DO 217 NK=LC,KPBL
  1587. ROCPQ=0.2854*(1.-0.28*QG(NK))
  1588. THMIX=THMIX+DP(NK)*TG(NK)*(P00/P0(NK))**ROCPQ
  1589. QMIX=QMIX+DP(NK)*QG(NK)
  1590. 217 PMIX=PMIX+DP(NK)*P0(NK)
  1591. THMIX=THMIX/DPTHMX
  1592. QMIX=QMIX/DPTHMX
  1593. PMIX=PMIX/DPTHMX
  1594. ROCPQ=0.2854*(1.-0.28*QMIX)
  1595. TMIX=THMIX*(PMIX/P00)**ROCPQ
  1596. ES=ALIQ*EXP((TMIX*BLIQ-CLIQ)/(TMIX-DLIQ))
  1597. QS=EP2*ES/(PMIX-ES)
  1598. !
  1599. !...REMOVE SUPERSATURATION FOR DIAGNOSTIC PURPOSES, IF NECESSARY...
  1600. !
  1601. IF(QMIX.GT.QS)THEN
  1602. RL=XLV0-XLV1*TMIX
  1603. CPM=CP*(1.+0.887*QMIX)
  1604. DSSDT=QS*(CLIQ-BLIQ*DLIQ)/((TMIX-DLIQ)*(TMIX-DLIQ))
  1605. DQ=(QMIX-QS)/(1.+RL*DSSDT/CPM)
  1606. TMIX=TMIX+RL/CP*DQ
  1607. QMIX=QMIX-DQ
  1608. ROCPQ=0.2854*(1.-0.28*QMIX)
  1609. THMIX=TMIX*(P00/PMIX)**ROCPQ
  1610. TLCL=TMIX
  1611. PLCL=PMIX
  1612. ELSE
  1613. QMIX=AMAX1(QMIX,0.)
  1614. EMIX=QMIX*PMIX/(EP2+QMIX)
  1615. TLOG=ALOG(EMIX/ALIQ)
  1616. TDPT=(CLIQ-DLIQ*TLOG)/(BLIQ-TLOG)
  1617. TLCL=TDPT-(.212+1.571E-3*(TDPT-T00)-4.36E-4*(TMIX-T00))*(TMIX- &
  1618. TDPT)
  1619. TLCL=AMIN1(TLCL,TMIX)
  1620. CPORQ=1./ROCPQ
  1621. PLCL=P00*(TLCL/THMIX)**CPORQ
  1622. ENDIF
  1623. TVLCL=TLCL*(1.+0.608*QMIX)
  1624. DO 235 NK=LC,KL
  1625. KLCL=NK
  1626. 235 IF(PLCL.GE.P0(NK))GOTO 240
  1627. 240 K=KLCL-1
  1628. DLP=ALOG(PLCL/P0(K))/ALOG(P0(KLCL)/P0(K))
  1629. !
  1630. !...ESTIMATE ENVIRONMENTAL TEMPERATURE AND MIXING RATIO AT THE LCL...
  1631. !
  1632. TENV=TG(K)+(TG(KLCL)-TG(K))*DLP
  1633. QENV=QG(K)+(QG(KLCL)-QG(K))*DLP
  1634. TVEN=TENV*(1.+0.608*QENV)
  1635. TVBAR=0.5*(TVG(K)+TVEN)
  1636. ! ZLCL=Z0(K)+R*TVBAR*ALOG(P0(K)/PLCL)/G
  1637. ZLCL=Z0(K)+(Z0(KLCL)-Z0(K))*DLP
  1638. TVAVG=0.5*(TVEN+TG(KLCL)*(1.+0.608*QG(KLCL)))
  1639. PLCL=P0(KLCL)*EXP(G/(R*TVAVG)*(Z0(KLCL)-ZLCL))
  1640. THETEU(K)=TMIX*(1.E5/PMIX)**(0.2854*(1.-0.28*QMIX))* &
  1641. EXP((3374.6525/TLCL-2.5403)*QMIX*(1.+0.81*QMIX))
  1642. ES=ALIQ*EXP((TENV*BLIQ-CLIQ)/(TENV-DLIQ))
  1643. QESE=EP2*ES/(PLCL-ES)
  1644. THTESG(K)=TENV*(1.E5/PLCL)**(0.2854*(1.-0.28*QESE))* &
  1645. EXP((3374.6525/TENV-2.5403)*QESE*(1.+0.81*QESE))
  1646. !
  1647. !...COMPUTE ADJUSTED ABE(ABEG).
  1648. !
  1649. ABEG=0.
  1650. THTUDL=THETEU(K)
  1651. DO 245 NK=K,LTOPM1
  1652. NK1=NK+1
  1653. ES=ALIQ*EXP((TG(NK1)*BLIQ-CLIQ)/(TG(NK1)-DLIQ))
  1654. QESE=EP2*ES/(P0(NK1)-ES)
  1655. THTESG(NK1)=TG(NK1)*(1.E5/P0(NK1))**(0.2854*(1.-0.28*QESE))* &
  1656. EXP((3374.6525/TG(NK1)-2.5403)*QESE*(1.+0.81*QESE) &
  1657. )
  1658. ! DZZ=CVMGT(Z0(KLCL)-ZLCL,DZA(NK),NK.EQ.K)
  1659. IF(NK.EQ.K)THEN
  1660. DZZ=Z0(KLCL)-ZLCL
  1661. ELSE
  1662. DZZ=DZA(NK)
  1663. ENDIF
  1664. BE=((2.*THTUDL)/(THTESG(NK1)+THTESG(NK))-1.)*DZZ
  1665. 245 IF(BE.GT.0.)ABEG=ABEG+BE*G
  1666. !
  1667. !...ASSUME AT LEAST 90% OF CAPE (ABE) IS REMOVED BY CONVECTION DURING
  1668. !...THE PERIOD TIMEC...
  1669. !
  1670. IF(NOITR.EQ.1)THEN
  1671. ! WRITE(98,1060)FABE
  1672. GOTO 265
  1673. ENDIF
  1674. DABE=AMAX1(ABE-ABEG,0.1*ABE)
  1675. FABE=ABEG/(ABE+1.E-8)
  1676. IF(FABE.GT.1.)THEN
  1677. ! WRITE(98,*)'UPDRAFT/DOWNDRAFT COUPLET INCREASES CAPE AT THIS '
  1678. ! *,'GRID POINT; NO CONVECTION ALLOWED!'
  1679. GOTO 325
  1680. ENDIF
  1681. IF(NCOUNT.NE.1)THEN
  1682. DFDA=(FABE-FABEOLD)/(AINC-AINCOLD)
  1683. IF(DFDA.GT.0.)THEN
  1684. NOITR=1
  1685. AINC=AINCOLD
  1686. GOTO 255
  1687. ENDIF
  1688. ENDIF
  1689. AINCOLD=AINC
  1690. FABEOLD=FABE
  1691. IF(AINC/AINCMX.GT.0.999.AND.FABE.GT.1.05-STAB)THEN
  1692. ! WRITE(98,1055)FABE
  1693. GOTO 265
  1694. ENDIF
  1695. IF(FABE.LE.1.05-STAB.AND.FABE.GE.0.95-STAB)GOTO 265
  1696. IF(NCOUNT.GT.10)THEN
  1697. ! WRITE(98,1060)FABE
  1698. GOTO 265
  1699. ENDIF
  1700. !
  1701. !...IF MORE THAN 10% OF THE ORIGINAL CAPE REMAINS, INCREASE THE
  1702. !...CONVECTIVE MASS FLUX BY THE FACTOR AINC:
  1703. !
  1704. IF(FABE.EQ.0.)THEN
  1705. AINC=AINC*0.5
  1706. ELSE
  1707. AINC=AINC*STAB*ABE/(DABE+1.E-8)
  1708. ENDIF
  1709. 255 AINC=AMIN1(AINCMX,AINC)
  1710. !...IF AINC BECOMES VERY SMALL, EFFECTS OF CONVECTION
  1711. !...WILL BE MINIMAL SO JUST IGNORE IT...
  1712. IF(AINC.LT.0.05)GOTO 325
  1713. ! AINC=AMAX1(AINC,0.05)
  1714. TDER=TDER2*AINC
  1715. PPTFLX=PPTFL2*AINC
  1716. ! WRITE(98,1080)LFS,LDB,LDT,TIMEC,NSTEP,NCOUNT,FABEOLD,AINCOLD
  1717. DO 260 NK=1,LTOP
  1718. UMF(NK)=UMF2(NK)*AINC
  1719. DMF(NK)=DMF2(NK)*AINC
  1720. DETLQ(NK)=DETLQ2(NK)*AINC
  1721. DETIC(NK)=DETIC2(NK)*AINC
  1722. UDR(NK)=UDR2(NK)*AINC
  1723. UER(NK)=UER2(NK)*AINC
  1724. DER(NK)=DER2(NK)*AINC
  1725. DDR(NK)=DDR2(NK)*AINC
  1726. 260 CONTINUE
  1727. !
  1728. !...GO BACK UP FOR ANOTHER ITERATION...
  1729. !
  1730. GOTO 175
  1731. 265 CONTINUE
  1732. !
  1733. !...CLEAN THINGS UP, CALCULATE CONVECTIVE FEEDBACK TENDENCIES FOR THIS
  1734. !...GRID POINT...
  1735. !
  1736. !...COMPUTE HYDROMETEOR TENDENCIES AS IS DONE FOR T, QV...
  1737. !
  1738. !...FRC2 IS THE FRACTION OF TOTAL CONDENSATE
  1739. !...GENERATED THAT GOES INTO PRECIPITIATION
  1740. FRC2=PPTFLX/(CPR*AINC)
  1741. DO 270 NK=1,LTOP
  1742. QLPA(NK)=QL0(NK)
  1743. QIPA(NK)=QI0(NK)
  1744. QRPA(NK)=QR0(NK)
  1745. QSPA(NK)=QS0(NK)
  1746. RAINFB(NK)=PPTLIQ(NK)*AINC*FBFRC*FRC2
  1747. SNOWFB(NK)=PPTICE(NK)*AINC*FBFRC*FRC2
  1748. 270 CONTINUE
  1749. DO 290 NTC=1,NSTEP
  1750. !
  1751. !...ASSIGN HYDROMETEORS CONCENTRATIONS AT THE TOP AND BOTTOM OF EACH
  1752. !...LAYER BASED ON THE SIGN OF OMEGA...
  1753. !
  1754. DO 275 NK=1,LTOP
  1755. QLFXIN(NK)=0.
  1756. QLFXOUT(NK)=0.
  1757. QIFXIN(NK)=0.
  1758. QIFXOUT(NK)=0.
  1759. QRFXIN(NK)=0.
  1760. QRFXOUT(NK)=0.
  1761. QSFXIN(NK)=0.
  1762. QSFXOUT(NK)=0.
  1763. 275 CONTINUE
  1764. DO 280 NK=2,LTOP
  1765. IF(OMG(NK).LE.0.)THEN
  1766. QLFXIN(NK)=-FXM(NK)*QLPA(NK-1)
  1767. QIFXIN(NK)=-FXM(NK)*QIPA(NK-1)
  1768. QRFXIN(NK)=-FXM(NK)*QRPA(NK-1)
  1769. QSFXIN(NK)=-FXM(NK)*QSPA(NK-1)
  1770. QLFXOUT(NK-1)=QLFXOUT(NK-1)+QLFXIN(NK)
  1771. QIFXOUT(NK-1)=QIFXOUT(NK-1)+QIFXIN(NK)
  1772. QRFXOUT(NK-1)=QRFXOUT(NK-1)+QRFXIN(NK)
  1773. QSFXOUT(NK-1)=QSFXOUT(NK-1)+QSFXIN(NK)
  1774. ELSE
  1775. QLFXOUT(NK)=FXM(NK)*QLPA(NK)
  1776. QIFXOUT(NK)=FXM(NK)*QIPA(NK)
  1777. QRFXOUT(NK)=FXM(NK)*QRPA(NK)
  1778. QSFXOUT(NK)=FXM(NK)*QSPA(NK)
  1779. QLFXIN(NK-1)=QLFXIN(NK-1)+QLFXOUT(NK)
  1780. QIFXIN(NK-1)=QIFXIN(NK-1)+QIFXOUT(NK)
  1781. QRFXIN(NK-1)=QRFXIN(NK-1)+QRFXOUT(NK)
  1782. QSFXIN(NK-1)=QSFXIN(NK-1)+QSFXOUT(NK)
  1783. ENDIF
  1784. 280 CONTINUE
  1785. !
  1786. !...UPDATE THE HYDROMETEOR CONCENTRATION VALUES AT EACH LEVEL...
  1787. !
  1788. DO 285 NK=1,LTOP
  1789. QLPA(NK)=QLPA(NK)+(QLFXIN(NK)+DETLQ(NK)-QLFXOUT(NK))*DTIME* &
  1790. EMSD(NK)
  1791. QIPA(NK)=QIPA(NK)+(QIFXIN(NK)+DETIC(NK)-QIFXOUT(NK))*DTIME* &
  1792. EMSD(NK)
  1793. QRPA(NK)=QRPA(NK)+(QRFXIN(NK)+QLQOUT(NK)*UDR(NK)-QRFXOUT(NK) &
  1794. +RAINFB(NK))*DTIME*EMSD(NK)
  1795. QSPA(NK)=QSPA(NK)+(QSFXIN(NK)+QICOUT(NK)*UDR(NK)-QSFXOUT(NK) &
  1796. +SNOWFB(NK))*DTIME*EMSD(NK)
  1797. 285 CONTINUE
  1798. 290 CONTINUE
  1799. DO 295 NK=1,LTOP
  1800. QLG(NK)=QLPA(NK)
  1801. QIG(NK)=QIPA(NK)
  1802. QRG(NK)=QRPA(NK)
  1803. QSG(NK)=QSPA(NK)
  1804. 295 CONTINUE
  1805. ! WRITE(98,1080)LFS,LDB,LDT,TIMEC,NSTEP,NCOUNT,FABE,AINC
  1806. !
  1807. !...SEND FINAL PARAMETERIZED VALUES TO OUTPUT FILES...
  1808. !
  1809. IF(ISTOP.EQ.1)THEN
  1810. WRITE(6,1070)' P ',' DP ',' DT K/D ',' DR K/D ',' OMG ', &
  1811. ' DOMGDP ',' UMF ',' UER ',' UDR ',' DMF ',' DER ' &
  1812. ,' DDR ',' EMS ',' W0 ',' DETLQ ',' DETIC '
  1813. DO 300 K=LTOP,1,-1
  1814. DTT=(TG(K)-T0(K))*86400./TIMEC
  1815. RL=XLV0-XLV1*TG(K)
  1816. DR=-(QG(K)-Q0(K))*RL*86400./(TIMEC*CP)
  1817. UDFRC=UDR(K)*TIMEC*EMSD(K)
  1818. UEFRC=UER(K)*TIMEC*EMSD(K)
  1819. DDFRC=DDR(K)*TIMEC*EMSD(K)
  1820. DEFRC=-DER(K)*TIMEC*EMSD(K)
  1821. WRITE (6,1075)P0(K)/100.,DP(K)/100.,DTT,DR,OMG(K),DOMGDP(K)* &
  1822. 1.E4,UMF(K)/1.E6,UEFRC,UDFRC,DMF(K)/1.E6,DEFRC &
  1823. ,DDFRC,EMS(K)/1.E11,W0AVG1D(K)*1.E2,DETLQ(K) &
  1824. *TIMEC*EMSD(K)*1.E3,DETIC(K)*TIMEC*EMSD(K)* &
  1825. 1.E3
  1826. 300 CONTINUE
  1827. WRITE(6,1085)'K','P','Z','T0','TG','DT','TU','TD','Q0','QG', &
  1828. 'DQ','QU','QD','QLG','QIG','QRG','QSG','RH0','RHG'
  1829. DO 305 K=KX,1,-1
  1830. DTT=TG(K)-T0(K)
  1831. TUC=TU(K)-T00
  1832. IF(K.LT.LC.OR.K.GT.LTOP)TUC=0.
  1833. TDC=TZ(K)-T00
  1834. IF((K.LT.LDB.OR.K.GT.LDT).AND.K.NE.LFS)TDC=0.
  1835. ES=ALIQ*EXP((BLIQ*TG(K)-CLIQ)/(TG(K)-DLIQ))
  1836. QGS=ES*EP2/(P0(K)-ES)
  1837. RH0=Q0(K)/QES(K)
  1838. RHG=QG(K)/QGS
  1839. WRITE (6,1090)K,P0(K)/100.,Z0(K),T0(K)-T00,TG(K)-T00,DTT,TUC &
  1840. ,TDC,Q0(K)*1000.,QG(K)*1000.,(QG(K)-Q0(K))* &
  1841. 1000.,QU(K)*1000.,QD(K)*1000.,QLG(K)*1000., &
  1842. QIG(K)*1000.,QRG(K)*1000.,QSG(K)*1000.,RH0,RHG
  1843. 305 CONTINUE
  1844. !
  1845. !...IF CALCULATIONS ABOVE SHOW AN ERROR IN THE MASS BUDGET, PRINT OUT A
  1846. !...TO BE USED LATER FOR DIAGNOSTIC PURPOSES, THEN ABORT RUN...
  1847. !
  1848. IF(ISTOP.EQ.1)THEN
  1849. DO 310 K=1,KX
  1850. WRITE ( wrf_err_message , 1115 ) &
  1851. Z0(K),P0(K)/100.,T0(K)-273.16,Q0(K)*1000., &
  1852. U0(K),V0(K),DP(K)/100.,W0AVG1D(K)
  1853. CALL wrf_message ( TRIM( wrf_err_message ) )
  1854. 310 CONTINUE
  1855. CALL wrf_error_fatal ( 'module_cu_kf.F: KAIN-FRITSCH' )
  1856. ENDIF
  1857. ENDIF
  1858. CNDTNF=(1.-EQFRC(LFS))*(QLIQ(LFS)+QICE(LFS))*DMF(LFS)
  1859. ! WRITE(98,1095)CPR*AINC,TDER+PPTFLX+CNDTNF
  1860. !
  1861. ! EVALUATE MOISTURE BUDGET...
  1862. !
  1863. QINIT=0.
  1864. QFNL=0.
  1865. DPT=0.
  1866. DO 315 NK=1,LTOP
  1867. DPT=DPT+DP(NK)
  1868. QINIT=QINIT+Q0(NK)*EMS(NK)
  1869. QFNL=QFNL+QG(NK)*EMS(NK)
  1870. QFNL=QFNL+(QLG(NK)+QIG(NK)+QRG(NK)+QSG(NK))*EMS(NK)
  1871. 315 CONTINUE
  1872. QFNL=QFNL+PPTFLX*TIMEC*(1.-FBFRC)
  1873. ERR2=(QFNL-QINIT)*100./QINIT
  1874. ! WRITE(98,1110)QINIT,QFNL,ERR2
  1875. ! IF(ABS(ERR2).GT.0.05)STOP 'QVERR'
  1876. IF(ABS(ERR2).GT.0.05)CALL wrf_error_fatal( 'module_cu_kf.F: QVERR' )
  1877. RELERR=ERR2*QINIT/(PPTFLX*TIMEC+1.E-10)
  1878. ! WRITE(98,1120)RELERR
  1879. ! WRITE(98,*)'TDER, CPR, USR, TRPPT =',
  1880. ! *TDER,CPR*AINC,USR*AINC,TRPPT*AINC
  1881. !
  1882. !...FEEDBACK TO RESOLVABLE SCALE TENDENCIES.
  1883. !
  1884. !...IF THE ADVECTIVE TIME PERIOD (TADVEC) IS LESS THAN SPECIFIED MINIMUM
  1885. !...TIMEC, ALLOW FEEDBACK TO OCCUR ONLY DURING TADVEC...
  1886. !
  1887. IF(TADVEC.LT.TIMEC)NIC=NINT(TADVEC/DT)
  1888. NCA(I,J)=FLOAT(NIC)*DT
  1889. DO 320 K=1,KX
  1890. ! IF(IMOIST.NE.2)THEN
  1891. !
  1892. !...IF HYDROMETEORS ARE NOT ALLOWED, THEY MUST BE EVAPORATED OR SUBLIMAT
  1893. !...AND FED BACK AS VAPOR, ALONG WITH ASSOCIATED CHANGES IN TEMPERATURE.
  1894. !...NOTE: THIS WILL INTRODUCE CHANGES IN THE CONVECTIVE TEMPERATURE AND
  1895. !...WATER VAPOR FEEDBACK TENDENCIES AND MAY LEAD TO SUPERSATURATED VALUE
  1896. !...OF QG...
  1897. !
  1898. ! RLC=XLV0-XLV1*TG(K)
  1899. ! RLS=XLS0-XLS1*TG(K)
  1900. ! CPM=CP*(1.+0.887*QG(K))
  1901. ! TG(K)=TG(K)-(RLC*(QLG(K)+QRG(K))+RLS*(QIG(K)+QSG(K)))/CPM
  1902. ! QG(K)=QG(K)+(QLG(K)+QRG(K)+QIG(K)+QSG(K))
  1903. ! DQCDT(K)=0.
  1904. ! DQIDT(K)=0.
  1905. ! DQRDT(K)=0.
  1906. ! DQSDT(K)=0.
  1907. ! ELSE
  1908. IF(.NOT. qi_flag .and. warm_rain)THEN
  1909. !
  1910. !...IF ICE PHASE IS NOT ALLOWED, MELT ALL FROZEN HYDROMETEORS...
  1911. !
  1912. CPM=CP*(1.+0.887*QG(K))
  1913. TG(K)=TG(K)-(QIG(K)+QSG(K))*RLF/CPM
  1914. DQCDT(K)=(QLG(K)+QIG(K)-QL0(K)-QI0(K))/TIMEC
  1915. DQIDT(K)=0.
  1916. DQRDT(K)=(QRG(K)+QSG(K)-QR0(K)-QS0(K))/TIMEC
  1917. DQSDT(K)=0.
  1918. ELSEIF(.NOT. qi_flag .and. .not. warm_rain)THEN
  1919. !
  1920. !...IF ICE PHASE IS ALLOWED, BUT MIXED PHASE IS NOT, MELT FROZEN HYDROME
  1921. !...BELOW THE MELTING LEVEL, FREEZE LIQUID WATER ABOVE THE MELTING LEVEL
  1922. !
  1923. CPM=CP*(1.+0.887*QG(K))
  1924. IF(K.LE.ML)THEN
  1925. TG(K)=TG(K)-(QIG(K)+QSG(K))*RLF/CPM
  1926. ELSEIF(K.GT.ML)THEN
  1927. TG(K)=TG(K)+(QLG(K)+QRG(K))*RLF/CPM
  1928. ENDIF
  1929. DQCDT(K)=(QLG(K)+QIG(K)-QL0(K)-QI0(K))/TIMEC
  1930. DQIDT(K)=0.
  1931. DQRDT(K)=(QRG(K)+QSG(K)-QR0(K)-QS0(K))/TIMEC
  1932. DQSDT(K)=0.
  1933. ELSEIF(qi_flag) THEN
  1934. !
  1935. !...IF MIXED PHASE HYDROMETEORS ARE ALLOWED, FEED BACK CONVECTIVE
  1936. !...TENDENCY OF HYDROMETEORS DIRECTLY...
  1937. !
  1938. DQCDT(K)=(QLG(K)-QL0(K))/TIMEC
  1939. DQIDT(K)=(QIG(K)-QI0(K))/TIMEC
  1940. DQRDT(K)=(QRG(K)-QR0(K))/TIMEC
  1941. IF (qs_flag ) THEN
  1942. DQSDT(K)=(QSG(K)-QS0(K))/TIMEC
  1943. ELSE
  1944. DQIDT(K)=DQIDT(K)+(QSG(K)-QS0(K))/TIMEC
  1945. ENDIF
  1946. ELSE
  1947. CALL wrf_error_fatal ( 'module_cu_kf: THIS COMBINATION OF IMOIST, IICE NOT ALLOWED' )
  1948. ENDIF
  1949. ! ENDIF
  1950. DTDT(K)=(TG(K)-T0(K))/TIMEC
  1951. DQDT(K)=(QG(K)-Q0(K))/TIMEC
  1952. 320 CONTINUE
  1953. ! RAINCV is in the unit of mm
  1954. PRATEC(I,J)=PPTFLX*(1.-FBFRC)/DXSQ
  1955. RAINCV(I,J)=DT*PRATEC(I,J)
  1956. RNC=RAINCV(I,J)*NIC
  1957. ! WRITE(98,909)RNC
  1958. 909 FORMAT(' CONVECTIVE RAINFALL =',F8.4,' CM')
  1959. 325 CONTINUE
  1960. 1000 FORMAT(' ',10A8)
  1961. 1005 FORMAT(' ',F6.0,2X,F6.4,2X,F7.3,1X,F6.4,2X,4(F6.3,2X),2(F7.3,1X))
  1962. 1010 FORMAT(' ',' VERTICAL VELOCITY IS NEGATIVE AT ',F4.0,' MB')
  1963. 1015 FORMAT(' ','ALL REMAINING MASS DETRAINS BELOW ',F4.0,' MB')
  1964. 1025 FORMAT(5X,' KLCL=',I2,' ZLCL=',F7.1,'M', &
  1965. ' DTLCL=',F5.2,' LTOP=',I2,' P0(LTOP)=',-2PF5.1,'MB FRZ LV=', &
  1966. I2,' TMIX=',0PF4.1,1X,'PMIX=',-2PF6.1,' QMIX=',3PF5.1, &
  1967. ' CAPE=',0PF7.1)
  1968. 1030 FORMAT(' ',' P0(LET) = ',F6.1,' P0(LTOP) = ',F6.1,' VMFLCL =', &
  1969. E12.3,' PLCL =',F6.1,' WLCL =',F6.3,' CLDHGT =', &
  1970. F8.1)
  1971. 1035 FORMAT(1X,'PEF(WS)=',F4.2,'(CB)=',F4.2,'LC,LET=',2I3,'WKL=' &
  1972. ,F6.3,'VWS=',F5.2)
  1973. 1040 FORMAT(' ','PRECIP EFF = 100%, ENVIR CANNOT SUPPORT DOWND' &
  1974. ,'RAFTS')
  1975. !1045 FORMAT('NUMBER OF DOWNDRAFT ITERATIONS EXCEEDS 10...PPTFLX' &
  1976. ! ' IS DIFFERENT FROM THAT GIVEN BY PRECIP EFF RELATION')
  1977. ! FLIC HAS TROUBLE WITH THIS ONE.
  1978. 1045 FORMAT('NUMBER OF DOWNDRAFT ITERATIONS EXCEEDS 10')
  1979. 1050 FORMAT(' ','LCOUNT= ',I3,' PPTFLX/CPR, PEFF= ',F5.3,1X,F5.3, &
  1980. 'DMF(LFS)/UMF(LCL)= ',F5.3)
  1981. 1055 FORMAT(/'*** DEGREE OF STABILIZATION =',F5.3,', NO MORE MASS F' &
  1982. ,'LUX IS ALLOWED')
  1983. !1060 FORMAT(/' ITERATION DOES NOT CONVERGE TO GIVE THE SPECIFIED ' &
  1984. ! 'DEGREE OF STABILIZATION! FABE= ',F6.4)
  1985. 1060 FORMAT(/' ITERATION DOES NOT CONVERGE. FABE= ',F6.4)
  1986. 1070 FORMAT (16A8)
  1987. 1075 FORMAT (F8.2,3(F8.2),2(F8.3),F8.2,2F8.3,F8.2,6F8.3)
  1988. 1080 FORMAT(2X,'LFS,LDB,LDT =',3I3,' TIMEC, NSTEP=',F5.0,I3, &
  1989. 'NCOUNT, FABE, AINC=',I2,1X,F5.3,F6.2)
  1990. 1085 FORMAT (A3,16A7,2A8)
  1991. 1090 FORMAT (I3,F7.2,F7.0,10F7.2,4F7.3,2F8.3)
  1992. 1095 FORMAT(' ',' PPT PRODUCTION RATE= ',F10.0,' TOTAL EVAP+PPT= ', &
  1993. F10.0)
  1994. 1105 FORMAT(' ','NET LATENT HEAT RELEASE =',E12.5,' ACTUAL HEATING =', &
  1995. E12.5,' J/KG-S, DIFFERENCE = ',F9.3,'PERCENT')
  1996. 1110 FORMAT(' ','INITIAL WATER =',E12.5,' FINAL WATER =',E12.5, &
  1997. ' TOTAL WATER CHANGE =',F8.2,'PERCENT')
  1998. 1115 FORMAT (2X,F6.0,2X,F7.2,2X,F5.1,2X,F6.3,2(2X,F5.1),2X,F7.2,2X,F7.4 &
  1999. )
  2000. 1120 FORMAT(' ','MOISTURE ERROR AS FUNCTION OF TOTAL PPT =',F9.3, &
  2001. 'PERCENT')
  2002. END SUBROUTINE KFPARA
  2003. !-----------------------------------------------------------------------
  2004. SUBROUTINE CONDLOAD(QLIQ,QICE,WTW,DZ,BOTERM,ENTERM,RATE,QNEWLQ, &
  2005. QNEWIC,QLQOUT,QICOUT,G)
  2006. !-----------------------------------------------------------------------
  2007. IMPLICIT NONE
  2008. !-----------------------------------------------------------------------
  2009. ! 9/18/88...THIS PRECIPITATION FALLOUT SCHEME IS BASED ON THE SCHEME US
  2010. ! BY OGURA AND CHO (1973). LIQUID WATER FALLOUT FROM A PARCEL IS CAL-
  2011. ! CULATED USING THE EQUATION DQ=-RATE*Q*DT, BUT TO SIMULATE A QUASI-
  2012. ! CONTINUOUS PROCESS, AND TO ELIMINATE A DEPENDENCY ON VERTICAL
  2013. ! RESOLUTION THIS IS EXPRESSED AS Q=Q*EXP(-RATE*DZ).
  2014. REAL, INTENT(IN ) :: G
  2015. REAL, INTENT(IN ) :: DZ,BOTERM,ENTERM,RATE
  2016. REAL, INTENT(INOUT) :: QLQOUT,QICOUT,WTW,QLIQ,QICE,QNEWLQ,QNEWIC
  2017. REAL :: QTOT,QNEW,QEST,G1,WAVG,CONV,RATIO3,OLDQ,RATIO4,DQ,PPTDRG
  2018. QTOT=QLIQ+QICE
  2019. QNEW=QNEWLQ+QNEWIC
  2020. !
  2021. ! ESTIMATE THE VERTICAL VELOCITY SO THAT AN AVERAGE VERTICAL VELOCITY C
  2022. ! BE CALCULATED TO ESTIMATE THE TIME REQUIRED FOR ASCENT BETWEEN MODEL
  2023. ! LEVELS...
  2024. !
  2025. QEST=0.5*(QTOT+QNEW)
  2026. G1=WTW+BOTERM-ENTERM-2.*G*DZ*QEST/1.5
  2027. IF(G1.LT.0.0)G1=0.
  2028. WAVG=(SQRT(WTW)+SQRT(G1))/2.
  2029. CONV=RATE*DZ/WAVG
  2030. !
  2031. ! RATIO3 IS THE FRACTION OF LIQUID WATER IN FRESH CONDENSATE, RATIO4 IS
  2032. ! THE FRACTION OF LIQUID WATER IN THE TOTAL AMOUNT OF CONDENSATE INVOLV
  2033. ! IN THE PRECIPITATION PROCESS - NOTE THAT ONLY 60% OF THE FRESH CONDEN
  2034. ! SATE IS IS ALLOWED TO PARTICIPATE IN THE CONVERSION PROCESS...
  2035. !
  2036. RATIO3=QNEWLQ/(QNEW+1.E-10)
  2037. ! OLDQ=QTOT
  2038. QTOT=QTOT+0.6*QNEW
  2039. OLDQ=QTOT
  2040. RATIO4=(0.6*QNEWLQ+QLIQ)/(QTOT+1.E-10)
  2041. QTOT=QTOT*EXP(-CONV)
  2042. !
  2043. ! DETERMINE THE AMOUNT OF PRECIPITATION THAT FALLS OUT OF THE UPDRAFT
  2044. ! PARCEL AT THIS LEVEL...
  2045. !
  2046. DQ=OLDQ-QTOT
  2047. QLQOUT=RATIO4*DQ
  2048. QICOUT=(1.-RATIO4)*DQ
  2049. !
  2050. ! ESTIMATE THE MEAN LOAD OF CONDENSATE ON THE UPDRAFT IN THE LAYER, CAL
  2051. ! LATE VERTICAL VELOCITY
  2052. !
  2053. PPTDRG=0.5*(OLDQ+QTOT-0.2*QNEW)
  2054. WTW=WTW+BOTERM-ENTERM-2.*G*DZ*PPTDRG/1.5
  2055. !
  2056. ! DETERMINE THE NEW LIQUID WATER AND ICE CONCENTRATIONS INCLUDING LOSSE
  2057. ! DUE TO PRECIPITATION AND GAINS FROM CONDENSATION...
  2058. !
  2059. QLIQ=RATIO4*QTOT+RATIO3*0.4*QNEW
  2060. QICE=(1.-RATIO4)*QTOT+(1.-RATIO3)*0.4*QNEW
  2061. QNEWLQ=0.
  2062. QNEWIC=0.
  2063. END SUBROUTINE CONDLOAD
  2064. !-----------------------------------------------------------------------
  2065. SUBROUTINE DTFRZNEW(TU,P,THTEU,QVAP,QLIQ,QICE,RATIO2,TTFRZ,TBFRZ, &
  2066. QNWFRZ,RL,FRC1,EFFQ,IFLAG,XLV0,XLV1,XLS0,XLS1, &
  2067. EP2,ALIQ,BLIQ,CLIQ,DLIQ,AICE,BICE,CICE,DICE )
  2068. !-----------------------------------------------------------------------
  2069. IMPLICIT NONE
  2070. !-----------------------------------------------------------------------
  2071. REAL, INTENT(IN ) :: XLV0,XLV1
  2072. REAL, INTENT(IN ) :: P,TTFRZ,TBFRZ,EFFQ,XLS0,XLS1,EP2,ALIQ, &
  2073. BLIQ,CLIQ,DLIQ,AICE,BICE,CICE,DICE
  2074. REAL, INTENT(INOUT) :: TU,THTEU,QVAP,QLIQ,QICE,RATIO2, &
  2075. FRC1,RL,QNWFRZ
  2076. INTEGER, INTENT(INOUT) :: IFLAG
  2077. REAL :: CCP,RV,C5,QLQFRZ,QNEW,ESLIQ,ESICE,RLC,RLS,PI,ES,RLF,A, &
  2078. B,C,DQVAP,DTFRZ,TU1,QVAP1
  2079. !-----------------------------------------------------------------------
  2080. !
  2081. !...ALLOW GLACIATION OF THE UPDRAFT TO OCCUR AS AN APPROXIMATELY LINEAR
  2082. ! FUNCTION OF TEMPERATURE IN THE TEMPERATURE RANGE TTFRZ TO TBFRZ...
  2083. !
  2084. RV=461.5
  2085. C5=1.0723E-3
  2086. !
  2087. !...ADJUST THE LIQUID WATER CONCENTRATIONS FROM FRESH CONDENSATE AND THA
  2088. ! BROUGHT UP FROM LOWER LEVELS TO AN AMOUNT THAT WOULD BE PRESENT IF N
  2089. ! LIQUID WATER HAD FROZEN THUS FAR...THIS IS NECESSARY BECAUSE THE
  2090. ! EXPRESSION FOR TEMP CHANGE IS MULTIPLIED BY THE FRACTION EQUAL TO TH
  2091. ! PARCEL TEMP DECREASE SINCE THE LAST MODEL LEVEL DIVIDED BY THE TOTAL
  2092. ! GLACIATION INTERVAL, SO THAT EFFECTIVELY THIS APPROXIMATELY ALLOWS A
  2093. ! AMOUNT OF LIQUID WATER TO FREEZE WHICH IS EQUAL TO THIS SAME FRACTIO
  2094. ! OF THE LIQUID WATER THAT WAS PRESENT BEFORE THE GLACIATION PROCESS W
  2095. ! INITIATED...ALSO, TO ALLOW THETAU TO CONVERT APPROXIMATELY LINEARLY
  2096. ! ITS VALUE WITH RESPECT TO ICE, WE NEED TO ALLOW A PORTION OF THE FRE
  2097. ! CONDENSATE TO CONTRIBUTE TO THE GLACIATION PROCESS; THE FRACTIONAL
  2098. ! AMOUNT THAT APPLIES TO THIS PORTION IS 1/2 OF THE FRACTIONAL AMOUNT
  2099. ! FROZEN OF THE "OLD" CONDENSATE BECAUSE THIS FRESH CONDENSATE IS ONLY
  2100. ! PRODUCED GRADUALLY OVER THE LAYER...NOTE THAT IN TERMS OF THE DYNAMI
  2101. ! OF THE PRECIPITATION PROCESS, IE. PRECIPITATION FALLOUT, THIS FRACTI
  2102. ! AMNT OF FRESH CONDENSATE HAS ALREADY BEEN INCLUDED IN THE ICE CATEGO
  2103. !
  2104. QLQFRZ=QLIQ*EFFQ
  2105. QNEW=QNWFRZ*EFFQ*0.5
  2106. ESLIQ=ALIQ*EXP((BLIQ*TU-CLIQ)/(TU-DLIQ))
  2107. ESICE=AICE*EXP((BICE*TU-CICE)/(TU-DICE))
  2108. RLC=2.5E6-2369.276*(TU-273.16)
  2109. RLS=2833922.-259.532*(TU-273.16)
  2110. RLF=RLS-RLC
  2111. CCP=1005.7*(1.+0.89*QVAP)
  2112. !
  2113. ! A = D(ES)/DT IS THAT CALCULATED FROM BUCK`S (1981) EMPIRICAL FORMULAS
  2114. ! FOR SATURATION VAPOR PRESSURE...
  2115. !
  2116. A=(CICE-BICE*DICE)/((TU-DICE)*(TU-DICE))
  2117. B=RLS*EP2/P
  2118. C=A*B*ESICE/CCP
  2119. DQVAP=B*(ESLIQ-ESICE)/(RLS+RLS*C)-RLF*(QLQFRZ+QNEW)/(RLS+RLS/C)
  2120. DTFRZ=(RLF*(QLQFRZ+QNEW)+B*(ESLIQ-ESICE))/(CCP+A*B*ESICE)
  2121. TU1=TU
  2122. QVAP1=QVAP
  2123. TU=TU+FRC1*DTFRZ
  2124. QVAP=QVAP-FRC1*DQVAP
  2125. ES=QVAP*P/(EP2+QVAP)
  2126. ESLIQ=ALIQ*EXP((BLIQ*TU-CLIQ)/(TU-DLIQ))
  2127. ESICE=AICE*EXP((BICE*TU-CICE)/(TU-DICE))
  2128. RATIO2=(ESLIQ-ES)/(ESLIQ-ESICE)
  2129. !
  2130. ! TYPICALLY, RATIO2 IS VERY CLOSE TO (TTFRZ-TU)/(TTFRZ-TBFRZ), USUALLY
  2131. ! WITHIN 1% (USING TU BEFORE GALCIATION EFFECTS ARE APPLIED); IF THE
  2132. ! INITIAL UPDRAFT TEMP IS BELOW TBFRZ AND RATIO2 IS STILL LESS THAN 1,
  2133. ! AN ADJUSTMENT TO FRC1 AND RATIO2 IS INTRODUCED SO THAT GLACIATION
  2134. ! EFFECTS ARE NOT UNDERESTIMATED; CONVERSELY, IF RATIO2 IS GREATER THAN
  2135. ! FRC1 IS ADJUSTED SO THAT GLACIATION EFFECTS ARE NOT OVERESTIMATED...
  2136. !
  2137. IF(IFLAG.GT.0.AND.RATIO2.LT.1)THEN
  2138. FRC1=FRC1+(1.-RATIO2)
  2139. TU=TU1+FRC1*DTFRZ
  2140. QVAP=QVAP1-FRC1*DQVAP
  2141. RATIO2=1.
  2142. IFLAG=1
  2143. GOTO 20
  2144. ENDIF
  2145. IF(RATIO2.GT.1.)THEN
  2146. FRC1=FRC1-(RATIO2-1.)
  2147. FRC1=AMAX1(0.0,FRC1)
  2148. TU=TU1+FRC1*DTFRZ
  2149. QVAP=QVAP1-FRC1*DQVAP
  2150. RATIO2=1.
  2151. IFLAG=1
  2152. ENDIF
  2153. !
  2154. ! CALCULATE A HYBRID VALUE OF THETAU, ASSUMING THAT THE LATENT HEAT OF
  2155. ! VAPORIZATION/SUBLIMATION CAN BE ESTIMATED USING THE SAME WEIGHTING
  2156. ! FUNCTION AS THAT USED TO CALCULATE SATURATION VAPOR PRESSURE, CALCU-
  2157. ! LATE NEW LIQUID WATER AND ICE CONCENTRATIONS...
  2158. !
  2159. 20 RLC=XLV0-XLV1*TU
  2160. RLS=XLS0-XLS1*TU
  2161. RL=RATIO2*RLS+(1.-RATIO2)*RLC
  2162. PI=(1.E5/P)**(0.2854*(1.-0.28*QVAP))
  2163. THTEU=TU*PI*EXP(RL*QVAP*C5/TU*(1.+0.81*QVAP))
  2164. IF(IFLAG.EQ.1)THEN
  2165. QICE=QICE+FRC1*DQVAP+QLIQ
  2166. QLIQ=0.
  2167. ELSE
  2168. QICE=QICE+FRC1*(DQVAP+QLQFRZ)
  2169. QLIQ=QLIQ-FRC1*QLQFRZ
  2170. ENDIF
  2171. QNWFRZ=0.
  2172. END SUBROUTINE DTFRZNEW
  2173. !-----------------------------------------------------------------------
  2174. !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  2175. ! THIS SUBROUTINE INTEGRATES THE AREA UNDER THE CURVE IN THE GAUSSIAN
  2176. ! DISTRIBUTION...THE NUMERICAL APPROXIMATION TO THE INTEGRAL IS TAKEN F
  2177. ! HANDBOOK OF MATHEMATICAL FUNCTIONS WITH FORMULAS, GRAPHS AND MATHEMA
  2178. ! TABLES ED. BY ABRAMOWITZ AND STEGUN, NAT L BUREAU OF STANDARDS APPLI
  2179. ! MATHEMATICS SERIES. JUNE, 1964., MAY, 1968.
  2180. ! JACK KAIN
  2181. ! 7/6/89
  2182. !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  2183. !***********************************************************************
  2184. !***** GAUSSIAN TYPE MIXING PROFILE....******************************
  2185. SUBROUTINE PROF5(EQ,EE,UD)
  2186. !-----------------------------------------------------------------------
  2187. IMPLICIT NONE
  2188. !-----------------------------------------------------------------------
  2189. REAL, INTENT(IN ) :: EQ
  2190. REAL, INTENT(INOUT) :: EE,UD
  2191. REAL :: SQRT2P,A1,A2,A3,P,SIGMA,FE,X,Y,EY,E45,T1,T2,C1,C2
  2192. DATA SQRT2P,A1,A2,A3,P,SIGMA,FE/2.506628,0.4361836,-0.1201676, &
  2193. 0.9372980,0.33267,0.166666667,0.202765151/
  2194. X=(EQ-0.5)/SIGMA
  2195. Y=6.*EQ-3.
  2196. EY=EXP(Y*Y/(-2))
  2197. E45=EXP(-4.5)
  2198. T2=1./(1.+P*ABS(Y))
  2199. T1=0.500498
  2200. C1=A1*T1+A2*T1*T1+A3*T1*T1*T1
  2201. C2=A1*T2+A2*T2*T2+A3*T2*T2*T2
  2202. IF(Y.GE.0.)THEN
  2203. EE=SIGMA*(0.5*(SQRT2P-E45*C1-EY*C2)+SIGMA*(E45-EY))-E45*EQ*EQ/2.
  2204. UD=SIGMA*(0.5*(EY*C2-E45*C1)+SIGMA*(E45-EY))-E45*(0.5+EQ*EQ/2.- &
  2205. EQ)
  2206. ELSE
  2207. EE=SIGMA*(0.5*(EY*C2-E45*C1)+SIGMA*(E45-EY))-E45*EQ*EQ/2.
  2208. UD=SIGMA*(0.5*(SQRT2P-E45*C1-EY*C2)+SIGMA*(E45-EY))-E45*(0.5+EQ* &
  2209. EQ/2.-EQ)
  2210. ENDIF
  2211. EE=EE/FE
  2212. UD=UD/FE
  2213. END SUBROUTINE PROF5
  2214. !-----------------------------------------------------------------------
  2215. SUBROUTINE TPMIX(P,THTU,TU,QU,QLIQ,QICE,QNEWLQ,QNEWIC,RATIO2,RL, &
  2216. XLV0,XLV1,XLS0,XLS1, &
  2217. EP2,ALIQ,BLIQ,CLIQ,DLIQ,AICE,BICE,CICE,DICE )
  2218. !-----------------------------------------------------------------------
  2219. IMPLICIT NONE
  2220. !-----------------------------------------------------------------------
  2221. REAL, INTENT(IN ) :: XLV0,XLV1
  2222. REAL, INTENT(IN ) :: P,THTU,RATIO2,RL,XLS0, &
  2223. XLS1,EP2,ALIQ,BLIQ,CLIQ,DLIQ,AICE,BICE,&
  2224. CICE,DICE
  2225. REAL, INTENT(INOUT) :: QU,QLIQ,QICE,TU,QNEWLQ,QNEWIC
  2226. REAL :: ES,QS,PI,THTGS,F0,T1,T0,C5,RV,ESLIQ,ESICE,F1,DT,QNEW, &
  2227. DQ, QTOT,DQICE,DQLIQ,RLL,CCP
  2228. INTEGER :: ITCNT
  2229. !-----------------------------------------------------------------------
  2230. !
  2231. !...THIS SUBROUTINE ITERATIVELY EXTRACTS WET-BULB TEMPERATURE FROM EQUIV
  2232. ! POTENTIAL TEMPERATURE, THEN CHECKS TO SEE IF SUFFICIENT MOISTURE IS
  2233. ! AVAILABLE TO ACHIEVE SATURATION...IF NOT, TEMPERATURE IS ADJUSTED
  2234. ! ACCORDINGLY, IF SO, THE RESIDUAL LIQUID WATER/ICE CONCENTRATION IS
  2235. ! DETERMINED...
  2236. !
  2237. C5=1.0723E-3
  2238. RV=461.5
  2239. !
  2240. ! ITERATE TO FIND WET BULB TEMPERATURE AS A FUNCTION OF EQUIVALENT POT
  2241. ! TEMP AND PRS, ASSUMING SATURATION VAPOR PRESSURE...RATIO2 IS THE DEG
  2242. ! OF GLACIATION...
  2243. !
  2244. IF(RATIO2.LT.1.E-6)THEN
  2245. ES=ALIQ*EXP((BLIQ*TU-CLIQ)/(TU-DLIQ))
  2246. QS=EP2*ES/(P-ES)
  2247. PI=(1.E5/P)**(0.2854*(1.-0.28*QS))
  2248. THTGS=TU*PI*EXP((3374.6525/TU-2.5403)*QS*(1.+0.81*QS))
  2249. ELSEIF(ABS(RATIO2-1.).LT.1.E-6)THEN
  2250. ES=AICE*EXP((BICE*TU-CICE)/(TU-DICE))
  2251. QS=EP2*ES/(P-ES)
  2252. PI=(1.E5/P)**(0.2854*(1.-0.28*QS))
  2253. THTGS=TU*PI*EXP((3114.834/TU-0.278296)*QS*(1.+0.81*QS))
  2254. ELSE
  2255. ESLIQ=ALIQ*EXP((BLIQ*TU-CLIQ)/(TU-DLIQ))
  2256. ESICE=AICE*EXP((BICE*TU-CICE)/(TU-DICE))
  2257. ES=(1.-RATIO2)*ESLIQ+RATIO2*ESICE
  2258. QS=EP2*ES/(P-ES)
  2259. PI=(1.E5/P)**(0.2854*(1.-0.28*QS))
  2260. THTGS=TU*PI*EXP(RL*QS*C5/TU*(1.+0.81*QS))
  2261. ENDIF
  2262. F0=THTGS-THTU
  2263. T1=TU-0.5*F0
  2264. T0=TU
  2265. ITCNT=0
  2266. 90 IF(RATIO2.LT.1.E-6)THEN
  2267. ES=ALIQ*EXP((BLIQ*T1-CLIQ)/(T1-DLIQ))
  2268. QS=EP2*ES/(P-ES)
  2269. PI=(1.E5/P)**(0.2854*(1.-0.28*QS))
  2270. THTGS=T1*PI*EXP((3374.6525/T1-2.5403)*QS*(1.+0.81*QS))
  2271. ELSEIF(ABS(RATIO2-1.).LT.1.E-6)THEN
  2272. ES=AICE*EXP((BICE*T1-CICE)/(T1-DICE))
  2273. QS=EP2*ES/(P-ES)
  2274. PI=(1.E5/P)**(0.2854*(1.-0.28*QS))
  2275. THTGS=T1*PI*EXP((3114.834/T1-0.278296)*QS*(1.+0.81*QS))
  2276. ELSE
  2277. ESLIQ=ALIQ*EXP((BLIQ*T1-CLIQ)/(T1-DLIQ))
  2278. ESICE=AICE*EXP((BICE*T1-CICE)/(T1-DICE))
  2279. ES=(1.-RATIO2)*ESLIQ+RATIO2*ESICE
  2280. QS=EP2*ES/(P-ES)
  2281. PI=(1.E5/P)**(0.2854*(1.-0.28*QS))
  2282. THTGS=T1*PI*EXP(RL*QS*C5/T1*(1.+0.81*QS))
  2283. ENDIF
  2284. F1=THTGS-THTU
  2285. IF(ABS(F1).LT.0.01)GOTO 50
  2286. ITCNT=ITCNT+1
  2287. IF(ITCNT.GT.10)GOTO 50
  2288. DT=F1*(T1-T0)/(F1-F0)
  2289. T0=T1
  2290. F0=F1
  2291. T1=T1-DT
  2292. GOTO 90
  2293. !
  2294. ! IF THE PARCEL IS SUPERSATURATED, CALCULATE CONCENTRATION OF FRESH
  2295. ! CONDENSATE...
  2296. !
  2297. 50 IF(QS.LE.QU)THEN
  2298. QNEW=QU-QS
  2299. QU=QS
  2300. GOTO 96
  2301. ENDIF
  2302. !
  2303. ! IF THE PARCEL IS SUBSATURATED, TEMPERATURE AND MIXING RATIO MUST BE
  2304. ! ADJUSTED...IF LIQUID WATER OR ICE IS PRESENT, IT IS ALLOWED TO EVAPO
  2305. ! SUBLIMATE.
  2306. !
  2307. QNEW=0.
  2308. DQ=QS-QU
  2309. QTOT=QLIQ+QICE
  2310. !
  2311. ! IF THERE IS ENOUGH LIQUID OR ICE TO SATURATE THE PARCEL, TEMP STAYS
  2312. ! WET BULB VALUE, VAPOR MIXING RATIO IS AT SATURATED LEVEL, AND THE MI
  2313. ! RATIOS OF LIQUID AND ICE ARE ADJUSTED TO MAKE UP THE ORIGINAL SATURA
  2314. ! DEFICIT... OTHERWISE, ANY AVAILABLE LIQ OR ICE VAPORIZES AND APPROPR
  2315. ! ADJUSTMENTS TO PARCEL TEMP; VAPOR, LIQUID, AND ICE MIXING RATIOS ARE
  2316. !
  2317. !...NOTE THAT THE LIQ AND ICE MAY BE PRESENT IN PROPORTIONS SLIGHTLY DIF
  2318. ! THAN SUGGESTED BY THE VALUE OF RATIO2...CHECK TO MAKE SURE THAT LIQ
  2319. ! ICE CONCENTRATIONS ARE NOT REDUCED TO BELOW ZERO WHEN EVAPORATION/
  2320. ! SUBLIMATION OCCURS...
  2321. !
  2322. IF(QTOT.GE.DQ)THEN
  2323. DQICE=0.0
  2324. DQLIQ=0.0
  2325. QLIQ=QLIQ-(1.-RATIO2)*DQ
  2326. IF(QLIQ.LT.0.)THEN
  2327. DQICE=0.0-QLIQ
  2328. QLIQ=0.0
  2329. ENDIF
  2330. QICE=QICE-RATIO2*DQ+DQICE
  2331. IF(QICE.LT.0.)THEN
  2332. DQLIQ=0.0-QICE
  2333. QICE=0.0
  2334. ENDIF
  2335. QLIQ=QLIQ+DQLIQ
  2336. QU=QS
  2337. GOTO 96
  2338. ELSE
  2339. IF(RATIO2.LT.1.E-6)THEN
  2340. RLL=XLV0-XLV1*T1
  2341. ELSEIF(ABS(RATIO2-1.).LT.1.E-6)THEN
  2342. RLL=XLS0-XLS1*T1
  2343. ELSE
  2344. RLL=RL
  2345. ENDIF
  2346. CCP=1005.7*(1.+0.89*QU)
  2347. IF(QTOT.LT.1.E-10)THEN
  2348. !
  2349. !...IF NO LIQUID WATER OR ICE IS AVAILABLE, TEMPERATURE IS GIVEN BY:
  2350. T1=T1+RLL*(DQ/(1.+DQ))/CCP
  2351. GOTO 96
  2352. ELSE
  2353. !
  2354. !...IF SOME LIQ WATER/ICE IS AVAILABLE, BUT NOT ENOUGH TO ACHIEVE SATURA
  2355. ! THE TEMPERATURE IS GIVEN BY:
  2356. T1=T1+RLL*((DQ-QTOT)/(1+DQ-QTOT))/CCP
  2357. QU=QU+QTOT
  2358. QTOT=0.
  2359. ENDIF
  2360. QLIQ=0
  2361. QICE=0.
  2362. ENDIF
  2363. 96 TU=T1
  2364. QNEWLQ=(1.-RATIO2)*QNEW
  2365. QNEWIC=RATIO2*QNEW
  2366. IF(ITCNT.GT.10)PRINT*,'***** NUMBER OF ITERATIONS IN TPMIX =', &
  2367. ITCNT
  2368. END SUBROUTINE TPMIX
  2369. !-----------------------------------------------------------------------
  2370. SUBROUTINE ENVIRTHT(P1,T1,Q1,THT1,R1,RL, &
  2371. EP2,ALIQ,BLIQ,CLIQ,DLIQ,AICE,BICE,CICE,DICE )
  2372. !-----------------------------------------------------------------------
  2373. IMPLICIT NONE
  2374. !-----------------------------------------------------------------------
  2375. REAL, INTENT(IN ) :: P1,T1,Q1,R1,RL,EP2,ALIQ,BLIQ,CLIQ,DLIQ,AICE,&
  2376. BICE,CICE,DICE
  2377. REAL, INTENT(INOUT) :: THT1
  2378. REAL:: T00,P00,C1,C2,C3,C4,C5,EE,TLOG,TDPT,TSAT,THT,TFPT,TLOGIC, &
  2379. TSATLQ,TSATIC
  2380. DATA T00,P00,C1,C2,C3,C4,C5/273.16,1.E5,3374.6525,2.5403,3114.834,&
  2381. 0.278296,1.0723E-3/
  2382. !
  2383. ! CALCULATE ENVIRONMENTAL EQUIVALENT POTENTIAL TEMPERATURE...
  2384. !
  2385. IF(R1.LT.1.E-6)THEN
  2386. EE=Q1*P1/(EP2+Q1)
  2387. TLOG=ALOG(EE/ALIQ)
  2388. TDPT=(CLIQ-DLIQ*TLOG)/(BLIQ-TLOG)
  2389. TSAT=TDPT-(.212+1.571E-3*(TDPT-T00)-4.36E-4*(T1-T00))*(T1-TDPT)
  2390. THT=T1*(P00/P1)**(0.2854*(1.-0.28*Q1))
  2391. THT1=THT*EXP((C1/TSAT-C2)*Q1*(1.+0.81*Q1))
  2392. ELSEIF(ABS(R1-1.).LT.1.E-6)THEN
  2393. EE=Q1*P1/(EP2+Q1)
  2394. TLOG=ALOG(EE/AICE)
  2395. TFPT=(CICE-DICE*TLOG)/(BICE-TLOG)
  2396. THT=T1*(P00/P1)**(0.2854*(1.-0.28*Q1))
  2397. TSAT=TFPT-(.182+1.13E-3*(TFPT-T00)-3.58E-4*(T1-T00))*(T1-TFPT)
  2398. THT1=THT*EXP((C3/TSAT-C4)*Q1*(1.+0.81*Q1))
  2399. ELSE
  2400. EE=Q1*P1/(EP2+Q1)
  2401. TLOG=ALOG(EE/ALIQ)
  2402. TDPT=(CLIQ-DLIQ*TLOG)/(BLIQ-TLOG)
  2403. TLOGIC=ALOG(EE/AICE)
  2404. TFPT=(CICE-DICE*TLOGIC)/(BICE-TLOGIC)
  2405. THT=T1*(P00/P1)**(0.2854*(1.-0.28*Q1))
  2406. TSATLQ=TDPT-(.212+1.571E-3*(TDPT-T00)-4.36E-4*(T1-T00))*(T1-TDPT)
  2407. TSATIC=TFPT-(.182+1.13E-3*(TFPT-T00)-3.58E-4*(T1-T00))*(T1-TFPT)
  2408. TSAT=R1*TSATIC+(1.-R1)*TSATLQ
  2409. THT1=THT*EXP(RL*Q1*C5/TSAT*(1.+0.81*Q1))
  2410. ENDIF
  2411. END SUBROUTINE ENVIRTHT
  2412. !-----------------------------------------------------------------------
  2413. !************************* TPDD.FOR ************************************
  2414. ! THIS SUBROUTINE ITERATIVELY EXTRACTS TEMPERATURE FROM EQUIVALENT *
  2415. ! POTENTIAL TEMP. IT IS DESIGNED FOR USE WITH DOWNDRAFT CALCULATIONS.
  2416. ! IF RELATIVE HUMIDITY IS SPECIFIED TO BE LESS THAN 100%, PARCEL *
  2417. ! TEMP, SPECIFIC HUMIDITY, AND LIQUID WATER CONTENT ARE ITERATIVELY *
  2418. ! CALCULATED. *
  2419. !***********************************************************************
  2420. FUNCTION TPDD(P,THTED,TGS,RS,RD,RH,XLV0,XLV1, &
  2421. EP2,ALIQ,BLIQ,CLIQ,DLIQ,AICE,BICE,CICE,DICE )
  2422. !-----------------------------------------------------------------------
  2423. IMPLICIT NONE
  2424. !-----------------------------------------------------------------------
  2425. REAL, INTENT(IN ) :: XLV0,XLV1
  2426. REAL, INTENT(IN ) :: P,THTED,TGS,RD,RH,EP2,ALIQ,BLIQ, &
  2427. CLIQ,DLIQ,AICE,BICE,CICE,DICE
  2428. REAL, INTENT(INOUT) :: RS
  2429. REAL :: TPDD,ES,PI,THTGS,F0,T1,T0,CCP,F1,DT,RL,DSSDT,T1RH,RSRH
  2430. INTEGER :: ITCNT
  2431. !-----------------------------------------------------------------------
  2432. ES=ALIQ*EXP((BLIQ*TGS-CLIQ)/(TGS-DLIQ))
  2433. RS=EP2*ES/(P-ES)
  2434. PI=(1.E5/P)**(0.2854*(1.-0.28*RS))
  2435. THTGS=TGS*PI*EXP((3374.6525/TGS-2.5403)*RS*(1.+0.81*RS))
  2436. F0=THTGS-THTED
  2437. T1=TGS-0.5*F0
  2438. T0=TGS
  2439. CCP=1005.7
  2440. !
  2441. !...ITERATE TO FIND WET-BULB TEMPERATURE...
  2442. !
  2443. ITCNT=0
  2444. 90 ES=ALIQ*EXP((BLIQ*T1-CLIQ)/(T1-DLIQ))
  2445. RS=EP2*ES/(P-ES)
  2446. PI=(1.E5/P)**(0.2854*(1.-0.28*RS))
  2447. THTGS=T1*PI*EXP((3374.6525/T1-2.5403)*RS*(1.+0.81*RS))
  2448. F1=THTGS-THTED
  2449. IF(ABS(F1).LT.0.05)GOTO 50
  2450. ITCNT=ITCNT+1
  2451. IF(ITCNT.GT.10)GOTO 50
  2452. DT=F1*(T1-T0)/(F1-F0)
  2453. T0=T1
  2454. F0=F1
  2455. T1=T1-DT
  2456. GOTO 90
  2457. 50 RL=XLV0-XLV1*T1
  2458. !
  2459. !...IF RELATIVE HUMIDITY IS SPECIFIED TO BE LESS THAN 100%, ESTIMATE THE
  2460. ! TEMPERATURE AND MIXING RATIO WHICH WILL YIELD THE APPROPRIATE VALUE.
  2461. !
  2462. IF(RH.EQ.1.)GOTO 110
  2463. DSSDT=(CLIQ-BLIQ*DLIQ)/((T1-DLIQ)*(T1-DLIQ))
  2464. DT=RL*RS*(1.-RH)/(CCP+RL*RH*RS*DSSDT)
  2465. T1RH=T1+DT
  2466. ES=RH*ALIQ*EXP((BLIQ*T1RH-CLIQ)/(T1RH-DLIQ))
  2467. RSRH=EP2*ES/(P-ES)
  2468. !
  2469. !...CHECK TO SEE IF MIXING RATIO AT SPECIFIED RH IS LESS THAN ACTUAL
  2470. !...MIXING RATIO...IF SO, ADJUST TO GIVE ZERO EVAPORATION...
  2471. !
  2472. IF(RSRH.LT.RD)THEN
  2473. RSRH=RD
  2474. T1RH=T1+(RS-RSRH)*RL/CCP
  2475. ENDIF
  2476. T1=T1RH
  2477. RS=RSRH
  2478. 110 TPDD=T1
  2479. IF(ITCNT.GT.10)PRINT*,'***** NUMBER OF ITERATIONS IN TPDD = ', &
  2480. ITCNT
  2481. END FUNCTION TPDD
  2482. !====================================================================
  2483. SUBROUTINE kfinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, &
  2484. RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS, &
  2485. P_FIRST_SCALAR,restart,allowed_to_read, &
  2486. ids, ide, jds, jde, kds, kde, &
  2487. ims, ime, jms, jme, kms, kme, &
  2488. its, ite, jts, jte, kts, kte )
  2489. !--------------------------------------------------------------------
  2490. IMPLICIT NONE
  2491. !--------------------------------------------------------------------
  2492. LOGICAL , INTENT(IN) :: restart, allowed_to_read
  2493. INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
  2494. ims, ime, jms, jme, kms, kme, &
  2495. its, ite, jts, jte, kts, kte
  2496. INTEGER , INTENT(IN) :: P_QI,P_QS,P_FIRST_SCALAR
  2497. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
  2498. RTHCUTEN, &
  2499. RQVCUTEN, &
  2500. RQCCUTEN, &
  2501. RQRCUTEN, &
  2502. RQICUTEN, &
  2503. RQSCUTEN
  2504. REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
  2505. REAL, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: NCA
  2506. INTEGER :: i, j, k, itf, jtf, ktf
  2507. jtf=min0(jte,jde-1)
  2508. ktf=min0(kte,kde-1)
  2509. itf=min0(ite,ide-1)
  2510. IF(.not.restart)THEN
  2511. DO j=jts,jtf
  2512. DO k=kts,ktf
  2513. DO i=its,itf
  2514. RTHCUTEN(i,k,j)=0.
  2515. RQVCUTEN(i,k,j)=0.
  2516. RQCCUTEN(i,k,j)=0.
  2517. RQRCUTEN(i,k,j)=0.
  2518. ENDDO
  2519. ENDDO
  2520. ENDDO
  2521. IF (P_QI .ge. P_FIRST_SCALAR) THEN
  2522. DO j=jts,jtf
  2523. DO k=kts,ktf
  2524. DO i=its,itf
  2525. RQICUTEN(i,k,j)=0.
  2526. ENDDO
  2527. ENDDO
  2528. ENDDO
  2529. ENDIF
  2530. IF (P_QS .ge. P_FIRST_SCALAR) THEN
  2531. DO j=jts,jtf
  2532. DO k=kts,ktf
  2533. DO i=its,itf
  2534. RQSCUTEN(i,k,j)=0.
  2535. ENDDO
  2536. ENDDO
  2537. ENDDO
  2538. ENDIF
  2539. DO j=jts,jtf
  2540. DO i=its,itf
  2541. NCA(i,j)=-100.
  2542. ENDDO
  2543. ENDDO
  2544. DO j=jts,jtf
  2545. DO k=kts,ktf
  2546. DO i=its,itf
  2547. W0AVG(i,k,j)=0.
  2548. ENDDO
  2549. ENDDO
  2550. ENDDO
  2551. ENDIF
  2552. END SUBROUTINE kfinit
  2553. !-------------------------------------------------------
  2554. END MODULE module_cu_kf