349 lines
6.7 KiB
Fortran
349 lines
6.7 KiB
Fortran
module m_terms
|
|
|
|
use m_parameters
|
|
use m_arrays
|
|
use m_calculate
|
|
|
|
implicit none
|
|
|
|
real*8, allocatable, dimension(:) :: fsd_auto_avg_u
|
|
real*8, allocatable, dimension(:,:,:) :: fsd_auto
|
|
real*8, allocatable, dimension(:) :: avg_c_auto
|
|
real*8, allocatable, dimension(:,:,:) :: ddz_c_auto
|
|
real*8, allocatable, dimension(:,:,:) :: tflux_y
|
|
real*8, allocatable, dimension(:) :: c_auto_avg_w
|
|
real*8, allocatable, dimension(:) :: c_auto_avg_v
|
|
real*8, allocatable, dimension(:) :: c_auto_avg_u
|
|
real*8, allocatable, dimension(:) :: y_avg_w
|
|
real*8, allocatable, dimension(:) :: avg_fsd_auto
|
|
real*8, allocatable, dimension(:) :: y_avg_v
|
|
real*8, allocatable, dimension(:,:,:) :: c_auto
|
|
real*8, allocatable, dimension(:) :: y_avg_u
|
|
real*8, allocatable, dimension(:,:,:) :: ddy_c_auto
|
|
real*8, allocatable, dimension(:) :: y_avg_c_auto
|
|
real*8, allocatable, dimension(:) :: avg_u
|
|
real*8, allocatable, dimension(:) :: avg_v
|
|
real*8, allocatable, dimension(:) :: avg_w
|
|
real*8, allocatable, dimension(:) :: avg_y
|
|
real*8, allocatable, dimension(:,:,:) :: tflux_
|
|
real*8, allocatable, dimension(:) :: y_avg_tflux
|
|
real*8, allocatable, dimension(:,:,:) :: ddx_c_auto
|
|
real*8, allocatable, dimension(:) :: avg_tflux
|
|
|
|
|
|
contains
|
|
|
|
subroutine m_terms_init
|
|
|
|
integer :: ierr
|
|
|
|
allocate(fsd_auto_avg_u(nxp), stat=ierr) ; fsd_auto_avg_u = 0.
|
|
allocate(fsd_auto(nxp,nyp,nzp), stat=ierr) ; fsd_auto = 0.
|
|
allocate(avg_c_auto(nxp), stat=ierr) ; avg_c_auto = 0.
|
|
allocate(ddz_c_auto(nxp,nyp,nzp), stat=ierr) ; ddz_c_auto = 0.
|
|
allocate(tflux_y(nxp,nyp,nzp), stat=ierr) ; tflux_y = 0.
|
|
allocate(c_auto_avg_w(nxp), stat=ierr) ; c_auto_avg_w = 0.
|
|
allocate(c_auto_avg_v(nxp), stat=ierr) ; c_auto_avg_v = 0.
|
|
allocate(c_auto_avg_u(nxp), stat=ierr) ; c_auto_avg_u = 0.
|
|
allocate(y_avg_w(nxp), stat=ierr) ; y_avg_w = 0.
|
|
allocate(avg_fsd_auto(nxp), stat=ierr) ; avg_fsd_auto = 0.
|
|
allocate(y_avg_v(nxp), stat=ierr) ; y_avg_v = 0.
|
|
allocate(c_auto(nxp,nyp,nzp), stat=ierr) ; c_auto = 0.
|
|
allocate(y_avg_u(nxp), stat=ierr) ; y_avg_u = 0.
|
|
allocate(ddy_c_auto(nxp,nyp,nzp), stat=ierr) ; ddy_c_auto = 0.
|
|
allocate(y_avg_c_auto(nxp), stat=ierr) ; y_avg_c_auto = 0.
|
|
allocate(avg_u(nxp), stat=ierr) ; avg_u = 0.
|
|
allocate(avg_v(nxp), stat=ierr) ; avg_v = 0.
|
|
allocate(avg_w(nxp), stat=ierr) ; avg_w = 0.
|
|
allocate(avg_y(nxp), stat=ierr) ; avg_y = 0.
|
|
allocate(tflux_(nxp,nyp,nzp), stat=ierr) ; tflux_ = 0.
|
|
allocate(y_avg_tflux(nxp), stat=ierr) ; y_avg_tflux = 0.
|
|
allocate(ddx_c_auto(nxp,nyp,nzp), stat=ierr) ; ddx_c_auto = 0.
|
|
allocate(avg_tflux(nxp), stat=ierr) ; avg_tflux = 0.
|
|
|
|
|
|
end subroutine m_terms_init
|
|
|
|
|
|
subroutine m_terms_finalize
|
|
|
|
deallocate(fsd_auto_avg_u)
|
|
deallocate(fsd_auto)
|
|
deallocate(avg_c_auto)
|
|
deallocate(ddz_c_auto)
|
|
deallocate(tflux_y)
|
|
deallocate(c_auto_avg_w)
|
|
deallocate(c_auto_avg_v)
|
|
deallocate(c_auto_avg_u)
|
|
deallocate(y_avg_w)
|
|
deallocate(avg_fsd_auto)
|
|
deallocate(y_avg_v)
|
|
deallocate(c_auto)
|
|
deallocate(y_avg_u)
|
|
deallocate(ddy_c_auto)
|
|
deallocate(y_avg_c_auto)
|
|
deallocate(avg_u)
|
|
deallocate(avg_v)
|
|
deallocate(avg_w)
|
|
deallocate(avg_y)
|
|
deallocate(tflux_)
|
|
deallocate(y_avg_tflux)
|
|
deallocate(ddx_c_auto)
|
|
deallocate(avg_tflux)
|
|
|
|
|
|
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
|
|
y_avg_w(i) = y_avg_w(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_v(i) = y_avg_v(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
|
|
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_w(i) = c_auto_avg_w(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_v(i) = c_auto_avg_v(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_u(i) = c_auto_avg_u(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_u(i) = y_avg_u(i) + u(i,j,k) * y(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
|
|
y_avg_c_auto(i) = y_avg_c_auto(i) + c_auto(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_u(i) = avg_u(i) + u(i,j,k)
|
|
end do
|
|
end do
|
|
end do
|
|
|
|
|
|
do k = 1, nzp
|
|
do j = 1, nyp
|
|
do i = 1, nxp
|
|
avg_v(i) = avg_v(i) + v(i,j,k)
|
|
end do
|
|
end do
|
|
end do
|
|
|
|
|
|
do k = 1, nzp
|
|
do j = 1, nyp
|
|
do i = 1, nxp
|
|
avg_w(i) = avg_w(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_u(i) = fsd_auto_avg_u(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
|
|
|
|
|
|
|
|
end subroutine m_terms_calculate_pass1
|
|
|
|
|
|
subroutine m_terms_average_pass1 (nfiles)
|
|
|
|
integer :: nfiles
|
|
real*8 :: denum
|
|
|
|
denum=real(nfiles*nyp*nzp)
|
|
|
|
avg_u = avg_u / denum
|
|
avg_v = avg_v / denum
|
|
avg_w = avg_w / denum
|
|
avg_c_auto = avg_c_auto / denum
|
|
avg_y = avg_y / denum
|
|
avg_fsd_auto = avg_fsd_auto / denum
|
|
c_auto_avg_u = c_auto_avg_u / denum / avg_c_auto
|
|
c_auto_avg_v = c_auto_avg_v / denum / avg_c_auto
|
|
c_auto_avg_w = c_auto_avg_w / denum / avg_c_auto
|
|
y_avg_u = y_avg_u / denum / avg_y
|
|
y_avg_v = y_avg_v / denum / avg_y
|
|
y_avg_w = y_avg_w / denum / avg_y
|
|
y_avg_c_auto = y_avg_c_auto / denum / avg_y
|
|
fsd_auto_avg_u = fsd_auto_avg_u / denum / avg_fsd_auto
|
|
|
|
|
|
end subroutine m_terms_average_pass1
|
|
|
|
|
|
subroutine m_terms_calculate_pass2
|
|
|
|
integer :: i, j, k
|
|
|
|
|
|
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
|
|
tflux_(i,j,k) = ( (u(i,j,k) - avg_u(i)) * (c_auto(i,j,k) - avg_c_auto(i)) )
|
|
end do
|
|
end do
|
|
end do
|
|
|
|
|
|
do k = 1, nzp
|
|
do j = 1, nyp
|
|
do i = 1, nxp
|
|
avg_tflux(i) = avg_tflux(i) + tflux_(i,j,k)
|
|
end do
|
|
end do
|
|
end do
|
|
|
|
|
|
do k = 1, nzp
|
|
do j = 1, nyp
|
|
do i = 1, nxp
|
|
tflux_y(i,j,k) = ( (u(i,j,k) - y_avg_u(i)) * (c_auto(i,j,k) - y_avg_c_auto(i)) )
|
|
end do
|
|
end do
|
|
end do
|
|
|
|
|
|
do k = 1, nzp
|
|
do j = 1, nyp
|
|
do i = 1, nxp
|
|
y_avg_tflux(i) = y_avg_tflux(i) + tflux_y(i,j,k) * y(i,j,k)
|
|
end do
|
|
end do
|
|
end do
|
|
|
|
|
|
|
|
end subroutine m_terms_calculate_pass2
|
|
|
|
|
|
subroutine m_terms_average_pass2 (nfiles)
|
|
|
|
integer :: nfiles
|
|
real*8 :: denum
|
|
|
|
denum=real(nfiles*nyp*nzp)
|
|
|
|
avg_tflux = avg_tflux / denum
|
|
y_avg_tflux = y_avg_tflux / denum / avg_y
|
|
|
|
|
|
end subroutine m_terms_average_pass2
|
|
|
|
|
|
end module m_terms
|
|
|