3

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

4

0 回答 0