module m_terms use m_parameters use m_arrays use m_calculate implicit none real*8, allocatable, dimension(:,:,:) :: c_auto real*8, allocatable, dimension(:,:,:) :: fsd_auto real*8, allocatable, dimension(:,:,:) :: wrate_auto real*8, allocatable, dimension(:,:,:) :: ddz_c_auto real*8, allocatable, dimension(:,:,:) :: ddy_c_auto real*8, allocatable, dimension(:,:,:) :: ddx_c_auto real*8, allocatable, dimension(:) :: avg_fsd_auto real*8, allocatable, dimension(:) :: fsd_auto_avg_0 real*8, allocatable, dimension(:) :: avg_c_auto real*8, allocatable, dimension(:) :: c_auto_avg_2 real*8, allocatable, dimension(:) :: y_avg_2 real*8, allocatable, dimension(:) :: c_auto_avg_1 real*8, allocatable, dimension(:) :: y_avg_0 real*8, allocatable, dimension(:) :: y_avg_1 real*8, allocatable, dimension(:) :: avg_0 real*8, allocatable, dimension(:) :: avg_1 real*8, allocatable, dimension(:) :: avg_2 real*8, allocatable, dimension(:) :: c_auto_avg_0 real*8, allocatable, dimension(:) :: avg_y contains subroutine m_terms_init integer :: ierr allocate(c_auto(nxp,nyp,nzp), stat=ierr) ; c_auto = 0. allocate(fsd_auto(nxp,nyp,nzp), stat=ierr) ; fsd_auto = 0. allocate(wrate_auto(nxp,nyp,nzp), stat=ierr) ; wrate_auto = 0. allocate(ddz_c_auto(nxp,nyp,nzp), stat=ierr) ; ddz_c_auto = 0. allocate(ddy_c_auto(nxp,nyp,nzp), stat=ierr) ; ddy_c_auto = 0. allocate(ddx_c_auto(nxp,nyp,nzp), stat=ierr) ; ddx_c_auto = 0. allocate(avg_fsd_auto(nxp), stat=ierr) ; avg_fsd_auto = 0. allocate(fsd_auto_avg_0(nxp), stat=ierr) ; fsd_auto_avg_0 = 0. allocate(avg_c_auto(nxp), stat=ierr) ; avg_c_auto = 0. allocate(c_auto_avg_2(nxp), stat=ierr) ; c_auto_avg_2 = 0. allocate(y_avg_2(nxp), stat=ierr) ; y_avg_2 = 0. allocate(c_auto_avg_1(nxp), stat=ierr) ; c_auto_avg_1 = 0. allocate(y_avg_0(nxp), stat=ierr) ; y_avg_0 = 0. allocate(y_avg_1(nxp), stat=ierr) ; y_avg_1 = 0. allocate(avg_0(nxp), stat=ierr) ; avg_0 = 0. allocate(avg_1(nxp), stat=ierr) ; avg_1 = 0. allocate(avg_2(nxp), stat=ierr) ; avg_2 = 0. allocate(c_auto_avg_0(nxp), stat=ierr) ; c_auto_avg_0 = 0. allocate(avg_y(nxp), stat=ierr) ; avg_y = 0. end subroutine m_terms_init subroutine m_terms_finalize deallocate(c_auto) deallocate(fsd_auto) deallocate(wrate_auto) deallocate(ddz_c_auto) deallocate(ddy_c_auto) deallocate(ddx_c_auto) deallocate(avg_fsd_auto) deallocate(fsd_auto_avg_0) deallocate(avg_c_auto) deallocate(c_auto_avg_2) deallocate(y_avg_2) deallocate(c_auto_avg_1) deallocate(y_avg_0) deallocate(y_avg_1) deallocate(avg_0) deallocate(avg_1) deallocate(avg_2) deallocate(c_auto_avg_0) deallocate(avg_y) end subroutine m_terms_finalize subroutine m_terms_calculate_pass1 integer :: i, j, k do k = 1, nzp do j = 1, nyp do i = 1, nxp avg_1(i) = avg_1(i) + v(i,j,k) end do end do end do do k = 1, nzp do j = 1, nyp do i = 1, nxp c_auto(i,j,k) = ( 1.0 - y(i,j,k) ) end do end do end do do k = 1, nzp do j = 1, nyp do i = 1, nxp avg_c_auto(i) = avg_c_auto(i) + c_auto(i,j,k) end do end do end do call ddz ( ddz_c_auto, c_auto ) do k = 1, nzp do j = 1, nyp do i = 1, nxp c_auto_avg_2(i) = c_auto_avg_2(i) + w(i,j,k) * c_auto(i,j,k) end do end do end do do k = 1, nzp do j = 1, nyp do i = 1, nxp c_auto_avg_1(i) = c_auto_avg_1(i) + v(i,j,k) * c_auto(i,j,k) end do end do end do do k = 1, nzp do j = 1, nyp do i = 1, nxp c_auto_avg_0(i) = c_auto_avg_0(i) + u(i,j,k) * c_auto(i,j,k) end do end do end do do k = 1, nzp do j = 1, nyp do i = 1, nxp y_avg_2(i) = y_avg_2(i) + w(i,j,k) * y(i,j,k) end do end do end do do k = 1, nzp do j = 1, nyp do i = 1, nxp y_avg_0(i) = y_avg_0(i) + u(i,j,k) * y(i,j,k) end do end do end do do k = 1, nzp do j = 1, nyp do i = 1, nxp y_avg_1(i) = y_avg_1(i) + v(i,j,k) * y(i,j,k) end do end do end do do k = 1, nzp do j = 1, nyp do i = 1, nxp avg_0(i) = avg_0(i) + u(i,j,k) end do end do end do call ddy ( ddy_c_auto, c_auto ) do k = 1, nzp do j = 1, nyp do i = 1, nxp avg_2(i) = avg_2(i) + w(i,j,k) end do end do end do do k = 1, nzp do j = 1, nyp do i = 1, nxp avg_y(i) = avg_y(i) + y(i,j,k) end do end do end do call ddx ( ddx_c_auto, c_auto ) do k = 1, nzp do j = 1, nyp do i = 1, nxp fsd_auto(i,j,k) = ( sqrt ( ( ( ((ddx_c_auto(i,j,k))*(ddx_c_auto(i,j,k))) + ((ddy_c_auto(i,j,k))*(ddy_c_auto(i,j,k))) ) + ((ddz_c_auto(i,j,k))*(ddz_c_auto(i,j,k))) ) ) ) end do end do end do do k = 1, nzp do j = 1, nyp do i = 1, nxp fsd_auto_avg_0(i) = fsd_auto_avg_0(i) + u(i,j,k) * fsd_auto(i,j,k) end do end do end do do k = 1, nzp do j = 1, nyp do i = 1, nxp avg_fsd_auto(i) = avg_fsd_auto(i) + fsd_auto(i,j,k) end do end do end do do k = 1, nzp do j = 1, nyp do i = 1, nxp wrate_auto(i,j,k) = ( rxn_rate ( c_auto(i,j,k) ) ) end do end do end do end subroutine m_terms_calculate_pass1 subroutine m_terms_average_pass1 (nfiles) integer :: nfiles real*8 :: denum denum=real(nfiles*nyp*nzp) avg_y = avg_y / denum avg_2 = avg_2 / denum avg_1 = avg_1 / denum avg_0 = avg_0 / denum avg_c_auto = avg_c_auto / denum avg_fsd_auto = avg_fsd_auto / denum fsd_auto_avg_0 = fsd_auto_avg_0 / denum / avg_fsd_auto c_auto_avg_2 = c_auto_avg_2 / denum / avg_c_auto y_avg_2 = y_avg_2 / denum / avg_y c_auto_avg_1 = c_auto_avg_1 / denum / avg_c_auto y_avg_0 = y_avg_0 / denum / avg_y y_avg_1 = y_avg_1 / denum / avg_y c_auto_avg_0 = c_auto_avg_0 / denum / avg_c_auto end subroutine m_terms_average_pass1 end module m_terms ! {'c_auto': '( 1.0 - y(i,j,k) )', 'fsd_auto': '( sqrt ( ( ( ((ddx_c_auto(i,j,k))*(ddx_c_auto(i,j,k))) + ((ddy_c_auto(i,j,k))*(ddy_c_auto(i,j,k))) ) + ((ddz_c_auto(i,j,k))*(ddz_c_auto(i,j,k))) ) ) )', 'wrate_auto': '( rxn_rate ( c_auto(i,j,k) ) )'} ! {'ddz_c_auto': ('ddz', 'c_auto'), 'ddy_c_auto': ('ddy', 'c_auto'), 'ddx_c_auto': ('ddx', 'c_auto')} ! {'fsd_auto': ['ddx_c_auto', 'ddy_c_auto', 'ddz_c_auto'], 'avg_fsd_auto': ['fsd_auto'], u'c_auto_avg_2': ['c_auto'], 'avg_c_auto': ['c_auto'], 'avg_1': [], 'ddz_c_auto': ['c_auto'], 'c_auto': [], u'y_avg_2': [], u'c_auto_avg_1': ['c_auto'], u'y_avg_0': [], u'y_avg_1': [], 'avg_0': [], 'ddy_c_auto': ['c_auto'], 'avg_2': [], u'c_auto_avg_0': ['c_auto'], 'avg_y': [], u'fsd_auto_avg_0': ['fsd_auto'], 'ddx_c_auto': ['c_auto'], 'wrate_auto': ['c_auto']} ! ['avg_1', 'c_auto', 'avg_c_auto', 'ddz_c_auto', u'c_auto_avg_2', u'c_auto_avg_1', u'c_auto_avg_0', u'y_avg_2', u'y_avg_0', u'y_avg_1', 'avg_0', 'ddy_c_auto', 'avg_2', 'avg_y', 'ddx_c_auto', 'fsd_auto', u'fsd_auto_avg_0', 'avg_fsd_auto', 'wrate_auto']