我正在尝试使用带有fftw_mpi子程序(版本3.3.2)的维度(nxn)的复杂矩阵:所有行上的1D FFT(复数到复数)和1D FFT之后(复杂到复杂) )对于所有列。首先我在Fortran中创建了一个串行代码,一切正常,但是当我用mpi尝试fftw子程序时,结果并不像我预期的那样。如何创建一维FFT变换计划有什么不对?下面是一个例子(只有行上的第一个1D FFT):
! get local data size and allocate (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, ldata, [L,local_M]) call c_f_pointer(cdata, data, [L,local_M]) ! create MPI plan plan = fftw_mpi_plan_many_dft(1, L*local_M, local_M, FFTW_MPI_DEFAULT_BLOCK, & FFTW_MPI_DEFAULT_BLOCK, ldata, data, MPI_COMM_WORLD, FFTW_FORWARD, FFTW_ESTIMATE) do j = 1, local_M do i = 1, L ldata(i,j)= my_function enddo enddo ! compute transform call fftw_mpi_execute_dft(plan, ldata, data) call fftw_destroy_plan(plan) call fftw_free(cdata) call MPI_FINALIZE(mpi_err)