Как указано в заголовке, я использую FFTW (версия 3.2.2) с Fortran 90/95 для выполнения 2D FFT реальных данных (фактически поля случайных чисел). Я думаю, что шаг вперед работает (по крайней мере, я получаю некоторый результат). Однако я хотел проверить все, выполнив IFFT, чтобы увидеть, смогу ли я восстановить исходный ввод. К сожалению, когда я вызываю комплекс в реальную процедуру, ничего не происходит, и я не получаю вывода об ошибке, поэтому я немного запутался. Вот несколько фрагментов кода:
implicit none
include "fftw3.f"
! - im=501, jm=401, and lm=60
real*8 :: u(im,jm,lm),recov(im,jm,lm)
complex*8 :: cu(1+im/2,jm)
integer*8 :: planf,planb
real*8 :: dv
! - Generate array of random numbers
dv=4.0
call random_number(u)
u=u*dv
recov=0.0
k=30
! - Forward step (FFT)
call dfftw_plan_dft_r2c_2d(planf,im,jm,u(:,:,k),cu,FFTW_ESTIMATE)
call dfftw_execute_dft_r2c(planf,u(:,:,k),cu)
call dfftw_destroy_plan(planf)
! - Backward step (IFFT)
call dfftw_plan_dft_c2r_2d(planb,im,jm,cu,recov(:,:,k),FFTW_ESTIMATE)
call dfftw_execute_dft_c2r(planb,cu,recov(:,:,k))
call dfftw_destroy_plan(planb)
Вышеупомянутый шаг вперед, кажется, работает (r2c), но шаг назад, похоже, не работает. Я проверил это, сравнив массивы u и recov, которые оказались ненулевыми. Кроме того, максимальное и минимальное значения массива recov были равны нулю, что, по-видимому, указывает на то, что ничего не изменилось.
Я просмотрел документацию FFTW и за основу своей реализации взял следующую страницу: http://www.fftw.org/fftw3_doc/Fortran-Examples.html#Fortran-Examples . Мне интересно, связана ли проблема с индексацией, по крайней мере, в этом направлении я склоняюсь. В любом случае, если бы кто-нибудь мог предложить какую-то помощь, это было бы замечательно!
Спасибо!