GFortran:不在 f03 和 f90 之间传递数组?

GFortran: Not passing arrays between f03 and f90?

我是 Fortran 编程的新手,但我已经开始使用 code::blocks 和 Fortran 插件。

我正在尝试在我的代码 (f03) 和 fftsg.f(代码来自 http://www.kurims.kyoto-u.ac.jp/~ooura/fft.html) 来计算 fft。

fftsg.f 包含一个名为 rdft(实离散傅里叶变换)的子程序,我尝试用它来计算输入信号的 fft。

我的代码如下所示:

program hello
  use fftsg ! module containing all of the code in fftsg.f
  implicit none
  integer :: i
  integer,parameter ::  n=1024                           ! size of the input / output
  real(8), dimension(n,2) :: curve1
  real(8), dimension(0:n-1)   :: curvefft                ! data -> rdft -> fft 
  integer :: ip(0:2+2**(int(log(n/2+0.5)/log(2.0))/2))   ! size specified in fftsg.f
  real(8) ::  w(0:n/2-1)                                 ! size specified in fftsg.f
  integer   ::  N_fft,isgn                               ! variables specified fftsg.f
  N_fft = 2*n
  curve1(:,1) = (/(i*0.001D0,i=0,n-1)/)                  ! x-axis
  curve1(:,2) = sin(40*curve1(:,1))*curve1(:,1)**2       ! sine curve
  curvefft(0:n-1) = curve1(:,2)                          ! input/output to rdft
  ip(0) = 0
  isgn = 1
  call rdft(N_fft,isgn,curvefft,ip,w)
end program

程序编译没有错误或警告(与 fftsg.f 在 code::blocks 中的同一项目中,但在 运行.

时发生错误

调试显示标量 (N_fft, isgn) 都将它们的值传递给 rdft,但是传递了数组 (curvefft, ip, w) 中的 none 个值沿(它们仅显示为大小为 1 的数组,并且值不正确)。

fftsg 模块看起来(压缩)如下:

module fftsg
contains
  subroutine rdft(n, isgn, a, ip, w)
    integer n, isgn, ip(0 : *), nw, nc
    real*8 a(0 : n - 1), w(0 : *), xi
    ...
  end
end module fftsg

有人可以帮忙吗?出了什么问题?结合f03和f90代码有什么用吗?

我不确定我是否完全理解 fftsg 中的代码,但如果我可以将正确的数组传递给 fftsg,这可能是一个开始...

非常感谢任何帮助!

根据声明,子程序 rdft() 似乎使用 a(0:n-1)

subroutine rdft(n, isgn, a, ip, w)
integer n, isgn, ip(0 : *), nw, nc
real*8 a(0 : n - 1), w(0 : *), xi

但实际参数似乎不一致,因为 N_fft 是 2*size(curvefft)。

integer,parameter ::  n=1024
real(8), dimension(0:n-1)   :: curvefft
integer   ::  N_fft,isgn
N_fft = 2*n
call rdft(N_fft,isgn,curvefft,ip,w)