我正在尝试使用具有 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)