PageRenderTime 77ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/wrfv2_fire/phys/module_mp_gsfcgce.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 2838 lines | 1694 code | 322 blank | 822 comment | 147 complexity | 4686bc158b95f5e42c5d6615ed17ee47 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. !WRF:MODEL_LAYER:PHYSICS
  2. !
  3. MODULE module_mp_gsfcgce
  4. USE module_wrf_error
  5. !JJS 1/3/2008 vvvvv
  6. ! common /bt/
  7. REAL, PRIVATE :: rd1, rd2, al, cp
  8. ! common /cont/
  9. REAL, PRIVATE :: c38, c358, c610, c149, &
  10. c879, c172, c409, c76, &
  11. c218, c580, c141
  12. ! common /b3cs/
  13. REAL, PRIVATE :: ag, bg, as, bs, &
  14. aw, bw, bgh, bgq, &
  15. bsh, bsq, bwh, bwq
  16. ! common /size/
  17. REAL, PRIVATE :: tnw, tns, tng, &
  18. roqs, roqg, roqr
  19. ! common /bterv/
  20. REAL, PRIVATE :: zrc, zgc, zsc, &
  21. vrc, vgc, vsc
  22. ! common /bsnw/
  23. REAL, PRIVATE :: alv, alf, als, t0, t00, &
  24. avc, afc, asc, rn1, bnd1, &
  25. rn2, bnd2, rn3, rn4, rn5, &
  26. rn6, rn7, rn8, rn9, rn10, &
  27. rn101,rn10a, rn11,rn11a, rn12
  28. REAL, PRIVATE :: rn14, rn15,rn15a, rn16, rn17, &
  29. rn17a,rn17b,rn17c, rn18, rn18a, &
  30. rn19,rn19a,rn19b, rn20, rn20a, &
  31. rn20b, bnd3, rn21, rn22, rn23, &
  32. rn23a,rn23b, rn25,rn30a, rn30b, &
  33. rn30c, rn31, beta, rn32
  34. REAL, PRIVATE, DIMENSION( 31 ) :: rn12a, rn12b, rn13, rn25a
  35. ! common /rsnw1/
  36. REAL, PRIVATE :: rn10b, rn10c, rnn191, rnn192, rn30, &
  37. rnn30a, rn33, rn331, rn332
  38. !
  39. REAL, PRIVATE, DIMENSION( 31 ) :: aa1, aa2
  40. DATA aa1/.7939e-7, .7841e-6, .3369e-5, .4336e-5, .5285e-5, &
  41. .3728e-5, .1852e-5, .2991e-6, .4248e-6, .7434e-6, &
  42. .1812e-5, .4394e-5, .9145e-5, .1725e-4, .3348e-4, &
  43. .1725e-4, .9175e-5, .4412e-5, .2252e-5, .9115e-6, &
  44. .4876e-6, .3473e-6, .4758e-6, .6306e-6, .8573e-6, &
  45. .7868e-6, .7192e-6, .6513e-6, .5956e-6, .5333e-6, &
  46. .4834e-6/
  47. DATA aa2/.4006, .4831, .5320, .5307, .5319, &
  48. .5249, .4888, .3894, .4047, .4318, &
  49. .4771, .5183, .5463, .5651, .5813, &
  50. .5655, .5478, .5203, .4906, .4447, &
  51. .4126, .3960, .4149, .4320, .4506, &
  52. .4483, .4460, .4433, .4413, .4382, &
  53. .4361/
  54. !JJS 1/3/2008 ^^^^^
  55. CONTAINS
  56. !-------------------------------------------------------------------
  57. ! NASA/GSFC GCE
  58. ! Tao et al, 2001, Meteo. & Atmos. Phy., 97-137
  59. !-------------------------------------------------------------------
  60. ! SUBROUTINE gsfcgce( th, th_old, &
  61. SUBROUTINE gsfcgce( th, &
  62. qv, ql, &
  63. qr, qi, &
  64. qs, &
  65. ! qvold, qlold, &
  66. ! qrold, qiold, &
  67. ! qsold, &
  68. rho, pii, p, dt_in, z, &
  69. ht, dz8w, grav, &
  70. rhowater, rhosnow, &
  71. itimestep, &
  72. ids,ide, jds,jde, kds,kde, & ! domain dims
  73. ims,ime, jms,jme, kms,kme, & ! memory dims
  74. its,ite, jts,jte, kts,kte, & ! tile dims
  75. rainnc, rainncv, &
  76. snownc, snowncv, sr, &
  77. graupelnc, graupelncv, &
  78. ! f_qg, qg, pgold, &
  79. f_qg, qg, &
  80. ihail, ice2 &
  81. )
  82. !-------------------------------------------------------------------
  83. IMPLICIT NONE
  84. !-------------------------------------------------------------------
  85. !
  86. ! JJS 2/15/2005
  87. !
  88. INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde , &
  89. ims,ime, jms,jme, kms,kme , &
  90. its,ite, jts,jte, kts,kte
  91. INTEGER, INTENT(IN ) :: itimestep, ihail, ice2
  92. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
  93. INTENT(INOUT) :: &
  94. th, &
  95. qv, &
  96. ql, &
  97. qr, &
  98. qi, &
  99. qs, &
  100. qg
  101. !
  102. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
  103. INTENT(IN ) :: &
  104. ! th_old, &
  105. ! qvold, &
  106. ! qlold, &
  107. ! qrold, &
  108. ! qiold, &
  109. ! qsold, &
  110. ! qgold, &
  111. rho, &
  112. pii, &
  113. p, &
  114. dz8w, &
  115. z
  116. REAL, DIMENSION( ims:ime , jms:jme ), &
  117. INTENT(INOUT) :: rainnc, &
  118. rainncv, &
  119. snownc, &
  120. snowncv, &
  121. sr, &
  122. graupelnc, &
  123. graupelncv
  124. REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: ht
  125. REAL, INTENT(IN ) :: dt_in, &
  126. grav, &
  127. rhowater, &
  128. rhosnow
  129. LOGICAL, INTENT(IN), OPTIONAL :: F_QG
  130. ! LOCAL VAR
  131. !jjs INTEGER :: min_q, max_q
  132. !jjs REAL, DIMENSION( its:ite , jts:jte ) &
  133. !jjs :: rain, snow, graupel,ice
  134. !
  135. ! INTEGER :: IHAIL, itaobraun, ice2, istatmin, new_ice_sat, id
  136. INTEGER :: itaobraun, istatmin, new_ice_sat, id
  137. INTEGER :: i, j, k
  138. INTEGER :: iskip, ih, icount, ibud, i24h
  139. REAL :: hour
  140. REAL , PARAMETER :: cmin=1.e-20
  141. REAL :: dth, dqv, dqrest, dqall, dqall1, rhotot, a1, a2
  142. ! REAL, DIMENSION( its:ite , kts:kte , jts:jte ) :: &
  143. ! th1, qv1, ql1, qr1, qi1, qs1, qg1
  144. LOGICAL :: flag_qg
  145. !
  146. !c ihail = 0 for graupel, for tropical region
  147. !c ihail = 1 for hail, for mid-lat region
  148. ! itaobraun: 0 for Tao's constantis, 1 for Braun's constants
  149. !c if ( itaobraun.eq.1 ) --> betah=0.5*beta=-.46*0.5=-0.23; cn0=1.e-6
  150. !c if ( itaobraun.eq.0 ) --> betah=0.5*beta=-.6*0.5=-0.30; cn0=1.e-8
  151. itaobraun = 1
  152. !c ice2 = 0 for 3 ice --- ice, snow and graupel/hail
  153. !c ice2 = 1 for 2 ice --- ice and snow only
  154. !c ice2 = 2 for 2 ice --- ice and graupel only, use ihail = 0 only
  155. !c ice2 = 3 for 0 ice --- no ice, warm only
  156. ! if (ice2 .eq. 2) ihail = 0
  157. i24h=nint(86400./dt_in)
  158. if (mod(itimestep,i24h).eq.1) then
  159. write(6,*) 'ihail=',ihail,' ice2=',ice2
  160. if (ice2.eq.0) then
  161. write(6,*) 'Running 3-ice scheme in GSFCGCE with'
  162. if (ihail.eq.0) then
  163. write(6,*) ' ice, snow and graupel'
  164. else if (ihail.eq.1) then
  165. write(6,*) ' ice, snow and hail'
  166. else
  167. write(6,*) 'ihail has to be either 1 or 0'
  168. stop
  169. endif !ihail
  170. else if (ice2.eq.1) then
  171. write(6,*) 'Running 2-ice scheme in GSFCGCE with'
  172. write(6,*) ' ice and snow'
  173. else if (ice2.eq.2) then
  174. write(6,*) 'Running 2-ice scheme in GSFCGCE with'
  175. write(6,*) ' ice and graupel'
  176. else if (ice2.eq.3) then
  177. write(6,*) 'Running warm rain only scheme in GSFCGCE without any ice'
  178. else
  179. write(6,*) 'gsfcgce_2ice in namelist.input has to be 0, 1, 2, or 3'
  180. stop
  181. endif !ice2
  182. endif !itimestep
  183. !c new_ice_sat = 0, 1 or 2
  184. new_ice_sat = 2
  185. !c istatmin
  186. istatmin = 180
  187. !c id = 0 without in-line staticstics
  188. !c id = 1 with in-line staticstics
  189. id = 0
  190. !c ibud = 0 no calculation of dth, dqv, dqrest and dqall
  191. !c ibud = 1 yes
  192. ibud = 0
  193. !jjs dt=dt_in
  194. !jjs rhoe_s=1.29
  195. !
  196. ! IF (P_QI .lt. P_FIRST_SCALAR .or. P_QS .lt. P_FIRST_SCALAR) THEN
  197. ! CALL wrf_error_fatal3 ( "module_mp_lin.b" , 130 , 'module_mp_lin: Improper use of Lin et al scheme; no ice phase. Please chose another one.')
  198. ! ENDIF
  199. ! calculte fallflux and precipiation in MKS system
  200. call fall_flux(dt_in, qr, qi, qs, qg, p, &
  201. rho, z, dz8w, ht, rainnc, &
  202. rainncv, grav,itimestep, &
  203. rhowater, rhosnow, &
  204. snownc, snowncv, sr, &
  205. graupelnc, graupelncv, &
  206. ihail, ice2, &
  207. ims,ime, jms,jme, kms,kme, & ! memory dims
  208. its,ite, jts,jte, kts,kte ) ! tile dims
  209. !-----------------------------------------------------------------------
  210. !c set up constants used internally in GCE
  211. call consat_s (ihail, itaobraun)
  212. !c Negative values correction
  213. iskip = 1
  214. if (iskip.eq.0) then
  215. call negcor(qv,rho,dz8w,ims,ime,jms,jme,kms,kme, &
  216. itimestep,1, &
  217. its,ite,jts,jte,kts,kte)
  218. call negcor(ql,rho,dz8w,ims,ime,jms,jme,kms,kme, &
  219. itimestep,2, &
  220. its,ite,jts,jte,kts,kte)
  221. call negcor(qr,rho,dz8w,ims,ime,jms,jme,kms,kme, &
  222. itimestep,3, &
  223. its,ite,jts,jte,kts,kte)
  224. call negcor(qi,rho,dz8w,ims,ime,jms,jme,kms,kme, &
  225. itimestep,4, &
  226. its,ite,jts,jte,kts,kte)
  227. call negcor(qs,rho,dz8w,ims,ime,jms,jme,kms,kme, &
  228. itimestep,5, &
  229. its,ite,jts,jte,kts,kte)
  230. call negcor(qg,rho,dz8w,ims,ime,jms,jme,kms,kme, &
  231. itimestep,6, &
  232. its,ite,jts,jte,kts,kte)
  233. ! else if (mod(itimestep,i24h).eq.1) then
  234. ! print *,'no neg correction in mp at timestep=',itimestep
  235. endif ! iskip
  236. !c microphysics in GCE
  237. call SATICEL_S( dt_in, IHAIL, itaobraun, ICE2, istatmin, &
  238. new_ice_sat, id, &
  239. ! th, th_old, qv, ql, qr, &
  240. th, qv, ql, qr, &
  241. qi, qs, qg, &
  242. ! qvold, qlold, qrold, &
  243. ! qiold, qsold, qgold, &
  244. rho, pii, p, itimestep, &
  245. ids,ide, jds,jde, kds,kde, & ! domain dims
  246. ims,ime, jms,jme, kms,kme, & ! memory dims
  247. its,ite, jts,jte, kts,kte & ! tile dims
  248. )
  249. END SUBROUTINE gsfcgce
  250. !-----------------------------------------------------------------------
  251. SUBROUTINE fall_flux ( dt, qr, qi, qs, qg, p, &
  252. rho, z, dz8w, topo, rainnc, &
  253. rainncv, grav, itimestep, &
  254. rhowater, rhosnow, &
  255. snownc, snowncv, sr, &
  256. graupelnc, graupelncv, &
  257. ihail, ice2, &
  258. ims,ime, jms,jme, kms,kme, & ! memory dims
  259. its,ite, jts,jte, kts,kte ) ! tile dims
  260. !-----------------------------------------------------------------------
  261. ! adopted from Jiun-Dar Chern's codes for Purdue Regional Model
  262. ! adopted by Jainn J. Shi, 6/10/2005
  263. !-----------------------------------------------------------------------
  264. IMPLICIT NONE
  265. INTEGER, INTENT(IN ) :: ihail, ice2, &
  266. ims,ime, jms,jme, kms,kme, &
  267. its,ite, jts,jte, kts,kte
  268. INTEGER, INTENT(IN ) :: itimestep
  269. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
  270. INTENT(INOUT) :: qr, qi, qs, qg
  271. REAL, DIMENSION( ims:ime , jms:jme ), &
  272. INTENT(INOUT) :: rainnc, rainncv, &
  273. snownc, snowncv, sr, &
  274. graupelnc, graupelncv
  275. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
  276. INTENT(IN ) :: rho, z, dz8w, p
  277. REAL, INTENT(IN ) :: dt, grav, rhowater, rhosnow
  278. REAL, DIMENSION( ims:ime , jms:jme ), &
  279. INTENT(IN ) :: topo
  280. ! temperary vars
  281. REAL, DIMENSION( kts:kte ) :: sqrhoz
  282. REAL :: tmp1, term0
  283. REAL :: pptrain, pptsnow, &
  284. pptgraul, pptice
  285. REAL, DIMENSION( kts:kte ) :: qrz, qiz, qsz, qgz, &
  286. zz, dzw, prez, rhoz, &
  287. orhoz
  288. INTEGER :: k, i, j
  289. !
  290. REAL, DIMENSION( kts:kte ) :: vtr, vts, vtg, vti
  291. REAL :: dtb, pi, consta, constc, gambp4, &
  292. gamdp4, gam4pt5, gam4bbar
  293. ! Lin
  294. REAL , PARAMETER :: xnor = 8.0e6
  295. ! REAL , PARAMETER :: xnos = 3.0e6
  296. REAL , PARAMETER :: xnos = 1.6e7 ! Tao's value
  297. REAL , PARAMETER :: &
  298. ! constb = 0.8, constd = 0.25, o6 = 1./6., &
  299. constb = 0.8, constd = 0.11, o6 = 1./6., &
  300. cdrag = 0.6
  301. ! Lin
  302. ! REAL , PARAMETER :: xnoh = 4.0e4
  303. REAL , PARAMETER :: xnoh = 2.0e5 ! Tao's value
  304. REAL , PARAMETER :: rhohail = 917.
  305. ! Hobbs
  306. REAL , PARAMETER :: xnog = 4.0e6
  307. REAL , PARAMETER :: rhograul = 400.
  308. REAL , PARAMETER :: abar = 19.3, bbar = 0.37, &
  309. p0 = 1.0e5
  310. REAL , PARAMETER :: rhoe_s = 1.29
  311. ! for terminal velocity flux
  312. INTEGER :: min_q, max_q
  313. REAL :: t_del_tv, del_tv, flux, fluxin, fluxout ,tmpqrz
  314. LOGICAL :: notlast
  315. ! if (itimestep.eq.1) then
  316. ! write(6, *) 'in fall_flux'
  317. ! write(6, *) 'ims=', ims, ' ime=', ime
  318. ! write(6, *) 'jms=', jms, ' jme=', jme
  319. ! write(6, *) 'kms=', kms, ' kme=', kme
  320. ! write(6, *) 'its=', its, ' ite=', ite
  321. ! write(6, *) 'jts=', jts, ' jte=', jte
  322. ! write(6, *) 'kts=', kts, ' kte=', kte
  323. ! write(6, *) 'dt=', dt
  324. ! write(6, *) 'ihail=', ihail
  325. ! write(6, *) 'ICE2=', ICE2
  326. ! write(6, *) 'dt=', dt
  327. ! endif
  328. !-----------------------------------------------------------------------
  329. ! This program calculates precipitation fluxes due to terminal velocities.
  330. !-----------------------------------------------------------------------
  331. dtb=dt
  332. pi=acos(-1.)
  333. consta=2115.0*0.01**(1-constb)
  334. ! constc=152.93*0.01**(1-constd)
  335. constc=78.63*0.01**(1-constd)
  336. ! Gamma function
  337. gambp4=ggamma(constb+4.)
  338. gamdp4=ggamma(constd+4.)
  339. gam4pt5=ggamma(4.5)
  340. gam4bbar=ggamma(4.+bbar)
  341. !***********************************************************************
  342. ! Calculate precipitation fluxes due to terminal velocities.
  343. !***********************************************************************
  344. !
  345. !- Calculate termianl velocity (vt?) of precipitation q?z
  346. !- Find maximum vt? to determine the small delta t
  347. j_loop: do j = jts, jte
  348. i_loop: do i = its, ite
  349. pptrain = 0.
  350. pptsnow = 0.
  351. pptgraul = 0.
  352. pptice = 0.
  353. do k = kts, kte
  354. qrz(k)=qr(i,k,j)
  355. rhoz(k)=rho(i,k,j)
  356. orhoz(k)=1./rhoz(k)
  357. prez(k)=p(i,k,j)
  358. sqrhoz(k)=sqrt(rhoe_s/rhoz(k))
  359. zz(k)=z(i,k,j)
  360. dzw(k)=dz8w(i,k,j)
  361. enddo !k
  362. DO k = kts, kte
  363. qiz(k)=qi(i,k,j)
  364. ENDDO
  365. DO k = kts, kte
  366. qsz(k)=qs(i,k,j)
  367. ENDDO
  368. IF (ice2 .eq. 0) THEN
  369. DO k = kts, kte
  370. qgz(k)=qg(i,k,j)
  371. ENDDO
  372. ELSE
  373. DO k = kts, kte
  374. qgz(k)=0.
  375. ENDDO
  376. ENDIF
  377. !
  378. !-- rain
  379. !
  380. t_del_tv=0.
  381. del_tv=dtb
  382. notlast=.true.
  383. DO while (notlast)
  384. !
  385. min_q=kte
  386. max_q=kts-1
  387. !
  388. do k=kts,kte-1
  389. if (qrz(k) .gt. 1.0e-8) then
  390. min_q=min0(min_q,k)
  391. max_q=max0(max_q,k)
  392. tmp1=sqrt(pi*rhowater*xnor/rhoz(k)/qrz(k))
  393. tmp1=sqrt(tmp1)
  394. vtr(k)=consta*gambp4*sqrhoz(k)/tmp1**constb
  395. vtr(k)=vtr(k)/6.
  396. if (k .eq. 1) then
  397. del_tv=amin1(del_tv,0.9*(zz(k)-topo(i,j))/vtr(k))
  398. else
  399. del_tv=amin1(del_tv,0.9*(zz(k)-zz(k-1))/vtr(k))
  400. endif
  401. else
  402. vtr(k)=0.
  403. endif
  404. enddo
  405. if (max_q .ge. min_q) then
  406. !
  407. !- Check if the summation of the small delta t >= big delta t
  408. ! (t_del_tv) (del_tv) (dtb)
  409. t_del_tv=t_del_tv+del_tv
  410. !
  411. if ( t_del_tv .ge. dtb ) then
  412. notlast=.false.
  413. del_tv=dtb+del_tv-t_del_tv
  414. endif
  415. ! use small delta t to calculate the qrz flux
  416. ! termi is the qrz flux pass in the grid box through the upper boundary
  417. ! termo is the qrz flux pass out the grid box through the lower boundary
  418. !
  419. fluxin=0.
  420. do k=max_q,min_q,-1
  421. fluxout=rhoz(k)*vtr(k)*qrz(k)
  422. flux=(fluxin-fluxout)/rhoz(k)/dzw(k)
  423. ! tmpqrz=qrz(k)
  424. qrz(k)=qrz(k)+del_tv*flux
  425. qrz(k)=amax1(0.,qrz(k))
  426. qr(i,k,j)=qrz(k)
  427. fluxin=fluxout
  428. enddo
  429. if (min_q .eq. 1) then
  430. pptrain=pptrain+fluxin*del_tv
  431. else
  432. qrz(min_q-1)=qrz(min_q-1)+del_tv* &
  433. fluxin/rhoz(min_q-1)/dzw(min_q-1)
  434. qr(i,min_q-1,j)=qrz(min_q-1)
  435. endif
  436. !
  437. else
  438. notlast=.false.
  439. endif
  440. ENDDO
  441. !
  442. !-- snow
  443. !
  444. t_del_tv=0.
  445. del_tv=dtb
  446. notlast=.true.
  447. DO while (notlast)
  448. !
  449. min_q=kte
  450. max_q=kts-1
  451. !
  452. do k=kts,kte-1
  453. if (qsz(k) .gt. 1.0e-8) then
  454. min_q=min0(min_q,k)
  455. max_q=max0(max_q,k)
  456. tmp1=sqrt(pi*rhosnow*xnos/rhoz(k)/qsz(k))
  457. tmp1=sqrt(tmp1)
  458. vts(k)=constc*gamdp4*sqrhoz(k)/tmp1**constd
  459. vts(k)=vts(k)/6.
  460. if (k .eq. 1) then
  461. del_tv=amin1(del_tv,0.9*(zz(k)-topo(i,j))/vts(k))
  462. else
  463. del_tv=amin1(del_tv,0.9*(zz(k)-zz(k-1))/vts(k))
  464. endif
  465. else
  466. vts(k)=0.
  467. endif
  468. enddo
  469. if (max_q .ge. min_q) then
  470. !
  471. !
  472. !- Check if the summation of the small delta t >= big delta t
  473. ! (t_del_tv) (del_tv) (dtb)
  474. t_del_tv=t_del_tv+del_tv
  475. if ( t_del_tv .ge. dtb ) then
  476. notlast=.false.
  477. del_tv=dtb+del_tv-t_del_tv
  478. endif
  479. ! use small delta t to calculate the qsz flux
  480. ! termi is the qsz flux pass in the grid box through the upper boundary
  481. ! termo is the qsz flux pass out the grid box through the lower boundary
  482. !
  483. fluxin=0.
  484. do k=max_q,min_q,-1
  485. fluxout=rhoz(k)*vts(k)*qsz(k)
  486. flux=(fluxin-fluxout)/rhoz(k)/dzw(k)
  487. qsz(k)=qsz(k)+del_tv*flux
  488. qsz(k)=amax1(0.,qsz(k))
  489. qs(i,k,j)=qsz(k)
  490. fluxin=fluxout
  491. enddo
  492. if (min_q .eq. 1) then
  493. pptsnow=pptsnow+fluxin*del_tv
  494. else
  495. qsz(min_q-1)=qsz(min_q-1)+del_tv* &
  496. fluxin/rhoz(min_q-1)/dzw(min_q-1)
  497. qs(i,min_q-1,j)=qsz(min_q-1)
  498. endif
  499. !
  500. else
  501. notlast=.false.
  502. endif
  503. ENDDO
  504. !
  505. ! ice2=0 --- with hail/graupel
  506. ! ice2=1 --- without hail/graupel
  507. !
  508. if (ice2.eq.0) then
  509. !
  510. !-- If IHAIL=1, use hail.
  511. !-- If IHAIL=0, use graupel.
  512. !
  513. ! if (ihail .eq. 1) then
  514. ! xnog = xnoh
  515. ! rhograul = rhohail
  516. ! endif
  517. t_del_tv=0.
  518. del_tv=dtb
  519. notlast=.true.
  520. !
  521. DO while (notlast)
  522. !
  523. min_q=kte
  524. max_q=kts-1
  525. !
  526. do k=kts,kte-1
  527. if (qgz(k) .gt. 1.0e-8) then
  528. if (ihail .eq. 1) then
  529. ! for hail, based on Lin et al (1983)
  530. min_q=min0(min_q,k)
  531. max_q=max0(max_q,k)
  532. tmp1=sqrt(pi*rhohail*xnoh/rhoz(k)/qgz(k))
  533. tmp1=sqrt(tmp1)
  534. term0=sqrt(4.*grav*rhohail/3./rhoz(k)/cdrag)
  535. vtg(k)=gam4pt5*term0*sqrt(1./tmp1)
  536. vtg(k)=vtg(k)/6.
  537. if (k .eq. 1) then
  538. del_tv=amin1(del_tv,0.9*(zz(k)-topo(i,j))/vtg(k))
  539. else
  540. del_tv=amin1(del_tv,0.9*(zz(k)-zz(k-1))/vtg(k))
  541. endif !k
  542. else
  543. ! added by JJS
  544. ! for graupel, based on RH (1984)
  545. min_q=min0(min_q,k)
  546. max_q=max0(max_q,k)
  547. tmp1=sqrt(pi*rhograul*xnog/rhoz(k)/qgz(k))
  548. tmp1=sqrt(tmp1)
  549. tmp1=tmp1**bbar
  550. tmp1=1./tmp1
  551. term0=abar*gam4bbar/6.
  552. vtg(k)=term0*tmp1*(p0/prez(k))**0.4
  553. if (k .eq. 1) then
  554. del_tv=amin1(del_tv,0.9*(zz(k)-topo(i,j))/vtg(k))
  555. else
  556. del_tv=amin1(del_tv,0.9*(zz(k)-zz(k-1))/vtg(k))
  557. endif !k
  558. endif !ihail
  559. else
  560. vtg(k)=0.
  561. endif !qgz
  562. enddo !k
  563. if (max_q .ge. min_q) then
  564. !
  565. !
  566. !- Check if the summation of the small delta t >= big delta t
  567. ! (t_del_tv) (del_tv) (dtb)
  568. t_del_tv=t_del_tv+del_tv
  569. if ( t_del_tv .ge. dtb ) then
  570. notlast=.false.
  571. del_tv=dtb+del_tv-t_del_tv
  572. endif
  573. ! use small delta t to calculate the qgz flux
  574. ! termi is the qgz flux pass in the grid box through the upper boundary
  575. ! termo is the qgz flux pass out the grid box through the lower boundary
  576. !
  577. fluxin=0.
  578. do k=max_q,min_q,-1
  579. fluxout=rhoz(k)*vtg(k)*qgz(k)
  580. flux=(fluxin-fluxout)/rhoz(k)/dzw(k)
  581. qgz(k)=qgz(k)+del_tv*flux
  582. qgz(k)=amax1(0.,qgz(k))
  583. qg(i,k,j)=qgz(k)
  584. fluxin=fluxout
  585. enddo
  586. if (min_q .eq. 1) then
  587. pptgraul=pptgraul+fluxin*del_tv
  588. else
  589. qgz(min_q-1)=qgz(min_q-1)+del_tv* &
  590. fluxin/rhoz(min_q-1)/dzw(min_q-1)
  591. qg(i,min_q-1,j)=qgz(min_q-1)
  592. endif
  593. !
  594. else
  595. notlast=.false.
  596. endif
  597. !
  598. ENDDO
  599. ENDIF !ice2
  600. !
  601. !-- cloud ice (03/21/02) follow Vaughan T.J. Phillips at GFDL
  602. !
  603. t_del_tv=0.
  604. del_tv=dtb
  605. notlast=.true.
  606. !
  607. DO while (notlast)
  608. !
  609. min_q=kte
  610. max_q=kts-1
  611. !
  612. do k=kts,kte-1
  613. if (qiz(k) .gt. 1.0e-8) then
  614. min_q=min0(min_q,k)
  615. max_q=max0(max_q,k)
  616. vti(k)= 3.29 * (rhoz(k)* qiz(k))** 0.16 ! Heymsfield and Donner
  617. if (k .eq. 1) then
  618. del_tv=amin1(del_tv,0.9*(zz(k)-topo(i,j))/vti(k))
  619. else
  620. del_tv=amin1(del_tv,0.9*(zz(k)-zz(k-1))/vti(k))
  621. endif
  622. else
  623. vti(k)=0.
  624. endif
  625. enddo
  626. if (max_q .ge. min_q) then
  627. !
  628. !
  629. !- Check if the summation of the small delta t >= big delta t
  630. ! (t_del_tv) (del_tv) (dtb)
  631. t_del_tv=t_del_tv+del_tv
  632. if ( t_del_tv .ge. dtb ) then
  633. notlast=.false.
  634. del_tv=dtb+del_tv-t_del_tv
  635. endif
  636. ! use small delta t to calculate the qiz flux
  637. ! termi is the qiz flux pass in the grid box through the upper boundary
  638. ! termo is the qiz flux pass out the grid box through the lower boundary
  639. !
  640. fluxin=0.
  641. do k=max_q,min_q,-1
  642. fluxout=rhoz(k)*vti(k)*qiz(k)
  643. flux=(fluxin-fluxout)/rhoz(k)/dzw(k)
  644. qiz(k)=qiz(k)+del_tv*flux
  645. qiz(k)=amax1(0.,qiz(k))
  646. qi(i,k,j)=qiz(k)
  647. fluxin=fluxout
  648. enddo
  649. if (min_q .eq. 1) then
  650. pptice=pptice+fluxin*del_tv
  651. else
  652. qiz(min_q-1)=qiz(min_q-1)+del_tv* &
  653. fluxin/rhoz(min_q-1)/dzw(min_q-1)
  654. qi(i,min_q-1,j)=qiz(min_q-1)
  655. endif
  656. !
  657. else
  658. notlast=.false.
  659. endif
  660. !
  661. ENDDO !notlast
  662. ! prnc(i,j)=prnc(i,j)+pptrain
  663. ! psnowc(i,j)=psnowc(i,j)+pptsnow
  664. ! pgrauc(i,j)=pgrauc(i,j)+pptgraul
  665. ! picec(i,j)=picec(i,j)+pptice
  666. !
  667. ! write(6,*) 'i=',i,' j=',j,' ', pptrain, pptsnow, pptgraul, pptice
  668. ! call flush(6)
  669. snowncv(i,j) = pptsnow
  670. snownc(i,j) = snownc(i,j) + pptsnow
  671. graupelncv(i,j) = pptgraul
  672. graupelnc(i,j) = graupelnc(i,j) + pptgraul
  673. RAINNCV(i,j) = pptrain + pptsnow + pptgraul + pptice
  674. RAINNC(i,j) = RAINNC(i,j) + pptrain + pptsnow + pptgraul + pptice
  675. sr(i,j) = 0.
  676. if (RAINNCV(i,j) .gt. 0.) sr(i,j) = (pptsnow + pptgraul + pptice) / RAINNCV(i,j)
  677. ENDDO i_loop
  678. ENDDO j_loop
  679. ! if (itimestep.eq.6480) then
  680. ! write(51,*) 'in the end of fallflux, itimestep=',itimestep
  681. ! do j=jts,jte
  682. ! do i=its,ite
  683. ! if (rainnc(i,j).gt.400.) then
  684. ! write(50,*) 'i=',i,' j=',j,' rainnc=',rainnc
  685. ! endif
  686. ! enddo
  687. ! enddo
  688. ! endif
  689. END SUBROUTINE fall_flux
  690. !----------------------------------------------------------------
  691. REAL FUNCTION ggamma(X)
  692. !----------------------------------------------------------------
  693. IMPLICIT NONE
  694. !----------------------------------------------------------------
  695. REAL, INTENT(IN ) :: x
  696. REAL, DIMENSION(8) :: B
  697. INTEGER ::j, K1
  698. REAL ::PF, G1TO2 ,TEMP
  699. DATA B/-.577191652,.988205891,-.897056937,.918206857, &
  700. -.756704078,.482199394,-.193527818,.035868343/
  701. PF=1.
  702. TEMP=X
  703. DO 10 J=1,200
  704. IF (TEMP .LE. 2) GO TO 20
  705. TEMP=TEMP-1.
  706. 10 PF=PF*TEMP
  707. 100 FORMAT(//,5X,'module_gsfcgce: INPUT TO GAMMA FUNCTION TOO LARGE, X=',E12.5)
  708. WRITE(wrf_err_message,100)X
  709. CALL wrf_error_fatal(wrf_err_message)
  710. 20 G1TO2=1.
  711. TEMP=TEMP - 1.
  712. DO 30 K1=1,8
  713. 30 G1TO2=G1TO2 + B(K1)*TEMP**K1
  714. ggamma=PF*G1TO2
  715. END FUNCTION ggamma
  716. !-----------------------------------------------------------------------
  717. !c Correction of negative values
  718. SUBROUTINE negcor ( X, rho, dz8w, &
  719. ims,ime, jms,jme, kms,kme, & ! memory dims
  720. itimestep, ics, &
  721. its,ite, jts,jte, kts,kte ) ! tile dims
  722. !-----------------------------------------------------------------------
  723. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
  724. INTENT(INOUT) :: X
  725. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
  726. INTENT(IN ) :: rho, dz8w
  727. integer, INTENT(IN ) :: itimestep, ics
  728. !c Local variables
  729. ! REAL, DIMENSION( kts:kte ) :: Y1, Y2
  730. REAL :: A0, A1, A2
  731. A1=0.
  732. A2=0.
  733. do k=kts,kte
  734. do j=jts,jte
  735. do i=its,ite
  736. A1=A1+max(X(i,k,j), 0.)*rho(i,k,j)*dz8w(i,k,j)
  737. A2=A2+max(-X(i,k,j), 0.)*rho(i,k,j)*dz8w(i,k,j)
  738. enddo
  739. enddo
  740. enddo
  741. ! A1=0.0
  742. ! A2=0.0
  743. ! do k=kts,kte
  744. ! A1=A1+Y1(k)
  745. ! A2=A2+Y2(k)
  746. ! enddo
  747. A0=0.0
  748. if (A1.NE.0.0.and.A1.GT.A2) then
  749. A0=(A1-A2)/A1
  750. if (mod(itimestep,540).eq.0) then
  751. if (ics.eq.1) then
  752. write(61,*) 'kms=',kms,' kme=',kme,' kts=',kts,' kte=',kte
  753. write(61,*) 'jms=',jms,' jme=',jme,' jts=',jts,' jte=',jte
  754. write(61,*) 'ims=',ims,' ime=',ime,' its=',its,' ite=',ite
  755. endif
  756. if (ics.eq.1) then
  757. write(61,*) 'qv timestep=',itimestep
  758. write(61,*) ' A1=',A1,' A2=',A2,' A0=',A0
  759. else if (ics.eq.2) then
  760. write(61,*) 'ql timestep=',itimestep
  761. write(61,*) ' A1=',A1,' A2=',A2,' A0=',A0
  762. else if (ics.eq.3) then
  763. write(61,*) 'qr timestep=',itimestep
  764. write(61,*) ' A1=',A1,' A2=',A2,' A0=',A0
  765. else if (ics.eq.4) then
  766. write(61,*) 'qi timestep=',itimestep
  767. write(61,*) ' A1=',A1,' A2=',A2,' A0=',A0
  768. else if (ics.eq.5) then
  769. write(61,*) 'qs timestep=',itimestep
  770. write(61,*) ' A1=',A1,' A2=',A2,' A0=',A0
  771. else if (ics.eq.6) then
  772. write(61,*) 'qg timestep=',itimestep
  773. write(61,*) ' A1=',A1,' A2=',A2,' A0=',A0
  774. else
  775. write(61,*) 'wrong cloud specieis number'
  776. endif
  777. endif
  778. do k=kts,kte
  779. do j=jts,jte
  780. do i=its,ite
  781. X(i,k,j)=A0*AMAX1(X(i,k,j), 0.0)
  782. enddo
  783. enddo
  784. enddo
  785. endif
  786. END SUBROUTINE negcor
  787. SUBROUTINE consat_s (ihail,itaobraun)
  788. !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  789. ! c
  790. ! Tao, W.-K., and J. Simpson, 1989: Modeling study of a tropical c
  791. ! squall-type convective line. J. Atmos. Sci., 46, 177-202. c
  792. ! c
  793. ! Tao, W.-K., J. Simpson and M. McCumber, 1989: An ice-water c
  794. ! saturation adjustment. Mon. Wea. Rev., 117, 231-235. c
  795. ! c
  796. ! Tao, W.-K., and J. Simpson, 1993: The Goddard Cumulus Ensemble c
  797. ! Model. Part I: Model description. Terrestrial, Atmospheric and c
  798. ! Oceanic Sciences, 4, 35-72. c
  799. ! c
  800. ! Tao, W.-K., J. Simpson, D. Baker, S. Braun, M.-D. Chou, B. c
  801. ! Ferrier,D. Johnson, A. Khain, S. Lang, B. Lynn, C.-L. Shie, c
  802. ! D. Starr, C.-H. Sui, Y. Wang and P. Wetzel, 2003: Microphysics, c
  803. ! radiation and surface processes in the Goddard Cumulus Ensemble c
  804. ! (GCE) model, A Special Issue on Non-hydrostatic Mesoscale c
  805. ! Modeling, Meteorology and Atmospheric Physics, 82, 97-137. c
  806. ! c
  807. ! Lang, S., W.-K. Tao, R. Cifelli, W. Olson, J. Halverson, S. c
  808. ! Rutledge, and J. Simpson, 2007: Improving simulations of c
  809. ! convective system from TRMM LBA: Easterly and Westerly regimes. c
  810. ! J. Atmos. Sci., 64, 1141-1164. c
  811. ! c
  812. ! Coded by Tao (1989-2003), modified by S. Lang (2006/07) c
  813. ! c
  814. ! Implemented into WRF by Roger Shi 2006/2007 c
  815. !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  816. ! itaobraun=0 ! see Tao and Simpson (1993)
  817. ! itaobraun=1 ! see Tao et al. (2003)
  818. integer :: itaobraun
  819. real :: cn0
  820. !JJS 1/3/2008 vvvvv
  821. !JJS the following common blocks have been moved to the top of
  822. !JJS module_mp_gsfcgce_driver_instat.F
  823. !
  824. ! real, dimension (1:31) :: a1, a2
  825. ! data a1/.7939e-7,.7841e-6,.3369e-5,.4336e-5,.5285e-5,.3728e-5, &
  826. ! .1852e-5,.2991e-6,.4248e-6,.7434e-6,.1812e-5,.4394e-5,.9145e-5, &
  827. ! .1725e-4,.3348e-4,.1725e-4,.9175e-5,.4412e-5,.2252e-5,.9115e-6, &
  828. ! .4876e-6,.3473e-6,.4758e-6,.6306e-6,.8573e-6,.7868e-6,.7192e-6, &
  829. ! .6513e-6,.5956e-6,.5333e-6,.4834e-6/
  830. ! data a2/.4006,.4831,.5320,.5307,.5319,.5249,.4888,.3894,.4047, &
  831. ! .4318,.4771,.5183,.5463,.5651,.5813,.5655,.5478,.5203,.4906, &
  832. ! .4447,.4126,.3960,.4149,.4320,.4506,.4483,.4460,.4433,.4413, &
  833. ! .4382,.4361/
  834. !JJS 1/3/2008 ^^^^^
  835. ! ******************************************************************
  836. !JJS
  837. al = 2.5e10
  838. cp = 1.004e7
  839. rd1 = 1.e-3
  840. rd2 = 2.2
  841. !JJS
  842. cpi=4.*atan(1.)
  843. cpi2=cpi*cpi
  844. grvt=980.
  845. cd1=6.e-1
  846. cd2=4.*grvt/(3.*cd1)
  847. tca=2.43e3
  848. dwv=.226
  849. dva=1.718e-4
  850. amw=18.016
  851. ars=8.314e7
  852. scv=2.2904487
  853. t0=273.16
  854. t00=238.16
  855. alv=2.5e10
  856. alf=3.336e9
  857. als=2.8336e10
  858. avc=alv/cp
  859. afc=alf/cp
  860. asc=als/cp
  861. rw=4.615e6
  862. cw=4.187e7
  863. ci=2.093e7
  864. c76=7.66
  865. c358=35.86
  866. c172=17.26939
  867. c409=4098.026
  868. c218=21.87456
  869. c580=5807.695
  870. c610=6.1078e3
  871. c149=1.496286e-5
  872. c879=8.794142
  873. c141=1.4144354e7
  874. !*** DEFINE THE COEFFICIENTS USED IN TERMINAL VELOCITY
  875. !*** DEFINE THE DENSITY AND SIZE DISTRIBUTION OF PRECIPITATION
  876. !********** HAIL OR GRAUPEL PARAMETERS **********
  877. if(ihail .eq. 1) then
  878. roqg=.9
  879. ag=sqrt(cd2*roqg)
  880. bg=.5
  881. tng=.002
  882. else
  883. roqg=.4
  884. ag=351.2
  885. ! AG=372.3 ! if ice913=1 6/15/02 tao's
  886. bg=.37
  887. tng=.04
  888. endif
  889. !********** SNOW PARAMETERS **********
  890. !ccshie 6/15/02 tao's
  891. ! TNS=1.
  892. ! TNS=.08 ! if ice913=1, tao's
  893. tns=.16 ! if ice913=0, tao's
  894. roqs=.1
  895. ! AS=152.93
  896. as=78.63
  897. ! BS=.25
  898. bs=.11
  899. !********** RAIN PARAMETERS **********
  900. aw=2115.
  901. bw=.8
  902. roqr=1.
  903. tnw=.08
  904. !*****************************************************************
  905. bgh=.5*bg
  906. bsh=.5*bs
  907. bwh=.5*bw
  908. bgq=.25*bg
  909. bsq=.25*bs
  910. bwq=.25*bw
  911. !**********GAMMA FUNCTION CALCULATIONS*************
  912. ga3b = gammagce(3.+bw)
  913. ga4b = gammagce(4.+bw)
  914. ga6b = gammagce(6.+bw)
  915. ga5bh = gammagce((5.+bw)/2.)
  916. ga3g = gammagce(3.+bg)
  917. ga4g = gammagce(4.+bg)
  918. ga5gh = gammagce((5.+bg)/2.)
  919. ga3d = gammagce(3.+bs)
  920. ga4d = gammagce(4.+bs)
  921. ga5dh = gammagce((5.+bs)/2.)
  922. !CCCCC LIN ET AL., 1983 OR LORD ET AL., 1984 CCCCCCCCCCCCCCCCC
  923. ac1=aw
  924. !JJS
  925. ac2=ag
  926. ac3=as
  927. !JJS
  928. bc1=bw
  929. cc1=as
  930. dc1=bs
  931. zrc=(cpi*roqr*tnw)**0.25
  932. zsc=(cpi*roqs*tns)**0.25
  933. zgc=(cpi*roqg*tng)**0.25
  934. vrc=aw*ga4b/(6.*zrc**bw)
  935. vsc=as*ga4d/(6.*zsc**bs)
  936. vgc=ag*ga4g/(6.*zgc**bg)
  937. ! ****************************
  938. ! RN1=1.E-3
  939. rn1=9.4e-15 ! 6/15/02 tao's
  940. bnd1=6.e-4
  941. rn2=1.e-3
  942. ! BND2=1.25E-3
  943. ! BND2=1.5E-3 ! if ice913=1 6/15/02 tao's
  944. bnd2=2.0e-3 ! if ice913=0 6/15/02 tao's
  945. rn3=.25*cpi*tns*cc1*ga3d
  946. esw=1.
  947. rn4=.25*cpi*esw*tns*cc1*ga3d
  948. ! ERI=1.
  949. eri=.1 ! 6/17/02 tao's ice913=0 (not 1)
  950. rn5=.25*cpi*eri*tnw*ac1*ga3b
  951. ! AMI=1./(24.*4.19E-10)
  952. ami=1./(24.*6.e-9) ! 6/15/02 tao's
  953. rn6=cpi2*eri*tnw*ac1*roqr*ga6b*ami
  954. ! ESR=1. ! also if ice913=1 for tao's
  955. esr=.5 ! 6/15/02 for ice913=0 tao's
  956. rn7=cpi2*esr*tnw*tns*roqs
  957. esr=1.
  958. rn8=cpi2*esr*tnw*tns*roqr
  959. rn9=cpi2*tns*tng*roqs
  960. rn10=2.*cpi*tns
  961. rn101=.31*ga5dh*sqrt(cc1)
  962. rn10a=als*als/rw
  963. !JJS
  964. rn10b=alv/tca
  965. rn10c=ars/(dwv*amw)
  966. !JJS
  967. rn11=2.*cpi*tns/alf
  968. rn11a=cw/alf
  969. ! AMI50=1.51e-7
  970. ami50=3.84e-6 ! 6/15/02 tao's
  971. ! AMI40=2.41e-8
  972. ami40=3.08e-8 ! 6/15/02 tao's
  973. eiw=1.
  974. ! UI50=20.
  975. ui50=100. ! 6/15/02 tao's
  976. ri50=2.*5.e-3
  977. cmn=1.05e-15
  978. rn12=cpi*eiw*ui50*ri50**2
  979. do 10 k=1,31
  980. y1=1.-aa2(k)
  981. rn13(k)=aa1(k)*y1/(ami50**y1-ami40**y1)
  982. rn12a(k)=rn13(k)/ami50
  983. rn12b(k)=aa1(k)*ami50**aa2(k)
  984. rn25a(k)=aa1(k)*cmn**aa2(k)
  985. 10 continue
  986. egw=1.
  987. rn14=.25*cpi*egw*tng*ga3g*ag
  988. egi=.1
  989. rn15=.25*cpi*egi*tng*ga3g*ag
  990. egi=1.
  991. rn15a=.25*cpi*egi*tng*ga3g*ag
  992. egr=1.
  993. rn16=cpi2*egr*tng*tnw*roqr
  994. rn17=2.*cpi*tng
  995. rn17a=.31*ga5gh*sqrt(ag)
  996. rn17b=cw-ci
  997. rn17c=cw
  998. apri=.66
  999. bpri=1.e-4
  1000. bpri=0.5*bpri ! 6/17/02 tao's
  1001. rn18=20.*cpi2*bpri*tnw*roqr
  1002. rn18a=apri
  1003. rn19=2.*cpi*tng/alf
  1004. rn19a=.31*ga5gh*sqrt(ag)
  1005. rn19b=cw/alf
  1006. !
  1007. rnn191=.78
  1008. rnn192=.31*ga5gh*sqrt(ac2/dva)
  1009. !
  1010. rn20=2.*cpi*tng
  1011. rn20a=als*als/rw
  1012. rn20b=.31*ga5gh*sqrt(ag)
  1013. bnd3=2.e-3
  1014. rn21=1.e3*1.569e-12/0.15
  1015. erw=1.
  1016. rn22=.25*cpi*erw*ac1*tnw*ga3b
  1017. rn23=2.*cpi*tnw
  1018. rn23a=.31*ga5bh*sqrt(ac1)
  1019. rn23b=alv*alv/rw
  1020. !cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  1021. !cc
  1022. !cc "c0" in routine "consat" (2d), "consatrh" (3d)
  1023. !cc if ( itaobraun.eq.1 ) --> betah=0.5*beta=-.46*0.5=-0.23; cn0=1.e-6
  1024. !cc if ( itaobraun.eq.0 ) --> betah=0.5*beta=-.6*0.5=-0.30; cn0=1.e-8
  1025. if (itaobraun .eq. 0) then
  1026. cn0=1.e-8
  1027. beta=-.6
  1028. elseif (itaobraun .eq. 1) then
  1029. cn0=1.e-6
  1030. beta=-.46
  1031. endif
  1032. !cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  1033. ! CN0=1.E-6
  1034. ! CN0=1.E-8 ! 6/15/02 tao's
  1035. ! BETA=-.46
  1036. ! BETA=-.6 ! 6/15/02 tao's
  1037. rn25=cn0
  1038. rn30a=alv*als*amw/(tca*ars)
  1039. rn30b=alv/tca
  1040. rn30c=ars/(dwv*amw)
  1041. rn31=1.e-17
  1042. rn32=4.*51.545e-4
  1043. !
  1044. rn30=2.*cpi*tng
  1045. rnn30a=alv*alv*amw/(tca*ars)
  1046. !
  1047. rn33=4.*tns
  1048. rn331=.65
  1049. rn332=.44*sqrt(ac3/dva)*ga5dh
  1050. !
  1051. return
  1052. END SUBROUTINE consat_s
  1053. SUBROUTINE saticel_s (dt, ihail, itaobraun, ice2, istatmin, &
  1054. new_ice_sat, id, &
  1055. ptwrf, qvwrf, qlwrf, qrwrf, &
  1056. qiwrf, qswrf, qgwrf, &
  1057. rho_mks, pi_mks, p0_mks,itimestep, &
  1058. ids,ide, jds,jde, kds,kde, &
  1059. ims,ime, jms,jme, kms,kme, &
  1060. its,ite, jts,jte, kts,kte &
  1061. )
  1062. IMPLICIT NONE
  1063. !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  1064. ! c
  1065. ! Tao, W.-K., and J. Simpson, 1989: Modeling study of a tropical c
  1066. ! squall-type convective line. J. Atmos. Sci., 46, 177-202. c
  1067. ! c
  1068. ! Tao, W.-K., J. Simpson and M. McCumber, 1989: An ice-water c
  1069. ! saturation adjustment. Mon. Wea. Rev., 117, 231-235. c
  1070. ! c
  1071. ! Tao, W.-K., and J. Simpson, 1993: The Goddard Cumulus Ensemble c
  1072. ! Model. Part I: Model description. Terrestrial, Atmospheric and c
  1073. ! Oceanic Sciences, 4, 35-72. c
  1074. ! c
  1075. ! Tao, W.-K., J. Simpson, D. Baker, S. Braun, M.-D. Chou, B. c
  1076. ! Ferrier,D. Johnson, A. Khain, S. Lang, B. Lynn, C.-L. Shie, c
  1077. ! D. Starr, C.-H. Sui, Y. Wang and P. Wetzel, 2003: Microphysics, c
  1078. ! radiation and surface processes in the Goddard Cumulus Ensemble c
  1079. ! (GCE) model, A Special Issue on Non-hydrostatic Mesoscale c
  1080. ! Modeling, Meteorology and Atmospheric Physics, 82, 97-137. c
  1081. ! c
  1082. ! Lang, S., W.-K. Tao, R. Cifelli, W. Olson, J. Halverson, S. c
  1083. ! Rutledge, and J. Simpson, 2007: Improving simulations of c
  1084. ! convective system from TRMM LBA: Easterly and Westerly regimes. c
  1085. ! J. Atmos. Sci., 64, 1141-1164. c
  1086. ! c
  1087. ! Tao, W.-K., J. J. Shi, S. Lang, C. Peters-Lidard, A. Hou, S. c
  1088. ! Braun, and J. Simpson, 2007: New, improved bulk-microphysical c
  1089. ! schemes for studying precipitation processes in WRF. Part I: c
  1090. ! Comparisons with other schemes. to appear on Mon. Wea. Rev. C
  1091. ! c
  1092. ! Coded by Tao (1989-2003), modified by S. Lang (2006/07) c
  1093. ! c
  1094. ! Implemented into WRF by Roger Shi 2006/2007 c
  1095. !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  1096. !
  1097. ! COMPUTE ICE PHASE MICROPHYSICS AND SATURATION PROCESSES
  1098. !
  1099. integer, parameter :: nt=2880, nt2=2*nt
  1100. !cc using scott braun's way for pint, pidep computations
  1101. integer :: itaobraun,ice2,ihail,new_ice_sat,id,istatmin
  1102. integer :: itimestep
  1103. real :: tairccri, cn0, dt
  1104. !cc
  1105. !JJS common/bxyz/ n,isec,nran,kt1,kt2
  1106. !JJS common/option/ lipps,ijkadv,istatmin,iwater,itoga,imlifting,lin,
  1107. !JJS 1 irf,iadvh,irfg,ismg,id
  1108. !JJS common/timestat/ ndt_stat,idq
  1109. !JJS common/iice/ new_ice_sat
  1110. !JJS common/bt/ dt,d2t,rijl2,dts,f5,rd1,rd2,bound,al,cp,ra,ck,ce,eps,
  1111. !JJS 1 psfc,fcor,sec,aminut,rdt
  1112. !JJS the following common blocks have been moved to the top of
  1113. !JJS module_mp_gsfcgce_driver_instat.F
  1114. ! common/bt/ rd1,rd2,al,cp
  1115. !
  1116. !
  1117. ! common/bterv/ zrc,zgc,zsc,vrc,vgc,vsc
  1118. ! common/size/ tnw,tns,tng,roqs,roqg,roqr
  1119. ! common/cont/ c38,c358,c610,c149,c879,c172,c409,c76,c218,c580,c141
  1120. ! common/b3cs/ ag,bg,as,bs,aw,bw,bgh,bgq,bsh,bsq,bwh,bwq
  1121. ! common/bsnw/ alv,alf,als,t0,t00,avc,afc,asc,rn1,bnd1,rn2,bnd2, &
  1122. ! rn3,rn4,rn5,rn6,rn7,rn8,rn9,rn10,rn101,rn10a,rn11,rn11a, &
  1123. ! rn12,rn12a(31),rn12b(31),rn13(31),rn14,rn15,rn15a,rn16,rn17, &
  1124. ! rn17a,rn17b,rn17c,rn18,rn18a,rn19,rn19a,rn19b,rn20,rn20a,rn20b, &
  1125. ! bnd3,rn21,rn22,rn23,rn23a,rn23b,rn25,rn25a(31),rn30a,rn30b, &
  1126. ! rn30c,rn31,beta,rn32
  1127. ! common/rsnw1/ rn10b,rn10c,rnn191,rnn192,rn30,rnn30a,rn33,rn331, &
  1128. ! rn332
  1129. !JJS
  1130. integer ids,ide,jds,jde,kds,kde
  1131. integer ims,ime,jms,jme,kms,kme
  1132. integer its,ite,jts,jte,kts,kte
  1133. integer i,j,k, kp
  1134. real :: a0 ,a1 ,a2 ,afcp ,alvr ,ami100 ,ami40 ,ami50 ,ascp ,avcp ,betah &
  1135. ,bg3 ,bgh5 ,bs3 ,bs6 ,bsh5 ,bw3 ,bw6 ,bwh5 ,cmin ,cmin1 ,cmin2 ,cp409 &
  1136. ,cp580 ,cs580 ,cv409 ,d2t ,del ,dwvp ,ee1 ,ee2 ,f00 ,f2 ,f3 ,ft ,fv0 ,fvs &
  1137. ,pi0 ,pir ,pr0 ,qb0 ,r00 ,r0s ,r101f ,r10ar ,r10t ,r11at ,r11rt ,r12r ,r14f &
  1138. ,r14r ,r15af ,r15ar ,r15f ,r15r ,r16r ,r17aq ,r17as ,r17r ,r18r ,r19aq ,r19as &
  1139. ,r19bt ,r19rt ,r20bq ,r20bs ,r20t ,r22f ,r23af ,r23br ,r23t ,r25a ,r25rt ,r2ice &
  1140. ,r31r ,r32rt ,r3f ,r4f ,r5f ,r6f ,r7r ,r8r ,r9r ,r_nci ,rft ,rijl2 ,rp0 ,rr0 &
  1141. ,rrq ,rrs ,rt0 ,scc ,sccc ,sddd ,see ,seee ,sfff ,smmm ,ssss ,tb0 ,temp ,ucog &
  1142. ,ucor ,ucos ,uwet ,vgcf ,vgcr ,vrcf ,vscf ,zgr ,zrr ,zsr
  1143. real, dimension (its:ite,jts:jte,kts:kte) :: fv
  1144. real, dimension (its:ite,jts:jte,kts:kte) :: dpt, dqv
  1145. real, dimension (its:ite,jts:jte,kts:kte) :: qcl, qrn, &
  1146. qci, qcs, qcg
  1147. !JJS 10/16/06 vvvv
  1148. ! real dpt1(ims:ime,jms:jme,kms:kme)
  1149. ! real dqv1(ims:ime,jms:jme,kms:kme),
  1150. ! 1 qcl1(ims:ime,jms:jme,kms:kme)
  1151. ! real qrn1(ims:ime,jms:jme,kms:kme),
  1152. ! 1 qci1(ims:ime,jms:jme,kms:kme)
  1153. ! real qcs1(ims:ime,jms:jme,kms:kme),
  1154. ! 1 qcg1(ims:ime,jms:jme,kms:kme)
  1155. !JJS 10/16/06 ^^^^
  1156. !JJS
  1157. real, dimension (ims:ime, kms:kme, jms:jme) :: ptwrf, qvwrf
  1158. real, dimension (ims:ime, kms:kme, jms:jme) :: qlwrf, qrwrf, &
  1159. qiwrf, qswrf, qgwrf
  1160. !JJS 10/16/06 vvvv
  1161. ! real ptwrfold(ims:ime, kms:kme, jms:jme)
  1162. ! real qvwrfold(ims:ime, kms:kme, jms:jme),
  1163. ! 1 qlwrfold(ims:ime, kms:kme, jms:jme)
  1164. ! real qrwrfold(ims:ime, kms:kme, jms:jme),
  1165. ! 1 qiwrfold(ims:ime, kms:kme, jms:jme)
  1166. ! real qswrfold(ims:ime, kms:kme, jms:jme),
  1167. ! 1 qgwrfold(ims:ime, kms:kme, jms:jme)
  1168. !JJS 10/16/06 ^^^^
  1169. !JJS in MKS
  1170. real, dimension (ims:ime, kms:kme, jms:jme) :: rho_mks
  1171. real, dimension (ims:ime, kms:kme, jms:jme) :: pi_mks
  1172. real, dimension (ims:ime, kms:kme, jms:jme) :: p0_mks
  1173. !JJS
  1174. ! real, dimension (its:ite,jts:jte,kts:kte) :: ww1
  1175. ! real, dimension (its:ite,jts:jte,kts:kte) :: rsw
  1176. ! real, dimension (its:ite,jts:jte,kts:kte) :: rlw
  1177. !JJS COMMON /BADV/
  1178. real, dimension (its:ite,jts:jte) :: &
  1179. vg, zg, &
  1180. ps, pg, &
  1181. prn, psn, &
  1182. pwacs, wgacr, &
  1183. pidep, pint, &
  1184. qsi, ssi, &
  1185. esi, esw, &
  1186. qsw, pr, &
  1187. ssw, pihom, &
  1188. pidw, pimlt, &
  1189. psaut, qracs, &
  1190. psaci, psacw, &
  1191. qsacw, praci, &
  1192. pmlts, pmltg, &
  1193. asss, y1, y2
  1194. !JJS Y2(its:ite,jts:jte), DDE(NB)
  1195. !JJS COMMON/BSAT/
  1196. real, dimension (its:ite,jts:jte) :: &
  1197. praut, pracw, &
  1198. psfw, psfi, &
  1199. dgacs, dgacw, &
  1200. dgaci, dgacr, &
  1201. pgacs, wgacs, &
  1202. qgacw, wgaci, &
  1203. qgacr, pgwet, &
  1204. pgaut, pracs, &
  1205. psacr, qsacr, &
  1206. pgfr, psmlt, &
  1207. pgmlt, psdep, &
  1208. pgdep, piacr, &
  1209. y5, scv, &
  1210. tca, dwv, &
  1211. egs, y3, &
  1212. y4, ddb
  1213. !JJS COMMON/BSAT1/
  1214. real, dimension (its:ite,jts:jte) :: &
  1215. pt, qv, &
  1216. qc, qr, &
  1217. qi, qs, &
  1218. qg, tair, &
  1219. tairc, rtair, &
  1220. dep, dd, &
  1221. dd1, qvs, &
  1222. dm, rq, &
  1223. rsub1, col, &
  1224. cnd, ern, &
  1225. dlt1, dlt2, &
  1226. dlt3, dlt4, &
  1227. zr, vr, &
  1228. zs, vs, &
  1229. pssub, &
  1230. pgsub, dda
  1231. !JJS COMMON/B5/
  1232. real, dimension (its:ite,jts:jte,kts:kte) :: rho
  1233. real, dimension (kts:kte) :: &
  1234. tb, qb, rho1, &
  1235. ta, qa, ta1, qa1, &
  1236. coef, z1, z2, z3, &
  1237. am, am1, ub, vb, &
  1238. wb, ub1, vb1, rrho, &
  1239. rrho1, wbx
  1240. !JJS COMMON/B6/
  1241. real, dimension (its:ite,jts:jte,kts:kte) :: p0, pi, f0
  1242. real, dimension (kts:kte) :: &
  1243. fd, fe, &
  1244. st, sv, &
  1245. sq, sc, &
  1246. se, sqa
  1247. !JJS COMMON/BRH1/
  1248. real, dimension (kts:kte) :: &
  1249. srro, qrro, sqc, sqr, &
  1250. sqi, sqs, sqg, stqc, &
  1251. stqr, stqi, stqs, stqg
  1252. real, dimension (nt) :: &
  1253. tqc, tqr, tqi, tqs, tqg
  1254. !JJS common/bls/ y0(nx,ny),ts0new(nx,ny),qss0new(nx,ny)
  1255. !JJS COMMON/BLS/
  1256. real, dimension (ims:ime,jms:jme) :: &
  1257. y0, ts0, qss0
  1258. !JJS COMMON/BI/ IT(its:ite,jts:jte), ICS(its:ite,jts:jte,4)
  1259. integer, dimension (its:ite,jts:jte) :: it
  1260. integer, dimension (its:ite,jts:jte, 4) :: ics
  1261. integer :: i24h
  1262. integer :: iwarm
  1263. real :: r2is, r2ig
  1264. !JJS COMMON/MICRO/
  1265. ! real, dimension (ims:ime,kms:kme,jms:jme) :: dbz
  1266. !23456789012345678901234567890123456789012345678901234567890123456789012
  1267. !
  1268. !JJS 1/3/2008 vvvvv
  1269. !JJS the following common blocks have been moved to the top of
  1270. !JJS module_mp_gsfcgce_driver.F
  1271. ! real, dimension (31) :: aa1, aa2
  1272. ! data aa1/.7939e-7, .7841e-6, .3369e-5, .4336e-5, .5285e-5, &
  1273. ! .3728e-5, .1852e-5, .2991e-6, .4248e-6, .7434e-6, &
  1274. ! .1812e-5, .4394e-5, .9145e-5, .1725e-4, .3348e-4, &
  1275. ! .1725e-4, .9175e-5, .44

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