0

MPI を使用して、Fortran で 3D 配列の FFT を作成する必要があります。私はFFTWのWebサイトを見ていて、オンラインで例を探してみましたが、次のコードしか見つかりませんでした:

   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)

このコードは、2 次元配列の FFT 変換を計算します。私の質問は、このコードを使用して 3D 配列の FFT 変換を計算するにはどうすればよいですか?

4

1 に答える 1

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。引数はわずかに変更されますが、ドキュメントがこれに役立ちます。

于 2012-02-27T13:08:01.053 に答える