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

/wrfv2_fire/dyn_em/module_bc_em.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 1199 lines | 853 code | 197 blank | 149 comment | 11 complexity | e54e2d5b2cf9585faac56925e27bb28a 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:BOUNDARY
  2. !
  3. MODULE module_bc_em
  4. USE module_bc
  5. USE module_configure
  6. USE module_wrf_error
  7. CONTAINS
  8. !------------------------------------------------------------------------
  9. SUBROUTINE spec_bdyupdate_ph( ph_save, field, &
  10. field_tend, mu_tend, muts, dt, &
  11. variable_in, config_flags, &
  12. spec_zone, &
  13. ids,ide, jds,jde, kds,kde, & ! domain dims
  14. ims,ime, jms,jme, kms,kme, & ! memory dims
  15. ips,ipe, jps,jpe, kps,kpe, & ! patch dims
  16. its,ite, jts,jte, kts,kte )
  17. ! This subroutine adds the tendencies in the boundary specified region.
  18. ! spec_zone is the width of the outer specified b.c.s that are set here.
  19. ! (JD August 2000)
  20. IMPLICIT NONE
  21. INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde
  22. INTEGER, INTENT(IN ) :: ims,ime, jms,jme, kms,kme
  23. INTEGER, INTENT(IN ) :: ips,ipe, jps,jpe, kps,kpe
  24. INTEGER, INTENT(IN ) :: its,ite, jts,jte, kts,kte
  25. INTEGER, INTENT(IN ) :: spec_zone
  26. CHARACTER, INTENT(IN ) :: variable_in
  27. REAL, INTENT(IN ) :: dt
  28. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), INTENT(INOUT) :: field
  29. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), INTENT(IN ) :: field_tend, ph_save
  30. REAL, DIMENSION( ims:ime , jms:jme ), INTENT(IN ) :: mu_tend, muts
  31. TYPE( grid_config_rec_type ) config_flags
  32. CHARACTER :: variable
  33. INTEGER :: i, j, k, ibs, ibe, jbs, jbe, itf, jtf, ktf
  34. INTEGER :: b_dist, b_limit
  35. ! Local array
  36. REAL, DIMENSION( its:ite , jts:jte ) :: mu_old
  37. LOGICAL :: periodic_x
  38. periodic_x = config_flags%periodic_x
  39. variable = variable_in
  40. IF (variable == 'U') variable = 'u'
  41. IF (variable == 'V') variable = 'v'
  42. IF (variable == 'M') variable = 'm'
  43. IF (variable == 'H') variable = 'h'
  44. ibs = ids
  45. ibe = ide-1
  46. itf = min(ite,ide-1)
  47. jbs = jds
  48. jbe = jde-1
  49. jtf = min(jte,jde-1)
  50. ktf = kde-1
  51. IF (variable == 'u') ibe = ide
  52. IF (variable == 'u') itf = min(ite,ide)
  53. IF (variable == 'v') jbe = jde
  54. IF (variable == 'v') jtf = min(jte,jde)
  55. IF (variable == 'm') ktf = kte
  56. IF (variable == 'h') ktf = kte
  57. IF (jts - jbs .lt. spec_zone) THEN
  58. ! Y-start boundary
  59. DO j = jts, min(jtf,jbs+spec_zone-1)
  60. b_dist = j - jbs
  61. b_limit = b_dist
  62. IF(periodic_x)b_limit = 0
  63. DO k = kts, ktf
  64. DO i = max(its,b_limit+ibs), min(itf,ibe-b_limit)
  65. mu_old(i,j) = muts(i,j) - dt*mu_tend(i,j)
  66. field(i,k,j) = field(i,k,j)*mu_old(i,j)/muts(i,j) + &
  67. dt*field_tend(i,k,j)/muts(i,j) + &
  68. ph_save(i,k,j)*(mu_old(i,j)/muts(i,j) - 1.)
  69. ENDDO
  70. ENDDO
  71. ENDDO
  72. ENDIF
  73. IF (jbe - jtf .lt. spec_zone) THEN
  74. ! Y-end boundary
  75. DO j = max(jts,jbe-spec_zone+1), jtf
  76. b_dist = jbe - j
  77. b_limit = b_dist
  78. IF(periodic_x)b_limit = 0
  79. DO k = kts, ktf
  80. DO i = max(its,b_limit+ibs), min(itf,ibe-b_limit)
  81. mu_old(i,j) = muts(i,j) - dt*mu_tend(i,j)
  82. field(i,k,j) = field(i,k,j)*mu_old(i,j)/muts(i,j) + &
  83. dt*field_tend(i,k,j)/muts(i,j) + &
  84. ph_save(i,k,j)*(mu_old(i,j)/muts(i,j) - 1.)
  85. ENDDO
  86. ENDDO
  87. ENDDO
  88. ENDIF
  89. IF(.NOT.periodic_x)THEN
  90. IF (its - ibs .lt. spec_zone) THEN
  91. ! X-start boundary
  92. DO i = its, min(itf,ibs+spec_zone-1)
  93. b_dist = i - ibs
  94. DO k = kts, ktf
  95. DO j = max(jts,b_dist+jbs+1), min(jtf,jbe-b_dist-1)
  96. mu_old(i,j) = muts(i,j) - dt*mu_tend(i,j)
  97. field(i,k,j) = field(i,k,j)*mu_old(i,j)/muts(i,j) + &
  98. dt*field_tend(i,k,j)/muts(i,j) + &
  99. ph_save(i,k,j)*(mu_old(i,j)/muts(i,j) - 1.)
  100. ENDDO
  101. ENDDO
  102. ENDDO
  103. ENDIF
  104. IF (ibe - itf .lt. spec_zone) THEN
  105. ! X-end boundary
  106. DO i = max(its,ibe-spec_zone+1), itf
  107. b_dist = ibe - i
  108. DO k = kts, ktf
  109. DO j = max(jts,b_dist+jbs+1), min(jtf,jbe-b_dist-1)
  110. mu_old(i,j) = muts(i,j) - dt*mu_tend(i,j)
  111. field(i,k,j) = field(i,k,j)*mu_old(i,j)/muts(i,j) + &
  112. dt*field_tend(i,k,j)/muts(i,j) + &
  113. ph_save(i,k,j)*(mu_old(i,j)/muts(i,j) - 1.)
  114. ENDDO
  115. ENDDO
  116. ENDDO
  117. ENDIF
  118. ENDIF
  119. END SUBROUTINE spec_bdyupdate_ph
  120. !------------------------------------------------------------------------
  121. SUBROUTINE relax_bdy_dry ( config_flags, &
  122. ru_tendf, rv_tendf, ph_tendf, t_tendf, &
  123. rw_tendf, mu_tend, &
  124. ru, rv, ph, t, &
  125. w, mu, mut, &
  126. u_bxs,u_bxe,u_bys,u_bye, &
  127. v_bxs,v_bxe,v_bys,v_bye, &
  128. ph_bxs,ph_bxe,ph_bys,ph_bye, &
  129. t_bxs,t_bxe,t_bys,t_bye, &
  130. w_bxs,w_bxe,w_bys,w_bye, &
  131. mu_bxs,mu_bxe,mu_bys,mu_bye, &
  132. u_btxs,u_btxe,u_btys,u_btye, &
  133. v_btxs,v_btxe,v_btys,v_btye, &
  134. ph_btxs,ph_btxe,ph_btys,ph_btye, &
  135. t_btxs,t_btxe,t_btys,t_btye, &
  136. w_btxs,w_btxe,w_btys,w_btye, &
  137. mu_btxs,mu_btxe,mu_btys,mu_btye, &
  138. spec_bdy_width, spec_zone, relax_zone, &
  139. dtbc, fcx, gcx, &
  140. ids,ide, jds,jde, kds,kde, & ! domain dims
  141. ims,ime, jms,jme, kms,kme, & ! memory dims
  142. ips,ipe, jps,jpe, kps,kpe, & ! patch dims
  143. its, ite, jts, jte, kts, kte)
  144. IMPLICIT NONE
  145. ! Input data.
  146. TYPE( grid_config_rec_type ) config_flags
  147. INTEGER , INTENT(IN ) :: ids, ide, jds, jde, kds, kde, &
  148. ims, ime, jms, jme, kms, kme, &
  149. ips, ipe, jps, jpe, kps, kpe, &
  150. its, ite, jts, jte, kts, kte
  151. INTEGER , INTENT(IN ) :: spec_bdy_width, spec_zone, relax_zone
  152. REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(IN ) :: ru, &
  153. rv, &
  154. ph, &
  155. w, &
  156. t
  157. REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(IN ) :: mu , &
  158. mut
  159. REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(INOUT) :: ru_tendf, &
  160. rv_tendf, &
  161. ph_tendf, &
  162. rw_tendf, &
  163. t_tendf
  164. REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: mu_tend
  165. REAL , DIMENSION( spec_bdy_width) , INTENT(IN ) :: fcx, gcx
  166. REAL, DIMENSION( jms:jme , kds:kde , spec_bdy_width ), INTENT(IN ) :: u_bxs,u_bxe, &
  167. v_bxs,v_bxe, &
  168. ph_bxs,ph_bxe, &
  169. w_bxs,w_bxe, &
  170. t_bxs,t_bxe, &
  171. u_btxs,u_btxe, &
  172. v_btxs,v_btxe, &
  173. ph_btxs,ph_btxe, &
  174. w_btxs,w_btxe, &
  175. t_btxs,t_btxe
  176. REAL, DIMENSION( ims:ime , kds:kde , spec_bdy_width ), INTENT(IN ) :: u_bys,u_bye, &
  177. v_bys,v_bye, &
  178. ph_bys,ph_bye, &
  179. w_bys,w_bye, &
  180. t_bys,t_bye, &
  181. u_btys,u_btye, &
  182. v_btys,v_btye, &
  183. ph_btys,ph_btye, &
  184. w_btys,w_btye, &
  185. t_btys,t_btye
  186. REAL, DIMENSION( jms:jme , 1:1 , spec_bdy_width ), INTENT(IN ) :: mu_bxs,mu_bxe, &
  187. mu_btxs,mu_btxe
  188. REAL, DIMENSION( ims:ime , 1:1 , spec_bdy_width ), INTENT(IN ) :: mu_bys,mu_bye, &
  189. mu_btys,mu_btye
  190. REAL, INTENT(IN ) :: dtbc
  191. ! changed to tile dimensions, 20090923, JM
  192. REAL , DIMENSION( its-1:ite+1 , kts:kte, jts-1:jte+1 ) :: rfield
  193. INTEGER :: i_start, i_end, j_start, j_end, i, j, k
  194. CALL relax_bdytend ( ru, ru_tendf, &
  195. u_bxs,u_bxe,u_bys,u_bye,u_btxs,u_btxe,u_btys,u_btye, &
  196. 'u' , config_flags, &
  197. spec_bdy_width, spec_zone, relax_zone, &
  198. dtbc, fcx, gcx, &
  199. ids,ide, jds,jde, kds,kde, & ! domain dims
  200. ims,ime, jms,jme, kms,kme, & ! memory dims
  201. ips,ipe, jps,jpe, kps,kpe, & ! patch dims
  202. its,ite, jts,jte, kts,kte )
  203. CALL relax_bdytend ( rv, rv_tendf, &
  204. v_bxs,v_bxe,v_bys,v_bye,v_btxs,v_btxe,v_btys,v_btye, &
  205. 'v' , config_flags, &
  206. spec_bdy_width, spec_zone, relax_zone, &
  207. dtbc, fcx, gcx, &
  208. ids,ide, jds,jde, kds,kde, & ! domain dims
  209. ims,ime, jms,jme, kms,kme, & ! memory dims
  210. ips,ipe, jps,jpe, kps,kpe, & ! patch dims
  211. its,ite, jts,jte, kts,kte )
  212. ! rfield will be calculated beyond tile limits because relax_bdytend
  213. ! requires a 5-point stencil, and this avoids need for inter-tile/patch
  214. ! communication here
  215. i_start = max(its-1, ids)
  216. i_end = min(ite+1, ide-1)
  217. j_start = max(jts-1, jds)
  218. j_end = min(jte+1, jde-1)
  219. DO j=j_start,j_end
  220. DO k=kts,kte
  221. DO i=i_start,i_end
  222. rfield(i,k,j) = ph(i,k,j)*mut(i,j)
  223. ENDDO
  224. ENDDO
  225. ENDDO
  226. CALL relax_bdytend_tile ( rfield, ph_tendf, &
  227. ph_bxs,ph_bxe,ph_bys,ph_bye, ph_btxs,ph_btxe,ph_btys,ph_btye, &
  228. 'h' , config_flags, &
  229. spec_bdy_width, spec_zone, relax_zone, &
  230. dtbc, fcx, gcx, &
  231. ids,ide, jds,jde, kds,kde, & ! domain dims
  232. ims,ime, jms,jme, kms,kme, & ! memory dims
  233. ips,ipe, jps,jpe, kps,kpe, & ! patch dims
  234. its,ite, jts,jte, kts,kte, &
  235. its-1, ite+1, jts-1,jte+1,kts,kte ) ! dims of first argument
  236. DO j=j_start,j_end
  237. DO k=kts,kte-1
  238. DO i=i_start,i_end
  239. rfield(i,k,j) = t(i,k,j)*mut(i,j)
  240. ENDDO
  241. ENDDO
  242. ENDDO
  243. CALL relax_bdytend_tile ( rfield, t_tendf, &
  244. t_bxs,t_bxe,t_bys,t_bye, t_btxs,t_btxe,t_btys,t_btye, &
  245. 't' , config_flags, &
  246. spec_bdy_width, spec_zone, relax_zone, &
  247. dtbc, fcx, gcx, &
  248. ids,ide, jds,jde, kds,kde, & ! domain dims
  249. ims,ime, jms,jme, kms,kme, & ! memory dims
  250. ips,ipe, jps,jpe, kps,kpe, & ! patch dims
  251. its,ite, jts,jte, kts,kte, &
  252. its-1, ite+1, jts-1,jte+1,kts,kte ) ! dims of first argument
  253. CALL relax_bdytend ( mu, mu_tend, &
  254. mu_bxs,mu_bxe,mu_bys,mu_bye, mu_btxs,mu_btxe,mu_btys,mu_btye, &
  255. 'm' , config_flags, &
  256. spec_bdy_width, spec_zone, relax_zone, &
  257. dtbc, fcx, gcx, &
  258. ids,ide, jds,jde, 1 ,1 , & ! domain dims
  259. ims,ime, jms,jme, 1 ,1 , & ! memory dims
  260. ips,ipe, jps,jpe, 1 ,1 , & ! patch dims
  261. its,ite, jts,jte, 1 ,1 )
  262. IF( config_flags%nested) THEN
  263. i_start = max(its-1, ids)
  264. i_end = min(ite+1, ide-1)
  265. j_start = max(jts-1, jds)
  266. j_end = min(jte+1, jde-1)
  267. DO j=j_start,j_end
  268. DO k=kts,kte
  269. DO i=i_start,i_end
  270. rfield(i,k,j) = w(i,k,j)*mut(i,j)
  271. ENDDO
  272. ENDDO
  273. ENDDO
  274. CALL relax_bdytend_tile ( rfield, rw_tendf, &
  275. w_bxs,w_bxe,w_bys,w_bye, w_btxs,w_btxe,w_btys,w_btye, &
  276. 'h' , config_flags, &
  277. spec_bdy_width, spec_zone, relax_zone, &
  278. dtbc, fcx, gcx, &
  279. ids,ide, jds,jde, kds,kde, & ! domain dims
  280. ims,ime, jms,jme, kms,kme, & ! memory dims
  281. ips,ipe, jps,jpe, kps,kpe, & ! patch dims
  282. its,ite, jts,jte, kts,kte, &
  283. its-1, ite+1, jts-1,jte+1,kts,kte ) ! dims of first argument
  284. END IF
  285. END SUBROUTINE relax_bdy_dry
  286. !------------------------------------------------------------------------
  287. SUBROUTINE relax_bdy_scalar ( scalar_tend, &
  288. scalar, mu, &
  289. scalar_bxs,scalar_bxe,scalar_bys,scalar_bye, &
  290. scalar_btxs,scalar_btxe,scalar_btys,scalar_btye, &
  291. spec_bdy_width, spec_zone, relax_zone, &
  292. dtbc, fcx, gcx, &
  293. config_flags, &
  294. ids,ide, jds,jde, kds,kde, & ! domain dims
  295. ims,ime, jms,jme, kms,kme, & ! memory dims
  296. ips,ipe, jps,jpe, kps,kpe, & ! patch dims
  297. its, ite, jts, jte, kts, kte)
  298. IMPLICIT NONE
  299. ! Input data.
  300. TYPE( grid_config_rec_type ) config_flags
  301. INTEGER , INTENT(IN ) :: ids, ide, jds, jde, kds, kde, &
  302. ims, ime, jms, jme, kms, kme, &
  303. ips, ipe, jps, jpe, kps, kpe, &
  304. its, ite, jts, jte, kts, kte
  305. INTEGER , INTENT(IN ) :: spec_bdy_width, spec_zone, relax_zone
  306. REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(IN ) :: scalar
  307. REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(IN ) :: mu
  308. REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(INOUT) :: scalar_tend
  309. REAL , DIMENSION( spec_bdy_width) , INTENT(IN ) :: fcx, gcx
  310. REAL, DIMENSION( jms:jme , kds:kde , spec_bdy_width ), INTENT(IN ) :: scalar_bxs,scalar_bxe, &
  311. scalar_btxs,scalar_btxe
  312. REAL, DIMENSION( ims:ime , kds:kde , spec_bdy_width ), INTENT(IN ) :: scalar_bys,scalar_bye, &
  313. scalar_btys,scalar_btye
  314. REAL, INTENT(IN ) :: dtbc
  315. !Local
  316. INTEGER :: i,j,k, i_start, i_end, j_start, j_end
  317. REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) :: rscalar
  318. ! rscalar will be calculated beyond tile limits because relax_bdytend
  319. ! requires a 5-point stencil, and this avoids need for inter-tile/patch
  320. ! communication here
  321. i_start = max(its-1, ids)
  322. i_end = min(ite+1, ide-1)
  323. j_start = max(jts-1, jds)
  324. j_end = min(jte+1, jde-1)
  325. DO j=j_start,j_end
  326. DO k=kts,min(kte,kde-1)
  327. DO i=i_start,i_end
  328. rscalar(i,k,j) = scalar(i,k,j)*mu(i,j)
  329. ENDDO
  330. ENDDO
  331. ENDDO
  332. CALL relax_bdytend (rscalar, scalar_tend, &
  333. scalar_bxs,scalar_bxe,scalar_bys,scalar_bye, scalar_btxs,scalar_btxe,scalar_btys,scalar_btye, &
  334. 'q' , config_flags, &
  335. spec_bdy_width, spec_zone, relax_zone, &
  336. dtbc, fcx, gcx, &
  337. ids,ide, jds,jde, kds,kde, & ! domain dims
  338. ims,ime, jms,jme, kms,kme, & ! memory dims
  339. ips,ipe, jps,jpe, kps,kpe, & ! patch dims
  340. its,ite, jts,jte, kts,kte )
  341. END SUBROUTINE relax_bdy_scalar
  342. !------------------------------------------------------------------------
  343. SUBROUTINE spec_bdy_dry ( config_flags, &
  344. ru_tend, rv_tend, ph_tend, t_tend, &
  345. rw_tend, mu_tend, &
  346. u_bxs,u_bxe,u_bys,u_bye, &
  347. v_bxs,v_bxe,v_bys,v_bye, &
  348. ph_bxs,ph_bxe,ph_bys,ph_bye, &
  349. t_bxs,t_bxe,t_bys,t_bye, &
  350. w_bxs,w_bxe,w_bys,w_bye, &
  351. mu_bxs,mu_bxe,mu_bys,mu_bye, &
  352. u_btxs,u_btxe,u_btys,u_btye, &
  353. v_btxs,v_btxe,v_btys,v_btye, &
  354. ph_btxs,ph_btxe,ph_btys,ph_btye, &
  355. t_btxs,t_btxe,t_btys,t_btye, &
  356. w_btxs,w_btxe,w_btys,w_btye, &
  357. mu_btxs,mu_btxe,mu_btys,mu_btye, &
  358. spec_bdy_width, spec_zone, &
  359. ids,ide, jds,jde, kds,kde, & ! domain dims
  360. ims,ime, jms,jme, kms,kme, & ! memory dims
  361. ips,ipe, jps,jpe, kps,kpe, & ! patch dims
  362. its, ite, jts, jte, kts, kte)
  363. IMPLICIT NONE
  364. ! Input data.
  365. TYPE( grid_config_rec_type ) config_flags
  366. INTEGER , INTENT(IN ) :: ids, ide, jds, jde, kds, kde, &
  367. ims, ime, jms, jme, kms, kme, &
  368. ips, ipe, jps, jpe, kps, kpe, &
  369. its, ite, jts, jte, kts, kte
  370. INTEGER , INTENT(IN ) :: spec_bdy_width, spec_zone
  371. REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(OUT ) :: ru_tend, &
  372. rv_tend, &
  373. ph_tend, &
  374. rw_tend, &
  375. t_tend
  376. REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(OUT ) :: mu_tend
  377. REAL, DIMENSION( jms:jme , kds:kde , spec_bdy_width ), INTENT(IN ) :: u_bxs,u_bxe, &
  378. v_bxs,v_bxe, &
  379. ph_bxs,ph_bxe, &
  380. w_bxs,w_bxe, &
  381. t_bxs,t_bxe, &
  382. u_btxs,u_btxe, &
  383. v_btxs,v_btxe, &
  384. ph_btxs,ph_btxe, &
  385. w_btxs,w_btxe, &
  386. t_btxs,t_btxe
  387. REAL, DIMENSION( ims:ime , kds:kde , spec_bdy_width ), INTENT(IN ) :: u_bys,u_bye, &
  388. v_bys,v_bye, &
  389. ph_bys,ph_bye, &
  390. w_bys,w_bye, &
  391. t_bys,t_bye, &
  392. u_btys,u_btye, &
  393. v_btys,v_btye, &
  394. ph_btys,ph_btye, &
  395. w_btys,w_btye, &
  396. t_btys,t_btye
  397. REAL, DIMENSION( jms:jme , 1:1 , spec_bdy_width ), INTENT(IN ) :: mu_bxs,mu_bxe, &
  398. mu_btxs,mu_btxe
  399. REAL, DIMENSION( ims:ime , 1:1 , spec_bdy_width ), INTENT(IN ) :: mu_bys,mu_bye, &
  400. mu_btys,mu_btye
  401. CALL spec_bdytend ( ru_tend, &
  402. u_bxs,u_bxe,u_bys,u_bye, u_btxs,u_btxe,u_btys,u_btye, &
  403. 'u' , config_flags, &
  404. spec_bdy_width, spec_zone, &
  405. ids,ide, jds,jde, kds,kde, & ! domain dims
  406. ims,ime, jms,jme, kms,kme, & ! memory dims
  407. ips,ipe, jps,jpe, kps,kpe, & ! patch dims
  408. its,ite, jts,jte, kts,kte )
  409. CALL spec_bdytend ( rv_tend, &
  410. v_bxs,v_bxe,v_bys,v_bye, v_btxs,v_btxe,v_btys,v_btye, &
  411. 'v' , config_flags, &
  412. spec_bdy_width, spec_zone, &
  413. ids,ide, jds,jde, kds,kde, & ! domain dims
  414. ims,ime, jms,jme, kms,kme, & ! memory dims
  415. ips,ipe, jps,jpe, kps,kpe, & ! patch dims
  416. its,ite, jts,jte, kts,kte )
  417. CALL spec_bdytend ( ph_tend, &
  418. ph_bxs,ph_bxe,ph_bys,ph_bye, ph_btxs,ph_btxe,ph_btys,ph_btye, &
  419. 'h' , config_flags, &
  420. spec_bdy_width, spec_zone, &
  421. ids,ide, jds,jde, kds,kde, & ! domain dims
  422. ims,ime, jms,jme, kms,kme, & ! memory dims
  423. ips,ipe, jps,jpe, kps,kpe, & ! patch dims
  424. its,ite, jts,jte, kts,kte )
  425. CALL spec_bdytend ( t_tend, &
  426. t_bxs,t_bxe,t_bys,t_bye, t_btxs,t_btxe,t_btys,t_btye, &
  427. 't' , config_flags, &
  428. spec_bdy_width, spec_zone, &
  429. ids,ide, jds,jde, kds,kde, & ! domain dims
  430. ims,ime, jms,jme, kms,kme, & ! memory dims
  431. ips,ipe, jps,jpe, kps,kpe, & ! patch dims
  432. its,ite, jts,jte, kts,kte )
  433. CALL spec_bdytend ( mu_tend, &
  434. mu_bxs,mu_bxe,mu_bys,mu_bye, mu_btxs,mu_btxe,mu_btys,mu_btye, &
  435. 'm' , config_flags, &
  436. spec_bdy_width, spec_zone, &
  437. ids,ide, jds,jde, 1 ,1 , & ! domain dims
  438. ims,ime, jms,jme, 1 ,1 , & ! memory dims
  439. ips,ipe, jps,jpe, 1 ,1 , & ! patch dims
  440. its,ite, jts,jte, 1 ,1 )
  441. if(config_flags%nested) &
  442. CALL spec_bdytend ( rw_tend, &
  443. w_bxs,w_bxe,w_bys,w_bye, w_btxs,w_btxe,w_btys,w_btye, &
  444. 'h' , config_flags, &
  445. spec_bdy_width, spec_zone, &
  446. ids,ide, jds,jde, kds,kde, & ! domain dims
  447. ims,ime, jms,jme, kms,kme, & ! memory dims
  448. ips,ipe, jps,jpe, kps,kpe, & ! patch dims
  449. its,ite, jts,jte, kts,kte )
  450. END SUBROUTINE spec_bdy_dry
  451. !------------------------------------------------------------------------
  452. SUBROUTINE spec_bdy_scalar ( scalar_tend, &
  453. scalar_bxs,scalar_bxe,scalar_bys,scalar_bye, &
  454. scalar_btxs,scalar_btxe,scalar_btys,scalar_btye, &
  455. spec_bdy_width, spec_zone, &
  456. config_flags, &
  457. ids,ide, jds,jde, kds,kde, & ! domain dims
  458. ims,ime, jms,jme, kms,kme, & ! memory dims
  459. ips,ipe, jps,jpe, kps,kpe, & ! patch dims
  460. its, ite, jts, jte, kts, kte)
  461. IMPLICIT NONE
  462. ! Input data.
  463. TYPE( grid_config_rec_type ) config_flags
  464. INTEGER , INTENT(IN ) :: ids, ide, jds, jde, kds, kde, &
  465. ims, ime, jms, jme, kms, kme, &
  466. ips, ipe, jps, jpe, kps, kpe, &
  467. its, ite, jts, jte, kts, kte
  468. INTEGER , INTENT(IN ) :: spec_bdy_width, spec_zone
  469. REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(OUT ) :: scalar_tend
  470. REAL, DIMENSION( jms:jme , kds:kde , spec_bdy_width ), INTENT(IN ) :: scalar_bxs,scalar_bxe, &
  471. scalar_btxs,scalar_btxe
  472. REAL, DIMENSION( ims:ime , kds:kde , spec_bdy_width ), INTENT(IN ) :: scalar_bys,scalar_bye, &
  473. scalar_btys,scalar_btye
  474. !Local
  475. INTEGER :: i,j,k
  476. CALL spec_bdytend ( scalar_tend, &
  477. scalar_bxs,scalar_bxe,scalar_bys,scalar_bye, scalar_btxs,scalar_btxe,scalar_btys,scalar_btye, &
  478. 'q' , config_flags, &
  479. spec_bdy_width, spec_zone, &
  480. ids,ide, jds,jde, kds,kde, & ! domain dims
  481. ims,ime, jms,jme, kms,kme, & ! memory dims
  482. ips,ipe, jps,jpe, kps,kpe, & ! patch dims
  483. its,ite, jts,jte, kts,kte )
  484. END SUBROUTINE spec_bdy_scalar
  485. !------------------------------------------------------------------------
  486. SUBROUTINE set_phys_bc_dry_1( config_flags, u_1, u_2, v_1, v_2, &
  487. rw_1, rw_2, w_1, w_2, &
  488. t_1, t_2, tp_1, tp_2, pp, pip, &
  489. ids,ide, jds,jde, kds,kde, &
  490. ims,ime, jms,jme, kms,kme, &
  491. ips,ipe, jps,jpe, kps,kpe, &
  492. its,ite, jts,jte, kts,kte )
  493. !
  494. ! this is just a wraper to call the boundary condition routines
  495. ! for each variable
  496. !
  497. IMPLICIT NONE
  498. INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde
  499. INTEGER, INTENT(IN ) :: ims,ime, jms,jme, kms,kme
  500. INTEGER, INTENT(IN ) :: ips,ipe, jps,jpe, kps,kpe
  501. INTEGER, INTENT(IN ) :: its,ite, jts,jte, kts,kte
  502. TYPE( grid_config_rec_type ) config_flags
  503. REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) :: &
  504. u_1,u_2, v_1, v_2, rw_1, rw_2, w_1, w_2, &
  505. t_1, t_2, tp_1, tp_2, pp, pip
  506. CALL set_physical_bc3d( u_1 , 'u', config_flags, &
  507. ids, ide, jds, jde, kds, kde, &
  508. ims, ime, jms, jme, kms, kme, &
  509. ips, ipe, jps, jpe, kps, kpe, &
  510. its, ite, jts, jte, kts, kte )
  511. CALL set_physical_bc3d( u_2 , 'u', config_flags, &
  512. ids, ide, jds, jde, kds, kde, &
  513. ims, ime, jms, jme, kms, kme, &
  514. ips, ipe, jps, jpe, kps, kpe, &
  515. its, ite, jts, jte, kts, kte )
  516. CALL set_physical_bc3d( v_1 , 'v', config_flags, &
  517. ids, ide, jds, jde, kds, kde, &
  518. ims, ime, jms, jme, kms, kme, &
  519. ips, ipe, jps, jpe, kps, kpe, &
  520. its, ite, jts, jte, kts, kte )
  521. CALL set_physical_bc3d( v_2 , 'v', config_flags, &
  522. ids, ide, jds, jde, kds, kde, &
  523. ims, ime, jms, jme, kms, kme, &
  524. ips, ipe, jps, jpe, kps, kpe, &
  525. its, ite, jts, jte, kts, kte )
  526. CALL set_physical_bc3d( rw_1 , 'w', config_flags, &
  527. ids, ide, jds, jde, kds, kde, &
  528. ims, ime, jms, jme, kms, kme, &
  529. ips, ipe, jps, jpe, kps, kpe, &
  530. its, ite, jts, jte, kts, kte )
  531. CALL set_physical_bc3d( rw_2 , 'w', config_flags, &
  532. ids, ide, jds, jde, kds, kde, &
  533. ims, ime, jms, jme, kms, kme, &
  534. ips, ipe, jps, jpe, kps, kpe, &
  535. its, ite, jts, jte, kts, kte )
  536. CALL set_physical_bc3d( w_1 , 'w', config_flags, &
  537. ids, ide, jds, jde, kds, kde, &
  538. ims, ime, jms, jme, kms, kme, &
  539. ips, ipe, jps, jpe, kps, kpe, &
  540. its, ite, jts, jte, kts, kte )
  541. CALL set_physical_bc3d( w_2 , 'w', config_flags, &
  542. ids, ide, jds, jde, kds, kde, &
  543. ims, ime, jms, jme, kms, kme, &
  544. ips, ipe, jps, jpe, kps, kpe, &
  545. its, ite, jts, jte, kts, kte )
  546. CALL set_physical_bc3d( t_1, 'p', config_flags, &
  547. ids, ide, jds, jde, kds, kde, &
  548. ims, ime, jms, jme, kms, kme, &
  549. ips, ipe, jps, jpe, kps, kpe, &
  550. its, ite, jts, jte, kts, kte )
  551. CALL set_physical_bc3d( t_2, 'p', config_flags, &
  552. ids, ide, jds, jde, kds, kde, &
  553. ims, ime, jms, jme, kms, kme, &
  554. ips, ipe, jps, jpe, kps, kpe, &
  555. its, ite, jts, jte, kts, kte )
  556. CALL set_physical_bc3d( tp_1, 'p', config_flags, &
  557. ids, ide, jds, jde, kds, kde, &
  558. ims, ime, jms, jme, kms, kme, &
  559. ips, ipe, jps, jpe, kps, kpe, &
  560. its, ite, jts, jte, kts, kte )
  561. CALL set_physical_bc3d( tp_2, 'p', config_flags, &
  562. ids, ide, jds, jde, kds, kde, &
  563. ims, ime, jms, jme, kms, kme, &
  564. ips, ipe, jps, jpe, kps, kpe, &
  565. its, ite, jts, jte, kts, kte )
  566. CALL set_physical_bc3d( pp , 'p', config_flags, &
  567. ids, ide, jds, jde, kds, kde, &
  568. ims, ime, jms, jme, kms, kme, &
  569. ips, ipe, jps, jpe, kps, kpe, &
  570. its, ite, jts, jte, kts, kte )
  571. CALL set_physical_bc3d( pip , 'p', config_flags, &
  572. ids, ide, jds, jde, kds, kde, &
  573. ims, ime, jms, jme, kms, kme, &
  574. ips, ipe, jps, jpe, kps, kpe, &
  575. its, ite, jts, jte, kts, kte )
  576. END SUBROUTINE set_phys_bc_dry_1
  577. !--------------------------------------------------------------
  578. SUBROUTINE set_phys_bc_dry_2( config_flags, &
  579. u_1, u_2, v_1, v_2, w_1, w_2, &
  580. t_1, t_2, ph_1, ph_2, mu_1, mu_2, &
  581. ids,ide, jds,jde, kds,kde, &
  582. ims,ime, jms,jme, kms,kme, &
  583. ips,ipe, jps,jpe, kps,kpe, &
  584. its,ite, jts,jte, kts,kte )
  585. !
  586. ! this is just a wraper to call the boundary condition routines
  587. ! for each variable
  588. !
  589. IMPLICIT NONE
  590. TYPE( grid_config_rec_type ) config_flags
  591. INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde
  592. INTEGER, INTENT(IN ) :: ims,ime, jms,jme, kms,kme
  593. INTEGER, INTENT(IN ) :: ips,ipe, jps,jpe, kps,kpe
  594. INTEGER, INTENT(IN ) :: its,ite, jts,jte, kts,kte
  595. REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) :: &
  596. u_1, u_2, v_1, v_2, w_1, w_2, &
  597. t_1, t_2, ph_1, ph_2
  598. REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: &
  599. mu_1, mu_2
  600. CALL set_physical_bc3d( u_1, 'U', config_flags, &
  601. ids, ide, jds, jde, kds, kde, &
  602. ims, ime, jms, jme, kms, kme, &
  603. ips, ipe, jps, jpe, kps, kpe, &
  604. its, ite, jts, jte, kts, kte )
  605. CALL set_physical_bc3d( u_2, 'U', config_flags, &
  606. ids, ide, jds, jde, kds, kde, &
  607. ims, ime, jms, jme, kms, kme, &
  608. ips, ipe, jps, jpe, kps, kpe, &
  609. its, ite, jts, jte, kts, kte )
  610. CALL set_physical_bc3d( v_1 , 'V', config_flags, &
  611. ids, ide, jds, jde, kds, kde, &
  612. ims, ime, jms, jme, kms, kme, &
  613. ips, ipe, jps, jpe, kps, kpe, &
  614. its, ite, jts, jte, kts, kte )
  615. CALL set_physical_bc3d( v_2 , 'V', config_flags, &
  616. ids, ide, jds, jde, kds, kde, &
  617. ims, ime, jms, jme, kms, kme, &
  618. ips, ipe, jps, jpe, kps, kpe, &
  619. its, ite, jts, jte, kts, kte )
  620. CALL set_physical_bc3d( w_1, 'w', config_flags, &
  621. ids, ide, jds, jde, kds, kde, &
  622. ims, ime, jms, jme, kms, kme, &
  623. ips, ipe, jps, jpe, kps, kpe, &
  624. its, ite, jts, jte, kts, kte )
  625. CALL set_physical_bc3d( w_2, 'w', config_flags, &
  626. ids, ide, jds, jde, kds, kde, &
  627. ims, ime, jms, jme, kms, kme, &
  628. ips, ipe, jps, jpe, kps, kpe, &
  629. its, ite, jts, jte, kts, kte )
  630. CALL set_physical_bc3d( t_1, 'p', config_flags, &
  631. ids, ide, jds, jde, kds, kde, &
  632. ims, ime, jms, jme, kms, kme, &
  633. ips, ipe, jps, jpe, kps, kpe, &
  634. its, ite, jts, jte, kts, kte )
  635. CALL set_physical_bc3d( t_2, 'p', config_flags, &
  636. ids, ide, jds, jde, kds, kde, &
  637. ims, ime, jms, jme, kms, kme, &
  638. ips, ipe, jps, jpe, kps, kpe, &
  639. its, ite, jts, jte, kts, kte )
  640. CALL set_physical_bc3d( ph_1 , 'w', config_flags, &
  641. ids, ide, jds, jde, kds, kde, &
  642. ims, ime, jms, jme, kms, kme, &
  643. ips, ipe, jps, jpe, kps, kpe, &
  644. its, ite, jts, jte, kts, kte )
  645. CALL set_physical_bc3d( ph_2 , 'w', config_flags, &
  646. ids, ide, jds, jde, kds, kde, &
  647. ims, ime, jms, jme, kms, kme, &
  648. ips, ipe, jps, jpe, kps, kpe, &
  649. its, ite, jts, jte, kts, kte )
  650. CALL set_physical_bc2d( mu_1, 't', config_flags, &
  651. ids, ide, jds, jde, &
  652. ims, ime, jms, jme, &
  653. ips, ipe, jps, jpe, &
  654. its, ite, jts, jte )
  655. CALL set_physical_bc2d( mu_2, 't', config_flags, &
  656. ids, ide, jds, jde, &
  657. ims, ime, jms, jme, &
  658. ips, ipe, jps, jpe, &
  659. its, ite, jts, jte )
  660. END SUBROUTINE set_phys_bc_dry_2
  661. !------------------------------------------------------------------------
  662. SUBROUTINE set_phys_bc_smallstep_1( config_flags, ru_1, du, rv_1, dv, &
  663. ids,ide, jds,jde, kds,kde, &
  664. ims,ime, jms,jme, kms,kme, &
  665. ips,ipe, jps,jpe, kps,kpe, &
  666. its,ite, jts,jte, kts,kte )
  667. !
  668. ! this is just a wraper to call the boundary condition routines
  669. ! for each variable
  670. !
  671. IMPLICIT NONE
  672. INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde
  673. INTEGER, INTENT(IN ) :: ims,ime, jms,jme, kms,kme
  674. INTEGER, INTENT(IN ) :: ips,ipe, jps,jpe, kps,kpe
  675. INTEGER, INTENT(IN ) :: its,ite, jts,jte, kts,kte
  676. TYPE( grid_config_rec_type ) config_flags
  677. REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) :: &
  678. ru_1,du, rv_1, dv
  679. CALL set_physical_bc3d( ru_1 , 'u', config_flags, &
  680. ids, ide, jds, jde, kds, kde, &
  681. ims, ime, jms, jme, kms, kme, &
  682. ips, ipe, jps, jpe, kps, kpe, &
  683. its, ite, jts, jte, kts, kde )
  684. CALL set_physical_bc3d( du , 'u', config_flags, &
  685. ids, ide, jds, jde, kds, kde, &
  686. ims, ime, jms, jme, kms, kme, &
  687. ips, ipe, jps, jpe, kps, kpe, &
  688. its, ite, jts, jte, kts, kde )
  689. CALL set_physical_bc3d( rv_1 , 'v', config_flags, &
  690. ids, ide, jds, jde, kds, kde, &
  691. ims, ime, jms, jme, kms, kme, &
  692. ips, ipe, jps, jpe, kps, kpe, &
  693. its, ite, jts, jte, kts, kde )
  694. CALL set_physical_bc3d( dv , 'v', config_flags, &
  695. ids, ide, jds, jde, kds, kde, &
  696. ims, ime, jms, jme, kms, kme, &
  697. ips, ipe, jps, jpe, kps, kpe, &
  698. its, ite, jts, jte, kts, kde )
  699. END SUBROUTINE set_phys_bc_smallstep_1
  700. !-------------------------------------------------------------------
  701. SUBROUTINE rk_phys_bc_dry_1( config_flags, u, v, rw, w, &
  702. muu, muv, mut, php, alt, p, &
  703. ids,ide, jds,jde, kds,kde, &
  704. ims,ime, jms,jme, kms,kme, &
  705. ips,ipe, jps,jpe, kps,kpe, &
  706. its,ite, jts,jte, kts,kte )
  707. !
  708. ! this is just a wraper to call the boundary condition routines
  709. ! for each variable
  710. !
  711. IMPLICIT NONE
  712. INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde
  713. INTEGER, INTENT(IN ) :: ims,ime, jms,jme, kms,kme
  714. INTEGER, INTENT(IN ) :: ips,ipe, jps,jpe, kps,kpe
  715. INTEGER, INTENT(IN ) :: its,ite, jts,jte, kts,kte
  716. TYPE( grid_config_rec_type ) config_flags
  717. REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), &
  718. INTENT(INOUT) :: u, v, rw, w, php, alt, p
  719. REAL, DIMENSION( ims:ime, jms:jme ), &
  720. INTENT(INOUT) :: muu, muv, mut
  721. CALL set_physical_bc3d( u , 'u', config_flags, &
  722. ids, ide, jds, jde, kds, kde, &
  723. ims, ime, jms, jme, kms, kme, &
  724. ips, ipe, jps, jpe, kps, kpe, &
  725. its, ite, jts, jte, kts, kte )
  726. CALL set_physical_bc3d( v , 'v', config_flags, &
  727. ids, ide, jds, jde, kds, kde, &
  728. ims, ime, jms, jme, kms, kme, &
  729. ips, ipe, jps, jpe, kps, kpe, &
  730. its, ite, jts, jte, kts, kte )
  731. CALL set_physical_bc3d(rw , 'w', config_flags, &
  732. ids, ide, jds, jde, kds, kde, &
  733. ims, ime, jms, jme, kms, kme, &
  734. ips, ipe, jps, jpe, kps, kpe, &
  735. its, ite, jts, jte, kts, kte )
  736. CALL set_physical_bc3d( w , 'w', config_flags, &
  737. ids, ide, jds, jde, kds, kde, &
  738. ims, ime, jms, jme, kms, kme, &
  739. ips, ipe, jps, jpe, kps, kpe, &
  740. its, ite, jts, jte, kts, kte )
  741. CALL set_physical_bc3d( php , 'w', config_flags, &
  742. ids, ide, jds, jde, kds, kde, &
  743. ims, ime, jms, jme, kms, kme, &
  744. ips, ipe, jps, jpe, kps, kpe, &
  745. its, ite, jts, jte, kts, kte )
  746. CALL set_physical_bc3d( alt, 't', config_flags, &
  747. ids, ide, jds, jde, kds, kde, &
  748. ims, ime, jms, jme, kms, kme, &
  749. ips, ipe, jps, jpe, kps, kpe, &
  750. its, ite, jts, jte, kts, kte )
  751. CALL set_physical_bc3d( p, 'p', config_flags, &
  752. ids, ide, jds, jde, kds, kde, &
  753. ims, ime, jms, jme, kms, kme, &
  754. ips, ipe, jps, jpe, kps, kpe, &
  755. its, ite, jts, jte, kts, kte )
  756. CALL set_physical_bc2d( muu, 'u', config_flags, &
  757. ids, ide, jds, jde, &
  758. ims, ime, jms, jme, &
  759. ips, ipe, jps, jpe, &
  760. its, ite, jts, jte )
  761. CALL set_physical_bc2d( muv, 'v', config_flags, &
  762. ids, ide, jds, jde, &
  763. ims, ime, jms, jme, &
  764. ips, ipe, jps, jpe, &
  765. its, ite, jts, jte )
  766. CALL set_physical_bc2d( mut, 't', config_flags, &
  767. ids, ide, jds, jde, &
  768. ims, ime, jms, jme, &
  769. ips, ipe, jps, jpe, &
  770. its, ite, jts, jte )
  771. END SUBROUTINE rk_phys_bc_dry_1
  772. !------------------------------------------------------------------------
  773. SUBROUTINE rk_phys_bc_dry_2( config_flags, u, v, w, &
  774. t, ph, mu, &
  775. ids,ide, jds,jde, kds,kde, &
  776. ims,ime, jms,jme, kms,kme, &
  777. ips,ipe, jps,jpe, kps,kpe, &
  778. its,ite, jts,jte, kts,kte )
  779. !
  780. ! this is just a wraper to call the boundary condition routines
  781. ! for each variable
  782. !
  783. IMPLICIT NONE
  784. INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde
  785. INTEGER, INTENT(IN ) :: ims,ime, jms,jme, kms,kme
  786. INTEGER, INTENT(IN ) :: ips,ipe, jps,jpe, kps,kpe
  787. INTEGER, INTENT(IN ) :: its,ite, jts,jte, kts,kte
  788. TYPE( grid_config_rec_type ) config_flags
  789. REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) :: &
  790. u, v, w, t, ph
  791. REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: &
  792. mu
  793. CALL set_physical_bc3d( u , 'U', config_flags, &
  794. ids, ide, jds, jde, kds, kde, &
  795. ims, ime, jms, jme, kms, kme, &
  796. ips, ipe, jps, jpe, kps, kpe, &
  797. its, ite, jts, jte, kts, kte )
  798. CALL set_physical_bc3d( v , 'V', config_flags, &
  799. ids, ide, jds, jde, kds, kde, &
  800. ims, ime, jms, jme, kms, kme, &
  801. ips, ipe, jps, jpe, kps, kpe, &
  802. its, ite, jts, jte, kts, kte )
  803. CALL set_physical_bc3d( w , 'w', config_flags, &
  804. ids, ide, jds, jde, kds, kde, &
  805. ims, ime, jms, jme, kms, kme, &
  806. ips, ipe, jps, jpe, kps, kpe, &
  807. its, ite, jts, jte, kts, kte )
  808. CALL set_physical_bc3d( t, 'p', config_flags, &
  809. ids, ide, jds, jde, kds, kde, &
  810. ims, ime, jms, jme, kms, kme, &
  811. ips, ipe, jps, jpe, kps, kpe, &
  812. its, ite, jts, jte, kts, kte )
  813. CALL set_physical_bc3d( ph , 'w', config_flags, &
  814. ids, ide, jds, jde, kds, kde, &
  815. ims, ime, jms, jme, kms, kme

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