PageRenderTime 57ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 1ms

/wrfv2_fire/phys/module_mp_wsm6.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 2218 lines | 1636 code | 1 blank | 581 comment | 120 complexity | c10535f792aaff054b814b969f7f2130 MD5 | raw file
Possible License(s): AGPL-1.0

Large files files are truncated, but you can click here to view the full file

  1. #if ( RWORDSIZE == 4 )
  2. # define VREC vsrec
  3. # define VSQRT vssqrt
  4. #else
  5. # define VREC vrec
  6. # define VSQRT vsqrt
  7. #endif
  8. MODULE module_mp_wsm6
  9. !
  10. !
  11. REAL, PARAMETER, PRIVATE :: dtcldcr = 120. ! maximum time step for minor loops
  12. REAL, PARAMETER, PRIVATE :: n0r = 8.e6 ! intercept parameter rain
  13. REAL, PARAMETER, PRIVATE :: n0g = 4.e6 ! intercept parameter graupel
  14. REAL, PARAMETER, PRIVATE :: avtr = 841.9 ! a constant for terminal velocity of rain
  15. REAL, PARAMETER, PRIVATE :: bvtr = 0.8 ! a constant for terminal velocity of rain
  16. REAL, PARAMETER, PRIVATE :: r0 = .8e-5 ! 8 microm in contrast to 10 micro m
  17. REAL, PARAMETER, PRIVATE :: peaut = .55 ! collection efficiency
  18. REAL, PARAMETER, PRIVATE :: xncr = 3.e8 ! maritime cloud in contrast to 3.e8 in tc80
  19. REAL, PARAMETER, PRIVATE :: xmyu = 1.718e-5 ! the dynamic viscosity kgm-1s-1
  20. REAL, PARAMETER, PRIVATE :: avts = 11.72 ! a constant for terminal velocity of snow
  21. REAL, PARAMETER, PRIVATE :: bvts = .41 ! a constant for terminal velocity of snow
  22. REAL, PARAMETER, PRIVATE :: avtg = 330. ! a constant for terminal velocity of graupel
  23. REAL, PARAMETER, PRIVATE :: bvtg = 0.8 ! a constant for terminal velocity of graupel
  24. REAL, PARAMETER, PRIVATE :: deng = 500. ! density of graupel
  25. REAL, PARAMETER, PRIVATE :: n0smax = 1.e11 ! maximum n0s (t=-90C unlimited)
  26. REAL, PARAMETER, PRIVATE :: lamdarmax = 8.e4 ! limited maximum value for slope parameter of rain
  27. REAL, PARAMETER, PRIVATE :: lamdasmax = 1.e5 ! limited maximum value for slope parameter of snow
  28. REAL, PARAMETER, PRIVATE :: lamdagmax = 6.e4 ! limited maximum value for slope parameter of graupel
  29. REAL, PARAMETER, PRIVATE :: dicon = 11.9 ! constant for the cloud-ice diamter
  30. REAL, PARAMETER, PRIVATE :: dimax = 500.e-6 ! limited maximum value for the cloud-ice diamter
  31. REAL, PARAMETER, PRIVATE :: n0s = 2.e6 ! temperature dependent intercept parameter snow
  32. REAL, PARAMETER, PRIVATE :: alpha = .12 ! .122 exponen factor for n0s
  33. REAL, PARAMETER, PRIVATE :: pfrz1 = 100. ! constant in Biggs freezing
  34. REAL, PARAMETER, PRIVATE :: pfrz2 = 0.66 ! constant in Biggs freezing
  35. REAL, PARAMETER, PRIVATE :: qcrmin = 1.e-9 ! minimun values for qr, qs, and qg
  36. REAL, PARAMETER, PRIVATE :: eacrc = 1.0 ! Snow/cloud-water collection efficiency
  37. REAL, PARAMETER, PRIVATE :: dens = 100.0 ! Density of snow
  38. REAL, PARAMETER, PRIVATE :: qs0 = 6.e-4 ! threshold amount for aggretion to occur
  39. REAL, SAVE :: &
  40. qc0, qck1,bvtr1,bvtr2,bvtr3,bvtr4,g1pbr, &
  41. g3pbr,g4pbr,g5pbro2,pvtr,eacrr,pacrr, &
  42. bvtr6,g6pbr, &
  43. precr1,precr2,roqimax,bvts1, &
  44. bvts2,bvts3,bvts4,g1pbs,g3pbs,g4pbs, &
  45. g5pbso2,pvts,pacrs,precs1,precs2,pidn0r, &
  46. pidn0s,xlv1,pacrc,pi, &
  47. bvtg1,bvtg2,bvtg3,bvtg4,g1pbg, &
  48. g3pbg,g4pbg,g5pbgo2,pvtg,pacrg, &
  49. precg1,precg2,pidn0g, &
  50. rslopermax,rslopesmax,rslopegmax, &
  51. rsloperbmax,rslopesbmax,rslopegbmax, &
  52. rsloper2max,rslopes2max,rslopeg2max, &
  53. rsloper3max,rslopes3max,rslopeg3max
  54. CONTAINS
  55. !===================================================================
  56. !
  57. SUBROUTINE wsm6(th, q, qc, qr, qi, qs, qg &
  58. ,den, pii, p, delz &
  59. ,delt,g, cpd, cpv, rd, rv, t0c &
  60. ,ep1, ep2, qmin &
  61. ,XLS, XLV0, XLF0, den0, denr &
  62. ,cliq,cice,psat &
  63. ,rain, rainncv &
  64. ,snow, snowncv &
  65. ,sr &
  66. ,graupel, graupelncv &
  67. ,ids,ide, jds,jde, kds,kde &
  68. ,ims,ime, jms,jme, kms,kme &
  69. ,its,ite, jts,jte, kts,kte &
  70. )
  71. !-------------------------------------------------------------------
  72. IMPLICIT NONE
  73. !-------------------------------------------------------------------
  74. INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde , &
  75. ims,ime, jms,jme, kms,kme , &
  76. its,ite, jts,jte, kts,kte
  77. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
  78. INTENT(INOUT) :: &
  79. th, &
  80. q, &
  81. qc, &
  82. qi, &
  83. qr, &
  84. qs, &
  85. qg
  86. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
  87. INTENT(IN ) :: &
  88. den, &
  89. pii, &
  90. p, &
  91. delz
  92. REAL, INTENT(IN ) :: delt, &
  93. g, &
  94. rd, &
  95. rv, &
  96. t0c, &
  97. den0, &
  98. cpd, &
  99. cpv, &
  100. ep1, &
  101. ep2, &
  102. qmin, &
  103. XLS, &
  104. XLV0, &
  105. XLF0, &
  106. cliq, &
  107. cice, &
  108. psat, &
  109. denr
  110. REAL, DIMENSION( ims:ime , jms:jme ), &
  111. INTENT(INOUT) :: rain, &
  112. rainncv, &
  113. sr
  114. REAL, DIMENSION( ims:ime , jms:jme ), OPTIONAL, &
  115. INTENT(INOUT) :: snow, &
  116. snowncv
  117. REAL, DIMENSION( ims:ime , jms:jme ), OPTIONAL, &
  118. INTENT(INOUT) :: graupel, &
  119. graupelncv
  120. ! LOCAL VAR
  121. REAL, DIMENSION( its:ite , kts:kte ) :: t
  122. REAL, DIMENSION( its:ite , kts:kte, 2 ) :: qci
  123. REAL, DIMENSION( its:ite , kts:kte, 3 ) :: qrs
  124. INTEGER :: i,j,k
  125. !-------------------------------------------------------------------
  126. DO j=jts,jte
  127. DO k=kts,kte
  128. DO i=its,ite
  129. t(i,k)=th(i,k,j)*pii(i,k,j)
  130. qci(i,k,1) = qc(i,k,j)
  131. qci(i,k,2) = qi(i,k,j)
  132. qrs(i,k,1) = qr(i,k,j)
  133. qrs(i,k,2) = qs(i,k,j)
  134. qrs(i,k,3) = qg(i,k,j)
  135. ENDDO
  136. ENDDO
  137. ! Sending array starting locations of optional variables may cause
  138. ! troubles, so we explicitly change the call.
  139. CALL wsm62D(t, q(ims,kms,j), qci, qrs &
  140. ,den(ims,kms,j) &
  141. ,p(ims,kms,j), delz(ims,kms,j) &
  142. ,delt,g, cpd, cpv, rd, rv, t0c &
  143. ,ep1, ep2, qmin &
  144. ,XLS, XLV0, XLF0, den0, denr &
  145. ,cliq,cice,psat &
  146. ,j &
  147. ,rain(ims,j),rainncv(ims,j) &
  148. ,sr(ims,j) &
  149. ,ids,ide, jds,jde, kds,kde &
  150. ,ims,ime, jms,jme, kms,kme &
  151. ,its,ite, jts,jte, kts,kte &
  152. ,snow,snowncv &
  153. ,graupel,graupelncv &
  154. )
  155. DO K=kts,kte
  156. DO I=its,ite
  157. th(i,k,j)=t(i,k)/pii(i,k,j)
  158. qc(i,k,j) = qci(i,k,1)
  159. qi(i,k,j) = qci(i,k,2)
  160. qr(i,k,j) = qrs(i,k,1)
  161. qs(i,k,j) = qrs(i,k,2)
  162. qg(i,k,j) = qrs(i,k,3)
  163. ENDDO
  164. ENDDO
  165. ENDDO
  166. END SUBROUTINE wsm6
  167. !===================================================================
  168. !
  169. SUBROUTINE wsm62D(t, q &
  170. ,qci, qrs, den, p, delz &
  171. ,delt,g, cpd, cpv, rd, rv, t0c &
  172. ,ep1, ep2, qmin &
  173. ,XLS, XLV0, XLF0, den0, denr &
  174. ,cliq,cice,psat &
  175. ,lat &
  176. ,rain,rainncv &
  177. ,sr &
  178. ,ids,ide, jds,jde, kds,kde &
  179. ,ims,ime, jms,jme, kms,kme &
  180. ,its,ite, jts,jte, kts,kte &
  181. ,snow,snowncv &
  182. ,graupel,graupelncv &
  183. )
  184. !-------------------------------------------------------------------
  185. IMPLICIT NONE
  186. !-------------------------------------------------------------------
  187. !
  188. ! This code is a 6-class GRAUPEL phase microphyiscs scheme (WSM6) of the
  189. ! Single-Moment MicroPhyiscs (WSMMP). The WSMMP assumes that ice nuclei
  190. ! number concentration is a function of temperature, and seperate assumption
  191. ! is developed, in which ice crystal number concentration is a function
  192. ! of ice amount. A theoretical background of the ice-microphysics and related
  193. ! processes in the WSMMPs are described in Hong et al. (2004).
  194. ! All production terms in the WSM6 scheme are described in Hong and Lim (2006).
  195. ! All units are in m.k.s. and source/sink terms in kgkg-1s-1.
  196. !
  197. ! WSM6 cloud scheme
  198. !
  199. ! Coded by Song-You Hong and Jeong-Ock Jade Lim (Yonsei Univ.)
  200. ! Summer 2003
  201. !
  202. ! Implemented by Song-You Hong (Yonsei Univ.) and Jimy Dudhia (NCAR)
  203. ! Summer 2004
  204. !
  205. ! History : semi-lagrangian scheme sedimentation(JH), and clean up
  206. ! Hong, August 2009
  207. !
  208. ! Reference) Hong, Dudhia, Chen (HDC, 2004) Mon. Wea. Rev.
  209. ! Hong and Lim (HL, 2006) J. Korean Meteor. Soc.
  210. ! Dudhia, Hong and Lim (DHL, 2008) J. Meteor. Soc. Japan
  211. ! Lin, Farley, Orville (LFO, 1983) J. Appl. Meteor.
  212. ! Rutledge, Hobbs (RH83, 1983) J. Atmos. Sci.
  213. ! Rutledge, Hobbs (RH84, 1984) J. Atmos. Sci.
  214. ! Juang and Hong (JH, 2010) Mon. Wea. Rev.
  215. !
  216. INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde , &
  217. ims,ime, jms,jme, kms,kme , &
  218. its,ite, jts,jte, kts,kte, &
  219. lat
  220. REAL, DIMENSION( its:ite , kts:kte ), &
  221. INTENT(INOUT) :: &
  222. t
  223. REAL, DIMENSION( its:ite , kts:kte, 2 ), &
  224. INTENT(INOUT) :: &
  225. qci
  226. REAL, DIMENSION( its:ite , kts:kte, 3 ), &
  227. INTENT(INOUT) :: &
  228. qrs
  229. REAL, DIMENSION( ims:ime , kms:kme ), &
  230. INTENT(INOUT) :: &
  231. q
  232. REAL, DIMENSION( ims:ime , kms:kme ), &
  233. INTENT(IN ) :: &
  234. den, &
  235. p, &
  236. delz
  237. REAL, INTENT(IN ) :: delt, &
  238. g, &
  239. cpd, &
  240. cpv, &
  241. t0c, &
  242. den0, &
  243. rd, &
  244. rv, &
  245. ep1, &
  246. ep2, &
  247. qmin, &
  248. XLS, &
  249. XLV0, &
  250. XLF0, &
  251. cliq, &
  252. cice, &
  253. psat, &
  254. denr
  255. REAL, DIMENSION( ims:ime ), &
  256. INTENT(INOUT) :: rain, &
  257. rainncv, &
  258. sr
  259. REAL, DIMENSION( ims:ime, jms:jme ), OPTIONAL, &
  260. INTENT(INOUT) :: snow, &
  261. snowncv
  262. REAL, DIMENSION( ims:ime, jms:jme ), OPTIONAL, &
  263. INTENT(INOUT) :: graupel, &
  264. graupelncv
  265. ! LOCAL VAR
  266. REAL, DIMENSION( its:ite , kts:kte , 3) :: &
  267. rh, &
  268. qs, &
  269. rslope, &
  270. rslope2, &
  271. rslope3, &
  272. rslopeb, &
  273. qrs_tmp, &
  274. falk, &
  275. fall, &
  276. work1
  277. REAL, DIMENSION( its:ite , kts:kte ) :: &
  278. fallc, &
  279. falkc, &
  280. work1c, &
  281. work2c, &
  282. workr, &
  283. worka
  284. REAL, DIMENSION( its:ite , kts:kte ) :: &
  285. den_tmp, &
  286. delz_tmp
  287. REAL, DIMENSION( its:ite , kts:kte ) :: &
  288. pigen, &
  289. pidep, &
  290. pcond, &
  291. prevp, &
  292. psevp, &
  293. pgevp, &
  294. psdep, &
  295. pgdep, &
  296. praut, &
  297. psaut, &
  298. pgaut, &
  299. piacr, &
  300. pracw, &
  301. praci, &
  302. pracs, &
  303. psacw, &
  304. psaci, &
  305. psacr, &
  306. pgacw, &
  307. pgaci, &
  308. pgacr, &
  309. pgacs, &
  310. paacw, &
  311. psmlt, &
  312. pgmlt, &
  313. pseml, &
  314. pgeml
  315. REAL, DIMENSION( its:ite , kts:kte ) :: &
  316. qsum, &
  317. xl, &
  318. cpm, &
  319. work2, &
  320. denfac, &
  321. xni, &
  322. denqrs1, &
  323. denqrs2, &
  324. denqrs3, &
  325. denqci, &
  326. n0sfac
  327. REAL, DIMENSION( its:ite ) :: delqrs1, &
  328. delqrs2, &
  329. delqrs3, &
  330. delqi
  331. REAL, DIMENSION( its:ite ) :: tstepsnow, &
  332. tstepgraup
  333. INTEGER, DIMENSION( its:ite ) :: mstep, &
  334. numdt
  335. LOGICAL, DIMENSION( its:ite ) :: flgcld
  336. REAL :: &
  337. cpmcal, xlcal, diffus, &
  338. viscos, xka, venfac, conden, diffac, &
  339. x, y, z, a, b, c, d, e, &
  340. qdt, holdrr, holdrs, holdrg, supcol, supcolt, pvt, &
  341. coeres, supsat, dtcld, xmi, eacrs, satdt, &
  342. qimax, diameter, xni0, roqi0, &
  343. fallsum, fallsum_qsi, fallsum_qg, &
  344. vt2i,vt2r,vt2s,vt2g,acrfac,egs,egi, &
  345. xlwork2, factor, source, value, &
  346. xlf, pfrzdtc, pfrzdtr, supice, alpha2, delta2, delta3
  347. REAL :: vt2ave
  348. REAL :: holdc, holdci
  349. INTEGER :: i, j, k, mstepmax, &
  350. iprt, latd, lond, loop, loops, ifsat, n, idim, kdim
  351. ! Temporaries used for inlining fpvs function
  352. REAL :: dldti, xb, xai, tr, xbi, xa, hvap, cvap, hsub, dldt, ttp
  353. ! variables for optimization
  354. REAL, DIMENSION( its:ite ) :: tvec1
  355. REAL :: temp
  356. !
  357. !=================================================================
  358. ! compute internal functions
  359. !
  360. cpmcal(x) = cpd*(1.-max(x,qmin))+max(x,qmin)*cpv
  361. xlcal(x) = xlv0-xlv1*(x-t0c)
  362. !----------------------------------------------------------------
  363. ! diffus: diffusion coefficient of the water vapor
  364. ! viscos: kinematic viscosity(m2s-1)
  365. ! Optimizatin : A**B => exp(log(A)*(B))
  366. !
  367. diffus(x,y) = 8.794e-5 * exp(log(x)*(1.81)) / y ! 8.794e-5*x**1.81/y
  368. viscos(x,y) = 1.496e-6 * (x*sqrt(x)) /(x+120.)/y ! 1.496e-6*x**1.5/(x+120.)/y
  369. xka(x,y) = 1.414e3*viscos(x,y)*y
  370. diffac(a,b,c,d,e) = d*a*a/(xka(c,d)*rv*c*c)+1./(e*diffus(c,b))
  371. venfac(a,b,c) = exp(log((viscos(b,c)/diffus(b,a)))*((.3333333))) &
  372. /sqrt(viscos(b,c))*sqrt(sqrt(den0/c))
  373. conden(a,b,c,d,e) = (max(b,qmin)-c)/(1.+d*d/(rv*e)*c/(a*a))
  374. !
  375. !
  376. idim = ite-its+1
  377. kdim = kte-kts+1
  378. !
  379. !----------------------------------------------------------------
  380. ! paddint 0 for negative values generated by dynamics
  381. !
  382. do k = kts, kte
  383. do i = its, ite
  384. qci(i,k,1) = max(qci(i,k,1),0.0)
  385. qrs(i,k,1) = max(qrs(i,k,1),0.0)
  386. qci(i,k,2) = max(qci(i,k,2),0.0)
  387. qrs(i,k,2) = max(qrs(i,k,2),0.0)
  388. qrs(i,k,3) = max(qrs(i,k,3),0.0)
  389. enddo
  390. enddo
  391. !
  392. !----------------------------------------------------------------
  393. ! latent heat for phase changes and heat capacity. neglect the
  394. ! changes during microphysical process calculation
  395. ! emanuel(1994)
  396. !
  397. do k = kts, kte
  398. do i = its, ite
  399. cpm(i,k) = cpmcal(q(i,k))
  400. xl(i,k) = xlcal(t(i,k))
  401. enddo
  402. enddo
  403. do k = kts, kte
  404. do i = its, ite
  405. delz_tmp(i,k) = delz(i,k)
  406. den_tmp(i,k) = den(i,k)
  407. enddo
  408. enddo
  409. !
  410. !----------------------------------------------------------------
  411. ! initialize the surface rain, snow, graupel
  412. !
  413. do i = its, ite
  414. rainncv(i) = 0.
  415. if(PRESENT (snowncv) .AND. PRESENT (snow)) snowncv(i,lat) = 0.
  416. if(PRESENT (graupelncv) .AND. PRESENT (graupel)) graupelncv(i,lat) = 0.
  417. sr(i) = 0.
  418. ! new local array to catch step snow and graupel
  419. tstepsnow(i) = 0.
  420. tstepgraup(i) = 0.
  421. enddo
  422. !
  423. !----------------------------------------------------------------
  424. ! compute the minor time steps.
  425. !
  426. loops = max(nint(delt/dtcldcr),1)
  427. dtcld = delt/loops
  428. if(delt.le.dtcldcr) dtcld = delt
  429. !
  430. do loop = 1,loops
  431. !
  432. !----------------------------------------------------------------
  433. ! initialize the large scale variables
  434. !
  435. do i = its, ite
  436. mstep(i) = 1
  437. flgcld(i) = .true.
  438. enddo
  439. !
  440. ! do k = kts, kte
  441. ! do i = its, ite
  442. ! denfac(i,k) = sqrt(den0/den(i,k))
  443. ! enddo
  444. ! enddo
  445. do k = kts, kte
  446. CALL VREC( tvec1(its), den(its,k), ite-its+1)
  447. do i = its, ite
  448. tvec1(i) = tvec1(i)*den0
  449. enddo
  450. CALL VSQRT( denfac(its,k), tvec1(its), ite-its+1)
  451. enddo
  452. !
  453. ! Inline expansion for fpvs
  454. ! qs(i,k,1) = fpvs(t(i,k),0,rd,rv,cpv,cliq,cice,xlv0,xls,psat,t0c)
  455. ! qs(i,k,2) = fpvs(t(i,k),1,rd,rv,cpv,cliq,cice,xlv0,xls,psat,t0c)
  456. hsub = xls
  457. hvap = xlv0
  458. cvap = cpv
  459. ttp=t0c+0.01
  460. dldt=cvap-cliq
  461. xa=-dldt/rv
  462. xb=xa+hvap/(rv*ttp)
  463. dldti=cvap-cice
  464. xai=-dldti/rv
  465. xbi=xai+hsub/(rv*ttp)
  466. do k = kts, kte
  467. do i = its, ite
  468. tr=ttp/t(i,k)
  469. qs(i,k,1)=psat*exp(log(tr)*(xa))*exp(xb*(1.-tr))
  470. qs(i,k,1) = min(qs(i,k,1),0.99*p(i,k))
  471. qs(i,k,1) = ep2 * qs(i,k,1) / (p(i,k) - qs(i,k,1))
  472. qs(i,k,1) = max(qs(i,k,1),qmin)
  473. rh(i,k,1) = max(q(i,k) / qs(i,k,1),qmin)
  474. tr=ttp/t(i,k)
  475. if(t(i,k).lt.ttp) then
  476. qs(i,k,2)=psat*exp(log(tr)*(xai))*exp(xbi*(1.-tr))
  477. else
  478. qs(i,k,2)=psat*exp(log(tr)*(xa))*exp(xb*(1.-tr))
  479. endif
  480. qs(i,k,2) = min(qs(i,k,2),0.99*p(i,k))
  481. qs(i,k,2) = ep2 * qs(i,k,2) / (p(i,k) - qs(i,k,2))
  482. qs(i,k,2) = max(qs(i,k,2),qmin)
  483. rh(i,k,2) = max(q(i,k) / qs(i,k,2),qmin)
  484. enddo
  485. enddo
  486. !
  487. !----------------------------------------------------------------
  488. ! initialize the variables for microphysical physics
  489. !
  490. !
  491. do k = kts, kte
  492. do i = its, ite
  493. prevp(i,k) = 0.
  494. psdep(i,k) = 0.
  495. pgdep(i,k) = 0.
  496. praut(i,k) = 0.
  497. psaut(i,k) = 0.
  498. pgaut(i,k) = 0.
  499. pracw(i,k) = 0.
  500. praci(i,k) = 0.
  501. piacr(i,k) = 0.
  502. psaci(i,k) = 0.
  503. psacw(i,k) = 0.
  504. pracs(i,k) = 0.
  505. psacr(i,k) = 0.
  506. pgacw(i,k) = 0.
  507. paacw(i,k) = 0.
  508. pgaci(i,k) = 0.
  509. pgacr(i,k) = 0.
  510. pgacs(i,k) = 0.
  511. pigen(i,k) = 0.
  512. pidep(i,k) = 0.
  513. pcond(i,k) = 0.
  514. psmlt(i,k) = 0.
  515. pgmlt(i,k) = 0.
  516. pseml(i,k) = 0.
  517. pgeml(i,k) = 0.
  518. psevp(i,k) = 0.
  519. pgevp(i,k) = 0.
  520. falk(i,k,1) = 0.
  521. falk(i,k,2) = 0.
  522. falk(i,k,3) = 0.
  523. fall(i,k,1) = 0.
  524. fall(i,k,2) = 0.
  525. fall(i,k,3) = 0.
  526. fallc(i,k) = 0.
  527. falkc(i,k) = 0.
  528. xni(i,k) = 1.e3
  529. enddo
  530. enddo
  531. !-------------------------------------------------------------
  532. ! Ni: ice crystal number concentraiton [HDC 5c]
  533. !-------------------------------------------------------------
  534. do k = kts, kte
  535. do i = its, ite
  536. temp = (den(i,k)*max(qci(i,k,2),qmin))
  537. temp = sqrt(sqrt(temp*temp*temp))
  538. xni(i,k) = min(max(5.38e7*temp,1.e3),1.e6)
  539. enddo
  540. enddo
  541. !
  542. !----------------------------------------------------------------
  543. ! compute the fallout term:
  544. ! first, vertical terminal velosity for minor loops
  545. !----------------------------------------------------------------
  546. do k = kts, kte
  547. do i = its, ite
  548. qrs_tmp(i,k,1) = qrs(i,k,1)
  549. qrs_tmp(i,k,2) = qrs(i,k,2)
  550. qrs_tmp(i,k,3) = qrs(i,k,3)
  551. enddo
  552. enddo
  553. call slope_wsm6(qrs_tmp,den_tmp,denfac,t,rslope,rslopeb,rslope2,rslope3, &
  554. work1,its,ite,kts,kte)
  555. !
  556. do k = kte, kts, -1
  557. do i = its, ite
  558. workr(i,k) = work1(i,k,1)
  559. qsum(i,k) = max( (qrs(i,k,2)+qrs(i,k,3)), 1.E-15)
  560. IF ( qsum(i,k) .gt. 1.e-15 ) THEN
  561. worka(i,k) = (work1(i,k,2)*qrs(i,k,2) + work1(i,k,3)*qrs(i,k,3)) &
  562. /qsum(i,k)
  563. ELSE
  564. worka(i,k) = 0.
  565. ENDIF
  566. denqrs1(i,k) = den(i,k)*qrs(i,k,1)
  567. denqrs2(i,k) = den(i,k)*qrs(i,k,2)
  568. denqrs3(i,k) = den(i,k)*qrs(i,k,3)
  569. if(qrs(i,k,1).le.0.0) workr(i,k) = 0.0
  570. enddo
  571. enddo
  572. call nislfv_rain_plm(idim,kdim,den_tmp,denfac,t,delz_tmp,workr,denqrs1, &
  573. delqrs1,dtcld,1,1)
  574. call nislfv_rain_plm6(idim,kdim,den_tmp,denfac,t,delz_tmp,worka, &
  575. denqrs2,denqrs3,delqrs2,delqrs3,dtcld,1,1)
  576. do k = kts, kte
  577. do i = its, ite
  578. qrs(i,k,1) = max(denqrs1(i,k)/den(i,k),0.)
  579. qrs(i,k,2) = max(denqrs2(i,k)/den(i,k),0.)
  580. qrs(i,k,3) = max(denqrs3(i,k)/den(i,k),0.)
  581. fall(i,k,1) = denqrs1(i,k)*workr(i,k)/delz(i,k)
  582. fall(i,k,2) = denqrs2(i,k)*worka(i,k)/delz(i,k)
  583. fall(i,k,3) = denqrs3(i,k)*worka(i,k)/delz(i,k)
  584. enddo
  585. enddo
  586. do i = its, ite
  587. fall(i,1,1) = delqrs1(i)/delz(i,1)/dtcld
  588. fall(i,1,2) = delqrs2(i)/delz(i,1)/dtcld
  589. fall(i,1,3) = delqrs3(i)/delz(i,1)/dtcld
  590. enddo
  591. do k = kts, kte
  592. do i = its, ite
  593. qrs_tmp(i,k,1) = qrs(i,k,1)
  594. qrs_tmp(i,k,2) = qrs(i,k,2)
  595. qrs_tmp(i,k,3) = qrs(i,k,3)
  596. enddo
  597. enddo
  598. call slope_wsm6(qrs_tmp,den_tmp,denfac,t,rslope,rslopeb,rslope2,rslope3, &
  599. work1,its,ite,kts,kte)
  600. !
  601. do k = kte, kts, -1
  602. do i = its, ite
  603. supcol = t0c-t(i,k)
  604. n0sfac(i,k) = max(min(exp(alpha*supcol),n0smax/n0s),1.)
  605. if(t(i,k).gt.t0c) then
  606. !---------------------------------------------------------------
  607. ! psmlt: melting of snow [HL A33] [RH83 A25]
  608. ! (T>T0: S->R)
  609. !---------------------------------------------------------------
  610. xlf = xlf0
  611. work2(i,k) = venfac(p(i,k),t(i,k),den(i,k))
  612. if(qrs(i,k,2).gt.0.) then
  613. coeres = rslope2(i,k,2)*sqrt(rslope(i,k,2)*rslopeb(i,k,2))
  614. psmlt(i,k) = xka(t(i,k),den(i,k))/xlf*(t0c-t(i,k))*pi/2. &
  615. *n0sfac(i,k)*(precs1*rslope2(i,k,2) &
  616. +precs2*work2(i,k)*coeres)
  617. psmlt(i,k) = min(max(psmlt(i,k)*dtcld/mstep(i), &
  618. -qrs(i,k,2)/mstep(i)),0.)
  619. qrs(i,k,2) = qrs(i,k,2) + psmlt(i,k)
  620. qrs(i,k,1) = qrs(i,k,1) - psmlt(i,k)
  621. t(i,k) = t(i,k) + xlf/cpm(i,k)*psmlt(i,k)
  622. endif
  623. !---------------------------------------------------------------
  624. ! pgmlt: melting of graupel [HL A23] [LFO 47]
  625. ! (T>T0: G->R)
  626. !---------------------------------------------------------------
  627. if(qrs(i,k,3).gt.0.) then
  628. coeres = rslope2(i,k,3)*sqrt(rslope(i,k,3)*rslopeb(i,k,3))
  629. pgmlt(i,k) = xka(t(i,k),den(i,k))/xlf &
  630. *(t0c-t(i,k))*(precg1*rslope2(i,k,3) &
  631. +precg2*work2(i,k)*coeres)
  632. pgmlt(i,k) = min(max(pgmlt(i,k)*dtcld/mstep(i), &
  633. -qrs(i,k,3)/mstep(i)),0.)
  634. qrs(i,k,3) = qrs(i,k,3) + pgmlt(i,k)
  635. qrs(i,k,1) = qrs(i,k,1) - pgmlt(i,k)
  636. t(i,k) = t(i,k) + xlf/cpm(i,k)*pgmlt(i,k)
  637. endif
  638. endif
  639. enddo
  640. enddo
  641. !---------------------------------------------------------------
  642. ! Vice [ms-1] : fallout of ice crystal [HDC 5a]
  643. !---------------------------------------------------------------
  644. do k = kte, kts, -1
  645. do i = its, ite
  646. if(qci(i,k,2).le.0.) then
  647. work1c(i,k) = 0.
  648. else
  649. xmi = den(i,k)*qci(i,k,2)/xni(i,k)
  650. diameter = max(min(dicon * sqrt(xmi),dimax), 1.e-25)
  651. work1c(i,k) = 1.49e4*exp(log(diameter)*(1.31))
  652. endif
  653. enddo
  654. enddo
  655. !
  656. ! forward semi-laglangian scheme (JH), PCM (piecewise constant), (linear)
  657. !
  658. do k = kte, kts, -1
  659. do i = its, ite
  660. denqci(i,k) = den(i,k)*qci(i,k,2)
  661. enddo
  662. enddo
  663. call nislfv_rain_plm(idim,kdim,den_tmp,denfac,t,delz_tmp,work1c,denqci, &
  664. delqi,dtcld,1,0)
  665. do k = kts, kte
  666. do i = its, ite
  667. qci(i,k,2) = max(denqci(i,k)/den(i,k),0.)
  668. enddo
  669. enddo
  670. do i = its, ite
  671. fallc(i,1) = delqi(i)/delz(i,1)/dtcld
  672. enddo
  673. !
  674. !----------------------------------------------------------------
  675. ! rain (unit is mm/sec;kgm-2s-1: /1000*delt ===> m)==> mm for wrf
  676. !
  677. do i = its, ite
  678. fallsum = fall(i,kts,1)+fall(i,kts,2)+fall(i,kts,3)+fallc(i,kts)
  679. fallsum_qsi = fall(i,kts,2)+fallc(i,kts)
  680. fallsum_qg = fall(i,kts,3)
  681. if(fallsum.gt.0.) then
  682. rainncv(i) = fallsum*delz(i,kts)/denr*dtcld*1000. + rainncv(i)
  683. rain(i) = fallsum*delz(i,kts)/denr*dtcld*1000. + rain(i)
  684. endif
  685. if(fallsum_qsi.gt.0.) then
  686. tstepsnow(i) = fallsum_qsi*delz(i,kts)/denr*dtcld*1000. &
  687. +tstepsnow(i)
  688. IF ( PRESENT (snowncv) .AND. PRESENT (snow)) THEN
  689. snowncv(i,lat) = fallsum_qsi*delz(i,kts)/denr*dtcld*1000. &
  690. +snowncv(i,lat)
  691. snow(i,lat) = fallsum_qsi*delz(i,kts)/denr*dtcld*1000. + snow(i,lat)
  692. ENDIF
  693. endif
  694. if(fallsum_qg.gt.0.) then
  695. tstepgraup(i) = fallsum_qsi*delz(i,kts)/denr*dtcld*1000. &
  696. +tstepgraup(i)
  697. IF ( PRESENT (graupelncv) .AND. PRESENT (graupel)) THEN
  698. graupelncv(i,lat) = fallsum_qg*delz(i,kts)/denr*dtcld*1000. &
  699. + graupelncv(i,lat)
  700. graupel(i,lat) = fallsum_qg*delz(i,kts)/denr*dtcld*1000. + graupel(i,lat)
  701. ENDIF
  702. endif
  703. ! if(fallsum.gt.0.)sr(i)=(snowncv(i,lat) + graupelncv(i,lat))/(rainncv(i)+1.e-12)
  704. if(fallsum.gt.0.)sr(i)=(tstepsnow(i) + tstepgraup(i))/(rainncv(i)+1.e-12)
  705. enddo
  706. !
  707. !---------------------------------------------------------------
  708. ! pimlt: instantaneous melting of cloud ice [HL A47] [RH83 A28]
  709. ! (T>T0: I->C)
  710. !---------------------------------------------------------------
  711. do k = kts, kte
  712. do i = its, ite
  713. supcol = t0c-t(i,k)
  714. xlf = xls-xl(i,k)
  715. if(supcol.lt.0.) xlf = xlf0
  716. if(supcol.lt.0.and.qci(i,k,2).gt.0.) then
  717. qci(i,k,1) = qci(i,k,1) + qci(i,k,2)
  718. t(i,k) = t(i,k) - xlf/cpm(i,k)*qci(i,k,2)
  719. qci(i,k,2) = 0.
  720. endif
  721. !---------------------------------------------------------------
  722. ! pihmf: homogeneous freezing of cloud water below -40c [HL A45]
  723. ! (T<-40C: C->I)
  724. !---------------------------------------------------------------
  725. if(supcol.gt.40..and.qci(i,k,1).gt.0.) then
  726. qci(i,k,2) = qci(i,k,2) + qci(i,k,1)
  727. t(i,k) = t(i,k) + xlf/cpm(i,k)*qci(i,k,1)
  728. qci(i,k,1) = 0.
  729. endif
  730. !---------------------------------------------------------------
  731. ! pihtf: heterogeneous freezing of cloud water [HL A44]
  732. ! (T0>T>-40C: C->I)
  733. !---------------------------------------------------------------
  734. if(supcol.gt.0..and.qci(i,k,1).gt.qmin) then
  735. ! pfrzdtc = min(pfrz1*(exp(pfrz2*supcol)-1.) &
  736. ! *den(i,k)/denr/xncr*qci(i,k,1)**2*dtcld,qci(i,k,1))
  737. supcolt=min(supcol,50.)
  738. pfrzdtc = min(pfrz1*(exp(pfrz2*supcolt)-1.) &
  739. *den(i,k)/denr/xncr*qci(i,k,1)*qci(i,k,1)*dtcld,qci(i,k,1))
  740. qci(i,k,2) = qci(i,k,2) + pfrzdtc
  741. t(i,k) = t(i,k) + xlf/cpm(i,k)*pfrzdtc
  742. qci(i,k,1) = qci(i,k,1)-pfrzdtc
  743. endif
  744. !---------------------------------------------------------------
  745. ! pgfrz: freezing of rain water [HL A20] [LFO 45]
  746. ! (T<T0, R->G)
  747. !---------------------------------------------------------------
  748. if(supcol.gt.0..and.qrs(i,k,1).gt.0.) then
  749. ! pfrzdtr = min(20.*pi**2*pfrz1*n0r*denr/den(i,k) &
  750. ! *(exp(pfrz2*supcol)-1.)*rslope3(i,k,1)**2 &
  751. ! *rslope(i,k,1)*dtcld,qrs(i,k,1))
  752. temp = rslope3(i,k,1)
  753. temp = temp*temp*rslope(i,k,1)
  754. supcolt=min(supcol,50.)
  755. pfrzdtr = min(20.*(pi*pi)*pfrz1*n0r*denr/den(i,k) &
  756. *(exp(pfrz2*supcolt)-1.)*temp*dtcld, &
  757. qrs(i,k,1))
  758. qrs(i,k,3) = qrs(i,k,3) + pfrzdtr
  759. t(i,k) = t(i,k) + xlf/cpm(i,k)*pfrzdtr
  760. qrs(i,k,1) = qrs(i,k,1)-pfrzdtr
  761. endif
  762. enddo
  763. enddo
  764. !
  765. !
  766. !----------------------------------------------------------------
  767. ! update the slope parameters for microphysics computation
  768. !
  769. do k = kts, kte
  770. do i = its, ite
  771. qrs_tmp(i,k,1) = qrs(i,k,1)
  772. qrs_tmp(i,k,2) = qrs(i,k,2)
  773. qrs_tmp(i,k,3) = qrs(i,k,3)
  774. enddo
  775. enddo
  776. call slope_wsm6(qrs_tmp,den_tmp,denfac,t,rslope,rslopeb,rslope2,rslope3, &
  777. work1,its,ite,kts,kte)
  778. !------------------------------------------------------------------
  779. ! work1: the thermodynamic term in the denominator associated with
  780. ! heat conduction and vapor diffusion
  781. ! (ry88, y93, h85)
  782. ! work2: parameter associated with the ventilation effects(y93)
  783. !
  784. do k = kts, kte
  785. do i = its, ite
  786. work1(i,k,1) = diffac(xl(i,k),p(i,k),t(i,k),den(i,k),qs(i,k,1))
  787. work1(i,k,2) = diffac(xls,p(i,k),t(i,k),den(i,k),qs(i,k,2))
  788. work2(i,k) = venfac(p(i,k),t(i,k),den(i,k))
  789. enddo
  790. enddo
  791. !
  792. !===============================================================
  793. !
  794. ! warm rain processes
  795. !
  796. ! - follows the processes in RH83 and LFO except for autoconcersion
  797. !
  798. !===============================================================
  799. !
  800. do k = kts, kte
  801. do i = its, ite
  802. supsat = max(q(i,k),qmin)-qs(i,k,1)
  803. satdt = supsat/dtcld
  804. !---------------------------------------------------------------
  805. ! praut: auto conversion rate from cloud to rain [HDC 16]
  806. ! (C->R)
  807. !---------------------------------------------------------------
  808. if(qci(i,k,1).gt.qc0) then
  809. praut(i,k) = qck1*qci(i,k,1)**(7./3.)
  810. praut(i,k) = min(praut(i,k),qci(i,k,1)/dtcld)
  811. endif
  812. !---------------------------------------------------------------
  813. ! pracw: accretion of cloud water by rain [HL A40] [LFO 51]
  814. ! (C->R)
  815. !---------------------------------------------------------------
  816. if(qrs(i,k,1).gt.qcrmin.and.qci(i,k,1).gt.qmin) then
  817. pracw(i,k) = min(pacrr*rslope3(i,k,1)*rslopeb(i,k,1) &
  818. *qci(i,k,1)*denfac(i,k),qci(i,k,1)/dtcld)
  819. endif
  820. !---------------------------------------------------------------
  821. ! prevp: evaporation/condensation rate of rain [HDC 14]
  822. ! (V->R or R->V)
  823. !---------------------------------------------------------------
  824. if(qrs(i,k,1).gt.0.) then
  825. coeres = rslope2(i,k,1)*sqrt(rslope(i,k,1)*rslopeb(i,k,1))
  826. prevp(i,k) = (rh(i,k,1)-1.)*(precr1*rslope2(i,k,1) &
  827. +precr2*work2(i,k)*coeres)/work1(i,k,1)
  828. if(prevp(i,k).lt.0.) then
  829. prevp(i,k) = max(prevp(i,k),-qrs(i,k,1)/dtcld)
  830. prevp(i,k) = max(prevp(i,k),satdt/2)
  831. else
  832. prevp(i,k) = min(prevp(i,k),satdt/2)
  833. endif
  834. endif
  835. enddo
  836. enddo
  837. !
  838. !===============================================================
  839. !
  840. ! cold rain processes
  841. !
  842. ! - follows the revised ice microphysics processes in HDC
  843. ! - the processes same as in RH83 and RH84 and LFO behave
  844. ! following ice crystal hapits defined in HDC, inclduing
  845. ! intercept parameter for snow (n0s), ice crystal number
  846. ! concentration (ni), ice nuclei number concentration
  847. ! (n0i), ice diameter (d)
  848. !
  849. !===============================================================
  850. !
  851. do k = kts, kte
  852. do i = its, ite
  853. supcol = t0c-t(i,k)
  854. n0sfac(i,k) = max(min(exp(alpha*supcol),n0smax/n0s),1.)
  855. supsat = max(q(i,k),qmin)-qs(i,k,2)
  856. satdt = supsat/dtcld
  857. ifsat = 0
  858. !-------------------------------------------------------------
  859. ! Ni: ice crystal number concentraiton [HDC 5c]
  860. !-------------------------------------------------------------
  861. ! xni(i,k) = min(max(5.38e7*(den(i,k) &
  862. ! *max(qci(i,k,2),qmin))**0.75,1.e3),1.e6)
  863. temp = (den(i,k)*max(qci(i,k,2),qmin))
  864. temp = sqrt(sqrt(temp*temp*temp))
  865. xni(i,k) = min(max(5.38e7*temp,1.e3),1.e6)
  866. eacrs = exp(0.07*(-supcol))
  867. !
  868. xmi = den(i,k)*qci(i,k,2)/xni(i,k)
  869. diameter = min(dicon * sqrt(xmi),dimax)
  870. vt2i = 1.49e4*diameter**1.31
  871. vt2r=pvtr*rslopeb(i,k,1)*denfac(i,k)
  872. vt2s=pvts*rslopeb(i,k,2)*denfac(i,k)
  873. vt2g=pvtg*rslopeb(i,k,3)*denfac(i,k)
  874. qsum(i,k) = max( (qrs(i,k,2)+qrs(i,k,3)), 1.E-15)
  875. if(qsum(i,k) .gt. 1.e-15) then
  876. vt2ave=(vt2s*qrs(i,k,2)+vt2g*qrs(i,k,3))/(qsum(i,k))
  877. else
  878. vt2ave=0.
  879. endif
  880. if(supcol.gt.0.and.qci(i,k,2).gt.qmin) then
  881. if(qrs(i,k,1).gt.qcrmin) then
  882. !-------------------------------------------------------------
  883. ! praci: Accretion of cloud ice by rain [HL A15] [LFO 25]
  884. ! (T<T0: I->R)
  885. !-------------------------------------------------------------
  886. acrfac = 2.*rslope3(i,k,1)+2.*diameter*rslope2(i,k,1) &
  887. +diameter**2*rslope(i,k,1)
  888. praci(i,k) = pi*qci(i,k,2)*n0r*abs(vt2r-vt2i)*acrfac/4.
  889. praci(i,k) = min(praci(i,k),qci(i,k,2)/dtcld)
  890. !-------------------------------------------------------------
  891. ! piacr: Accretion of rain by cloud ice [HL A19] [LFO 26]
  892. ! (T<T0: R->S or R->G)
  893. !-------------------------------------------------------------
  894. piacr(i,k) = pi**2*avtr*n0r*denr*xni(i,k)*denfac(i,k) &
  895. *g6pbr*rslope3(i,k,1)*rslope3(i,k,1) &
  896. *rslopeb(i,k,1)/24./den(i,k)
  897. piacr(i,k) = min(piacr(i,k),qrs(i,k,1)/dtcld)
  898. endif
  899. !-------------------------------------------------------------
  900. ! psaci: Accretion of cloud ice by snow [HDC 10]
  901. ! (T<T0: I->S)
  902. !-------------------------------------------------------------
  903. if(qrs(i,k,2).gt.qcrmin) then
  904. acrfac = 2.*rslope3(i,k,2)+2.*diameter*rslope2(i,k,2) &
  905. +diameter**2*rslope(i,k,2)
  906. psaci(i,k) = pi*qci(i,k,2)*eacrs*n0s*n0sfac(i,k) &
  907. *abs(vt2ave-vt2i)*acrfac/4.
  908. psaci(i,k) = min(psaci(i,k),qci(i,k,2)/dtcld)
  909. endif
  910. !-------------------------------------------------------------
  911. ! pgaci: Accretion of cloud ice by graupel [HL A17] [LFO 41]
  912. ! (T<T0: I->G)
  913. !-------------------------------------------------------------
  914. if(qrs(i,k,3).gt.qcrmin) then
  915. egi = exp(0.07*(-supcol))
  916. acrfac = 2.*rslope3(i,k,3)+2.*diameter*rslope2(i,k,3) &
  917. +diameter**2*rslope(i,k,3)
  918. pgaci(i,k) = pi*egi*qci(i,k,2)*n0g*abs(vt2ave-vt2i)*acrfac/4.
  919. pgaci(i,k) = min(pgaci(i,k),qci(i,k,2)/dtcld)
  920. endif
  921. endif
  922. !-------------------------------------------------------------
  923. ! psacw: Accretion of cloud water by snow [HL A7] [LFO 24]
  924. ! (T<T0: C->S, and T>=T0: C->R)
  925. !-------------------------------------------------------------
  926. if(qrs(i,k,2).gt.qcrmin.and.qci(i,k,1).gt.qmin) then
  927. psacw(i,k) = min(pacrc*n0sfac(i,k)*rslope3(i,k,2)*rslopeb(i,k,2) &
  928. *qci(i,k,1)*denfac(i,k),qci(i,k,1)/dtcld)
  929. endif
  930. !-------------------------------------------------------------
  931. ! pgacw: Accretion of cloud water by graupel [HL A6] [LFO 40]
  932. ! (T<T0: C->G, and T>=T0: C->R)
  933. !-------------------------------------------------------------
  934. if(qrs(i,k,3).gt.qcrmin.and.qci(i,k,1).gt.qmin) then
  935. pgacw(i,k) = min(pacrg*rslope3(i,k,3)*rslopeb(i,k,3) &
  936. *qci(i,k,1)*denfac(i,k),qci(i,k,1)/dtcld)
  937. endif
  938. !-------------------------------------------------------------
  939. ! paacw: Accretion of cloud water by averaged snow/graupel
  940. ! (T<T0: C->G or S, and T>=T0: C->R)
  941. !-------------------------------------------------------------
  942. if(qrs(i,k,2).gt.qcrmin.and.qrs(i,k,3).gt.qcrmin) then
  943. paacw(i,k) = (qrs(i,k,2)*psacw(i,k)+qrs(i,k,3)*pgacw(i,k)) &
  944. /(qsum(i,k))
  945. endif
  946. !-------------------------------------------------------------
  947. ! pracs: Accretion of snow by rain [HL A11] [LFO 27]
  948. ! (T<T0: S->G)
  949. !-------------------------------------------------------------
  950. if(qrs(i,k,2).gt.qcrmin.and.qrs(i,k,1).gt.qcrmin) then
  951. if(supcol.gt.0) then
  952. acrfac = 5.*rslope3(i,k,2)*rslope3(i,k,2)*rslope(i,k,1) &
  953. +2.*rslope3(i,k,2)*rslope2(i,k,2)*rslope2(i,k,1) &
  954. +.5*rslope2(i,k,2)*rslope2(i,k,2)*rslope3(i,k,1)
  955. pracs(i,k) = pi**2*n0r*n0s*n0sfac(i,k)*abs(vt2r-vt2ave) &
  956. *(dens/den(i,k))*acrfac
  957. pracs(i,k) = min(pracs(i,k),qrs(i,k,2)/dtcld)
  958. endif
  959. !-------------------------------------------------------------
  960. ! psacr: Accretion of rain by snow [HL A10] [LFO 28]
  961. ! (T<T0:R->S or R->G) (T>=T0: enhance melting of snow)
  962. !-------------------------------------------------------------
  963. acrfac = 5.*rslope3(i,k,1)*rslope3(i,k,1)*rslope(i,k,2) &
  964. +2.*rslope3(i,k,1)*rslope2(i,k,1)*rslope2(i,k,2) &
  965. +.5*rslope2(i,k,1)*rslope2(i,k,1)*rslope3(i,k,2)
  966. psacr(i,k) = pi**2*n0r*n0s*n0sfac(i,k)*abs(vt2ave-vt2r) &
  967. *(denr/den(i,k))*acrfac
  968. psacr(i,k) = min(psacr(i,k),qrs(i,k,1)/dtcld)
  969. endif
  970. !-------------------------------------------------------------
  971. ! pgacr: Accretion of rain by graupel [HL A12] [LFO 42]
  972. ! (T<T0: R->G) (T>=T0: enhance melting of graupel)
  973. !-------------------------------------------------------------
  974. if(qrs(i,k,3).gt.qcrmin.and.qrs(i,k,1).gt.qcrmin) then
  975. acrfac = 5.*rslope3(i,k,1)*rslope3(i,k,1)*rslope(i,k,3) &
  976. +2.*rslope3(i,k,1)*rslope2(i,k,1)*rslope2(i,k,3) &
  977. +.5*rslope2(i,k,1)*rslope2(i,k,1)*rslope3(i,k,3)
  978. pgacr(i,k) = pi**2*n0r*n0g*abs(vt2ave-vt2r)*(denr/den(i,k)) &
  979. *acrfac
  980. pgacr(i,k) = min(pgacr(i,k),qrs(i,k,1)/dtcld)
  981. endif
  982. !
  983. !-------------------------------------------------------------
  984. ! pgacs: Accretion of snow by graupel [HL A13] [LFO 29]
  985. ! (S->G): This process is eliminated in V3.0 with the
  986. ! new combined snow/graupel fall speeds
  987. !-------------------------------------------------------------
  988. if(qrs(i,k,3).gt.qcrmin.and.qrs(i,k,2).gt.qcrmin) then
  989. pgacs(i,k) = 0.
  990. endif
  991. if(supcol.le.0) then
  992. xlf = xlf0
  993. !-------------------------------------------------------------
  994. ! pseml: Enhanced melting of snow by accretion of water [HL A34]
  995. ! (T>=T0: S->R)
  996. !-------------------------------------------------------------
  997. if(qrs(i,k,2).gt.0.) &
  998. pseml(i,k) = min(max(cliq*supcol*(paacw(i,k)+psacr(i,k)) &
  999. /xlf,-qrs(i,k,2)/dtcld),0.)
  1000. !-------------------------------------------------------------
  1001. ! pgeml: Enhanced melting of graupel by accretion of water [HL A24] [RH84 A21-A22]
  1002. ! (T>=T0: G->R)
  1003. !-------------------------------------------------------------
  1004. if(qrs(i,k,3).gt.0.) &
  1005. pgeml(i,k) = min(max(cliq*supcol*(paacw(i,k)+pgacr(i,k)) &
  1006. /xlf,-qrs(i,k,3)/dtcld),0.)
  1007. endif
  1008. if(supcol.gt.0) then
  1009. !-------------------------------------------------------------
  1010. ! pidep: Deposition/Sublimation rate of ice [HDC 9]
  1011. ! (T<T0: V->I or I->V)
  1012. !-------------------------------------------------------------
  1013. if(qci(i,k,2).gt.0.and.ifsat.ne.1) then
  1014. pidep(i,k) = 4.*diameter*xni(i,k)*(rh(i,k,2)-1.)/work1(i,k,2)
  1015. supice = satdt-prevp(i,k)
  1016. if(pidep(i,k).lt.0.) then
  1017. pidep(i,k) = max(max(pidep(i,k),satdt/2),supice)
  1018. pidep(i,k) = max(pidep(i,k),-qci(i,k,2)/dtcld)
  1019. else
  1020. pidep(i,k) = min(min(pidep(i,k),satdt/2),supice)
  1021. endif
  1022. if(abs(prevp(i,k)+pidep(i,k)).ge.abs(satdt)) ifsat = 1
  1023. endif
  1024. !-------------------------------------------------------------
  1025. ! psdep: deposition/sublimation rate of snow [HDC 14]
  1026. ! (T<T0: V->S or S->V)
  1027. !-------------------------------------------------------------
  1028. if(qrs(i,k,2).gt.0..and.ifsat.ne.1) then
  1029. coeres = rslope2(i,k,2)*sqrt(rslope(i,k,2)*rslopeb(i,k,2))
  1030. psdep(i,k) = (rh(i,k,2)-1.)*n0sfac(i,k)*(precs1*rslope2(i,k,2) &
  1031. + precs2*work2(i,k)*coeres)/work1

Large files files are truncated, but you can click here to view the full file