!WRF:MODEL_LAYER:DYNAMICS ! MODULE module_avgflx_em USE module_bc USE module_model_constants USE module_wrf_error CONTAINS !------------------------------------------------------------------------------- subroutine zero_avgflx(avgflx_rum,avgflx_rvm,avgflx_wwm, & & ids, ide, jds, jde, kds, kde, & & ims, ime, jms, jme, kms, kme, & & its, ite, jts, jte, kts, kte, do_cu, & & avgflx_cfu1,avgflx_cfd1,avgflx_dfu1,avgflx_efu1,avgflx_dfd1,avgflx_efd1 ) IMPLICIT NONE INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, & ims, ime, jms, jme, kms, kme, & its, ite, jts, jte, kts, kte LOGICAL, INTENT(IN) :: do_cu REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: & avgflx_rum,avgflx_rvm,avgflx_wwm REAL, OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: & avgflx_cfu1,avgflx_cfd1,avgflx_dfu1,avgflx_efu1,avgflx_dfd1,avgflx_efd1 INTEGER :: i,j,k DO j=jts,jte DO k=kts,kte DO i=its,ite avgflx_rum(i,k,j) = 0. avgflx_rvm(i,k,j) = 0. avgflx_wwm(i,k,j) = 0. end DO end DO end DO if (do_cu .and. & & present(avgflx_cfu1) .and. present(avgflx_cfd1) .and. present(avgflx_dfu1) & & .and. present(avgflx_efu1) .and. present(avgflx_dfd1) .and. present(avgflx_efd1) ) then DO j=jts,jte DO k=kts,kte DO i=its,ite avgflx_cfu1(i,k,j) = 0. avgflx_cfd1(i,k,j) = 0. avgflx_dfu1(i,k,j) = 0. avgflx_efu1(i,k,j) = 0. avgflx_dfd1(i,k,j) = 0. avgflx_efd1(i,k,j) = 0. end DO end DO end DO end if return end subroutine zero_avgflx subroutine upd_avgflx(avgflx_count,avgflx_rum,avgflx_rvm,avgflx_wwm, & & ru_m, rv_m, ww_m, & & ids, ide, jds, jde, kds, kde, & & ims, ime, jms, jme, kms, kme, & & its, ite, jts, jte, kts, kte, do_cu, & & cfu1,cfd1,dfu1,efu1,dfd1,efd1, & & avgflx_cfu1,avgflx_cfd1,avgflx_dfu1,avgflx_efu1,avgflx_dfd1,avgflx_efd1 ) IMPLICIT NONE INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, & ims, ime, jms, jme, kms, kme, & its, ite, jts, jte, kts, kte INTEGER , INTENT(IN) :: avgflx_count LOGICAL, INTENT(IN) :: do_cu REAL, DIMENSION(ims:ime, kms:kme, jms:jme) , INTENT(IN) :: ru_m, & rv_m, & ww_m REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: & avgflx_rum,avgflx_rvm,avgflx_wwm REAL, OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(IN) :: & cfu1,cfd1,dfu1,efu1,dfd1,efd1 REAL, OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: & avgflx_cfu1,avgflx_cfd1,avgflx_dfu1,avgflx_efu1,avgflx_dfd1,avgflx_efd1 INTEGER :: i,j,k REAL :: local_count local_count = real(avgflx_count) DO j=jts,jte DO k=kts,kte DO i=its,ite avgflx_rum(i,k,j) = (local_count*avgflx_rum(i,k,j) + ru_m(i,k,j))/(local_count+1.) avgflx_rvm(i,k,j) = (local_count*avgflx_rvm(i,k,j) + rv_m(i,k,j))/(local_count+1.) avgflx_wwm(i,k,j) = (local_count*avgflx_wwm(i,k,j) + ww_m(i,k,j))/(local_count+1.) end DO end DO end DO if (do_cu .and. & & present(avgflx_cfu1) .and. present(avgflx_cfd1) .and. present(avgflx_dfu1) & & .and. present(avgflx_efu1) .and. present(avgflx_dfd1) .and. present(avgflx_efd1) & & .and. present(cfu1) .and. present(cfd1) .and. present(dfu1) & & .and. present(efu1) .and. present(dfd1) .and. present(efd1) ) then DO j=jts,jte DO k=kts,kte DO i=its,ite avgflx_cfu1(i,k,j) = (local_count*avgflx_cfu1(i,k,j) + & & cfu1(i,k,j)) / (local_count+1.) avgflx_cfd1(i,k,j) = (local_count*avgflx_cfd1(i,k,j) + & & cfd1(i,k,j)) / (local_count+1.) avgflx_dfu1(i,k,j) = (local_count*avgflx_dfu1(i,k,j) + & & dfu1(i,k,j)) / (local_count+1.) avgflx_efu1(i,k,j) = (local_count*avgflx_efu1(i,k,j) + & & efu1(i,k,j)) / (local_count+1.) avgflx_dfd1(i,k,j) = (local_count*avgflx_dfd1(i,k,j) + & & dfd1(i,k,j)) / (local_count+1.) avgflx_efd1(i,k,j) = (local_count*avgflx_efd1(i,k,j) + & & efd1(i,k,j)) / (local_count+1.) end DO end DO end DO end if return end subroutine upd_avgflx end MODULE module_avgflx_em