PageRenderTime 63ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/wrfv2_fire/phys/module_physics_addtendc.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 2022 lines | 1180 code | 394 blank | 448 comment | 100 complexity | 624d41128f439e094353cf29568747e3 MD5 | raw file
Possible License(s): AGPL-1.0
  1. !WRF:MODEL_LAYER: PHYSICS
  2. !
  3. ! note: this module really belongs in the dyn_em directory since it is
  4. ! specific only to the EM core. Leaving here for now, with an
  5. ! #if ( EM_CORE == 1 ) directive. JM 20031201
  6. !
  7. ! This MODULE holds the routines which are used to perform updates of the
  8. ! model C-grid tendencies with physics A-grid tendencies
  9. ! The module consolidates code that was (up to v1.2) duplicated in
  10. ! module_em and module_rk and in
  11. ! module_big_step_utilities.F and module_big_step_utilities_em.F
  12. ! This MODULE CONTAINS the following routines:
  13. ! update_phy_ten, phy_ra_ten, phy_bl_ten, phy_cu_ten, advance_ppt,
  14. ! add_a2a, add_a2c_u, and add_a2c_v
  15. MODULE module_physics_addtendc
  16. #if ( EM_CORE == 1 )
  17. USE module_state_description
  18. USE module_configure
  19. CONTAINS
  20. SUBROUTINE update_phy_ten(rph_tendf,rt_tendf,ru_tendf,rv_tendf,moist_tendf, &
  21. scalar_tendf,mu_tendf, &
  22. RTHRATEN,RTHBLTEN,RTHCUTEN,RTHSHTEN, &
  23. RUBLTEN,RUCUTEN,RUSHTEN, &
  24. RVBLTEN,RVCUTEN,RVSHTEN, &
  25. RQVBLTEN,RQCBLTEN,RQIBLTEN, &
  26. RQVCUTEN,RQCCUTEN,RQRCUTEN,RQICUTEN,RQSCUTEN, &
  27. RQVSHTEN,RQCSHTEN,RQRSHTEN,RQISHTEN,RQSSHTEN,RQGSHTEN,&
  28. RUNDGDTEN,RVNDGDTEN,RTHNDGDTEN,RPHNDGDTEN, &
  29. RQVNDGDTEN,RMUNDGDTEN, &
  30. rthfrten,rqvfrten, & !fire
  31. n_moist,n_scalar,config_flags,rk_step,adv_moist_cond, &
  32. ids, ide, jds, jde, kds, kde, &
  33. ims, ime, jms, jme, kms, kme, &
  34. its, ite, jts, jte, kts, kte )
  35. !-------------------------------------------------------------------
  36. IMPLICIT NONE
  37. !-------------------------------------------------------------------
  38. TYPE(grid_config_rec_type ) , INTENT(IN ) :: config_flags
  39. INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
  40. ims, ime, jms, jme, kms, kme, &
  41. its, ite, jts, jte, kts, kte, &
  42. n_moist,n_scalar,rk_step
  43. LOGICAL , INTENT(IN) :: adv_moist_cond
  44. REAL , DIMENSION(ims:ime , kms:kme, jms:jme),INTENT(INOUT) :: &
  45. ru_tendf, &
  46. rv_tendf, &
  47. rt_tendf, &
  48. rph_tendf
  49. REAL , DIMENSION(ims:ime , jms:jme),INTENT(INOUT) :: mu_tendf
  50. REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_moist), &
  51. INTENT(INOUT) :: moist_tendf
  52. REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_scalar), &
  53. INTENT(INOUT) :: scalar_tendf
  54. REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN ) :: &
  55. RTHRATEN, &
  56. RTHBLTEN, &
  57. RTHCUTEN, &
  58. RTHSHTEN, &
  59. RUBLTEN, &
  60. RUCUTEN, &
  61. RUSHTEN, &
  62. RVBLTEN, &
  63. RVCUTEN, &
  64. RVSHTEN, &
  65. RQVBLTEN, &
  66. RQCBLTEN, &
  67. RQIBLTEN, &
  68. RQVCUTEN, &
  69. RQCCUTEN, &
  70. RQRCUTEN, &
  71. RQICUTEN, &
  72. RQSCUTEN, &
  73. RQVSHTEN, &
  74. RQCSHTEN, &
  75. RQRSHTEN, &
  76. RQISHTEN, &
  77. RQSSHTEN, &
  78. RQGSHTEN, &
  79. RTHNDGDTEN, &
  80. RPHNDGDTEN, &
  81. RQVNDGDTEN, &
  82. RUNDGDTEN, &
  83. RVNDGDTEN
  84. REAL, DIMENSION(ims:ime, jms:jme), INTENT(IN ) :: RMUNDGDTEN
  85. REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN ) :: & ! fire
  86. rthfrten, &
  87. rqvfrten
  88. !------------------------------------------------------------------
  89. ! set up loop bounds for this grid's boundary conditions
  90. if (config_flags%ra_lw_physics .gt. 0 .or. &
  91. config_flags%ra_sw_physics .gt. 0) &
  92. CALL phy_ra_ten(config_flags,rt_tendf,RTHRATEN, &
  93. ids, ide, jds, jde, kds, kde, &
  94. ims, ime, jms, jme, kms, kme, &
  95. its, ite, jts, jte, kts, kte )
  96. if (config_flags%bl_pbl_physics .gt. 0) &
  97. CALL phy_bl_ten(config_flags,rk_step,n_moist,n_scalar, &
  98. rt_tendf,ru_tendf,rv_tendf,moist_tendf, &
  99. scalar_tendf,adv_moist_cond, &
  100. RTHBLTEN,RUBLTEN,RVBLTEN, &
  101. RQVBLTEN,RQCBLTEN,RQIBLTEN, &
  102. ids, ide, jds, jde, kds, kde, &
  103. ims, ime, jms, jme, kms, kme, &
  104. its, ite, jts, jte, kts, kte )
  105. if (config_flags%cu_physics .gt. 0) &
  106. CALL phy_cu_ten(config_flags,rk_step,n_moist,n_scalar, &
  107. rt_tendf,ru_tendf,rv_tendf, &
  108. RUCUTEN,RVCUTEN,RTHCUTEN, &
  109. RQVCUTEN,RQCCUTEN,RQRCUTEN, &
  110. RQICUTEN,RQSCUTEN,moist_tendf, &
  111. scalar_tendf,adv_moist_cond, &
  112. ids, ide, jds, jde, kds, kde, &
  113. ims, ime, jms, jme, kms, kme, &
  114. its, ite, jts, jte, kts, kte )
  115. if (config_flags%shcu_physics .gt. 0) &
  116. CALL phy_shcu_ten(config_flags,rk_step,n_moist, &
  117. rt_tendf,ru_tendf,rv_tendf, &
  118. RUSHTEN,RVSHTEN,RTHSHTEN, &
  119. RQVSHTEN,RQCSHTEN,RQRSHTEN, &
  120. RQISHTEN,RQSSHTEN,RQGSHTEN,moist_tendf, &
  121. ids, ide, jds, jde, kds, kde, &
  122. ims, ime, jms, jme, kms, kme, &
  123. its, ite, jts, jte, kts, kte )
  124. if (config_flags%grid_fdda .gt. 0) &
  125. CALL phy_fg_ten(config_flags,rk_step,n_moist, &
  126. rph_tendf,rt_tendf,ru_tendf,rv_tendf, &
  127. mu_tendf, moist_tendf, &
  128. RUNDGDTEN,RVNDGDTEN,RTHNDGDTEN, &
  129. RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN, &
  130. ids, ide, jds, jde, kds, kde, &
  131. ims, ime, jms, jme, kms, kme, &
  132. its, ite, jts, jte, kts, kte )
  133. if (config_flags%ifire .gt. 0) & ! fire
  134. CALL phy_fr_ten(config_flags,rk_step,n_moist, &
  135. rt_tendf,ru_tendf,rv_tendf, &
  136. mu_tendf, moist_tendf, &
  137. rthfrten,rqvfrten, &
  138. ids, ide, jds, jde, kds, kde, &
  139. ims, ime, jms, jme, kms, kme, &
  140. its, ite, jts, jte, kts, kte )
  141. END SUBROUTINE update_phy_ten
  142. !=================================================================
  143. SUBROUTINE phy_ra_ten(config_flags,rt_tendf,RTHRATEN, &
  144. ids, ide, jds, jde, kds, kde, &
  145. ims, ime, jms, jme, kms, kme, &
  146. its, ite, jts, jte, kts, kte )
  147. !-----------------------------------------------------------------
  148. IMPLICIT NONE
  149. !-----------------------------------------------------------------
  150. TYPE(grid_config_rec_type ) , INTENT(IN ) :: config_flags
  151. INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
  152. ims, ime, jms, jme, kms, kme, &
  153. its, ite, jts, jte, kts, kte
  154. REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN ) :: &
  155. RTHRATEN
  156. REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: &
  157. rt_tendf
  158. ! LOCAL VARS
  159. INTEGER :: i,j,k
  160. CALL add_a2a(rt_tendf,RTHRATEN,config_flags, &
  161. ids,ide, jds, jde, kds, kde, &
  162. ims, ime, jms, jme, kms, kme, &
  163. its, ite, jts, jte, kts, kte )
  164. END SUBROUTINE phy_ra_ten
  165. !=================================================================
  166. SUBROUTINE phy_bl_ten(config_flags,rk_step,n_moist,n_scalar, &
  167. rt_tendf,ru_tendf,rv_tendf,moist_tendf, &
  168. scalar_tendf,adv_moist_cond, &
  169. RTHBLTEN,RUBLTEN,RVBLTEN, &
  170. RQVBLTEN,RQCBLTEN,RQIBLTEN, &
  171. ids, ide, jds, jde, kds, kde, &
  172. ims, ime, jms, jme, kms, kme, &
  173. its, ite, jts, jte, kts, kte )
  174. !-----------------------------------------------------------------
  175. IMPLICIT NONE
  176. !-----------------------------------------------------------------
  177. TYPE(grid_config_rec_type) , INTENT(IN ) :: config_flags
  178. INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
  179. ims, ime, jms, jme, kms, kme, &
  180. its, ite, jts, jte, kts, kte, &
  181. n_moist, n_scalar, rk_step
  182. LOGICAL , INTENT(IN) :: adv_moist_cond
  183. REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_moist), &
  184. INTENT(INOUT) :: moist_tendf
  185. REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_scalar), &
  186. INTENT(INOUT) :: scalar_tendf
  187. REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN ) :: &
  188. RTHBLTEN, &
  189. RUBLTEN, &
  190. RVBLTEN, &
  191. RQVBLTEN, &
  192. RQCBLTEN, &
  193. RQIBLTEN
  194. REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT):: &
  195. rt_tendf, &
  196. ru_tendf, &
  197. rv_tendf
  198. ! LOCAL VARS
  199. INTEGER :: i,j,k,IBGN,IEND,JBGN,JEND
  200. !-----------------------------------------------------------------
  201. SELECT CASE(config_flags%bl_pbl_physics)
  202. CASE (YSUSCHEME)
  203. CALL add_a2a(rt_tendf,RTHBLTEN,config_flags, &
  204. ids,ide, jds, jde, kds, kde, &
  205. ims, ime, jms, jme, kms, kme, &
  206. its, ite, jts, jte, kts, kte )
  207. CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags, &
  208. ids,ide, jds, jde, kds, kde, &
  209. ims, ime, jms, jme, kms, kme, &
  210. its, ite, jts, jte, kts, kte )
  211. CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags, &
  212. ids,ide, jds, jde, kds, kde, &
  213. ims, ime, jms, jme, kms, kme, &
  214. its, ite, jts, jte, kts, kte )
  215. if (P_QV .ge. PARAM_FIRST_SCALAR) &
  216. CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN, &
  217. config_flags, &
  218. ids,ide, jds, jde, kds, kde, &
  219. ims, ime, jms, jme, kms, kme, &
  220. its, ite, jts, jte, kts, kte )
  221. if (P_QC .ge. PARAM_FIRST_SCALAR) &
  222. CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN, &
  223. config_flags, &
  224. ids,ide, jds, jde, kds, kde, &
  225. ims, ime, jms, jme, kms, kme, &
  226. its, ite, jts, jte, kts, kte )
  227. if (P_QI .ge. PARAM_FIRST_SCALAR) &
  228. CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQIBLTEN, &
  229. config_flags, &
  230. ids,ide, jds, jde, kds, kde, &
  231. ims, ime, jms, jme, kms, kme, &
  232. its, ite, jts, jte, kts, kte )
  233. IF(.not. adv_moist_cond)THEN
  234. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  235. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN, &
  236. config_flags, &
  237. ids,ide, jds, jde, kds, kde, &
  238. ims, ime, jms, jme, kms, kme, &
  239. its, ite, jts, jte, kts, kte )
  240. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  241. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQIBLTEN, &
  242. config_flags, &
  243. ids,ide, jds, jde, kds, kde, &
  244. ims, ime, jms, jme, kms, kme, &
  245. its, ite, jts, jte, kts, kte )
  246. ENDIF
  247. CASE (MRFSCHEME)
  248. CALL add_a2a(rt_tendf,RTHBLTEN,config_flags, &
  249. ids,ide, jds, jde, kds, kde, &
  250. ims, ime, jms, jme, kms, kme, &
  251. its, ite, jts, jte, kts, kte )
  252. CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags, &
  253. ids,ide, jds, jde, kds, kde, &
  254. ims, ime, jms, jme, kms, kme, &
  255. its, ite, jts, jte, kts, kte )
  256. CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags, &
  257. ids,ide, jds, jde, kds, kde, &
  258. ims, ime, jms, jme, kms, kme, &
  259. its, ite, jts, jte, kts, kte )
  260. if (P_QV .ge. PARAM_FIRST_SCALAR) &
  261. CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN, &
  262. config_flags, &
  263. ids,ide, jds, jde, kds, kde, &
  264. ims, ime, jms, jme, kms, kme, &
  265. its, ite, jts, jte, kts, kte )
  266. if (P_QC .ge. PARAM_FIRST_SCALAR) &
  267. CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN, &
  268. config_flags, &
  269. ids,ide, jds, jde, kds, kde, &
  270. ims, ime, jms, jme, kms, kme, &
  271. its, ite, jts, jte, kts, kte )
  272. if (P_QI .ge. PARAM_FIRST_SCALAR) &
  273. CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQIBLTEN, &
  274. config_flags, &
  275. ids,ide, jds, jde, kds, kde, &
  276. ims, ime, jms, jme, kms, kme, &
  277. its, ite, jts, jte, kts, kte )
  278. IF(.not. adv_moist_cond)THEN
  279. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  280. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN, &
  281. config_flags, &
  282. ids,ide, jds, jde, kds, kde, &
  283. ims, ime, jms, jme, kms, kme, &
  284. its, ite, jts, jte, kts, kte )
  285. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  286. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQIBLTEN, &
  287. config_flags, &
  288. ids,ide, jds, jde, kds, kde, &
  289. ims, ime, jms, jme, kms, kme, &
  290. its, ite, jts, jte, kts, kte )
  291. ENDIF
  292. CASE (ACMPBLSCHEME)
  293. CALL add_a2a(rt_tendf,RTHBLTEN,config_flags, &
  294. ids,ide, jds, jde, kds, kde, &
  295. ims, ime, jms, jme, kms, kme, &
  296. its, ite, jts, jte, kts, kte )
  297. CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags, &
  298. ids,ide, jds, jde, kds, kde, &
  299. ims, ime, jms, jme, kms, kme, &
  300. its, ite, jts, jte, kts, kte )
  301. CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags, &
  302. ids,ide, jds, jde, kds, kde, &
  303. ims, ime, jms, jme, kms, kme, &
  304. its, ite, jts, jte, kts, kte )
  305. if (P_QV .ge. PARAM_FIRST_SCALAR) &
  306. CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN, &
  307. config_flags, &
  308. ids,ide, jds, jde, kds, kde, &
  309. ims, ime, jms, jme, kms, kme, &
  310. its, ite, jts, jte, kts, kte )
  311. if (P_QC .ge. PARAM_FIRST_SCALAR) &
  312. CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN, &
  313. config_flags, &
  314. ids,ide, jds, jde, kds, kde, &
  315. ims, ime, jms, jme, kms, kme, &
  316. its, ite, jts, jte, kts, kte )
  317. if (P_QI .ge. PARAM_FIRST_SCALAR) &
  318. CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQIBLTEN, &
  319. config_flags, &
  320. ids,ide, jds, jde, kds, kde, &
  321. ims, ime, jms, jme, kms, kme, &
  322. its, ite, jts, jte, kts, kte )
  323. IF(.not. adv_moist_cond)THEN
  324. if (P_QT .ge. PARAM_FIRST_SCALAR)THEN
  325. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN, &
  326. config_flags, &
  327. ids,ide, jds, jde, kds, kde, &
  328. ims, ime, jms, jme, kms, kme, &
  329. its, ite, jts, jte, kts, kte )
  330. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQIBLTEN, &
  331. config_flags, &
  332. ids,ide, jds, jde, kds, kde, &
  333. ims, ime, jms, jme, kms, kme, &
  334. its, ite, jts, jte, kts, kte )
  335. ENDIF
  336. ENDIF
  337. CASE (MYJPBLSCHEME)
  338. CALL add_a2a(rt_tendf,RTHBLTEN,config_flags, &
  339. ids,ide, jds, jde, kds, kde, &
  340. ims, ime, jms, jme, kms, kme, &
  341. its, ite, jts, jte, kts, kte )
  342. CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags, &
  343. ids,ide, jds, jde, kds, kde, &
  344. ims, ime, jms, jme, kms, kme, &
  345. its, ite, jts, jte, kts, kte )
  346. CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags, &
  347. ids,ide, jds, jde, kds, kde, &
  348. ims, ime, jms, jme, kms, kme, &
  349. its, ite, jts, jte, kts, kte )
  350. if (P_QV .ge. PARAM_FIRST_SCALAR) &
  351. CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN, &
  352. config_flags, &
  353. ids,ide, jds, jde, kds, kde, &
  354. ims, ime, jms, jme, kms, kme, &
  355. its, ite, jts, jte, kts, kte )
  356. IF(.not. adv_moist_cond)THEN
  357. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  358. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN, &
  359. config_flags, &
  360. ids,ide, jds, jde, kds, kde, &
  361. ims, ime, jms, jme, kms, kme, &
  362. its, ite, jts, jte, kts, kte )
  363. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  364. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQIBLTEN, &
  365. config_flags, &
  366. ids,ide, jds, jde, kds, kde, &
  367. ims, ime, jms, jme, kms, kme, &
  368. its, ite, jts, jte, kts, kte )
  369. ! if (P_QT .ge. PARAM_FIRST_SCALAR) &
  370. ! CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQSBLTEN, &
  371. ! config_flags, &
  372. ! ids,ide, jds, jde, kds, kde, &
  373. ! ims, ime, jms, jme, kms, kme, &
  374. ! its, ite, jts, jte, kts, kte )
  375. !
  376. ! if (P_QT .ge. PARAM_FIRST_SCALAR) &
  377. ! CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQRBLTEN, &
  378. ! config_flags, &
  379. ! ids,ide, jds, jde, kds, kde, &
  380. ! ims, ime, jms, jme, kms, kme, &
  381. ! its, ite, jts, jte, kts, kte )
  382. !
  383. ! if (P_QT .ge. PARAM_FIRST_SCALAR) &
  384. ! CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQGBLTEN, &
  385. ! config_flags, &
  386. ! ids,ide, jds, jde, kds, kde, &
  387. ! ims, ime, jms, jme, kms, kme, &
  388. ! its, ite, jts, jte, kts, kte )
  389. ELSE
  390. if (P_QC .ge. PARAM_FIRST_SCALAR) &
  391. CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN, &
  392. config_flags, &
  393. ids,ide, jds, jde, kds, kde, &
  394. ims, ime, jms, jme, kms, kme, &
  395. its, ite, jts, jte, kts, kte )
  396. if (P_QI .ge. PARAM_FIRST_SCALAR) &
  397. CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQIBLTEN, &
  398. config_flags, &
  399. ids,ide, jds, jde, kds, kde, &
  400. ims, ime, jms, jme, kms, kme, &
  401. its, ite, jts, jte, kts, kte )
  402. ! if (P_QS .ge. PARAM_FIRST_SCALAR) &
  403. ! CALL add_a2a(moist_tendf(ims,kms,jms,P_QS),RQSBLTEN, &
  404. ! config_flags, &
  405. ! ids,ide, jds, jde, kds, kde, &
  406. ! ims, ime, jms, jme, kms, kme, &
  407. ! its, ite, jts, jte, kts, kte )
  408. !
  409. ! if (P_QR .ge. PARAM_FIRST_SCALAR) &
  410. ! CALL add_a2a(moist_tendf(ims,kms,jms,P_QR),RQRBLTEN, &
  411. ! config_flags, &
  412. ! ids,ide, jds, jde, kds, kde, &
  413. ! ims, ime, jms, jme, kms, kme, &
  414. ! its, ite, jts, jte, kts, kte )
  415. !
  416. ! if (P_QG .ge. PARAM_FIRST_SCALAR) &
  417. ! CALL add_a2a(moist_tendf(ims,kms,jms,P_QG),RQGBLTEN, &
  418. ! config_flags, &
  419. ! ids,ide, jds, jde, kds, kde, &
  420. ! ims, ime, jms, jme, kms, kme, &
  421. ! its, ite, jts, jte, kts, kte )
  422. ENDIF
  423. CASE (QNSEPBLSCHEME,QNSEPBL09SCHEME)
  424. CALL add_a2a(rt_tendf,RTHBLTEN,config_flags, &
  425. ids,ide, jds, jde, kds, kde, &
  426. ims, ime, jms, jme, kms, kme, &
  427. its, ite, jts, jte, kts, kte )
  428. CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags, &
  429. ids,ide, jds, jde, kds, kde, &
  430. ims, ime, jms, jme, kms, kme, &
  431. its, ite, jts, jte, kts, kte )
  432. CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags, &
  433. ids,ide, jds, jde, kds, kde, &
  434. ims, ime, jms, jme, kms, kme, &
  435. its, ite, jts, jte, kts, kte )
  436. if (P_QV .ge. PARAM_FIRST_SCALAR) &
  437. CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN, &
  438. config_flags, &
  439. ids,ide, jds, jde, kds, kde, &
  440. ims, ime, jms, jme, kms, kme, &
  441. its, ite, jts, jte, kts, kte )
  442. IF(.not. adv_moist_cond)THEN
  443. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  444. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN, &
  445. config_flags, &
  446. ids,ide, jds, jde, kds, kde, &
  447. ims, ime, jms, jme, kms, kme, &
  448. its, ite, jts, jte, kts, kte )
  449. ELSE
  450. if (P_QC .ge. PARAM_FIRST_SCALAR) &
  451. CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN, &
  452. config_flags, &
  453. ids,ide, jds, jde, kds, kde, &
  454. ims, ime, jms, jme, kms, kme, &
  455. its, ite, jts, jte, kts, kte )
  456. ENDIF
  457. CASE (GFSSCHEME)
  458. CALL add_a2a(rt_tendf,RTHBLTEN,config_flags, &
  459. ids,ide, jds, jde, kds, kde, &
  460. ims, ime, jms, jme, kms, kme, &
  461. its, ite, jts, jte, kts, kte )
  462. CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags, &
  463. ids,ide, jds, jde, kds, kde, &
  464. ims, ime, jms, jme, kms, kme, &
  465. its, ite, jts, jte, kts, kte )
  466. CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags, &
  467. ids,ide, jds, jde, kds, kde, &
  468. ims, ime, jms, jme, kms, kme, &
  469. its, ite, jts, jte, kts, kte )
  470. if (P_QV .ge. PARAM_FIRST_SCALAR) &
  471. CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN, &
  472. config_flags, &
  473. ids,ide, jds, jde, kds, kde, &
  474. ims, ime, jms, jme, kms, kme, &
  475. its, ite, jts, jte, kts, kte )
  476. if (P_QC .ge. PARAM_FIRST_SCALAR) &
  477. CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN, &
  478. config_flags, &
  479. ids,ide, jds, jde, kds, kde, &
  480. ims, ime, jms, jme, kms, kme, &
  481. its, ite, jts, jte, kts, kte )
  482. if (P_QI .ge. PARAM_FIRST_SCALAR) &
  483. CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQIBLTEN, &
  484. config_flags, &
  485. ids,ide, jds, jde, kds, kde, &
  486. ims, ime, jms, jme, kms, kme, &
  487. its, ite, jts, jte, kts, kte )
  488. IF(.not. adv_moist_cond)THEN
  489. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  490. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN, &
  491. config_flags, &
  492. ids,ide, jds, jde, kds, kde, &
  493. ims, ime, jms, jme, kms, kme, &
  494. its, ite, jts, jte, kts, kte )
  495. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  496. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQIBLTEN, &
  497. config_flags, &
  498. ids,ide, jds, jde, kds, kde, &
  499. ims, ime, jms, jme, kms, kme, &
  500. its, ite, jts, jte, kts, kte )
  501. ENDIF
  502. CASE (MYNNPBLSCHEME2,MYNNPBLSCHEME3)
  503. CALL add_a2a(rt_tendf,RTHBLTEN,config_flags, &
  504. ids,ide, jds, jde, kds, kde, &
  505. ims, ime, jms, jme, kms, kme, &
  506. its, ite, jts, jte, kts, kte )
  507. CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags, &
  508. ids,ide, jds, jde, kds, kde, &
  509. ims, ime, jms, jme, kms, kme, &
  510. its, ite, jts, jte, kts, kte )
  511. CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags, &
  512. ids,ide, jds, jde, kds, kde, &
  513. ims, ime, jms, jme, kms, kme, &
  514. its, ite, jts, jte, kts, kte )
  515. if (P_QV .ge. PARAM_FIRST_SCALAR) &
  516. CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN, &
  517. config_flags, &
  518. ids,ide, jds, jde, kds, kde, &
  519. ims, ime, jms, jme, kms, kme, &
  520. its, ite, jts, jte, kts, kte )
  521. if (P_QC .ge. PARAM_FIRST_SCALAR) &
  522. CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN, &
  523. config_flags, &
  524. ids,ide, jds, jde, kds, kde, &
  525. ims, ime, jms, jme, kms, kme, &
  526. its, ite, jts, jte, kts, kte )
  527. IF(.not. adv_moist_cond)THEN
  528. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  529. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN, &
  530. config_flags, &
  531. ids,ide, jds, jde, kds, kde, &
  532. ims, ime, jms, jme, kms, kme, &
  533. its, ite, jts, jte, kts, kte )
  534. ENDIF
  535. CASE (BOULACSCHEME)
  536. CALL add_a2a(rt_tendf,RTHBLTEN,config_flags, &
  537. ids,ide, jds, jde, kds, kde, &
  538. ims, ime, jms, jme, kms, kme, &
  539. its, ite, jts, jte, kts, kte )
  540. CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags, &
  541. ids,ide, jds, jde, kds, kde, &
  542. ims, ime, jms, jme, kms, kme, &
  543. its, ite, jts, jte, kts, kte )
  544. CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags, &
  545. ids,ide, jds, jde, kds, kde, &
  546. ims, ime, jms, jme, kms, kme, &
  547. its, ite, jts, jte, kts, kte )
  548. if (P_QV .ge. PARAM_FIRST_SCALAR) &
  549. CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN, &
  550. config_flags, &
  551. ids,ide, jds, jde, kds, kde, &
  552. ims, ime, jms, jme, kms, kme, &
  553. its, ite, jts, jte, kts, kte )
  554. IF(.not. adv_moist_cond)THEN
  555. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  556. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN, &
  557. config_flags, &
  558. ids,ide, jds, jde, kds, kde, &
  559. ims, ime, jms, jme, kms, kme, &
  560. its, ite, jts, jte, kts, kte )
  561. ELSE
  562. if (P_QC .ge. PARAM_FIRST_SCALAR) &
  563. CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN, &
  564. config_flags, &
  565. ids,ide, jds, jde, kds, kde, &
  566. ims, ime, jms, jme, kms, kme, &
  567. its, ite, jts, jte, kts, kte )
  568. ENDIF
  569. CASE (CAMUWPBLSCHEME)
  570. CALL add_a2a(rt_tendf,RTHBLTEN,config_flags, &
  571. ids,ide, jds, jde, kds, kde, &
  572. ims, ime, jms, jme, kms, kme, &
  573. its, ite, jts, jte, kts, kte )
  574. CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags, &
  575. ids,ide, jds, jde, kds, kde, &
  576. ims, ime, jms, jme, kms, kme, &
  577. its, ite, jts, jte, kts, kte )
  578. CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags, &
  579. ids,ide, jds, jde, kds, kde, &
  580. ims, ime, jms, jme, kms, kme, &
  581. its, ite, jts, jte, kts, kte )
  582. if (P_QV .ge. PARAM_FIRST_SCALAR) &
  583. CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN, &
  584. config_flags, &
  585. ids,ide, jds, jde, kds, kde, &
  586. ims, ime, jms, jme, kms, kme, &
  587. its, ite, jts, jte, kts, kte )
  588. IF(.not. adv_moist_cond)THEN
  589. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  590. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN, &
  591. config_flags, &
  592. ids,ide, jds, jde, kds, kde, &
  593. ims, ime, jms, jme, kms, kme, &
  594. its, ite, jts, jte, kts, kte )
  595. ELSE
  596. if (P_QC .ge. PARAM_FIRST_SCALAR) &
  597. CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN, &
  598. config_flags, &
  599. ids,ide, jds, jde, kds, kde, &
  600. ims, ime, jms, jme, kms, kme, &
  601. its, ite, jts, jte, kts, kte )
  602. ENDIF
  603. CASE (TEMFPBLSCHEME)
  604. CALL add_a2a(rt_tendf,RTHBLTEN,config_flags, &
  605. ids,ide, jds, jde, kds, kde, &
  606. ims, ime, jms, jme, kms, kme, &
  607. its, ite, jts, jte, kts, kte )
  608. CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags, &
  609. ids,ide, jds, jde, kds, kde, &
  610. ims, ime, jms, jme, kms, kme, &
  611. its, ite, jts, jte, kts, kte )
  612. CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags, &
  613. ids,ide, jds, jde, kds, kde, &
  614. ims, ime, jms, jme, kms, kme, &
  615. its, ite, jts, jte, kts, kte )
  616. if (P_QV .ge. PARAM_FIRST_SCALAR) &
  617. CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN, &
  618. config_flags, &
  619. ids,ide, jds, jde, kds, kde, &
  620. ims, ime, jms, jme, kms, kme, &
  621. its, ite, jts, jte, kts, kte )
  622. if (P_QC .ge. PARAM_FIRST_SCALAR) &
  623. CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN, &
  624. config_flags, &
  625. ids,ide, jds, jde, kds, kde, &
  626. ims, ime, jms, jme, kms, kme, &
  627. its, ite, jts, jte, kts, kte )
  628. if (P_QI .ge. PARAM_FIRST_SCALAR) &
  629. CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQIBLTEN, &
  630. config_flags, &
  631. ids,ide, jds, jde, kds, kde, &
  632. ims, ime, jms, jme, kms, kme, &
  633. its, ite, jts, jte, kts, kte )
  634. CASE DEFAULT
  635. print*,'phy_bl_ten: The pbl scheme does not exist'
  636. END SELECT
  637. END SUBROUTINE phy_bl_ten
  638. !=================================================================
  639. SUBROUTINE phy_cu_ten(config_flags,rk_step,n_moist,n_scalar, &
  640. rt_tendf,ru_tendf,rv_tendf, &
  641. RUCUTEN,RVCUTEN,RTHCUTEN, &
  642. RQVCUTEN,RQCCUTEN,RQRCUTEN, &
  643. RQICUTEN,RQSCUTEN,moist_tendf, &
  644. scalar_tendf,adv_moist_cond, &
  645. ids, ide, jds, jde, kds, kde, &
  646. ims, ime, jms, jme, kms, kme, &
  647. its, ite, jts, jte, kts, kte )
  648. !-----------------------------------------------------------------
  649. IMPLICIT NONE
  650. !-----------------------------------------------------------------
  651. TYPE(grid_config_rec_type ) , INTENT(IN ) :: config_flags
  652. INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
  653. ims, ime, jms, jme, kms, kme, &
  654. its, ite, jts, jte, kts, kte, &
  655. n_moist, n_scalar, rk_step
  656. LOGICAL , INTENT(IN) :: adv_moist_cond
  657. REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_moist), &
  658. INTENT(INOUT) :: moist_tendf
  659. REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_scalar), &
  660. INTENT(INOUT) :: scalar_tendf
  661. REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN ) :: &
  662. RUCUTEN, &
  663. RVCUTEN, &
  664. RTHCUTEN, &
  665. RQVCUTEN, &
  666. RQCCUTEN, &
  667. RQRCUTEN, &
  668. RQICUTEN, &
  669. RQSCUTEN
  670. REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: &
  671. rt_tendf, &
  672. ru_tendf, &
  673. rv_tendf
  674. ! LOCAL VARS
  675. INTEGER :: i,j,k
  676. SELECT CASE (config_flags%cu_physics)
  677. CASE (KFSCHEME)
  678. CALL add_a2a(rt_tendf,RTHCUTEN,config_flags, &
  679. ids,ide, jds, jde, kds, kde, &
  680. ims, ime, jms, jme, kms, kme, &
  681. its, ite, jts, jte, kts, kte )
  682. if (P_QV .ge. PARAM_FIRST_SCALAR) &
  683. CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVCUTEN, &
  684. config_flags, &
  685. ids,ide, jds, jde, kds, kde, &
  686. ims, ime, jms, jme, kms, kme, &
  687. its, ite, jts, jte, kts, kte )
  688. if (P_QC .ge. PARAM_FIRST_SCALAR) &
  689. CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCCUTEN, &
  690. config_flags, &
  691. ids,ide, jds, jde, kds, kde, &
  692. ims, ime, jms, jme, kms, kme, &
  693. its, ite, jts, jte, kts, kte )
  694. if (P_QR .ge. PARAM_FIRST_SCALAR) &
  695. CALL add_a2a(moist_tendf(ims,kms,jms,P_QR),RQRCUTEN, &
  696. config_flags, &
  697. ids,ide, jds, jde, kds, kde, &
  698. ims, ime, jms, jme, kms, kme, &
  699. its, ite, jts, jte, kts, kte )
  700. if (P_QI .ge. PARAM_FIRST_SCALAR) &
  701. CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQICUTEN, &
  702. config_flags, &
  703. ids,ide, jds, jde, kds, kde, &
  704. ims, ime, jms, jme, kms, kme, &
  705. its, ite, jts, jte, kts, kte )
  706. if (P_QS .ge. PARAM_FIRST_SCALAR) &
  707. CALL add_a2a(moist_tendf(ims,kms,jms,P_QS),RQSCUTEN, &
  708. config_flags, &
  709. ids,ide, jds, jde, kds, kde, &
  710. ims, ime, jms, jme, kms, kme, &
  711. its, ite, jts, jte, kts, kte )
  712. IF(.not. adv_moist_cond)THEN
  713. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  714. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCCUTEN, &
  715. config_flags, &
  716. ids,ide, jds, jde, kds, kde, &
  717. ims, ime, jms, jme, kms, kme, &
  718. its, ite, jts, jte, kts, kte )
  719. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  720. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQRCUTEN, &
  721. config_flags, &
  722. ids,ide, jds, jde, kds, kde, &
  723. ims, ime, jms, jme, kms, kme, &
  724. its, ite, jts, jte, kts, kte )
  725. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  726. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQICUTEN, &
  727. config_flags, &
  728. ids,ide, jds, jde, kds, kde, &
  729. ims, ime, jms, jme, kms, kme, &
  730. its, ite, jts, jte, kts, kte )
  731. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  732. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQSCUTEN, &
  733. config_flags, &
  734. ids,ide, jds, jde, kds, kde, &
  735. ims, ime, jms, jme, kms, kme, &
  736. its, ite, jts, jte, kts, kte )
  737. ENDIF
  738. CASE (BMJSCHEME)
  739. CALL add_a2a(rt_tendf,RTHCUTEN, &
  740. config_flags, &
  741. ids,ide, jds, jde, kds, kde, &
  742. ims, ime, jms, jme, kms, kme, &
  743. its, ite, jts, jte, kts, kte )
  744. if (P_QV .ge. PARAM_FIRST_SCALAR) &
  745. CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVCUTEN, &
  746. config_flags, &
  747. ids,ide, jds, jde, kds, kde, &
  748. ims, ime, jms, jme, kms, kme, &
  749. its, ite, jts, jte, kts, kte )
  750. CASE (KFETASCHEME)
  751. CALL add_a2a(rt_tendf,RTHCUTEN,config_flags, &
  752. ids,ide, jds, jde, kds, kde, &
  753. ims, ime, jms, jme, kms, kme, &
  754. its, ite, jts, jte, kts, kte )
  755. if (P_QV .ge. PARAM_FIRST_SCALAR) &
  756. CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVCUTEN, &
  757. config_flags, &
  758. ids,ide, jds, jde, kds, kde, &
  759. ims, ime, jms, jme, kms, kme, &
  760. its, ite, jts, jte, kts, kte )
  761. if (P_QC .ge. PARAM_FIRST_SCALAR) &
  762. CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCCUTEN, &
  763. config_flags, &
  764. ids,ide, jds, jde, kds, kde, &
  765. ims, ime, jms, jme, kms, kme, &
  766. its, ite, jts, jte, kts, kte )
  767. if (P_QR .ge. PARAM_FIRST_SCALAR) &
  768. CALL add_a2a(moist_tendf(ims,kms,jms,P_QR),RQRCUTEN, &
  769. config_flags, &
  770. ids,ide, jds, jde, kds, kde, &
  771. ims, ime, jms, jme, kms, kme, &
  772. its, ite, jts, jte, kts, kte )
  773. if (P_QI .ge. PARAM_FIRST_SCALAR) &
  774. CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQICUTEN, &
  775. config_flags, &
  776. ids,ide, jds, jde, kds, kde, &
  777. ims, ime, jms, jme, kms, kme, &
  778. its, ite, jts, jte, kts, kte )
  779. if (P_QS .ge. PARAM_FIRST_SCALAR) &
  780. CALL add_a2a(moist_tendf(ims,kms,jms,P_QS),RQSCUTEN, &
  781. config_flags, &
  782. ids,ide, jds, jde, kds, kde, &
  783. ims, ime, jms, jme, kms, kme, &
  784. its, ite, jts, jte, kts, kte )
  785. IF(.not. adv_moist_cond)THEN
  786. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  787. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCCUTEN, &
  788. config_flags, &
  789. ids,ide, jds, jde, kds, kde, &
  790. ims, ime, jms, jme, kms, kme, &
  791. its, ite, jts, jte, kts, kte )
  792. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  793. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQRCUTEN, &
  794. config_flags, &
  795. ids,ide, jds, jde, kds, kde, &
  796. ims, ime, jms, jme, kms, kme, &
  797. its, ite, jts, jte, kts, kte )
  798. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  799. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQICUTEN, &
  800. config_flags, &
  801. ids,ide, jds, jde, kds, kde, &
  802. ims, ime, jms, jme, kms, kme, &
  803. its, ite, jts, jte, kts, kte )
  804. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  805. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQSCUTEN, &
  806. config_flags, &
  807. ids,ide, jds, jde, kds, kde, &
  808. ims, ime, jms, jme, kms, kme, &
  809. its, ite, jts, jte, kts, kte )
  810. ENDIF
  811. CASE (GDSCHEME, G3SCHEME)
  812. CALL add_a2a(rt_tendf,RTHCUTEN,config_flags, &
  813. ids,ide, jds, jde, kds, kde, &
  814. ims, ime, jms, jme, kms, kme, &
  815. its, ite, jts, jte, kts, kte )
  816. if (P_QV .ge. PARAM_FIRST_SCALAR) &
  817. CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVCUTEN, &
  818. config_flags, &
  819. ids,ide, jds, jde, kds, kde, &
  820. ims, ime, jms, jme, kms, kme, &
  821. its, ite, jts, jte, kts, kte )
  822. if (P_QC .ge. PARAM_FIRST_SCALAR) &
  823. CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCCUTEN, &
  824. config_flags, &
  825. ids,ide, jds, jde, kds, kde, &
  826. ims, ime, jms, jme, kms, kme, &
  827. its, ite, jts, jte, kts, kte )
  828. if (P_QI .ge. PARAM_FIRST_SCALAR) &
  829. CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQICUTEN, &
  830. config_flags, &
  831. ids,ide, jds, jde, kds, kde, &
  832. ims, ime, jms, jme, kms, kme, &
  833. its, ite, jts, jte, kts, kte )
  834. IF(.not. adv_moist_cond)THEN
  835. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  836. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCCUTEN, &
  837. config_flags, &
  838. ids,ide, jds, jde, kds, kde, &
  839. ims, ime, jms, jme, kms, kme, &
  840. its, ite, jts, jte, kts, kte )
  841. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  842. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQICUTEN, &
  843. config_flags, &
  844. ids,ide, jds, jde, kds, kde, &
  845. ims, ime, jms, jme, kms, kme, &
  846. its, ite, jts, jte, kts, kte )
  847. ENDIF
  848. CASE (NSASSCHEME)
  849. CALL add_a2a(rt_tendf,RTHCUTEN,config_flags, &
  850. ids,ide, jds, jde, kds, kde, &
  851. ims, ime, jms, jme, kms, kme, &
  852. its, ite, jts, jte, kts, kte )
  853. CALL add_a2c_u(ru_tendf,RUCUTEN,config_flags, &
  854. ids,ide, jds, jde, kds, kde, &
  855. ims, ime, jms, jme, kms, kme, &
  856. its, ite, jts, jte, kts, kte )
  857. CALL add_a2c_v(rv_tendf,RVCUTEN,config_flags, &
  858. ids,ide, jds, jde, kds, kde, &
  859. ims, ime, jms, jme, kms, kme, &
  860. its, ite, jts, jte, kts, kte )
  861. if (P_QV .ge. PARAM_FIRST_SCALAR) &
  862. CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVCUTEN, &
  863. config_flags, &
  864. ids,ide, jds, jde, kds, kde, &
  865. ims, ime, jms, jme, kms, kme, &
  866. its, ite, jts, jte, kts, kte )
  867. if (P_QC .ge. PARAM_FIRST_SCALAR) &
  868. CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCCUTEN, &
  869. config_flags, &
  870. ids,ide, jds, jde, kds, kde, &
  871. ims, ime, jms, jme, kms, kme, &
  872. its, ite, jts, jte, kts, kte )
  873. if (P_QI .ge. PARAM_FIRST_SCALAR) &
  874. CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQICUTEN, &
  875. config_flags, &
  876. ids,ide, jds, jde, kds, kde, &
  877. ims, ime, jms, jme, kms, kme, &
  878. its, ite, jts, jte, kts, kte )
  879. IF(.not. adv_moist_cond)THEN
  880. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  881. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCCUTEN, &
  882. config_flags, &
  883. ids,ide, jds, jde, kds, kde, &
  884. ims, ime, jms, jme, kms, kme, &
  885. its, ite, jts, jte, kts, kte )
  886. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  887. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQICUTEN, &
  888. config_flags, &
  889. ids,ide, jds, jde, kds, kde, &
  890. ims, ime, jms, jme, kms, kme, &
  891. its, ite, jts, jte, kts, kte )
  892. ENDIF
  893. CASE (SASSCHEME,OSASSCHEME)
  894. CALL add_a2a(rt_tendf,RTHCUTEN,config_flags, &
  895. ids,ide, jds, jde, kds, kde, &
  896. ims, ime, jms, jme, kms, kme, &
  897. its, ite, jts, jte, kts, kte )
  898. if (P_QV .ge. PARAM_FIRST_SCALAR) &
  899. CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVCUTEN, &
  900. config_flags, &
  901. ids,ide, jds, jde, kds, kde, &
  902. ims, ime, jms, jme, kms, kme, &
  903. its, ite, jts, jte, kts, kte )
  904. if (P_QC .ge. PARAM_FIRST_SCALAR) &
  905. CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCCUTEN, &
  906. config_flags, &
  907. ids,ide, jds, jde, kds, kde, &
  908. ims, ime, jms, jme, kms, kme, &
  909. its, ite, jts, jte, kts, kte )
  910. if (P_QI .ge. PARAM_FIRST_SCALAR) &
  911. CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQICUTEN, &
  912. config_flags, &
  913. ids,ide, jds, jde, kds, kde, &
  914. ims, ime, jms, jme, kms, kme, &
  915. its, ite, jts, jte, kts, kte )
  916. IF(.not. adv_moist_cond)THEN
  917. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  918. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCCUTEN, &
  919. config_flags, &
  920. ids,ide, jds, jde, kds, kde, &
  921. ims, ime, jms, jme, kms, kme, &
  922. its, ite, jts, jte, kts, kte )
  923. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  924. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQICUTEN, &
  925. config_flags, &
  926. ids,ide, jds, jde, kds, kde, &
  927. ims, ime, jms, jme, kms, kme, &
  928. its, ite, jts, jte, kts, kte )
  929. ENDIF
  930. CASE (CAMZMSCHEME)
  931. CALL add_a2c_u(ru_tendf,RUCUTEN,config_flags, &
  932. ids,ide, jds, jde, kds, kde, &
  933. ims, ime, jms, jme, kms, kme, &
  934. its, ite, jts, jte, kts, kte )
  935. CALL add_a2c_v(rv_tendf,RVCUTEN,config_flags, &
  936. ids,ide, jds, jde, kds, kde, &
  937. ims, ime, jms, jme, kms, kme, &
  938. its, ite, jts, jte, kts, kte )
  939. CALL add_a2a(rt_tendf,RTHCUTEN,config_flags, &
  940. ids,ide, jds, jde, kds, kde, &
  941. ims, ime, jms, jme, kms, kme, &
  942. its, ite, jts, jte, kts, kte )
  943. if (P_QV .ge. PARAM_FIRST_SCALAR) &
  944. CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVCUTEN, &
  945. config_flags, &
  946. ids,ide, jds, jde, kds, kde, &
  947. ims, ime, jms, jme, kms, kme, &
  948. its, ite, jts, jte, kts, kte )
  949. if (P_QC .ge. PARAM_FIRST_SCALAR) &
  950. CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCCUTEN, &
  951. config_flags, &
  952. ids,ide, jds, jde, kds, kde, &
  953. ims, ime, jms, jme, kms, kme, &
  954. its, ite, jts, jte, kts, kte )
  955. if (P_QI .ge. PARAM_FIRST_SCALAR) &
  956. CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQICUTEN, &
  957. config_flags, &
  958. ids,ide, jds, jde, kds, kde, &
  959. ims, ime, jms, jme, kms, kme, &
  960. its, ite, jts, jte, kts, kte )
  961. IF(.not. adv_moist_cond)THEN
  962. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  963. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCCUTEN, &
  964. config_flags, &
  965. ids,ide, jds, jde, kds, kde, &
  966. ims, ime, jms, jme, kms, kme, &
  967. its, ite, jts, jte, kts, kte )
  968. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  969. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQICUTEN, &
  970. config_flags, &
  971. ids,ide, jds, jde, kds, kde, &
  972. ims, ime, jms, jme, kms, kme, &
  973. its, ite, jts, jte, kts, kte )
  974. ENDIF
  975. CASE (TIEDTKESCHEME)
  976. CALL add_a2a(rt_tendf,RTHCUTEN,config_flags, &
  977. ids,ide, jds, jde, kds, kde, &
  978. ims, ime, jms, jme, kms, kme, &
  979. its, ite, jts, jte, kts, kte )
  980. CALL add_a2c_u(ru_tendf,RUCUTEN,config_flags, &
  981. ids,ide, jds, jde, kds, kde, &
  982. ims, ime, jms, jme, kms, kme, &
  983. its, ite, jts, jte, kts, kte )
  984. CALL add_a2c_v(rv_tendf,RVCUTEN,config_flags, &
  985. ids,ide, jds, jde, kds, kde, &
  986. ims, ime, jms, jme, kms, kme, &
  987. its, ite, jts, jte, kts, kte )
  988. if (P_QV .ge. PARAM_FIRST_SCALAR) &
  989. CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVCUTEN, &
  990. config_flags, &
  991. ids,ide, jds, jde, kds, kde, &
  992. ims, ime, jms, jme, kms, kme, &
  993. its, ite, jts, jte, kts, kte )
  994. if (P_QC .ge. PARAM_FIRST_SCALAR) &
  995. CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCCUTEN, &
  996. config_flags, &
  997. ids,ide, jds, jde, kds, kde, &
  998. ims, ime, jms, jme, kms, kme, &
  999. its, ite, jts, jte, kts, kte )
  1000. if (P_QI .ge. PARAM_FIRST_SCALAR) &
  1001. CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQICUTEN, &
  1002. config_flags, &
  1003. ids,ide, jds, jde, kds, kde, &
  1004. ims, ime, jms, jme, kms, kme, &
  1005. its, ite, jts, jte, kts, kte )
  1006. IF(.not. adv_moist_cond)THEN
  1007. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  1008. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCCUTEN, &
  1009. config_flags, &
  1010. ids,ide, jds, jde, kds, kde, &
  1011. ims, ime, jms, jme, kms, kme, &
  1012. its, ite, jts, jte, kts, kte )
  1013. if (P_QT .ge. PARAM_FIRST_SCALAR) &
  1014. CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQICUTEN, &
  1015. config_flags, &
  1016. ids,ide, jds, jde, kds, kde, &
  1017. ims, ime, jms, jme, kms, kme, &
  1018. its, ite, jts, jte, kts, kte )
  1019. ENDIF
  1020. CASE DEFAULT
  1021. END SELECT
  1022. END SUBROUTINE phy_cu_ten
  1023. !=================================================================
  1024. SUBROUTINE phy_shcu_ten(config_flags,rk_step,n_moist, &
  1025. rt_tendf,ru_tendf,rv_tendf, &
  1026. RUSHTEN,RVSHTEN,RTHSHTEN, &
  1027. RQVSHTEN,RQCSHTEN,RQRSHTEN, &
  1028. RQISHTEN,RQSSHTEN,RQGSHTEN,moist_tendf, &
  1029. ids, ide, jds, jde, kds, kde, &
  1030. ims, ime, jms, jme, kms, kme, &
  1031. its, ite, jts, jte, kts, kte )
  1032. !-----------------------------------------------------------------
  1033. IMPLICIT NONE
  1034. !-----------------------------------------------------------------
  1035. TYPE(grid_config_rec_type ) , INTENT(IN ) :: config_flags
  1036. INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
  1037. ims, ime, jms, jme, kms, kme, &
  1038. its, ite, jts, jte, kts, kte, &
  1039. n_moist, rk_step
  1040. REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_moist), &
  1041. INTENT(INOUT) :: moist_tendf
  1042. REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN ) :: &
  1043. RUSHTEN, &
  1044. RVSHTEN, &
  1045. RTHSHTEN, &
  1046. RQVSHTEN, &
  1047. RQCSHTEN, &
  1048. RQRSHTEN, &
  1049. RQISHTEN, &
  1050. RQSSHTEN, &
  1051. RQGSHTEN
  1052. REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: &
  1053. rt_tendf, &
  1054. ru_tendf, &
  1055. rv_tendf
  1056. ! LOCAL VARS
  1057. INTEGER :: i,j,k
  1058. SELECT CASE (config_flags%shcu_physics)
  1059. CASE (CAMUWSHCUSCHEME)
  1060. CALL add_a2c_u(ru_tendf,RUSHTEN,config_flags, &
  1061. ids,ide, jds, jde, kds, kde, &
  1062. ims, ime, jms, jme, kms, kme, &
  1063. its, ite, jts, jte, kts, kte )
  1064. CALL add_a2c_v(rv_tendf,RVSHTEN,config_flags, &
  1065. ids,ide, jds, jde, kds, kde, &
  1066. ims, ime, jms, jme, kms, kme, &
  1067. its, ite, jts, jte, kts, kte )
  1068. CALL add_a2a(rt_tendf,RTHSHTEN,config_flags, &
  1069. ids,ide, jds, jde, kds, kde, &
  1070. ims, ime, jms, jme, kms, kme, &
  1071. its, ite, jts, jte, kts, kte )
  1072. if (P_QV .ge. PARAM_FIRST_SCALAR) &
  1073. CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVSHTEN, &
  1074. config_flags, &
  1075. ids,ide, jds, jde, kds, kde, &
  1076. ims, ime, jms, jme, kms, kme, &
  1077. its, ite, jts, jte, kts, kte )
  1078. if (P_QC .ge. PARAM_FIRST_SCALAR) &
  1079. CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCSHTEN, &
  1080. config_flags, &
  1081. ids,ide, jds, jde, kds, kde, &
  1082. ims, ime, jms, jme, kms, kme, &
  1083. its, ite, jts, jte, kts, kte )
  1084. if (P_QR .ge. PARAM_FIRST_SCALAR) &
  1085. CALL add_a2a(moist_tendf(ims,kms,jms,P_QR),RQRSHTEN, &
  1086. config_flags, &
  1087. ids,ide, jds, jde, kds, kde, &
  1088. ims, ime, jms, jme, kms, kme, &
  1089. its, ite, jts, jte, kts, kte )
  1090. if (P_QI .ge. PARAM_FIRST_SCALAR) &
  1091. CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQISHTEN, &
  1092. config_flags, &
  1093. ids,ide, jds, jde, kds, kde, &
  1094. ims, ime, jms, jme, kms, kme, &
  1095. its, ite, jts, jte, kts, kte )
  1096. if (P_QS .ge. PARAM_FIRST_SCALAR) &
  1097. CALL add_a2a(moist_tendf(ims,kms,jms,P_QS),RQSSHTEN, &
  1098. config_flags, &
  1099. ids,ide, jds, jde, kds, kde, &
  1100. ims, ime, jms, jme, kms, kme, &
  1101. its, ite, jts, jte, kts, kte )
  1102. if (P_QG .ge. PARAM_FIRST_SCALAR) &
  1103. CALL add_a2a(moist_tendf(ims,kms,jms,P_QG),RQGSHTEN, &
  1104. config_flags, &
  1105. ids,ide, jds, jde, kds, kde, &
  1106. ims, ime, jms, jme, kms, kme, &
  1107. its, ite, jts, jte, kts, kte )
  1108. CASE DEFAULT
  1109. END SELECT
  1110. END SUBROUTINE phy_shcu_ten
  1111. !=================================================================
  1112. SUBROUTINE phy_fg_ten(config_flags,rk_step,n_moist, &
  1113. rph_tendf,rt_tendf,ru_tendf,rv_tendf, &
  1114. mu_tendf, moist_tendf, &
  1115. RUNDGDTEN,RVNDGDTEN,RTHNDGDTEN, &
  1116. RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN, &
  1117. ids, ide, jds, jde, kds, kde, &
  1118. ims, ime, jms, jme, kms, kme, &
  1119. its, ite, jts, jte, kts, kte )
  1120. !-----------------------------------------------------------------
  1121. IMPLICIT NONE
  1122. !-----------------------------------------------------------------
  1123. TYPE(grid_config_rec_type) , INTENT(IN ) :: config_flags
  1124. INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
  1125. ims, ime, jms, jme, kms, kme, &
  1126. its, ite, jts, jte, kts, kte, &
  1127. n_moist, rk_step
  1128. REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_moist), &
  1129. INTENT(INOUT) :: moist_tendf
  1130. REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN ) :: &
  1131. RTHNDGDTEN, &
  1132. RPHNDGDTEN, &
  1133. RUNDGDTEN, &
  1134. RVNDGDTEN, &
  1135. RQVNDGDTEN
  1136. REAL, DIMENSION(ims:ime, jms:jme), INTENT(IN ) :: RMUNDGDTEN
  1137. REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT):: &
  1138. rph_tendf,&
  1139. rt_tendf, &
  1140. ru_tendf, &
  1141. rv_tendf
  1142. REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT):: mu_tendf
  1143. ! LOCAL VARS
  1144. INTEGER :: i,j,k,IBGN,IEND,JBGN,JEND
  1145. !-----------------------------------------------------------------
  1146. SELECT CASE(config_flags%grid_fdda)
  1147. CASE (PSUFDDAGD)
  1148. CALL add_a2a(rt_tendf,RTHNDGDTEN,config_flags, &
  1149. ids,ide, jds, jde, kds, kde, &
  1150. ims, ime, jms, jme, kms, kme, &
  1151. its, ite, jts, jte, kts, kte )
  1152. ! note fdda u and v tendencies are staggered
  1153. CALL add_c2c_u(ru_tendf,RUNDGDTEN,config_flags, &
  1154. ids,ide, jds, jde, kds, kde, &
  1155. ims, ime, jms, jme, kms, kme, &
  1156. its, ite, jts, jte, kts, kte )
  1157. CALL add_c2c_v(rv_tendf,RVNDGDTEN,config_flags, &
  1158. ids,ide, jds, jde, kds, kde, &
  1159. ims, ime, jms, jme, kms, kme, &
  1160. its, ite, jts, jte, kts, kte )
  1161. CALL add_a2a(mu_tendf,RMUNDGDTEN,config_flags, &
  1162. ids,ide, jds, jde, kds, kds, &
  1163. ims, ime, jms, jme, kms, kms, &
  1164. its, ite, jts, jte, kts, kts )
  1165. if (P_QV .ge. PARAM_FIRST_SCALAR) &
  1166. CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVNDGDTEN, &
  1167. config_flags, &
  1168. ids,ide, jds, jde, kds, kde, &
  1169. ims, ime, jms, jme, kms, kme, &
  1170. its, ite, jts, jte, kts, kte )
  1171. CASE (SPNUDGING)
  1172. ! note fdda u and v tendencies are staggered
  1173. CALL add_c2c_u(ru_tendf,RUNDGDTEN,config_flags, &
  1174. ids,ide, jds, jde, kds, kde, &
  1175. ims, ime, jms, jme, kms, kme, &
  1176. its, ite, jts, jte, kts, kte )
  1177. CALL add_c2c_v(rv_tendf,RVNDGDTEN,config_flags, &
  1178. ids,ide, jds, jde, kds, kde, &
  1179. ims, ime, jms, jme, kms, kme, &
  1180. its, ite, jts, jte, kts, kte )
  1181. CALL add_a2a(rt_tendf,RTHNDGDTEN,config_flags, &
  1182. ids,ide, jds, jde, kds, kde, &
  1183. ims, ime, jms, jme, kms, kme, &
  1184. its, ite, jts, jte, kts, kte )
  1185. CALL add_a2a_ph(rph_tendf,RPHNDGDTEN,config_flags, &
  1186. ids,ide, jds, jde, kds, kde, &
  1187. ims, ime, jms, jme, kms, kme, &
  1188. its, ite, jts, jte, kts, kte )
  1189. CASE DEFAULT
  1190. END SELECT
  1191. END SUBROUTINE phy_fg_ten
  1192. !=================================================================
  1193. SUBROUTINE phy_fr_ten(config_flags,rk_step,n_moist, &
  1194. rt_tendf,ru_tendf,rv_tendf, &
  1195. mu_tendf, moist_tendf, &
  1196. rthfrten,rqvfrten, &
  1197. ids, ide, jds, jde, kds, kde, &
  1198. ims, ime, jms, jme, kms, kme, &
  1199. its, ite, jts, jte, kts, kte )
  1200. !-----------------------------------------------------------------
  1201. USE module_state_description, ONLY : &
  1202. FIRE_SFIRE
  1203. !-----------------------------------------------------------------
  1204. IMPLICIT NONE
  1205. !-----------------------------------------------------------------
  1206. TYPE(grid_config_rec_type) , INTENT(IN ) :: config_flags
  1207. INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
  1208. ims, ime, jms, jme, kms, kme, &
  1209. its, ite, jts, jte, kts, kte, &
  1210. n_moist, rk_step
  1211. REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_moist), &
  1212. INTENT(INOUT) :: moist_tendf
  1213. REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN ) :: &
  1214. rthfrten, &
  1215. rqvfrten
  1216. REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT):: &
  1217. rt_tendf, &
  1218. ru_tendf, &
  1219. rv_tendf
  1220. REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT):: mu_tendf
  1221. ! LOCAL VARS
  1222. INTEGER :: i,j,k,IBGN,IEND,JBGN,JEND
  1223. !-----------------------------------------------------------------
  1224. SELECT CASE(config_flags%ifire)
  1225. CASE (FIRE_SFIRE)
  1226. CALL add_a2a(rt_tendf,rthfrten, &
  1227. config_flags, &
  1228. ids,ide, jds, jde, kds, kde, &
  1229. ims, ime, jms, jme, kms, kme, &
  1230. its, ite, jts, jte, kts, kte )
  1231. CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),rqvfrten, &
  1232. config_flags, &
  1233. ids,ide, jds, jde, kds, kde, &
  1234. ims, ime, jms, jme, kms, kme, &
  1235. its, ite, jts, jte, kts, kte )
  1236. CASE DEFAULT
  1237. END SELECT
  1238. END SUBROUTINE phy_fr_ten
  1239. !----------------------------------------------------------------------
  1240. SUBROUTINE advance_ppt(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, &
  1241. RQICUTEN,RQSCUTEN, &
  1242. RAINC,RAINCV,RAINSH,PRATEC,PRATESH, &
  1243. NCA, HTOP,HBOT,CUTOP,CUBOT, &
  1244. CUPPT, DT, config_flags, &
  1245. ids,ide, jds,jde, kds,kde, &
  1246. ims,ime, jms,jme, kms,kme, &
  1247. its,ite, jts,jte, kts,kte )
  1248. !----------------------------------------------------------------------
  1249. USE module_state_description
  1250. USE module_cu_kf
  1251. USE module_cu_kfeta
  1252. !----------------------------------------------------------------------
  1253. IMPLICIT NONE
  1254. !----------------------------------------------------------------------
  1255. TYPE(grid_config_rec_type), INTENT(IN ) :: config_flags
  1256. INTEGER, INTENT(IN ) :: &
  1257. ids,ide, jds,jde, kds,kde, &
  1258. ims,ime, jms,jme, kms,kme, &
  1259. its,ite, jts,jte, kts,kte
  1260. REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), &
  1261. INTENT(INOUT) :: RTHCUTEN, &
  1262. RQVCUTEN, &
  1263. RQCCUTEN, &
  1264. RQRCUTEN, &
  1265. RQICUTEN, &
  1266. RQSCUTEN
  1267. REAL, DIMENSION( ims:ime , jms:jme ), &
  1268. INTENT(INOUT) :: RAINC, &
  1269. RAINSH, &
  1270. RAINCV, &
  1271. PRATEC, &
  1272. PRATESH, &
  1273. NCA, &
  1274. HTOP, &
  1275. HBOT, &
  1276. CUTOP, &
  1277. CUBOT, &
  1278. CUPPT
  1279. REAL, INTENT(IN) :: DT
  1280. ! LOCAL VAR
  1281. INTEGER :: i,j,k,i_start,i_end,j_start,j_end,k_start,k_end
  1282. INTEGER :: NCUTOP, NCUBOT
  1283. !-----------------------------------------------------------------
  1284. IF (config_flags%cu_physics .eq. 0) return
  1285. ! SET START AND END POINTS FOR TILES
  1286. i_start = its
  1287. i_end = min( ite,ide-1 )
  1288. j_start = jts
  1289. j_end = min( jte,jde-1 )
  1290. !
  1291. ! IF( config_flags%nested .or. config_flags%specified ) THEN
  1292. ! i_start = max( its,ids+1 )
  1293. ! i_end = min( ite,ide-2 )
  1294. ! j_start = max( jts,jds+1 )
  1295. ! j_end = min( jte,jde-2 )
  1296. ! ENDIF
  1297. !
  1298. k_start = kts
  1299. k_end = min( kte, kde-1 )
  1300. ! Update total cumulus scheme precipitation
  1301. ! in mm
  1302. DO J = j_start,j_end
  1303. DO i = i_start,i_end
  1304. RAINC(I,J) = RAINC(I,J) + PRATEC(I,J)*DT
  1305. RAINSH(I,J) = RAINSH(I,J) + PRATESH(I,J)*DT
  1306. CUPPT(I,J) = CUPPT(I,J) + (PRATEC(I,J)+PRATESH(I,J))*DT/1000.
  1307. ENDDO
  1308. ENDDO
  1309. SELECT CASE (config_flags%cu_physics)
  1310. CASE (KFSCHEME)
  1311. DO J = j_start,j_end
  1312. DO i = i_start,i_end
  1313. IF ( NCA(I,J) .GT. 0 ) THEN
  1314. IF ( NINT(NCA(I,J) / DT) .le. 0 ) THEN
  1315. ! set tendency to zero
  1316. ! PRATEC(I,J)=0.
  1317. ! RAINCV(I,J)=0.
  1318. DO k = k_start,k_end
  1319. RTHCUTEN(i,k,j)=0.
  1320. RQVCUTEN(i,k,j)=0.
  1321. RQCCUTEN(i,k,j)=0.
  1322. RQRCUTEN(i,k,j)=0.
  1323. if (P_QI .ge. PARAM_FIRST_SCALAR) RQICUTEN(i,k,j)=0.
  1324. if (P_QS .ge. PARAM_FIRST_SCALAR) RQSCUTEN(i,k,j)=0.
  1325. ENDDO
  1326. ENDIF
  1327. NCA(I,J)=NCA(I,J)-DT ! Decrease NCA
  1328. ENDIF
  1329. !
  1330. ENDDO
  1331. ENDDO
  1332. CASE (BMJSCHEME, CAMZMSCHEME)
  1333. DO J = j_start,j_end
  1334. DO i = i_start,i_end
  1335. ! HTOP, HBOT FOR GFDL RADIATION
  1336. NCUTOP=NINT(CUTOP(I,J))
  1337. NCUBOT=NINT(CUBOT(I,J))
  1338. IF(NCUTOP>1.AND.NCUTOP<KDE)THEN
  1339. HTOP(I,J)=MAX(CUTOP(I,J),HTOP(I,J))
  1340. ENDIF
  1341. IF(NCUBOT>0.AND.NCUBOT<KDE)THEN
  1342. HBOT(I,J)=MIN(CUBOT(I,J),HBOT(I,J))
  1343. ENDIF
  1344. ENDDO
  1345. ENDDO
  1346. CASE (KFETASCHEME)
  1347. DO J = j_start,j_end
  1348. DO i = i_start,i_end
  1349. ! HTOP, HBOT FOR GFDL RADIATION
  1350. NCUTOP=NINT(CUTOP(I,J))
  1351. NCUBOT=NINT(CUBOT(I,J))
  1352. IF(NCUTOP>1.AND.NCUTOP<KDE)THEN
  1353. HTOP(I,J)=MAX(CUTOP(I,J),HTOP(I,J))
  1354. ENDIF
  1355. IF(NCUBOT>0.AND.NCUBOT<KDE)THEN
  1356. HBOT(I,J)=MIN(CUBOT(I,J),HBOT(I,J))
  1357. ENDIF
  1358. IF ( NCA(I,J) .GT. 0 ) THEN
  1359. IF ( NINT(NCA(I,J) / DT) .LE. 1 ) THEN
  1360. ! set tendency to zero
  1361. ! PRATEC(I,J)=0.
  1362. ! RAINCV(I,J)=0.
  1363. DO k = k_start,k_end
  1364. RTHCUTEN(i,k,j)=0.
  1365. RQVCUTEN(i,k,j)=0.
  1366. RQCCUTEN(i,k,j)=0.
  1367. RQRCUTEN(i,k,j)=0.
  1368. if (P_QI .ge. PARAM_FIRST_SCALAR) RQICUTEN(i,k,j)=0.
  1369. if (P_QS .ge. PARAM_FIRST_SCALAR) RQSCUTEN(i,k,j)=0.
  1370. ENDDO
  1371. ENDIF
  1372. NCA(I,J)=NCA(I,J)-DT ! Decrease NCA
  1373. ! NCA(I,J)=NCA(I,J)-1. ! Decrease NCA
  1374. ENDIF
  1375. !
  1376. ENDDO
  1377. ENDDO
  1378. CASE DEFAULT
  1379. END SELECT
  1380. END SUBROUTINE advance_ppt
  1381. SUBROUTINE add_a2a(lvar,rvar,config_flags, &
  1382. ids,ide, jds, jde, kds, kde, &
  1383. ims, ime, jms, jme, kms, kme, &
  1384. its, ite, jts, jte, kts, kte )
  1385. !------------------------------------------------------------
  1386. IMPLICIT NONE
  1387. !------------------------------------------------------------
  1388. TYPE(grid_config_rec_type), INTENT(IN) :: config_flags
  1389. INTEGER , INTENT(IN ) :: ids, ide, jds, jde, kds, kde, &
  1390. ims, ime, jms, jme, kms, kme, &
  1391. its, ite, jts, jte, kts, kte
  1392. REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(IN ) ::&
  1393. rvar
  1394. REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(INOUT) ::&
  1395. lvar
  1396. ! LOCAL VARS
  1397. INTEGER :: i,j,k,i_start,i_end,j_start,j_end,ktf
  1398. i_start = its
  1399. i_end = MIN(ite,ide-1)
  1400. j_start = jts
  1401. j_end = MIN(jte,jde-1)
  1402. ktf = min(kte,kde-1)
  1403. IF ( config_flags%specified .or. &
  1404. config_flags%nested) i_start = MAX(ids+1,its)
  1405. IF ( config_flags%specified .or. &
  1406. config_flags%nested) i_end = MIN(ide-2,ite)
  1407. IF ( config_flags%specified .or. &
  1408. config_flags%nested) j_start = MAX(jds+1,jts)
  1409. IF ( config_flags%specified .or. &
  1410. config_flags%nested) j_end = MIN(jde-2,jte)
  1411. IF ( config_flags%periodic_x ) i_start = its
  1412. IF ( config_flags%periodic_x ) i_end = MIN( ite, ide-1 )
  1413. DO j = j_start,j_end
  1414. DO k = kts,ktf
  1415. DO i = i_start,i_end
  1416. lvar(i,k,j) = lvar(i,k,j) + rvar(i,k,j)
  1417. ENDDO
  1418. ENDDO
  1419. ENDDO
  1420. END SUBROUTINE add_a2a
  1421. SUBROUTINE add_a2a_ph(lvar,rvar,config_flags, &
  1422. ids,ide, jds, jde, kds, kde, &
  1423. ims, ime, jms, jme, kms, kme, &
  1424. its, ite, jts, jte, kts, kte )
  1425. !------------------------------------------------------------
  1426. IMPLICIT NONE
  1427. !------------------------------------------------------------
  1428. TYPE(grid_config_rec_type), INTENT(IN) :: config_flags
  1429. INTEGER , INTENT(IN ) :: ids, ide, jds, jde, kds, kde, &
  1430. ims, ime, jms, jme, kms, kme, &
  1431. its, ite, jts, jte, kts, kte
  1432. REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(IN ) ::&
  1433. rvar
  1434. REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(INOUT) ::&
  1435. lvar
  1436. ! LOCAL VARS
  1437. INTEGER :: i,j,k,i_start,i_end,j_start,j_end
  1438. i_start = its
  1439. i_end = MIN(ite,ide-1)
  1440. j_start = jts
  1441. j_end = MIN(jte,jde-1)
  1442. IF ( config_flags%specified .or. &
  1443. config_flags%nested) i_start = MAX(ids+1,its)
  1444. IF ( config_flags%specified .or. &
  1445. config_flags%nested) i_end = MIN(ide-2,ite)
  1446. IF ( config_flags%specified .or. &
  1447. config_flags%nested) j_start = MAX(jds+1,jts)
  1448. IF ( config_flags%specified .or. &
  1449. config_flags%nested) j_end = MIN(jde-2,jte)
  1450. IF ( config_flags%periodic_x ) i_start = its
  1451. IF ( config_flags%periodic_x ) i_end = MIN( ite, ide-1 )
  1452. DO j = j_start,j_end
  1453. DO k = kts,kte
  1454. DO i = i_start,i_end
  1455. lvar(i,k,j) = lvar(i,k,j) + rvar(i,k,j)
  1456. ENDDO
  1457. ENDDO
  1458. ENDDO
  1459. END SUBROUTINE add_a2a_ph
  1460. !------------------------------------------------------------
  1461. SUBROUTINE add_a2c_u(lvar,rvar,config_flags, &
  1462. ids,ide, jds, jde, kds, kde, &
  1463. ims, ime, jms, jme, kms, kme, &
  1464. its, ite, jts, jte, kts, kte )
  1465. !------------------------------------------------------------
  1466. !------------------------------------------------------------
  1467. IMPLICIT NONE
  1468. !------------------------------------------------------------
  1469. TYPE(grid_config_rec_type), INTENT(IN ) :: config_flags
  1470. INTEGER , INTENT(IN ) :: ids, ide, jds, jde, kds, kde, &
  1471. ims, ime, jms, jme, kms, kme, &
  1472. its, ite, jts, jte, kts, kte
  1473. REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(IN ) ::&
  1474. rvar
  1475. REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(INOUT) ::&
  1476. lvar
  1477. ! LOCAL VARS
  1478. INTEGER :: i,j,k,i_start,i_end,j_start,j_end,ktf
  1479. ktf=min(kte,kde-1)
  1480. i_start = its
  1481. i_end = ite
  1482. j_start = jts
  1483. j_end = MIN(jte,jde-1)
  1484. IF ( config_flags%specified .or. &
  1485. config_flags%nested) i_start = MAX(ids+1,its)
  1486. IF ( config_flags%specified .or. &
  1487. config_flags%nested) i_end = MIN(ide-1,ite)
  1488. IF ( config_flags%specified .or. &
  1489. config_flags%nested) j_start = MAX(jds+1,jts)
  1490. IF ( config_flags%specified .or. &
  1491. config_flags%nested) j_end = MIN(jde-2,jte)
  1492. IF ( config_flags%periodic_x ) i_start = its
  1493. IF ( config_flags%periodic_x ) i_end = ite
  1494. DO j = j_start,j_end
  1495. DO k = kts,ktf
  1496. DO i = i_start,i_end
  1497. lvar(i,k,j) = lvar(i,k,j) + &
  1498. 0.5*(rvar(i,k,j)+rvar(i-1,k,j))
  1499. ENDDO
  1500. ENDDO
  1501. ENDDO
  1502. END SUBROUTINE add_a2c_u
  1503. !------------------------------------------------------------
  1504. SUBROUTINE add_a2c_v(lvar,rvar,config_flags, &
  1505. ids,ide, jds, jde, kds, kde, &
  1506. ims, ime, jms, jme, kms, kme, &
  1507. its, ite, jts, jte, kts, kte )
  1508. !------------------------------------------------------------
  1509. !------------------------------------------------------------
  1510. IMPLICIT NONE
  1511. !------------------------------------------------------------
  1512. TYPE(grid_config_rec_type), INTENT(IN ) :: config_flags
  1513. INTEGER , INTENT(IN ) :: ids, ide, jds, jde, kds, kde, &
  1514. ims, ime, jms, jme, kms, kme, &
  1515. its, ite, jts, jte, kts, kte
  1516. REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(IN ) ::&
  1517. rvar
  1518. REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(INOUT) ::&
  1519. lvar
  1520. ! LOCAL VARS
  1521. INTEGER :: i,j,k,i_start,i_end,j_start,j_end,ktf
  1522. ktf=min(kte,kde-1)
  1523. i_start = its
  1524. i_end = MIN(ite,ide-1)
  1525. j_start = jts
  1526. j_end = jte
  1527. IF ( config_flags%specified .or. &
  1528. config_flags%nested) i_start = MAX(ids+1,its)
  1529. IF ( config_flags%specified .or. &
  1530. config_flags%nested) i_end = MIN(ide-2,ite)
  1531. IF ( config_flags%specified .or. &
  1532. config_flags%nested) j_start = MAX(jds+1,jts)
  1533. IF ( config_flags%specified .or. &
  1534. config_flags%nested) j_end = MIN(jde-1,jte)
  1535. IF ( config_flags%periodic_x ) i_start = its
  1536. IF ( config_flags%periodic_x ) i_end = MIN( ite, ide-1 )
  1537. DO j = j_start,j_end
  1538. DO k = kts,kte
  1539. DO i = i_start,i_end
  1540. lvar(i,k,j) = lvar(i,k,j) + &
  1541. 0.5*(rvar(i,k,j)+rvar(i,k,j-1))
  1542. ENDDO
  1543. ENDDO
  1544. ENDDO
  1545. END SUBROUTINE add_a2c_v
  1546. !------------------------------------------------------------
  1547. SUBROUTINE add_c2c_u(lvar,rvar,config_flags, &
  1548. ids,ide, jds, jde, kds, kde, &
  1549. ims, ime, jms, jme, kms, kme, &
  1550. its, ite, jts, jte, kts, kte )
  1551. !------------------------------------------------------------
  1552. !------------------------------------------------------------
  1553. IMPLICIT NONE
  1554. !------------------------------------------------------------
  1555. TYPE(grid_config_rec_type), INTENT(IN ) :: config_flags
  1556. INTEGER , INTENT(IN ) :: ids, ide, jds, jde, kds, kde, &
  1557. ims, ime, jms, jme, kms, kme, &
  1558. its, ite, jts, jte, kts, kte
  1559. REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(IN ) ::&
  1560. rvar
  1561. REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(INOUT) ::&
  1562. lvar
  1563. ! LOCAL VARS
  1564. INTEGER :: i,j,k,i_start,i_end,j_start,j_end,ktf
  1565. ktf=min(kte,kde-1)
  1566. i_start = its
  1567. i_end = ite
  1568. j_start = jts
  1569. j_end = MIN(jte,jde-1)
  1570. IF ( config_flags%specified .or. &
  1571. config_flags%nested) i_start = MAX(ids+1,its)
  1572. IF ( config_flags%specified .or. &
  1573. config_flags%nested) i_end = MIN(ide-1,ite)
  1574. IF ( config_flags%specified .or. &
  1575. config_flags%nested) j_start = MAX(jds+1,jts)
  1576. IF ( config_flags%specified .or. &
  1577. config_flags%nested) j_end = MIN(jde-2,jte)
  1578. ! write(*,'(a,6i4)') 'call c2cu, i_start, i_end, j_start, j_end=', i_start, i_end, j_start, j_end
  1579. DO j = j_start,j_end
  1580. DO k = kts,ktf
  1581. DO i = i_start,i_end
  1582. lvar(i,k,j) = lvar(i,k,j) + rvar(i,k,j)
  1583. ENDDO
  1584. ENDDO
  1585. ENDDO
  1586. END SUBROUTINE add_c2c_u
  1587. SUBROUTINE add_c2c_v(lvar,rvar,config_flags, &
  1588. ids,ide, jds, jde, kds, kde, &
  1589. ims, ime, jms, jme, kms, kme, &
  1590. its, ite, jts, jte, kts, kte )
  1591. !------------------------------------------------------------
  1592. !------------------------------------------------------------
  1593. IMPLICIT NONE
  1594. !------------------------------------------------------------
  1595. TYPE(grid_config_rec_type), INTENT(IN ) :: config_flags
  1596. INTEGER , INTENT(IN ) :: ids, ide, jds, jde, kds, kde, &
  1597. ims, ime, jms, jme, kms, kme, &
  1598. its, ite, jts, jte, kts, kte
  1599. REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(IN ) ::&
  1600. rvar
  1601. REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(INOUT) ::&
  1602. lvar
  1603. ! LOCAL VARS
  1604. INTEGER :: i,j,k,i_start,i_end,j_start,j_end,ktf
  1605. ktf=min(kte,kde-1)
  1606. i_start = its
  1607. i_end = MIN(ite,ide-1)
  1608. j_start = jts
  1609. j_end = jte
  1610. IF ( config_flags%specified .or. &
  1611. config_flags%nested) i_start = MAX(ids+1,its)
  1612. IF ( config_flags%specified .or. &
  1613. config_flags%nested) i_end = MIN(ide-2,ite)
  1614. IF ( config_flags%specified .or. &
  1615. config_flags%nested) j_start = MAX(jds+1,jts)
  1616. IF ( config_flags%specified .or. &
  1617. config_flags%nested) j_end = MIN(jde-1,jte)
  1618. ! write(*,'(a,6i4)') 'call c2cv, i_start, i_end, j_start, j_end=', i_start, i_end, j_start, j_end
  1619. DO j = j_start,j_end
  1620. DO k = kts,kte
  1621. DO i = i_start,i_end
  1622. lvar(i,k,j) = lvar(i,k,j) + rvar(i,k,j)
  1623. ENDDO
  1624. ENDDO
  1625. ENDDO
  1626. END SUBROUTINE add_c2c_v
  1627. #endif
  1628. END MODULE module_physics_addtendc