【发布时间】:2014-01-06 14:27:57
【问题描述】:
大家好,新年快乐!
我正在尝试在一个简单的 fortran 90 代码中使用 fftw 库(是的,一个旧的 fortran ......)。 这是一个计算向量 in=1,2,..., N 的 FFT 的非常简单的代码。令我惊讶的是,对于 N= 20,它不再起作用。我想我错过了一些重要的事情,但不知道是什么......并且想知道你是否可以帮助我...... 我用这个命令编译我的代码
ifort test.f90 -o test -lfftw3f
代码如下
program test
implicit none
include "fftw3.f"
integer, parameter :: fp =4
integer*8 :: N
double complex, allocatable, dimension (:) :: in, out, aux
integer*8 :: plan
integer*8 :: i, errflag
N=10
allocate(in(N), stat=errflag)
allocate(out(N), stat=errflag)
do i=1,N
in(i) = i
end do
call sfftw_plan_dft_1d(plan, N, in, out, -1, 0)
do i=1,N
print *, in(i)
end do
print *, "================================================"
do i=1,N
print *, out(i)
end do
call sfftw_execute_dft(plan, in, out)
call sfftw_destroy_plan(plan)
deallocate(in, out)
end program test
出乎意料(对我来说),向量“in”在该行之后被修改了
call sfftw_plan_dft_1d(plan, N, in, out, -1, 0)
确实,只要 N>20,向量就会被“切成两半”,即:
in(i) = 0 if i < N/2
in(i) = i otherwise
但是,以 N =10 为例,结果似乎很好(与使用 scilab fft 函数获得的结果相同)。
我有点迷茫,对 fortran 并不完全熟悉。我错过了什么重要的事情吗?
提前非常感谢您!
编辑:whoups,代码中的错误复制/粘贴...
【问题讨论】:
-
什么是 m,为什么它似乎没有分配一个值,而您仍在循环中使用它?
-
抱歉,复制/粘贴错误。没有“m”,以前是“m=N”,复制/粘贴时,我(错误地)擦除了这一行......对不起