preparing for use of transposed data in Fourier space
This commit is contained in:
parent
44ecedc7b0
commit
fc76f9f60f
|
@ -146,11 +146,15 @@ subroutine spectral_utilities_init()
|
||||||
FFTW_planner_flag
|
FFTW_planner_flag
|
||||||
integer, dimension(3) :: k_s
|
integer, dimension(3) :: k_s
|
||||||
type(C_PTR) :: &
|
type(C_PTR) :: &
|
||||||
tensorField, & !< field containing data for FFTW in real and fourier space (in place)
|
tensorField, & !< tensor data for FFTW in real and Fourier space (in-place)
|
||||||
vectorField, & !< field containing data for FFTW in real space when debugging FFTW (no in place)
|
vectorField, & !< vector data for FFTW in real and Fourier space (in-place)
|
||||||
scalarField !< field containing data for FFTW in real space when debugging FFTW (no in place)
|
scalarField !< scalar data for FFTW in real and Fourier space (in-place)
|
||||||
integer(C_INTPTR_T), dimension(3) :: cellsFFTW
|
integer(C_INTPTR_T), dimension(3) :: cellsFFTW
|
||||||
integer(C_INTPTR_T) :: N, cells3FFTW, cells3_offset
|
integer(C_INTPTR_T) :: N, &
|
||||||
|
cells3FFTW, & !< # of cells in 3. dim on current process in real space
|
||||||
|
cells3_offset, & !< offset for cells in 3. dim on current process in real space
|
||||||
|
cells2FFTW, & !< # of cells in 2. dim on current process in Fourier space
|
||||||
|
cells2_offset !< offset for cells in 2. dim on curren process in Fourier space
|
||||||
integer(C_INTPTR_T), parameter :: &
|
integer(C_INTPTR_T), parameter :: &
|
||||||
vectorSize = 3_C_INTPTR_T, &
|
vectorSize = 3_C_INTPTR_T, &
|
||||||
tensorSize = 9_C_INTPTR_T
|
tensorSize = 9_C_INTPTR_T
|
||||||
|
@ -263,8 +267,9 @@ subroutine spectral_utilities_init()
|
||||||
|
|
||||||
cellsFFTW = int(cells,C_INTPTR_T)
|
cellsFFTW = int(cells,C_INTPTR_T)
|
||||||
|
|
||||||
N = fftw_mpi_local_size_many(3,[cellsFFTW(3),cellsFFTW(2),int(cells1Red,C_INTPTR_T)],&
|
N = fftw_mpi_local_size_many_transposed(3,[cellsFFTW(3),cellsFFTW(2),int(cells1Red,C_INTPTR_T)], &
|
||||||
tensorSize,FFTW_MPI_DEFAULT_BLOCK,PETSC_COMM_WORLD,cells3FFTW,cells3_offset)
|
tensorSize,FFTW_MPI_DEFAULT_BLOCK,FFTW_MPI_DEFAULT_BLOCK,PETSC_COMM_WORLD, &
|
||||||
|
cells3FFTW,cells3_offset,cells2FFTW,cells2_offset)
|
||||||
if (int(cells3FFTW) /= cells3) error stop 'domain decomposition mismatch (tensor)'
|
if (int(cells3FFTW) /= cells3) error stop 'domain decomposition mismatch (tensor)'
|
||||||
tensorField = fftw_alloc_complex(N)
|
tensorField = fftw_alloc_complex(N)
|
||||||
call c_f_pointer(tensorField,tensorField_real, &
|
call c_f_pointer(tensorField,tensorField_real, &
|
||||||
|
@ -272,8 +277,9 @@ subroutine spectral_utilities_init()
|
||||||
call c_f_pointer(tensorField,tensorField_fourier, &
|
call c_f_pointer(tensorField,tensorField_fourier, &
|
||||||
[3_C_INTPTR_T,3_C_INTPTR_T,int(cells1Red, C_INTPTR_T),cellsFFTW(2),cells3FFTW])
|
[3_C_INTPTR_T,3_C_INTPTR_T,int(cells1Red, C_INTPTR_T),cellsFFTW(2),cells3FFTW])
|
||||||
|
|
||||||
N = fftw_mpi_local_size_many(3,[cellsFFTW(3),cellsFFTW(2),int(cells1Red,C_INTPTR_T)],&
|
N = fftw_mpi_local_size_many_transposed(3,[cellsFFTW(3),cellsFFTW(2),int(cells1Red,C_INTPTR_T)], &
|
||||||
vectorSize,FFTW_MPI_DEFAULT_BLOCK,PETSC_COMM_WORLD,cells3FFTW,cells3_offset)
|
vectorSize,FFTW_MPI_DEFAULT_BLOCK,FFTW_MPI_DEFAULT_BLOCK,PETSC_COMM_WORLD, &
|
||||||
|
cells3FFTW,cells3_offset,cells2FFTW,cells2_offset)
|
||||||
if (int(cells3FFTW) /= cells3) error stop 'domain decomposition mismatch (vector)'
|
if (int(cells3FFTW) /= cells3) error stop 'domain decomposition mismatch (vector)'
|
||||||
vectorField = fftw_alloc_complex(N)
|
vectorField = fftw_alloc_complex(N)
|
||||||
call c_f_pointer(vectorField,vectorField_real, &
|
call c_f_pointer(vectorField,vectorField_real, &
|
||||||
|
@ -281,8 +287,8 @@ subroutine spectral_utilities_init()
|
||||||
call c_f_pointer(vectorField,vectorField_fourier, &
|
call c_f_pointer(vectorField,vectorField_fourier, &
|
||||||
[3_C_INTPTR_T,int(cells1Red, C_INTPTR_T),cellsFFTW(2),cells3FFTW])
|
[3_C_INTPTR_T,int(cells1Red, C_INTPTR_T),cellsFFTW(2),cells3FFTW])
|
||||||
|
|
||||||
N = fftw_mpi_local_size_3d(cellsFFTW(3),cellsFFTW(2),int(cells1Red,C_INTPTR_T),&
|
N = fftw_mpi_local_size_3d_transposed(cellsFFTW(3),cellsFFTW(2),int(cells1Red,C_INTPTR_T), &
|
||||||
PETSC_COMM_WORLD,cells3FFTW,cells3_offset)
|
PETSC_COMM_WORLD,cells3FFTW,cells3_offset,cells2FFTW,cells2_offset)
|
||||||
if (int(cells3FFTW) /= cells3) error stop 'domain decomposition mismatch (scalar)'
|
if (int(cells3FFTW) /= cells3) error stop 'domain decomposition mismatch (scalar)'
|
||||||
scalarField = fftw_alloc_complex(N)
|
scalarField = fftw_alloc_complex(N)
|
||||||
call c_f_pointer(scalarField,scalarField_real, &
|
call c_f_pointer(scalarField,scalarField_real, &
|
||||||
|
|
Loading…
Reference in New Issue