Одна большая проблема кажется, что calc_fft()
не имеет implicit none
, поэтому применяется неявная типизация ...
subroutine calc_fft(N,in,out)
integer N
double complex, dimension (N) :: in
double complex, dimension (N) :: out
...
Если мы добавим implicit none
как
subroutine calc_fft(N,in,out)
implicit none !<--
integer N
double complex, dimension (N) :: in
double complex, dimension (N) :: out
...
тогда gfortran выдает сообщение
testfftw.f90:37:67:
call dfftw_plan_dft_1d(plan,N,in,out,FFTW_FORWARD,FFTW_ESTIMATE)
1
Error: Symbol 'fftw_estimate' at (1) has no IMPLICIT type
testfftw.f90:37:53:
call dfftw_plan_dft_1d(plan,N,in,out,FFTW_FORWARD,FFTW_ESTIMATE)
1
Error: Symbol 'fftw_forward' at (1) has no IMPLICIT type
Здесь FFTW_FORWARD
и FFTW_ESTIMATE
- это некоторые параметры, которые необходимо определить с помощью заголовочного файла FFTW (в противном случае эти параметры рассматриваются как переменные real
по умолчанию без implicit none
!).
subroutine calc_fft(N, in, out)
implicit none
include 'fftw3.f' !<--
integer N
Тогда мы перекомпилируем как
gfortran testfftw.f90 -L/usr/lib64 -I/usr/include -lfftw3
и получите ожидаемый результат. (Расположение включаемых файлов может различаться в зависимости от машин / ОС, и ScientificLinux7, кажется, имеет их в /usr/include
. Пожалуйста, посмотрите эту страницу и, при необходимости, установите их как # yum install fftw-devel
. Также чтобы получить лучшую производительность, различные пакеты FFTW могут быть лучше, чем полученные из yum
, но это другая история ...)