PageRenderTime 54ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/wrfv2_fire/dyn_em/module_avgflx_em.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 135 lines | 106 code | 24 blank | 5 comment | 2 complexity | c500545f68ad288c844bcc057fe8f541 MD5 | raw file
Possible License(s): AGPL-1.0
  1. !WRF:MODEL_LAYER:DYNAMICS
  2. !
  3. MODULE module_avgflx_em
  4. USE module_bc
  5. USE module_model_constants
  6. USE module_wrf_error
  7. CONTAINS
  8. !-------------------------------------------------------------------------------
  9. subroutine zero_avgflx(avgflx_rum,avgflx_rvm,avgflx_wwm, &
  10. & ids, ide, jds, jde, kds, kde, &
  11. & ims, ime, jms, jme, kms, kme, &
  12. & its, ite, jts, jte, kts, kte, do_cu, &
  13. & avgflx_cfu1,avgflx_cfd1,avgflx_dfu1,avgflx_efu1,avgflx_dfd1,avgflx_efd1 )
  14. IMPLICIT NONE
  15. INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
  16. ims, ime, jms, jme, kms, kme, &
  17. its, ite, jts, jte, kts, kte
  18. LOGICAL, INTENT(IN) :: do_cu
  19. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: &
  20. avgflx_rum,avgflx_rvm,avgflx_wwm
  21. REAL, OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: &
  22. avgflx_cfu1,avgflx_cfd1,avgflx_dfu1,avgflx_efu1,avgflx_dfd1,avgflx_efd1
  23. INTEGER :: i,j,k
  24. DO j=jts,jte
  25. DO k=kts,kte
  26. DO i=its,ite
  27. avgflx_rum(i,k,j) = 0.
  28. avgflx_rvm(i,k,j) = 0.
  29. avgflx_wwm(i,k,j) = 0.
  30. end DO
  31. end DO
  32. end DO
  33. if (do_cu .and. &
  34. & present(avgflx_cfu1) .and. present(avgflx_cfd1) .and. present(avgflx_dfu1) &
  35. & .and. present(avgflx_efu1) .and. present(avgflx_dfd1) .and. present(avgflx_efd1) ) then
  36. DO j=jts,jte
  37. DO k=kts,kte
  38. DO i=its,ite
  39. avgflx_cfu1(i,k,j) = 0.
  40. avgflx_cfd1(i,k,j) = 0.
  41. avgflx_dfu1(i,k,j) = 0.
  42. avgflx_efu1(i,k,j) = 0.
  43. avgflx_dfd1(i,k,j) = 0.
  44. avgflx_efd1(i,k,j) = 0.
  45. end DO
  46. end DO
  47. end DO
  48. end if
  49. return
  50. end subroutine zero_avgflx
  51. subroutine upd_avgflx(avgflx_count,avgflx_rum,avgflx_rvm,avgflx_wwm, &
  52. & ru_m, rv_m, ww_m, &
  53. & ids, ide, jds, jde, kds, kde, &
  54. & ims, ime, jms, jme, kms, kme, &
  55. & its, ite, jts, jte, kts, kte, do_cu, &
  56. & cfu1,cfd1,dfu1,efu1,dfd1,efd1, &
  57. & avgflx_cfu1,avgflx_cfd1,avgflx_dfu1,avgflx_efu1,avgflx_dfd1,avgflx_efd1 )
  58. IMPLICIT NONE
  59. INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
  60. ims, ime, jms, jme, kms, kme, &
  61. its, ite, jts, jte, kts, kte
  62. INTEGER , INTENT(IN) :: avgflx_count
  63. LOGICAL, INTENT(IN) :: do_cu
  64. REAL, DIMENSION(ims:ime, kms:kme, jms:jme) , INTENT(IN) :: ru_m, &
  65. rv_m, &
  66. ww_m
  67. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: &
  68. avgflx_rum,avgflx_rvm,avgflx_wwm
  69. REAL, OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(IN) :: &
  70. cfu1,cfd1,dfu1,efu1,dfd1,efd1
  71. REAL, OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: &
  72. avgflx_cfu1,avgflx_cfd1,avgflx_dfu1,avgflx_efu1,avgflx_dfd1,avgflx_efd1
  73. INTEGER :: i,j,k
  74. REAL :: local_count
  75. local_count = real(avgflx_count)
  76. DO j=jts,jte
  77. DO k=kts,kte
  78. DO i=its,ite
  79. avgflx_rum(i,k,j) = (local_count*avgflx_rum(i,k,j) + ru_m(i,k,j))/(local_count+1.)
  80. avgflx_rvm(i,k,j) = (local_count*avgflx_rvm(i,k,j) + rv_m(i,k,j))/(local_count+1.)
  81. avgflx_wwm(i,k,j) = (local_count*avgflx_wwm(i,k,j) + ww_m(i,k,j))/(local_count+1.)
  82. end DO
  83. end DO
  84. end DO
  85. if (do_cu .and. &
  86. & present(avgflx_cfu1) .and. present(avgflx_cfd1) .and. present(avgflx_dfu1) &
  87. & .and. present(avgflx_efu1) .and. present(avgflx_dfd1) .and. present(avgflx_efd1) &
  88. & .and. present(cfu1) .and. present(cfd1) .and. present(dfu1) &
  89. & .and. present(efu1) .and. present(dfd1) .and. present(efd1) ) then
  90. DO j=jts,jte
  91. DO k=kts,kte
  92. DO i=its,ite
  93. avgflx_cfu1(i,k,j) = (local_count*avgflx_cfu1(i,k,j) + &
  94. & cfu1(i,k,j)) / (local_count+1.)
  95. avgflx_cfd1(i,k,j) = (local_count*avgflx_cfd1(i,k,j) + &
  96. & cfd1(i,k,j)) / (local_count+1.)
  97. avgflx_dfu1(i,k,j) = (local_count*avgflx_dfu1(i,k,j) + &
  98. & dfu1(i,k,j)) / (local_count+1.)
  99. avgflx_efu1(i,k,j) = (local_count*avgflx_efu1(i,k,j) + &
  100. & efu1(i,k,j)) / (local_count+1.)
  101. avgflx_dfd1(i,k,j) = (local_count*avgflx_dfd1(i,k,j) + &
  102. & dfd1(i,k,j)) / (local_count+1.)
  103. avgflx_efd1(i,k,j) = (local_count*avgflx_efd1(i,k,j) + &
  104. & efd1(i,k,j)) / (local_count+1.)
  105. end DO
  106. end DO
  107. end DO
  108. end if
  109. return
  110. end subroutine upd_avgflx
  111. end MODULE module_avgflx_em