Merge branch 'master' into reconnection
This commit is contained in:
commit
11bfa4f6ef
@ -1420,33 +1420,28 @@ module forcing
|
||||
!
|
||||
subroutine inject_fmodes(dt)
|
||||
|
||||
use blocks, only : block_data, list_data
|
||||
use blocks, only : block_data, data_blocks, get_dblocks
|
||||
|
||||
implicit none
|
||||
|
||||
real(kind=8), intent(in) :: dt
|
||||
|
||||
integer :: m, n
|
||||
|
||||
type(block_data), pointer :: pdata
|
||||
|
||||
!-------------------------------------------------------------------------------
|
||||
!
|
||||
! assign pdata with the first block on the data block list
|
||||
!
|
||||
pdata => list_data
|
||||
n = get_dblocks()
|
||||
|
||||
! iterate over all data blocks
|
||||
!
|
||||
do while (associated(pdata))
|
||||
!$omp parallel do default(shared) private(pdata)
|
||||
do m = 1, n
|
||||
pdata => data_blocks(m)%ptr
|
||||
|
||||
! inject eddy into the current block
|
||||
!
|
||||
call inject_fmodes_block(pdata, dt)
|
||||
|
||||
! assign pdata to the next block
|
||||
!
|
||||
pdata => pdata%next
|
||||
|
||||
end do ! over data blocks
|
||||
end do
|
||||
!$omp end parallel do
|
||||
|
||||
!-------------------------------------------------------------------------------
|
||||
!
|
||||
@ -1699,42 +1694,48 @@ module forcing
|
||||
!
|
||||
subroutine get_vcoefs()
|
||||
|
||||
use blocks , only : block_data, list_data
|
||||
use blocks , only : block_data, data_blocks, get_dblocks
|
||||
#ifdef MPI
|
||||
use mpitools, only : reduce_sum
|
||||
#endif /* MPI */
|
||||
|
||||
implicit none
|
||||
|
||||
integer :: m, n, nt
|
||||
|
||||
type(block_data), pointer :: pdata
|
||||
|
||||
complex(kind=8), dimension(:,:,:), allocatable :: vc
|
||||
|
||||
!$ integer :: omp_get_num_threads, omp_get_thread_num
|
||||
|
||||
!-------------------------------------------------------------------------------
|
||||
!
|
||||
! reset vcoefs
|
||||
!
|
||||
vcoefs(:,:) = cmplx(0.0d+00, 0.0d+00, kind=8)
|
||||
nt = 0
|
||||
!$omp parallel
|
||||
!$ nt = omp_get_num_threads() - 1
|
||||
!$omp end parallel
|
||||
allocate(vc(nmodes, NDIMS, 0:nt))
|
||||
|
||||
! assign pdata with the first block on the data block list
|
||||
!
|
||||
pdata => list_data
|
||||
vc(:,:,:) = cmplx(0.0d+00, 0.0d+00, kind=8)
|
||||
|
||||
! iterate over all data blocks
|
||||
!
|
||||
do while (associated(pdata))
|
||||
n = get_dblocks()
|
||||
!$omp parallel default(shared) private(pdata,nt)
|
||||
!$ nt = omp_get_thread_num()
|
||||
!$omp do
|
||||
do m = 1, n
|
||||
pdata => data_blocks(m)%ptr
|
||||
|
||||
! get contribution of velocity coefficients from the current block
|
||||
!
|
||||
call get_vcoefs_block(pdata)
|
||||
call get_vcoefs_block(pdata, vc(:,:,nt))
|
||||
end do
|
||||
!$omp end do
|
||||
!$omp end parallel
|
||||
|
||||
! assign pdata to the next block
|
||||
!
|
||||
pdata => pdata%next
|
||||
vcoefs = sum(vc, 3)
|
||||
|
||||
end do ! over data blocks
|
||||
deallocate(vc)
|
||||
|
||||
#ifdef MPI
|
||||
! reduce velocity coefficients over all processes
|
||||
!
|
||||
call reduce_sum(vcoefs)
|
||||
#endif /* MPI */
|
||||
|
||||
@ -1752,10 +1753,11 @@ module forcing
|
||||
! Arguments:
|
||||
!
|
||||
! pdata - a pointer to the data block;
|
||||
! vc - an array for the velocity Fourier coefficients;
|
||||
!
|
||||
!===============================================================================
|
||||
!
|
||||
subroutine get_vcoefs_block(pdata)
|
||||
subroutine get_vcoefs_block(pdata, vc)
|
||||
|
||||
use blocks , only : block_data
|
||||
use constants , only : pi2
|
||||
@ -1771,7 +1773,8 @@ module forcing
|
||||
|
||||
implicit none
|
||||
|
||||
type(block_data), pointer, intent(inout) :: pdata
|
||||
type(block_data), pointer , intent(inout) :: pdata
|
||||
complex(kind=8), dimension(:,:), intent(inout) :: vc
|
||||
|
||||
integer :: i, j, k, l
|
||||
real(kind=8) :: cs, sn, dvol
|
||||
@ -1837,10 +1840,10 @@ module forcing
|
||||
|
||||
cf = cmplx(cs, sn, kind=8) * dvol
|
||||
|
||||
vcoefs(l,1) = vcoefs(l,1) + pdata%q(ivx,i,j,k) * cf
|
||||
vcoefs(l,2) = vcoefs(l,2) + pdata%q(ivy,i,j,k) * cf
|
||||
vc(l,1) = vc(l,1) + pdata%q(ivx,i,j,k) * cf
|
||||
vc(l,2) = vc(l,2) + pdata%q(ivy,i,j,k) * cf
|
||||
#if NDIMS == 3
|
||||
vcoefs(l,3) = vcoefs(l,3) + pdata%q(ivz,i,j,k) * cf
|
||||
vc(l,3) = vc(l,3) + pdata%q(ivz,i,j,k) * cf
|
||||
#endif /* NDIMS == 3 */
|
||||
|
||||
end do
|
||||
|
Loading…
x
Reference in New Issue
Block a user