MPI FFTW في Fortran لمجموعة معقدة ثلاثية الأبعاد
سؤال
أحتاج إلى إنشاء FFT لمجموعة ثلاثية الأبعاد في Fortran باستخدام MPI.لقد كنت أبحث في موقع 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 لمصفوفة ثنائية الأبعاد.سؤالي هو:كيف يمكنني استخدام هذا الرمز لحساب تحويل FFT لمجموعة ثلاثية الأبعاد؟
المحلول
متعلق fftw_mpi_plan_dft_2d
القي نظرة على:
http://www.fftw.org/doc/MPI-Plan-Creation.html
ومن الواضح تماما أنه يجب أن يكون هناك fftw_mpi_plan_dft_3d
وظيفة كذلك.نفس الشيء بالطبع ل fftw_mpi_local_size_2d
.سوف تتغير الوسائط قليلاً ولكن الوثائق ستساعدك في هذا الأمر.
لا تنتمي إلى StackOverflow