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