0
我需要使用MPI在Fortran中对3D数组进行FFT。我一直在寻找的FFTW网站,我也试图寻找在线的例子,但我只能找到这段代码:用于3D复杂阵列的Fortran中的MPI FFTW
use, intrinsic :: iso_c_binding
include 'fftw3-mpi.f03'
integer(C_INTPTR_T), parameter :: L = ...
integer(C_INTPTR_T), parameter :: M = ...
type(C_PTR) :: plan, cdata
complex(C_DOUBLE_COMPLEX), pointer :: data(:,:)
integer(C_INTPTR_T) :: i, j, alloc_local, local_M, local_j_offset
! get local data size and allocate (note dimension reversal)
alloc_local = fftw_mpi_local_size_2d(M, L, MPI_COMM_WORLD, &
local_M, local_j_offset)
cdata = fftw_alloc_complex(alloc_local)
call c_f_pointer(cdata, data, [L,local_M])
! create MPI plan for in-place forward DFT (note dimension reversal)
plan = fftw_mpi_plan_dft_2d(M, L, data, data, MPI_COMM_WORLD, &
FFTW_FORWARD, FFTW_MEASURE)
! initialize data to some function my_function(i,j)
do j = 1, local_M
do i = 1, L
data(i, j) = my_function(i, j + local_j_offset)
end do
end do
! compute transform (as many times as desired)
call fftw_mpi_execute_dft(plan, data, data)
call fftw_destroy_plan(plan)
call fftw_free(cdata)
代码是计算一个二维数组的FFT变换。我的问题是:如何使用此代码来计算3D数组的FFT变换?
我知道,但我想知道是否有经验的人可能会对这些功能有所帮助。 – Brian 2012-02-27 13:21:39
我很抱歉,但从您的问题中不明显。 另外,如果你知道这些功能,你为什么不试一试。如果它不起作用,你总是可以回来寻求帮助。 – Azrael3000 2012-02-27 13:30:38
请记住,FFTW仅支持1D MPI分解,因此您的域必须分片。如果您的网格具有多维分解,则可能必须将全部到全部与常规FFTS结合使用。 – Chiel 2015-01-28 07:49:46