我试图使用fftpack与gfortran,但我得到的错误,我认为与虚拟参数被声明为真实时传递复杂数组的一些例程有关 .
我在intel fortran页面上阅读了一条评论,可以禁用“ check routine interface ” . 有谁知道gfortran是否有类似的选择?
我想不必编辑fftpack ...(我想这是因为内存中的复杂由两个实数表示,数组参数作为引用传递但如果我错了请纠正我:))
[详细说明并满足评论...]所以在从netlib下载dfftpack并作为独立文件编译(f77 I pressume)与同一文件中的所有子例程后,我得到一个警告,例如在
SUBROUTINE DFFTF (N,R,WSAVE)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
DIMENSION R(1) ,WSAVE(1)
IF (N .EQ. 1) RETURN
CALL RFFTF1 (N,R,WSAVE,WSAVE(N+1),WSAVE(2*N+1))
RETURN
END
呼叫 CALL RFFTF1 (N,R,WSAVE,WSAVE(N+1),WSAVE(2*N+1))
时出现警告 . RFFTF1的开头看起来像这样......
SUBROUTINE RFFTF1 (N,C,CH,WA,IFAC)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
DIMENSION CH(*) ,C(*) ,WA(*) ,IFAC(*)
并且来自编译的警告命中实际参数 WSAVE(2*N+1)
- 到伪参数 IFAC
:(从代码::块构建日志窗口输出)
mingw32-gfortran.exe -Jobj\Debug\ -Wall -g -c
C:\... \dfftpack.f -o obj\Debug\dfftpack.o
C:\... \dfftpack.f:345.40:
CALL RFFTB1 (N,R,WSAVE,WSAVE(N+1),WSAVE(2*N+1))
1 Warning: Type mismatch in argument
'ifac' at (1); passed REAL(8) to INTEGER(4)
我认为这将导致不正确的结果..(传递一个真实到整数似乎不会转换/舍入到最接近的整数,但其他东西 . 有人知道它是否应该在调用中舍入,如: NINT(WSAVE(2*N+1))
?
1 回答
当我从FORTRAN 77重构FFTPACK 5.1到Fortran 2008时遇到了这个问题 . 我执行了C语言样式转换,没有复制如下: