【发布时间】:2014-07-30 15:06:03
【问题描述】:
在将 FFTW 与 fortran 一起使用时,我遇到了一个奇怪的分段错误,我无法弄清楚原因。在线搜索也没有运气。这是我的代码:
integer, parameter :: Nx=128, Ny=Nx, Nz=Nx
integer, parameter :: NORM=Nx*Ny*Nz,Ntop=MAX(Nx,Ny,Nz)/2, LX1=Nx/2+1
double precision, parameter :: Etot=0.5
double complex, dimension(LX1,Ny,Nz) :: fbx, fby, fbz
double precision, dimension(Nx,Ny,Nz) :: bx, by, bz
real
! ...
! Assign values to fbx, fby, fbz
! ...
call dfftw_plan_dft_c2r_3d(plan,Nx,Ny,Nz,fbx,bx,FFTW_ESTIMATE)
call dfftw_execute_dft_c2r(plan, fbx, bx)
call dfftw_execute_dft_c2r(plan, fby, by)
call dfftw_execute_dft_c2r(plan, fbz, bz)
call dfftw_destroy_plan(plan)
! et = sum(abs(fbx)**2+abs(fby)**2+abs(fbz)**2)
! bx=bx*sqrt(Etot/et); by=by*sqrt(Etot/et); bz=bz*sqrt(Etot/et)
! Write bx, by, bz to files
代码以这种方式运行良好。当我取消注释计算 et 和重新缩放 bx 行时,问题就出现了。当我取消注释这些行时,我得到分段错误,说“无效的内存引用”。第一次执行dfftw_execute_dft_c2r()时出现seg错误
我已经在两台不同的机器上尝试了 fftw 3.2 和 fftw 3.4 以及 ifort 以及 gfortran(这些机器的所有可能组合),但没有任何成功。
快把我逼疯了!!我需要帮助!为什么会这样?
谢谢!
【问题讨论】:
-
您是否对错误检查进行了 cimoile?你试过调试器吗?
-
我确实通过错误检查进行编译,调试器只告诉我错误在哪里(正如我在原始帖子中提到的那样)。
标签: segmentation-fault fortran fftw