/wrfv2_fire/phys/module_cu_gd.F

http://github.com/jbeezley/wrf-fire · FORTRAN Legacy · 4555 lines · 3062 code · 317 blank · 1176 comment · 192 complexity · f99ad882e1f460753dbe05b590e319d4 MD5 · raw file

Large files are truncated click here to view the full file

  1. !WRF:MODEL_LAYER:PHYSICS
  2. !
  3. MODULE module_cu_gd
  4. CONTAINS
  5. !-------------------------------------------------------------
  6. SUBROUTINE GRELLDRV( &
  7. DT,itimestep,DX &
  8. ,rho,RAINCV,PRATEC &
  9. ,U,V,t,W,q,p,pi &
  10. ,dz8w,p8w,XLV,CP,G,r_v &
  11. ,STEPCU,htop,hbot &
  12. ,CU_ACT_FLAG,warm_rain &
  13. ,APR_GR,APR_W,APR_MC,APR_ST,APR_AS &
  14. ,APR_CAPMA,APR_CAPME,APR_CAPMI &
  15. ,MASS_FLUX,XF_ENS,PR_ENS,HT,XLAND,gsw &
  16. ,GDC,GDC2 &
  17. ,ensdim,maxiens,maxens,maxens2,maxens3 &
  18. ,ids,ide, jds,jde, kds,kde &
  19. ,ims,ime, jms,jme, kms,kme &
  20. ,its,ite, jts,jte, kts,kte &
  21. ,periodic_x,periodic_y &
  22. ,RQVCUTEN,RQCCUTEN,RQICUTEN &
  23. ,RQVFTEN,RQVBLTEN &
  24. ,RTHFTEN,RTHCUTEN,RTHRATEN,RTHBLTEN &
  25. ,F_QV ,F_QC ,F_QR ,F_QI ,F_QS &
  26. ,CFU1,CFD1,DFU1,EFU1,DFD1,EFD1,f_flux )
  27. !-------------------------------------------------------------
  28. IMPLICIT NONE
  29. !-------------------------------------------------------------
  30. INTEGER, INTENT(IN ) :: &
  31. ids,ide, jds,jde, kds,kde, &
  32. ims,ime, jms,jme, kms,kme, &
  33. its,ite, jts,jte, kts,kte
  34. LOGICAL periodic_x,periodic_y
  35. integer, intent (in ) :: &
  36. ensdim,maxiens,maxens,maxens2,maxens3
  37. INTEGER, INTENT(IN ) :: STEPCU, ITIMESTEP
  38. LOGICAL, INTENT(IN ) :: warm_rain
  39. REAL, INTENT(IN ) :: XLV, R_v
  40. REAL, INTENT(IN ) :: CP,G
  41. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
  42. INTENT(IN ) :: &
  43. U, &
  44. V, &
  45. W, &
  46. pi, &
  47. t, &
  48. q, &
  49. p, &
  50. dz8w, &
  51. p8w, &
  52. rho
  53. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
  54. OPTIONAL , &
  55. INTENT(INOUT ) :: &
  56. GDC,GDC2
  57. REAL, DIMENSION( ims:ime , jms:jme ),INTENT(IN) :: GSW,HT,XLAND
  58. !
  59. REAL, INTENT(IN ) :: DT, DX
  60. !
  61. REAL, DIMENSION( ims:ime , jms:jme ), &
  62. INTENT(INOUT) :: RAINCV, PRATEC, MASS_FLUX, &
  63. APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
  64. APR_CAPMA,APR_CAPME,APR_CAPMI,htop,hbot
  65. !+lxz
  66. ! REAL, DIMENSION( ims:ime , jms:jme ) :: & !, INTENT(INOUT) :: &
  67. ! HTOP, &! highest model layer penetrated by cumulus since last reset in radiation_driver
  68. ! HBOT ! lowest model layer penetrated by cumulus since last reset in radiation_driver
  69. ! ! HBOT>HTOP follow physics leveling convention
  70. LOGICAL, DIMENSION( ims:ime , jms:jme ), &
  71. INTENT(INOUT) :: CU_ACT_FLAG
  72. !
  73. ! Optionals
  74. !
  75. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
  76. OPTIONAL, &
  77. INTENT(INOUT) :: RTHFTEN, &
  78. RQVFTEN
  79. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
  80. OPTIONAL, &
  81. INTENT(IN ) :: &
  82. RTHRATEN, &
  83. RTHBLTEN, &
  84. RQVBLTEN
  85. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
  86. OPTIONAL, &
  87. INTENT(INOUT) :: &
  88. RTHCUTEN, &
  89. RQVCUTEN, &
  90. RQCCUTEN, &
  91. RQICUTEN
  92. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
  93. OPTIONAL, &
  94. INTENT(INOUT) :: &
  95. CFU1, &
  96. CFD1, &
  97. DFU1, &
  98. EFU1, &
  99. DFD1, &
  100. EFD1
  101. !
  102. ! Flags relating to the optional tendency arrays declared above
  103. ! Models that carry the optional tendencies will provdide the
  104. ! optional arguments at compile time; these flags all the model
  105. ! to determine at run-time whether a particular tracer is in
  106. ! use or not.
  107. !
  108. LOGICAL, OPTIONAL :: &
  109. F_QV &
  110. ,F_QC &
  111. ,F_QR &
  112. ,F_QI &
  113. ,F_QS
  114. LOGICAL, intent(in), OPTIONAL :: f_flux
  115. ! LOCAL VARS
  116. real, dimension ( ims:ime , jms:jme , 1:ensdim) :: &
  117. massfln,xf_ens,pr_ens
  118. real, dimension (its:ite,kts:kte+1) :: &
  119. OUTT,OUTQ,OUTQC,phh,cupclw, &
  120. outCFU1,outCFD1,outDFU1,outEFU1,outDFD1,outEFD1
  121. logical :: l_flux
  122. real, dimension (its:ite) :: &
  123. pret, ter11, aa0, fp
  124. !+lxz
  125. integer, dimension (its:ite) :: &
  126. kbcon, ktop
  127. !.lxz
  128. integer, dimension (its:ite,jts:jte) :: &
  129. iact_old_gr
  130. integer :: ichoice,iens,ibeg,iend,jbeg,jend
  131. !
  132. ! basic environmental input includes moisture convergence (mconv)
  133. ! omega (omeg), windspeed (us,vs), and a flag (aaeq) to turn off
  134. ! convection for this call only and at that particular gridpoint
  135. !
  136. real, dimension (its:ite,kts:kte+1) :: &
  137. T2d,TN,q2d,qo,PO,P2d,US,VS,omeg
  138. real, dimension (its:ite) :: &
  139. Z1,PSUR,AAEQ,direction,mconv,cuten,umean,vmean,pmean
  140. INTEGER :: i,j,k,ICLDCK,ipr,jpr
  141. REAL :: tcrit,dp,dq
  142. INTEGER :: itf,jtf,ktf
  143. REAL :: rkbcon,rktop !-lxz
  144. l_flux=.FALSE.
  145. if (present(f_flux)) l_flux=f_flux
  146. if (l_flux) then
  147. l_flux = l_flux .and. present(cfu1) .and. present(cfd1) &
  148. .and. present(dfu1) .and. present(efu1) &
  149. .and. present(dfd1) .and. present(efd1)
  150. endif
  151. ichoice=0
  152. iens=1
  153. ipr=0
  154. jpr=0
  155. IF ( periodic_x ) THEN
  156. ibeg=max(its,ids)
  157. iend=min(ite,ide-1)
  158. ELSE
  159. ibeg=max(its,ids+4)
  160. iend=min(ite,ide-5)
  161. END IF
  162. IF ( periodic_y ) THEN
  163. jbeg=max(jts,jds)
  164. jend=min(jte,jde-1)
  165. ELSE
  166. jbeg=max(jts,jds+4)
  167. jend=min(jte,jde-5)
  168. END IF
  169. tcrit=258.
  170. itf=MIN(ite,ide-1)
  171. ktf=MIN(kte,kde-1)
  172. jtf=MIN(jte,jde-1)
  173. !
  174. DO 100 J = jts,jtf
  175. DO I= its,itf
  176. cuten(i)=0.
  177. iact_old_gr(i,j)=0
  178. mass_flux(i,j)=0.
  179. pratec(i,j) = 0.
  180. raincv(i,j)=0.
  181. CU_ACT_FLAG(i,j) = .true.
  182. ENDDO
  183. DO k=1,ensdim
  184. DO I= its,itf
  185. massfln(i,j,k)=0.
  186. ENDDO
  187. ENDDO
  188. #if ( EM_CORE == 1 )
  189. DO k= kts,ktf
  190. DO I= its,itf
  191. RTHFTEN(i,k,j)=(RTHFTEN(i,k,j)+RTHRATEN(i,k,j)+RTHBLTEN(i,k,j))*pi(i,k,j)
  192. RQVFTEN(i,k,j)=RQVFTEN(i,k,j)+RQVBLTEN(i,k,j)
  193. ENDDO
  194. ENDDO
  195. #endif
  196. ! put hydrostatic pressure on half levels
  197. DO K=kts,ktf
  198. DO I=ITS,ITF
  199. phh(i,k) = p(i,k,j)
  200. ENDDO
  201. ENDDO
  202. DO I=ITS,ITF
  203. PSUR(I)=p8w(I,1,J)*.01
  204. TER11(I)=HT(i,j)
  205. mconv(i)=0.
  206. aaeq(i)=0.
  207. direction(i)=0.
  208. pret(i)=0.
  209. umean(i)=0.
  210. vmean(i)=0.
  211. pmean(i)=0.
  212. ENDDO
  213. DO K=kts,ktf
  214. DO I=ITS,ITF
  215. omeg(i,k)=0.
  216. ! cupclw(i,k)=0.
  217. po(i,k)=phh(i,k)*.01
  218. P2d(I,K)=PO(i,k)
  219. US(I,K) =u(i,k,j)
  220. VS(I,K) =v(i,k,j)
  221. T2d(I,K)=t(i,k,j)
  222. q2d(I,K)=q(i,k,j)
  223. omeg(I,K)= -g*rho(i,k,j)*w(i,k,j)
  224. TN(I,K)=t2d(i,k)+RTHFTEN(i,k,j)*dt
  225. IF(TN(I,K).LT.200.)TN(I,K)=T2d(I,K)
  226. QO(I,K)=q2d(i,k)+RQVFTEN(i,k,j)*dt
  227. IF(Q2d(I,K).LT.1.E-08)Q2d(I,K)=1.E-08
  228. IF(QO(I,K).LT.1.E-08)QO(I,K)=1.E-08
  229. OUTT(I,K)=0.
  230. OUTQ(I,K)=0.
  231. OUTQC(I,K)=0.
  232. ! RTHFTEN(i,k,j)=0.
  233. ! RQVFTEN(i,k,j)=0.
  234. ENDDO
  235. ENDDO
  236. do k= kts+1,ktf-1
  237. DO I = its,itf
  238. if((p2d(i,1)-p2d(i,k)).gt.150.and.p2d(i,k).gt.300)then
  239. dp=-.5*(p2d(i,k+1)-p2d(i,k-1))
  240. umean(i)=umean(i)+us(i,k)*dp
  241. vmean(i)=vmean(i)+vs(i,k)*dp
  242. pmean(i)=pmean(i)+dp
  243. endif
  244. enddo
  245. enddo
  246. DO I = its,itf
  247. if(pmean(i).gt.0)then
  248. umean(i)=umean(i)/pmean(i)
  249. vmean(i)=vmean(i)/pmean(i)
  250. direction(i)=(atan2(umean(i),vmean(i))+3.1415926)*57.29578
  251. if(direction(i).gt.360.)direction(i)=direction(i)-360.
  252. endif
  253. ENDDO
  254. DO K=kts,ktf-1
  255. DO I = its,itf
  256. dq=(q2d(i,k+1)-q2d(i,k))
  257. mconv(i)=mconv(i)+omeg(i,k)*dq/g
  258. ENDDO
  259. ENDDO
  260. DO I = its,itf
  261. if(mconv(i).lt.0.)mconv(i)=0.
  262. ENDDO
  263. !
  264. !---- CALL CUMULUS PARAMETERIZATION
  265. !
  266. CALL CUP_enss(outqc,j,AAEQ,T2d,Q2d,TER11,TN,QO,PO,PRET, &
  267. P2d,OUTT,OUTQ,DT,PSUR,US,VS,tcrit,iens, &
  268. mconv,massfln,iact_old_gr,omeg,direction,MASS_FLUX, &
  269. maxiens,maxens,maxens2,maxens3,ensdim, &
  270. APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
  271. APR_CAPMA,APR_CAPME,APR_CAPMI,kbcon,ktop, &
  272. xf_ens,pr_ens,XLAND,gsw,cupclw, &
  273. xlv,r_v,cp,g,ichoice,ipr,jpr, &
  274. outCFU1,outCFD1,outDFU1,outEFU1,outDFD1,outEFD1,l_flux,&
  275. ids,ide, jds,jde, kds,kde, &
  276. ims,ime, jms,jme, kms,kme, &
  277. its,ite, jts,jte, kts,kte )
  278. CALL neg_check(dt,q2d,outq,outt,outqc,pret,its,ite,kts,kte,itf,ktf)
  279. if(j.ge.jbeg.and.j.le.jend)then
  280. DO I=its,itf
  281. ! cuten(i)=0.
  282. if(i.ge.ibeg.and.i.le.iend)then
  283. if(pret(i).gt.0.)then
  284. pratec(i,j)=pret(i)
  285. raincv(i,j)=pret(i)*dt
  286. cuten(i)=1.
  287. rkbcon = kte+kts - kbcon(i)
  288. rktop = kte+kts - ktop(i)
  289. if (ktop(i) > HTOP(i,j)) HTOP(i,j) = ktop(i)+.001
  290. if (kbcon(i) < HBOT(i,j)) HBOT(i,j) = kbcon(i)+.001
  291. endif
  292. else
  293. pret(i)=0.
  294. endif
  295. ENDDO
  296. DO K=kts,ktf
  297. DO I=its,itf
  298. RTHCUTEN(I,K,J)=outt(i,k)*cuten(i)/pi(i,k,j)
  299. RQVCUTEN(I,K,J)=outq(i,k)*cuten(i)
  300. ENDDO
  301. ENDDO
  302. IF(PRESENT(RQCCUTEN)) THEN
  303. IF ( F_QC ) THEN
  304. DO K=kts,ktf
  305. DO I=its,itf
  306. RQCCUTEN(I,K,J)=outqc(I,K)*cuten(i)
  307. IF ( PRESENT( GDC ) ) GDC(I,K,J)=CUPCLW(I,K)*cuten(i)
  308. IF ( PRESENT( GDC2 ) ) GDC2(I,K,J)=0.
  309. ENDDO
  310. ENDDO
  311. ENDIF
  312. ENDIF
  313. !...... QSTEN STORES GRAUPEL TENDENCY IF IT EXISTS, OTHERISE SNOW (V2)
  314. IF(PRESENT(RQICUTEN).AND.PRESENT(RQCCUTEN))THEN
  315. IF (F_QI) THEN
  316. DO K=kts,ktf
  317. DO I=its,itf
  318. if(t2d(i,k).lt.258.)then
  319. RQICUTEN(I,K,J)=outqc(I,K)*cuten(i)
  320. RQCCUTEN(I,K,J)=0.
  321. IF ( PRESENT( GDC2 ) ) GDC2(I,K,J)=CUPCLW(I,K)*cuten(i)
  322. else
  323. RQICUTEN(I,K,J)=0.
  324. RQCCUTEN(I,K,J)=outqc(I,K)*cuten(i)
  325. IF ( PRESENT( GDC ) ) GDC(I,K,J)=CUPCLW(I,K)*cuten(i)
  326. endif
  327. ENDDO
  328. ENDDO
  329. ENDIF
  330. ENDIF
  331. if (l_flux) then
  332. DO K=kts,ktf
  333. DO I=its,itf
  334. cfu1(i,k,j)=outcfu1(i,k)*cuten(i)
  335. cfd1(i,k,j)=outcfd1(i,k)*cuten(i)
  336. dfu1(i,k,j)=outdfu1(i,k)*cuten(i)
  337. efu1(i,k,j)=outefu1(i,k)*cuten(i)
  338. dfd1(i,k,j)=outdfd1(i,k)*cuten(i)
  339. efd1(i,k,j)=outefd1(i,k)*cuten(i)
  340. enddo
  341. enddo
  342. endif
  343. endif !jbeg,jend
  344. 100 continue
  345. END SUBROUTINE GRELLDRV
  346. SUBROUTINE CUP_enss(OUTQC,J,AAEQ,T,Q,Z1, &
  347. TN,QO,PO,PRE,P,OUTT,OUTQ,DTIME,PSUR,US,VS, &
  348. TCRIT,iens,mconv,massfln,iact, &
  349. omeg,direction,massflx,maxiens, &
  350. maxens,maxens2,maxens3,ensdim, &
  351. APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
  352. APR_CAPMA,APR_CAPME,APR_CAPMI,kbcon,ktop, & !-lxz
  353. xf_ens,pr_ens,xland,gsw,cupclw, &
  354. xl,rv,cp,g,ichoice,ipr,jpr, &
  355. outCFU1,outCFD1,outDFU1,outEFU1,outDFD1,outEFD1,l_flux, &
  356. ids,ide, jds,jde, kds,kde, &
  357. ims,ime, jms,jme, kms,kme, &
  358. its,ite, jts,jte, kts,kte )
  359. IMPLICIT NONE
  360. integer &
  361. ,intent (in ) :: &
  362. ids,ide, jds,jde, kds,kde, &
  363. ims,ime, jms,jme, kms,kme, &
  364. its,ite, jts,jte, kts,kte,ipr,jpr
  365. integer, intent (in ) :: &
  366. j,ensdim,maxiens,maxens,maxens2,maxens3,ichoice,iens
  367. !
  368. !
  369. !
  370. real, dimension (ims:ime,jms:jme,1:ensdim) &
  371. ,intent (inout) :: &
  372. massfln,xf_ens,pr_ens
  373. real, dimension (ims:ime,jms:jme) &
  374. ,intent (inout ) :: &
  375. APR_GR,APR_W,APR_MC,APR_ST,APR_AS,APR_CAPMA, &
  376. APR_CAPME,APR_CAPMI,massflx
  377. real, dimension (ims:ime,jms:jme) &
  378. ,intent (in ) :: &
  379. xland,gsw
  380. integer, dimension (its:ite,jts:jte) &
  381. ,intent (in ) :: &
  382. iact
  383. ! outtem = output temp tendency (per s)
  384. ! outq = output q tendency (per s)
  385. ! outqc = output qc tendency (per s)
  386. ! pre = output precip
  387. real, dimension (its:ite,kts:kte) &
  388. ,intent (out ) :: &
  389. OUTT,OUTQ,OUTQC,CUPCLW, &
  390. outCFU1,outCFD1,outDFU1,outEFU1,outDFD1,outEFD1
  391. logical, intent(in) :: l_flux
  392. real, dimension (its:ite) &
  393. ,intent (out ) :: &
  394. pre
  395. !+lxz
  396. integer, dimension (its:ite) &
  397. ,intent (out ) :: &
  398. kbcon,ktop
  399. !.lxz
  400. !
  401. ! basic environmental input includes moisture convergence (mconv)
  402. ! omega (omeg), windspeed (us,vs), and a flag (aaeq) to turn off
  403. ! convection for this call only and at that particular gridpoint
  404. !
  405. real, dimension (its:ite,kts:kte) &
  406. ,intent (in ) :: &
  407. T,TN,PO,P,US,VS,omeg
  408. real, dimension (its:ite,kts:kte) &
  409. ,intent (inout) :: &
  410. Q,QO
  411. real, dimension (its:ite) &
  412. ,intent (in ) :: &
  413. Z1,PSUR,AAEQ,direction,mconv
  414. real &
  415. ,intent (in ) :: &
  416. dtime,tcrit,xl,cp,rv,g
  417. !
  418. ! local ensemble dependent variables in this routine
  419. !
  420. real, dimension (its:ite,1:maxens) :: &
  421. xaa0_ens
  422. real, dimension (1:maxens) :: &
  423. mbdt_ens
  424. real, dimension (1:maxens2) :: &
  425. edt_ens
  426. real, dimension (its:ite,1:maxens2) :: &
  427. edtc
  428. real, dimension (its:ite,kts:kte,1:maxens2) :: &
  429. dellat_ens,dellaqc_ens,dellaq_ens,pwo_ens
  430. real, dimension (its:ite,kts:kte,1:maxens2) :: &
  431. CFU1_ens,CFD1_ens,DFU1_ens,EFU1_ens,DFD1_ens,EFD1_ens
  432. !
  433. !
  434. !
  435. !***************** the following are your basic environmental
  436. ! variables. They carry a "_cup" if they are
  437. ! on model cloud levels (staggered). They carry
  438. ! an "o"-ending (z becomes zo), if they are the forced
  439. ! variables. They are preceded by x (z becomes xz)
  440. ! to indicate modification by some typ of cloud
  441. !
  442. ! z = heights of model levels
  443. ! q = environmental mixing ratio
  444. ! qes = environmental saturation mixing ratio
  445. ! t = environmental temp
  446. ! p = environmental pressure
  447. ! he = environmental moist static energy
  448. ! hes = environmental saturation moist static energy
  449. ! z_cup = heights of model cloud levels
  450. ! q_cup = environmental q on model cloud levels
  451. ! qes_cup = saturation q on model cloud levels
  452. ! t_cup = temperature (Kelvin) on model cloud levels
  453. ! p_cup = environmental pressure
  454. ! he_cup = moist static energy on model cloud levels
  455. ! hes_cup = saturation moist static energy on model cloud levels
  456. ! gamma_cup = gamma on model cloud levels
  457. !
  458. !
  459. ! hcd = moist static energy in downdraft
  460. ! zd normalized downdraft mass flux
  461. ! dby = buoancy term
  462. ! entr = entrainment rate
  463. ! zd = downdraft normalized mass flux
  464. ! entr= entrainment rate
  465. ! hcd = h in model cloud
  466. ! bu = buoancy term
  467. ! zd = normalized downdraft mass flux
  468. ! gamma_cup = gamma on model cloud levels
  469. ! mentr_rate = entrainment rate
  470. ! qcd = cloud q (including liquid water) after entrainment
  471. ! qrch = saturation q in cloud
  472. ! pwd = evaporate at that level
  473. ! pwev = total normalized integrated evaoprate (I2)
  474. ! entr= entrainment rate
  475. ! z1 = terrain elevation
  476. ! entr = downdraft entrainment rate
  477. ! jmin = downdraft originating level
  478. ! kdet = level above ground where downdraft start detraining
  479. ! psur = surface pressure
  480. ! z1 = terrain elevation
  481. ! pr_ens = precipitation ensemble
  482. ! xf_ens = mass flux ensembles
  483. ! massfln = downdraft mass flux ensembles used in next timestep
  484. ! omeg = omega from large scale model
  485. ! mconv = moisture convergence from large scale model
  486. ! zd = downdraft normalized mass flux
  487. ! zu = updraft normalized mass flux
  488. ! dir = "storm motion"
  489. ! mbdt = arbitrary numerical parameter
  490. ! dtime = dt over which forcing is applied
  491. ! iact_gr_old = flag to tell where convection was active
  492. ! kbcon = LFC of parcel from k22
  493. ! k22 = updraft originating level
  494. ! icoic = flag if only want one closure (usually set to zero!)
  495. ! dby = buoancy term
  496. ! ktop = cloud top (output)
  497. ! xmb = total base mass flux
  498. ! hc = cloud moist static energy
  499. ! hkb = moist static energy at originating level
  500. ! mentr_rate = entrainment rate
  501. real, dimension (its:ite,kts:kte) :: &
  502. he,hes,qes,z, &
  503. heo,heso,qeso,zo, &
  504. xhe,xhes,xqes,xz,xt,xq, &
  505. qes_cup,q_cup,he_cup,hes_cup,z_cup,p_cup,gamma_cup,t_cup, &
  506. qeso_cup,qo_cup,heo_cup,heso_cup,zo_cup,po_cup,gammao_cup, &
  507. tn_cup, &
  508. xqes_cup,xq_cup,xhe_cup,xhes_cup,xz_cup,xp_cup,xgamma_cup, &
  509. xt_cup, &
  510. dby,qc,qrcd,pwd,pw,hcd,qcd,dbyd,hc,qrc,zu,zd,clw_all, &
  511. dbyo,qco,qrcdo,pwdo,pwo,hcdo,qcdo,dbydo,hco,qrco,zuo,zdo, &
  512. xdby,xqc,xqrcd,xpwd,xpw,xhcd,xqcd,xhc,xqrc,xzu,xzd, &
  513. ! cd = detrainment function for updraft
  514. ! cdd = detrainment function for downdraft
  515. ! dellat = change of temperature per unit mass flux of cloud ensemble
  516. ! dellaq = change of q per unit mass flux of cloud ensemble
  517. ! dellaqc = change of qc per unit mass flux of cloud ensemble
  518. cd,cdd,scr1,DELLAH,DELLAQ,DELLAT,DELLAQC, &
  519. CFU1,CFD1,DFU1,EFU1,DFD1,EFD1
  520. ! aa0 cloud work function for downdraft
  521. ! edt = epsilon
  522. ! aa0 = cloud work function without forcing effects
  523. ! aa1 = cloud work function with forcing effects
  524. ! xaa0 = cloud work function with cloud effects (ensemble dependent)
  525. ! edt = epsilon
  526. real, dimension (its:ite) :: &
  527. edt,edto,edtx,AA1,AA0,XAA0,HKB,HKBO,aad,XHKB,QKB,QKBO, &
  528. XMB,XPWAV,XPWEV,PWAV,PWEV,PWAVO,PWEVO,BU,BUO,cap_max,xland1, &
  529. cap_max_increment,closure_n
  530. integer, dimension (its:ite) :: &
  531. kzdown,KDET,K22,KB,JMIN,kstabi,kstabm,K22x, & !-lxz
  532. KBCONx,KBx,KTOPx,ierr,ierr2,ierr3,KBMAX
  533. integer :: &
  534. nall,iedt,nens,nens3,ki,I,K,KK,iresult
  535. real :: &
  536. day,dz,mbdt,entr_rate,radius,entrd_rate,mentr_rate,mentrd_rate, &
  537. zcutdown,edtmax,edtmin,depth_min,zkbmax,z_detr,zktop, &
  538. massfld,dh,cap_maxs
  539. integer :: itf,jtf,ktf
  540. integer :: jmini
  541. logical :: keep_going
  542. itf=MIN(ite,ide-1)
  543. ktf=MIN(kte,kde-1)
  544. jtf=MIN(jte,jde-1)
  545. !sms$distribute end
  546. day=86400.
  547. do i=its,itf
  548. closure_n(i)=16.
  549. xland1(i)=1.
  550. if(xland(i,j).gt.1.5)xland1(i)=0.
  551. cap_max_increment(i)=25.
  552. enddo
  553. !
  554. !--- specify entrainmentrate and detrainmentrate
  555. !
  556. if(iens.le.4)then
  557. radius=14000.-float(iens)*2000.
  558. else
  559. radius=12000.
  560. endif
  561. !
  562. !--- gross entrainment rate (these may be changed later on in the
  563. !--- program, depending what your detrainment is!!)
  564. !
  565. entr_rate=.2/radius
  566. !
  567. !--- entrainment of mass
  568. !
  569. mentrd_rate=0.
  570. mentr_rate=entr_rate
  571. !
  572. !--- initial detrainmentrates
  573. !
  574. do k=kts,ktf
  575. do i=its,itf
  576. cupclw(i,k)=0.
  577. cd(i,k)=0.1*entr_rate
  578. cdd(i,k)=0.
  579. enddo
  580. enddo
  581. !
  582. !--- max/min allowed value for epsilon (ratio downdraft base mass flux/updraft
  583. ! base mass flux
  584. !
  585. edtmax=.8
  586. edtmin=.2
  587. !
  588. !--- minimum depth (m), clouds must have
  589. !
  590. depth_min=500.
  591. !
  592. !--- maximum depth (mb) of capping
  593. !--- inversion (larger cap = no convection)
  594. !
  595. cap_maxs=75.
  596. !sms$to_local(grid_dh: <1, mix :size>, <2, mjx :size>) begin
  597. DO 7 i=its,itf
  598. kbmax(i)=1
  599. aa0(i)=0.
  600. aa1(i)=0.
  601. aad(i)=0.
  602. edt(i)=0.
  603. kstabm(i)=ktf-1
  604. IERR(i)=0
  605. IERR2(i)=0
  606. IERR3(i)=0
  607. if(aaeq(i).lt.-1.)then
  608. ierr(i)=20
  609. endif
  610. 7 CONTINUE
  611. !
  612. !--- first check for upstream convection
  613. !
  614. do i=its,itf
  615. cap_max(i)=cap_maxs
  616. ! if(tkmax(i,j).lt.2.)cap_max(i)=25.
  617. if(gsw(i,j).lt.1.)cap_max(i)=25.
  618. iresult=0
  619. ! massfld=0.
  620. ! call cup_direction2(i,j,direction,iact, &
  621. ! cu_mfx,iresult,0,massfld, &
  622. ! ids,ide, jds,jde, kds,kde, &
  623. ! ims,ime, jms,jme, kms,kme, &
  624. ! its,ite, jts,jte, kts,kte)
  625. ! cap_max(i)=cap_maxs
  626. if(iresult.eq.1)then
  627. cap_max(i)=cap_maxs+20.
  628. endif
  629. ! endif
  630. enddo
  631. !
  632. !--- max height(m) above ground where updraft air can originate
  633. !
  634. zkbmax=4000.
  635. !
  636. !--- height(m) above which no downdrafts are allowed to originate
  637. !
  638. zcutdown=3000.
  639. !
  640. !--- depth(m) over which downdraft detrains all its mass
  641. !
  642. z_detr=1250.
  643. !
  644. do nens=1,maxens
  645. mbdt_ens(nens)=(float(nens)-3.)*dtime*1.e-3+dtime*5.E-03
  646. enddo
  647. do nens=1,maxens2
  648. edt_ens(nens)=.95-float(nens)*.01
  649. enddo
  650. ! if(j.eq.jpr)then
  651. ! print *,'radius ensemble ',iens,radius
  652. ! print *,mbdt_ens
  653. ! print *,edt_ens
  654. ! endif
  655. !
  656. !--- environmental conditions, FIRST HEIGHTS
  657. !
  658. do i=its,itf
  659. if(ierr(i).ne.20)then
  660. do k=1,maxens*maxens2*maxens3
  661. xf_ens(i,j,(iens-1)*maxens*maxens2*maxens3+k)=0.
  662. pr_ens(i,j,(iens-1)*maxens*maxens2*maxens3+k)=0.
  663. enddo
  664. endif
  665. enddo
  666. !
  667. !--- calculate moist static energy, heights, qes
  668. !
  669. call cup_env(z,qes,he,hes,t,q,p,z1, &
  670. psur,ierr,tcrit,0,xl,cp, &
  671. ids,ide, jds,jde, kds,kde, &
  672. ims,ime, jms,jme, kms,kme, &
  673. its,ite, jts,jte, kts,kte)
  674. call cup_env(zo,qeso,heo,heso,tn,qo,po,z1, &
  675. psur,ierr,tcrit,0,xl,cp, &
  676. ids,ide, jds,jde, kds,kde, &
  677. ims,ime, jms,jme, kms,kme, &
  678. its,ite, jts,jte, kts,kte)
  679. !
  680. !--- environmental values on cloud levels
  681. !
  682. call cup_env_clev(t,qes,q,he,hes,z,p,qes_cup,q_cup,he_cup, &
  683. hes_cup,z_cup,p_cup,gamma_cup,t_cup,psur, &
  684. ierr,z1,xl,rv,cp, &
  685. ids,ide, jds,jde, kds,kde, &
  686. ims,ime, jms,jme, kms,kme, &
  687. its,ite, jts,jte, kts,kte)
  688. call cup_env_clev(tn,qeso,qo,heo,heso,zo,po,qeso_cup,qo_cup, &
  689. heo_cup,heso_cup,zo_cup,po_cup,gammao_cup,tn_cup,psur, &
  690. ierr,z1,xl,rv,cp, &
  691. ids,ide, jds,jde, kds,kde, &
  692. ims,ime, jms,jme, kms,kme, &
  693. its,ite, jts,jte, kts,kte)
  694. do i=its,itf
  695. if(ierr(i).eq.0)then
  696. !
  697. do k=kts,ktf-2
  698. if(zo_cup(i,k).gt.zkbmax+z1(i))then
  699. kbmax(i)=k
  700. go to 25
  701. endif
  702. enddo
  703. 25 continue
  704. !
  705. !
  706. !--- level where detrainment for downdraft starts
  707. !
  708. do k=kts,ktf
  709. if(zo_cup(i,k).gt.z_detr+z1(i))then
  710. kdet(i)=k
  711. go to 26
  712. endif
  713. enddo
  714. 26 continue
  715. !
  716. endif
  717. enddo
  718. !
  719. !
  720. !
  721. !------- DETERMINE LEVEL WITH HIGHEST MOIST STATIC ENERGY CONTENT - K22
  722. !
  723. CALL cup_MAXIMI(HEO_CUP,3,KBMAX,K22,ierr, &
  724. ids,ide, jds,jde, kds,kde, &
  725. ims,ime, jms,jme, kms,kme, &
  726. its,ite, jts,jte, kts,kte)
  727. DO 36 i=its,itf
  728. IF(ierr(I).eq.0.)THEN
  729. IF(K22(I).GE.KBMAX(i))ierr(i)=2
  730. endif
  731. 36 CONTINUE
  732. !
  733. !--- DETERMINE THE LEVEL OF CONVECTIVE CLOUD BASE - KBCON
  734. !
  735. call cup_kbcon(cap_max_increment,1,k22,kbcon,heo_cup,heso_cup, &
  736. ierr,kbmax,po_cup,cap_max, &
  737. ids,ide, jds,jde, kds,kde, &
  738. ims,ime, jms,jme, kms,kme, &
  739. its,ite, jts,jte, kts,kte)
  740. ! call cup_kbcon_cin(1,k22,kbcon,heo_cup,heso_cup,z,tn_cup, &
  741. ! qeso_cup,ierr,kbmax,po_cup,cap_max,xl,cp,&
  742. ! ids,ide, jds,jde, kds,kde, &
  743. ! ims,ime, jms,jme, kms,kme, &
  744. ! its,ite, jts,jte, kts,kte)
  745. !
  746. !--- increase detrainment in stable layers
  747. !
  748. CALL cup_minimi(HEso_cup,Kbcon,kstabm,kstabi,ierr, &
  749. ids,ide, jds,jde, kds,kde, &
  750. ims,ime, jms,jme, kms,kme, &
  751. its,ite, jts,jte, kts,kte)
  752. do i=its,itf
  753. IF(ierr(I).eq.0.)THEN
  754. if(kstabm(i)-1.gt.kstabi(i))then
  755. do k=kstabi(i),kstabm(i)-1
  756. cd(i,k)=cd(i,k-1)+1.5*entr_rate
  757. if(cd(i,k).gt.10.0*entr_rate)cd(i,k)=10.0*entr_rate
  758. enddo
  759. ENDIF
  760. ENDIF
  761. ENDDO
  762. !
  763. !--- calculate incloud moist static energy
  764. !
  765. call cup_up_he(k22,hkb,z_cup,cd,mentr_rate,he_cup,hc, &
  766. kbcon,ierr,dby,he,hes_cup, &
  767. ids,ide, jds,jde, kds,kde, &
  768. ims,ime, jms,jme, kms,kme, &
  769. its,ite, jts,jte, kts,kte)
  770. call cup_up_he(k22,hkbo,zo_cup,cd,mentr_rate,heo_cup,hco, &
  771. kbcon,ierr,dbyo,heo,heso_cup, &
  772. ids,ide, jds,jde, kds,kde, &
  773. ims,ime, jms,jme, kms,kme, &
  774. its,ite, jts,jte, kts,kte)
  775. !--- DETERMINE CLOUD TOP - KTOP
  776. !
  777. call cup_ktop(1,dbyo,kbcon,ktop,ierr, &
  778. ids,ide, jds,jde, kds,kde, &
  779. ims,ime, jms,jme, kms,kme, &
  780. its,ite, jts,jte, kts,kte)
  781. DO 37 i=its,itf
  782. kzdown(i)=0
  783. if(ierr(i).eq.0)then
  784. zktop=(zo_cup(i,ktop(i))-z1(i))*.6
  785. zktop=min(zktop+z1(i),zcutdown+z1(i))
  786. do k=kts,kte
  787. if(zo_cup(i,k).gt.zktop)then
  788. kzdown(i)=k
  789. go to 37
  790. endif
  791. enddo
  792. endif
  793. 37 CONTINUE
  794. !
  795. !--- DOWNDRAFT ORIGINATING LEVEL - JMIN
  796. !
  797. call cup_minimi(HEso_cup,K22,kzdown,JMIN,ierr, &
  798. ids,ide, jds,jde, kds,kde, &
  799. ims,ime, jms,jme, kms,kme, &
  800. its,ite, jts,jte, kts,kte)
  801. DO 100 i=its,ite
  802. IF(ierr(I).eq.0.)THEN
  803. !
  804. !--- check whether it would have buoyancy, if there where
  805. !--- no entrainment/detrainment
  806. !
  807. !jm begin 20061212: the following code replaces code that
  808. ! was too complex and causing problem for optimization.
  809. ! Done in consultation with G. Grell.
  810. jmini = jmin(i)
  811. keep_going = .TRUE.
  812. DO WHILE ( keep_going )
  813. keep_going = .FALSE.
  814. if ( jmini - 1 .lt. kdet(i) ) kdet(i) = jmini-1
  815. if ( jmini .ge. ktop(i)-1 ) jmini = ktop(i) - 2
  816. ki = jmini
  817. hcdo(i,ki)=heso_cup(i,ki)
  818. DZ=Zo_cup(i,Ki+1)-Zo_cup(i,Ki)
  819. dh=0.
  820. DO k=ki-1,1,-1
  821. hcdo(i,k)=heso_cup(i,jmini)
  822. DZ=Zo_cup(i,K+1)-Zo_cup(i,K)
  823. dh=dh+dz*(HCDo(i,K)-heso_cup(i,k))
  824. IF(dh.gt.0.)THEN
  825. jmini=jmini-1
  826. IF ( jmini .gt. 3 ) THEN
  827. keep_going = .TRUE.
  828. ELSE
  829. ierr(i) = 9
  830. EXIT
  831. ENDIF
  832. ENDIF
  833. ENDDO
  834. ENDDO
  835. jmin(i) = jmini
  836. IF ( jmini .le. 3 ) THEN
  837. ierr(i)=4
  838. ENDIF
  839. !jm end 20061212
  840. ENDIF
  841. 100 CONTINUE
  842. !
  843. ! - Must have at least depth_min m between cloud convective base
  844. ! and cloud top.
  845. !
  846. do i=its,itf
  847. IF(ierr(I).eq.0.)THEN
  848. IF(-zo_cup(I,KBCON(I))+zo_cup(I,KTOP(I)).LT.depth_min)then
  849. ierr(i)=6
  850. endif
  851. endif
  852. enddo
  853. !
  854. !c--- normalized updraft mass flux profile
  855. !
  856. call cup_up_nms(zu,z_cup,mentr_rate,cd,kbcon,ktop,ierr,k22, &
  857. ids,ide, jds,jde, kds,kde, &
  858. ims,ime, jms,jme, kms,kme, &
  859. its,ite, jts,jte, kts,kte)
  860. call cup_up_nms(zuo,zo_cup,mentr_rate,cd,kbcon,ktop,ierr,k22, &
  861. ids,ide, jds,jde, kds,kde, &
  862. ims,ime, jms,jme, kms,kme, &
  863. its,ite, jts,jte, kts,kte)
  864. !
  865. !c--- normalized downdraft mass flux profile,also work on bottom detrainment
  866. !--- in this routine
  867. !
  868. call cup_dd_nms(zd,z_cup,cdd,mentrd_rate,jmin,ierr, &
  869. 0,kdet,z1, &
  870. ids,ide, jds,jde, kds,kde, &
  871. ims,ime, jms,jme, kms,kme, &
  872. its,ite, jts,jte, kts,kte)
  873. call cup_dd_nms(zdo,zo_cup,cdd,mentrd_rate,jmin,ierr, &
  874. 1,kdet,z1, &
  875. ids,ide, jds,jde, kds,kde, &
  876. ims,ime, jms,jme, kms,kme, &
  877. its,ite, jts,jte, kts,kte)
  878. !
  879. !--- downdraft moist static energy
  880. !
  881. call cup_dd_he(hes_cup,zd,hcd,z_cup,cdd,mentrd_rate, &
  882. jmin,ierr,he,dbyd,he_cup, &
  883. ids,ide, jds,jde, kds,kde, &
  884. ims,ime, jms,jme, kms,kme, &
  885. its,ite, jts,jte, kts,kte)
  886. call cup_dd_he(heso_cup,zdo,hcdo,zo_cup,cdd,mentrd_rate, &
  887. jmin,ierr,heo,dbydo,he_cup,&
  888. ids,ide, jds,jde, kds,kde, &
  889. ims,ime, jms,jme, kms,kme, &
  890. its,ite, jts,jte, kts,kte)
  891. !
  892. !--- calculate moisture properties of downdraft
  893. !
  894. call cup_dd_moisture(zd,hcd,hes_cup,qcd,qes_cup, &
  895. pwd,q_cup,z_cup,cdd,mentrd_rate,jmin,ierr,gamma_cup, &
  896. pwev,bu,qrcd,q,he,t_cup,2,xl, &
  897. ids,ide, jds,jde, kds,kde, &
  898. ims,ime, jms,jme, kms,kme, &
  899. its,ite, jts,jte, kts,kte)
  900. call cup_dd_moisture(zdo,hcdo,heso_cup,qcdo,qeso_cup, &
  901. pwdo,qo_cup,zo_cup,cdd,mentrd_rate,jmin,ierr,gammao_cup, &
  902. pwevo,bu,qrcdo,qo,heo,tn_cup,1,xl, &
  903. ids,ide, jds,jde, kds,kde, &
  904. ims,ime, jms,jme, kms,kme, &
  905. its,ite, jts,jte, kts,kte)
  906. !
  907. !--- calculate moisture properties of updraft
  908. !
  909. call cup_up_moisture(ierr,z_cup,qc,qrc,pw,pwav, &
  910. kbcon,ktop,cd,dby,mentr_rate,clw_all, &
  911. q,GAMMA_cup,zu,qes_cup,k22,q_cup,xl, &
  912. ids,ide, jds,jde, kds,kde, &
  913. ims,ime, jms,jme, kms,kme, &
  914. its,ite, jts,jte, kts,kte)
  915. do k=kts,ktf
  916. do i=its,itf
  917. cupclw(i,k)=qrc(i,k)
  918. enddo
  919. enddo
  920. call cup_up_moisture(ierr,zo_cup,qco,qrco,pwo,pwavo, &
  921. kbcon,ktop,cd,dbyo,mentr_rate,clw_all, &
  922. qo,GAMMAo_cup,zuo,qeso_cup,k22,qo_cup,xl,&
  923. ids,ide, jds,jde, kds,kde, &
  924. ims,ime, jms,jme, kms,kme, &
  925. its,ite, jts,jte, kts,kte)
  926. !
  927. !--- calculate workfunctions for updrafts
  928. !
  929. call cup_up_aa0(aa0,z,zu,dby,GAMMA_CUP,t_cup, &
  930. kbcon,ktop,ierr, &
  931. ids,ide, jds,jde, kds,kde, &
  932. ims,ime, jms,jme, kms,kme, &
  933. its,ite, jts,jte, kts,kte)
  934. call cup_up_aa0(aa1,zo,zuo,dbyo,GAMMAo_CUP,tn_cup, &
  935. kbcon,ktop,ierr, &
  936. ids,ide, jds,jde, kds,kde, &
  937. ims,ime, jms,jme, kms,kme, &
  938. its,ite, jts,jte, kts,kte)
  939. do i=its,itf
  940. if(ierr(i).eq.0)then
  941. if(aa1(i).eq.0.)then
  942. ierr(i)=17
  943. endif
  944. endif
  945. enddo
  946. !
  947. !--- DETERMINE DOWNDRAFT STRENGTH IN TERMS OF WINDSHEAR
  948. !
  949. call cup_dd_edt(ierr,us,vs,zo,ktop,kbcon,edt,po,pwavo, &
  950. pwevo,edtmax,edtmin,maxens2,edtc, &
  951. ids,ide, jds,jde, kds,kde, &
  952. ims,ime, jms,jme, kms,kme, &
  953. its,ite, jts,jte, kts,kte)
  954. do 250 iedt=1,maxens2
  955. do i=its,itf
  956. if(ierr(i).eq.0)then
  957. edt(i)=edtc(i,iedt)
  958. edto(i)=edtc(i,iedt)
  959. edtx(i)=edtc(i,iedt)
  960. endif
  961. enddo
  962. do k=kts,ktf
  963. do i=its,itf
  964. dellat_ens(i,k,iedt)=0.
  965. dellaq_ens(i,k,iedt)=0.
  966. dellaqc_ens(i,k,iedt)=0.
  967. pwo_ens(i,k,iedt)=0.
  968. enddo
  969. enddo
  970. if (l_flux) then
  971. do k=kts,ktf
  972. do i=its,itf
  973. cfu1_ens(i,k,iedt)=0.
  974. cfd1_ens(i,k,iedt)=0.
  975. dfu1_ens(i,k,iedt)=0.
  976. efu1_ens(i,k,iedt)=0.
  977. dfd1_ens(i,k,iedt)=0.
  978. efd1_ens(i,k,iedt)=0.
  979. enddo
  980. enddo
  981. endif
  982. !
  983. do i=its,itf
  984. aad(i)=0.
  985. enddo
  986. ! do i=its,itf
  987. ! if(ierr(i).eq.0)then
  988. ! eddt(i,j)=edt(i)
  989. ! EDTX(I)=EDT(I)
  990. ! BU(I)=0.
  991. ! BUO(I)=0.
  992. ! endif
  993. ! enddo
  994. !
  995. !---downdraft workfunctions
  996. !
  997. ! call cup_dd_aa0(edt,ierr,aa0,jmin,gamma_cup,t_cup, &
  998. ! hcd,hes_cup,z,zd, &
  999. ! ids,ide, jds,jde, kds,kde, &
  1000. ! ims,ime, jms,jme, kms,kme, &
  1001. ! its,ite, jts,jte, kts,kte)
  1002. ! call cup_dd_aa0(edto,ierr,aad,jmin,gammao_cup,tn_cup, &
  1003. ! hcdo,heso_cup,zo,zdo, &
  1004. ! ids,ide, jds,jde, kds,kde, &
  1005. ! ims,ime, jms,jme, kms,kme, &
  1006. ! its,ite, jts,jte, kts,kte)
  1007. !
  1008. !--- change per unit mass that a model cloud would modify the environment
  1009. !
  1010. !--- 1. in bottom layer
  1011. !
  1012. call cup_dellabot(ipr,jpr,heo_cup,ierr,zo_cup,po,hcdo,edto, &
  1013. zuo,zdo,cdd,heo,dellah,j,mentrd_rate,zo,g, &
  1014. CFU1,CFD1,DFU1,EFU1,DFD1,EFD1,l_flux, &
  1015. ids,ide, jds,jde, kds,kde, &
  1016. ims,ime, jms,jme, kms,kme, &
  1017. its,ite, jts,jte, kts,kte)
  1018. call cup_dellabot(ipr,jpr,qo_cup,ierr,zo_cup,po,qrcdo,edto, &
  1019. zuo,zdo,cdd,qo,dellaq,j,mentrd_rate,zo,g,&
  1020. CFU1,CFD1,DFU1,EFU1,DFD1,EFD1,.FALSE., &
  1021. ids,ide, jds,jde, kds,kde, &
  1022. ims,ime, jms,jme, kms,kme, &
  1023. its,ite, jts,jte, kts,kte)
  1024. !
  1025. !--- 2. everywhere else
  1026. !
  1027. call cup_dellas(ierr,zo_cup,po_cup,hcdo,edto,zdo,cdd, &
  1028. heo,dellah,j,mentrd_rate,zuo,g, &
  1029. cd,hco,ktop,k22,kbcon,mentr_rate,jmin,heo_cup,kdet, &
  1030. k22,ipr,jpr,'deep', &
  1031. CFU1,CFD1,DFU1,EFU1,DFD1,EFD1,l_flux, &
  1032. ids,ide, jds,jde, kds,kde, &
  1033. ims,ime, jms,jme, kms,kme, &
  1034. its,ite, jts,jte, kts,kte)
  1035. !
  1036. !-- take out cloud liquid water for detrainment
  1037. !
  1038. !?? do k=kts,ktf
  1039. do k=kts,ktf-1
  1040. do i=its,itf
  1041. scr1(i,k)=0.
  1042. dellaqc(i,k)=0.
  1043. if(ierr(i).eq.0)then
  1044. ! print *,'in vupnewg, after della ',ierr(i),aa0(i),i,j
  1045. scr1(i,k)=qco(i,k)-qrco(i,k)
  1046. if(k.eq.ktop(i)-0)dellaqc(i,k)= &
  1047. .01*zuo(i,ktop(i))*qrco(i,ktop(i))* &
  1048. 9.81/(po_cup(i,k)-po_cup(i,k+1))
  1049. if(k.lt.ktop(i).and.k.gt.kbcon(i))then
  1050. dz=zo_cup(i,k+1)-zo_cup(i,k)
  1051. dellaqc(i,k)=.01*9.81*cd(i,k)*dz*zuo(i,k) &
  1052. *.5*(qrco(i,k)+qrco(i,k+1))/ &
  1053. (po_cup(i,k)-po_cup(i,k+1))
  1054. endif
  1055. endif
  1056. enddo
  1057. enddo
  1058. call cup_dellas(ierr,zo_cup,po_cup,qrcdo,edto,zdo,cdd, &
  1059. qo,dellaq,j,mentrd_rate,zuo,g, &
  1060. cd,scr1,ktop,k22,kbcon,mentr_rate,jmin,qo_cup,kdet, &
  1061. k22,ipr,jpr,'deep', &
  1062. CFU1,CFD1,DFU1,EFU1,DFD1,EFD1,.FALSE., &
  1063. ids,ide, jds,jde, kds,kde, &
  1064. ims,ime, jms,jme, kms,kme, &
  1065. its,ite, jts,jte, kts,kte )
  1066. !
  1067. !--- using dellas, calculate changed environmental profiles
  1068. !
  1069. ! do 200 nens=1,maxens
  1070. mbdt=mbdt_ens(2)
  1071. do i=its,itf
  1072. xaa0_ens(i,1)=0.
  1073. xaa0_ens(i,2)=0.
  1074. xaa0_ens(i,3)=0.
  1075. enddo
  1076. ! mbdt=mbdt_ens(nens)
  1077. ! do i=its,itf
  1078. ! xaa0_ens(i,nens)=0.
  1079. ! enddo
  1080. do k=kts,ktf
  1081. do i=its,itf
  1082. dellat(i,k)=0.
  1083. if(ierr(i).eq.0)then
  1084. XHE(I,K)=DELLAH(I,K)*MBDT+HEO(I,K)
  1085. XQ(I,K)=DELLAQ(I,K)*MBDT+QO(I,K)
  1086. DELLAT(I,K)=(1./cp)*(DELLAH(I,K)-xl*DELLAQ(I,K))
  1087. XT(I,K)= DELLAT(I,K)*MBDT+TN(I,K)
  1088. IF(XQ(I,K).LE.0.)XQ(I,K)=1.E-08
  1089. ! if(i.eq.ipr.and.j.eq.jpr)then
  1090. ! print *,k,DELLAH(I,K),DELLAQ(I,K),DELLAT(I,K)
  1091. ! endif
  1092. ENDIF
  1093. enddo
  1094. enddo
  1095. do i=its,itf
  1096. if(ierr(i).eq.0)then
  1097. XHE(I,ktf)=HEO(I,ktf)
  1098. XQ(I,ktf)=QO(I,ktf)
  1099. XT(I,ktf)=TN(I,ktf)
  1100. IF(XQ(I,ktf).LE.0.)XQ(I,ktf)=1.E-08
  1101. endif
  1102. enddo
  1103. !
  1104. !--- calculate moist static energy, heights, qes
  1105. !
  1106. call cup_env(xz,xqes,xhe,xhes,xt,xq,po,z1, &
  1107. psur,ierr,tcrit,2,xl,cp, &
  1108. ids,ide, jds,jde, kds,kde, &
  1109. ims,ime, jms,jme, kms,kme, &
  1110. its,ite, jts,jte, kts,kte)
  1111. !
  1112. !--- environmental values on cloud levels
  1113. !
  1114. call cup_env_clev(xt,xqes,xq,xhe,xhes,xz,po,xqes_cup,xq_cup, &
  1115. xhe_cup,xhes_cup,xz_cup,po_cup,gamma_cup,xt_cup,psur, &
  1116. ierr,z1,xl,rv,cp, &
  1117. ids,ide, jds,jde, kds,kde, &
  1118. ims,ime, jms,jme, kms,kme, &
  1119. its,ite, jts,jte, kts,kte)
  1120. !
  1121. !
  1122. !**************************** static control
  1123. !
  1124. !--- moist static energy inside cloud
  1125. !
  1126. do i=its,itf
  1127. if(ierr(i).eq.0)then
  1128. xhkb(i)=xhe(i,k22(i))
  1129. endif
  1130. enddo
  1131. call cup_up_he(k22,xhkb,xz_cup,cd,mentr_rate,xhe_cup,xhc, &
  1132. kbcon,ierr,xdby,xhe,xhes_cup, &
  1133. ids,ide, jds,jde, kds,kde, &
  1134. ims,ime, jms,jme, kms,kme, &
  1135. its,ite, jts,jte, kts,kte)
  1136. !
  1137. !c--- normalized mass flux profile
  1138. !
  1139. call cup_up_nms(xzu,xz_cup,mentr_rate,cd,kbcon,ktop,ierr,k22, &
  1140. ids,ide, jds,jde, kds,kde, &
  1141. ims,ime, jms,jme, kms,kme, &
  1142. its,ite, jts,jte, kts,kte)
  1143. !
  1144. !--- moisture downdraft
  1145. !
  1146. call cup_dd_nms(xzd,xz_cup,cdd,mentrd_rate,jmin,ierr, &
  1147. 1,kdet,z1, &
  1148. ids,ide, jds,jde, kds,kde, &
  1149. ims,ime, jms,jme, kms,kme, &
  1150. its,ite, jts,jte, kts,kte)
  1151. call cup_dd_he(xhes_cup,xzd,xhcd,xz_cup,cdd,mentrd_rate, &
  1152. jmin,ierr,xhe,dbyd,xhe_cup,&
  1153. ids,ide, jds,jde, kds,kde, &
  1154. ims,ime, jms,jme, kms,kme, &
  1155. its,ite, jts,jte, kts,kte)
  1156. call cup_dd_moisture(xzd,xhcd,xhes_cup,xqcd,xqes_cup, &
  1157. xpwd,xq_cup,xz_cup,cdd,mentrd_rate,jmin,ierr,gamma_cup, &
  1158. xpwev,bu,xqrcd,xq,xhe,xt_cup,3,xl, &
  1159. ids,ide, jds,jde, kds,kde, &
  1160. ims,ime, jms,jme, kms,kme, &
  1161. its,ite, jts,jte, kts,kte)
  1162. !
  1163. !------- MOISTURE updraft
  1164. !
  1165. call cup_up_moisture(ierr,xz_cup,xqc,xqrc,xpw,xpwav, &
  1166. kbcon,ktop,cd,xdby,mentr_rate,clw_all, &
  1167. xq,GAMMA_cup,xzu,xqes_cup,k22,xq_cup,xl, &
  1168. ids,ide, jds,jde, kds,kde, &
  1169. ims,ime, jms,jme, kms,kme, &
  1170. its,ite, jts,jte, kts,kte)
  1171. !
  1172. !--- workfunctions for updraft
  1173. !
  1174. call cup_up_aa0(xaa0,xz,xzu,xdby,GAMMA_CUP,xt_cup, &
  1175. kbcon,ktop,ierr, &
  1176. ids,ide, jds,jde, kds,kde, &
  1177. ims,ime, jms,jme, kms,kme, &
  1178. its,ite, jts,jte, kts,kte)
  1179. !
  1180. !--- workfunctions for downdraft
  1181. !
  1182. !
  1183. ! call cup_dd_aa0(edtx,ierr,xaa0,jmin,gamma_cup,xt_cup, &
  1184. ! xhcd,xhes_cup,xz,xzd, &
  1185. ! ids,ide, jds,jde, kds,kde, &
  1186. ! ims,ime, jms,jme, kms,kme, &
  1187. ! its,ite, jts,jte, kts,kte)
  1188. do 200 nens=1,maxens
  1189. do i=its,itf
  1190. if(ierr(i).eq.0)then
  1191. xaa0_ens(i,nens)=xaa0(i)
  1192. nall=(iens-1)*maxens3*maxens*maxens2 &
  1193. +(iedt-1)*maxens*maxens3 &
  1194. +(nens-1)*maxens3
  1195. do k=kts,ktf
  1196. if(k.le.ktop(i))then
  1197. do nens3=1,maxens3
  1198. if(nens3.eq.7)then
  1199. !--- b=0
  1200. pr_ens(i,j,nall+nens3)=pr_ens(i,j,nall+nens3)+ &
  1201. pwo(i,k)
  1202. ! +edto(i)*pwdo(i,k)
  1203. !--- b=beta
  1204. else if(nens3.eq.8)then
  1205. pr_ens(i,j,nall+nens3)=pr_ens(i,j,nall+nens3)+ &
  1206. pwo(i,k)
  1207. !--- b=beta/2
  1208. else if(nens3.eq.9)then
  1209. pr_ens(i,j,nall+nens3)=pr_ens(i,j,nall+nens3)+ &
  1210. pwo(i,k)
  1211. ! +.5*edto(i)*pwdo(i,k)
  1212. else
  1213. pr_ens(i,j,nall+nens3)=pr_ens(i,j,nall+nens3)+ &
  1214. pwo(i,k)+edto(i)*pwdo(i,k)
  1215. endif
  1216. enddo
  1217. endif
  1218. enddo
  1219. if(pr_ens(i,j,nall+7).lt.1.e-6)then
  1220. ierr(i)=18
  1221. do nens3=1,maxens3
  1222. pr_ens(i,j,nall+nens3)=0.
  1223. enddo
  1224. endif
  1225. do nens3=1,maxens3
  1226. if(pr_ens(i,j,nall+nens3).lt.1.e-4)then
  1227. pr_ens(i,j,nall+nens3)=0.
  1228. endif
  1229. enddo
  1230. endif
  1231. enddo
  1232. 200 continue
  1233. !
  1234. !--- LARGE SCALE FORCING
  1235. !
  1236. !
  1237. !------- CHECK wether aa0 should have been zero
  1238. !
  1239. !
  1240. CALL cup_MAXIMI(HEO_CUP,3,KBMAX,K22x,ierr, &
  1241. ids,ide, jds,jde, kds,kde, &
  1242. ims,ime, jms,jme, kms,kme, &
  1243. its,ite, jts,jte, kts,kte)
  1244. do i=its,itf
  1245. ierr2(i)=ierr(i)
  1246. ierr3(i)=ierr(i)
  1247. enddo
  1248. call cup_kbcon(cap_max_increment,2,k22x,kbconx,heo_cup, &
  1249. heso_cup,ierr2,kbmax,po_cup,cap_max, &
  1250. ids,ide, jds,jde, kds,kde, &
  1251. ims,ime, jms,jme, kms,kme, &
  1252. its,ite, jts,jte, kts,kte)
  1253. call cup_kbcon(cap_max_increment,3,k22x,kbconx,heo_cup, &
  1254. heso_cup,ierr3,kbmax,po_cup,cap_max, &
  1255. ids,ide, jds,jde, kds,kde, &
  1256. ims,ime, jms,jme, kms,kme, &
  1257. its,ite, jts,jte, kts,kte)
  1258. !
  1259. !--- DETERMINE THE LEVEL OF CONVECTIVE CLOUD BASE - KBCON
  1260. !
  1261. call cup_forcing_ens(closure_n,xland1,aa0,aa1,xaa0_ens,mbdt_ens,dtime, &
  1262. ierr,ierr2,ierr3,xf_ens,j,'deeps', &
  1263. maxens,iens,iedt,maxens2,maxens3,mconv, &
  1264. po_cup,ktop,omeg,zdo,k22,zuo,pr_ens,edto,kbcon, &
  1265. massflx,iact,direction,ensdim,massfln,ichoice, &
  1266. ids,ide, jds,jde, kds,kde, &
  1267. ims,ime, jms,jme, kms,kme, &
  1268. its,ite, jts,jte, kts,kte)
  1269. !
  1270. do k=kts,ktf
  1271. do i=its,itf
  1272. if(ierr(i).eq.0)then
  1273. dellat_ens(i,k,iedt)=dellat(i,k)
  1274. dellaq_ens(i,k,iedt)=dellaq(i,k)
  1275. dellaqc_ens(i,k,iedt)=dellaqc(i,k)
  1276. pwo_ens(i,k,iedt)=pwo(i,k)+edt(i)*pwdo(i,k)
  1277. else
  1278. dellat_ens(i,k,iedt)=0.
  1279. dellaq_ens(i,k,iedt)=0.
  1280. dellaqc_ens(i,k,iedt)=0.
  1281. pwo_ens(i,k,iedt)=0.
  1282. endif
  1283. ! if(i.eq.ipr.and.j.eq.jpr)then
  1284. ! print *,iens,iedt,dellat(i,k),dellat_ens(i,k,iedt), &
  1285. ! dellaq(i,k), dellaqc(i,k)
  1286. ! endif
  1287. enddo
  1288. enddo
  1289. if (l_flux) then
  1290. do k=kts,ktf
  1291. do i=its,itf
  1292. if(ierr(i).eq.0)then
  1293. cfu1_ens(i,k,iedt)=cfu1(i,k)
  1294. cfd1_ens(i,k,iedt)=cfd1(i,k)
  1295. dfu1_ens(i,k,iedt)=dfu1(i,k)
  1296. efu1_ens(i,k,iedt)=efu1(i,k)
  1297. dfd1_ens(i,k,iedt)=dfd1(i,k)
  1298. efd1_ens(i,k,iedt)=efd1(i,k)
  1299. else
  1300. cfu1_ens(i,k,iedt)=0.
  1301. cfd1_ens(i,k,iedt)=0.
  1302. dfu1_ens(i,k,iedt)=0.
  1303. efu1_ens(i,k,iedt)=0.
  1304. dfd1_ens(i,k,iedt)=0.
  1305. efd1_ens(i,k,iedt)=0.
  1306. end if
  1307. end do
  1308. end do
  1309. end if
  1310. 250 continue
  1311. !
  1312. !--- FEEDBACK
  1313. !
  1314. call cup_output_ens(xf_ens,ierr,dellat_ens,dellaq_ens, &
  1315. dellaqc_ens,outt,outq,outqc,pre,pwo_ens,xmb,ktop, &
  1316. j,'deep',maxens2,maxens,iens,ierr2,ierr3, &
  1317. pr_ens,maxens3,ensdim,massfln, &
  1318. APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
  1319. APR_CAPMA,APR_CAPME,APR_CAPMI,closure_n,xland1, &
  1320. outCFU1,outCFD1,outDFU1,outEFU1,outDFD1,outEFD1, &
  1321. CFU1_ens,CFD1_ens,DFU1_ens,EFU1_ens,DFD1_ens,EFD1_ens, &
  1322. l_flux, &
  1323. ids,ide, jds,jde, kds,kde, &
  1324. ims,ime, jms,jme, kms,kme, &
  1325. its,ite, jts,jte, kts,kte)
  1326. do i=its,itf
  1327. PRE(I)=MAX(PRE(I),0.)
  1328. enddo
  1329. !
  1330. !---------------------------done------------------------------
  1331. !
  1332. END SUBROUTINE CUP_enss
  1333. SUBROUTINE cup_dd_aa0(edt,ierr,aa0,jmin,gamma_cup,t_cup, &
  1334. hcd,hes_cup,z,zd, &
  1335. ids,ide, jds,jde, kds,kde, &
  1336. ims,ime, jms,jme, kms,kme, &
  1337. its,ite, jts,jte, kts,kte )
  1338. IMPLICIT NONE
  1339. !
  1340. ! on input
  1341. !
  1342. ! only local wrf dimensions are need as of now in this routine
  1343. integer &
  1344. ,intent (in ) :: &
  1345. ids,ide, jds,jde, kds,kde, &
  1346. ims,ime, jms,jme, kms,kme, &
  1347. its,ite, jts,jte, kts,kte
  1348. ! aa0 cloud work function for downdraft
  1349. ! gamma_cup = gamma on model cloud levels
  1350. ! t_cup = temperature (Kelvin) on model cloud levels
  1351. ! hes_cup =