我正在尝试使用具有 fftw_mpi 子例程(版本 3.3.2)的维度(nxn)的复矩阵:所有行上的 1D FFT(复数到复数)和所有行的 1D FFT(复数到复数)之后列。首先,我在 Fortran 中制作了一个串行代码,一切正常,但是当我尝试使用 mpi 的 fftw 子例程时,结果与我预期的不同。1D FFT 变换的计划是如何创建的?下面是一个示例(仅行上的第一个 1D FFT):
!获取本地数据大小并分配(维度反转)
alloc_local = fftw_mpi_local_size_2d(M, L, MPI_COMM_WORLD, &
local_M, local_j_offset)
cdata = fftw_alloc_complex(alloc_local)
调用 c_f_pointer(cdata, ldata, [L,local_M])
调用 c_f_pointer(cdata, data, [L,local_M])
!创建 MPI 计划
计划 = fftw_mpi_plan_many_dft(1, L*local_M, local_M, FFTW_MPI_DEFAULT_BLOCK, &
FFTW_MPI_DEFAULT_BLOCK、ldata、数据、MPI_COMM_WORLD、FFTW_FORWARD、FFTW_ESTIMATE)
做 j = 1, local_M
我 = 1, L
ldata(i,j)= my_function
结束
结束
!计算变换
调用 fftw_mpi_execute_dft(计划、ldata、数据)
调用 fftw_destroy_plan(plan)
调用 fftw_free(cdata)
调用 MPI_FINALIZE(mpi_err)