【问题标题】:MPI FFTW in Fortran for a 3D complex arrayFortran 中用于 3D 复数数组的 MPI FFTW
【发布时间】:2012-03-16 21:06:21
【问题描述】:

我需要使用 MPI 在 Fortran 中对 3D 数组进行 FFT。我一直在查看 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 变换?

【问题讨论】:

    标签: fortran mpi fftw


    【解决方案1】:

    关于fftw_mpi_plan_dft_2d看看:

    http://www.fftw.org/doc/MPI-Plan-Creation.html

    很明显,还必须有一个fftw_mpi_plan_dft_3d 函数。 fftw_mpi_local_size_2d 当然也一样。参数会略有变化,但文档会在这方面为您提供帮助。

    【讨论】:

    • 我知道,但我想知道有这些功能经验的人是否可以提供帮助。
    • 很抱歉,但从您的问题来看,这并不明显。另外,如果您了解这些功能,为什么不尝试一下。如果它不起作用,您可以随时回来寻求帮助。
    • 请记住,FFTW 仅支持一维 MPI 分解,因此您的域必须被分割成片。如果您的网格具有多维分解,您可能必须将 All-to-All 与普通 FFTS 结合使用
    • 只是想在这里为大家添加,fftw_mpi_plan_dft_3d现在存在@Chiel
    • @trblnc 这是个好消息!这样可以解决很多麻烦。
    猜你喜欢
    • 2012-06-20
    • 1970-01-01
    • 2022-01-02
    • 2012-04-01
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多