MPI FFTW en Fortran para 3D de una compleja matriz de
Pregunta
Necesito hacer una FFT de una matriz 3D en Fortran el uso de MPI.He estado buscando en el FFTW sitio web y también he tratado de buscar ejemplos en línea, pero yo sólo he podido encontrar este código:
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)
Este código se calcula la FFT de transformación de una matriz 2d.Mi pregunta es:¿cómo puedo utilizar este código para calcular la FFT de transformación de una matriz 3d?
Solución
Con respecto a fftw_mpi_plan_dft_2d
eche un vistazo a:
http://www.fftw.org/doc/MPI-Plan-Creation.html
Es bastante obvio que debe haber un fftw_mpi_plan_dft_3d
la función así.El mismo, por supuesto, para fftw_mpi_local_size_2d
.Los argumentos que se va a cambiar un poco, pero la documentación le ayudará en esto.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow