我在使用gfortran编译的旧fortan代码时遇到了一些麻烦。Gfortran与数组大小的常见块
INTEGER NEQ
DOUBLE PRECISION RE
COMMON /DM18J/ RE,NEQ
CALL FUNC(NEQ,RE)
代码的问题是该函数假定RE是一个NEQ大小的数组。但是,我不能事先指定数组的大小,因为它来自公共块。
由于代码非常冗长,我希望在不诉诸模块变量的情况下修复yhis。我想尝试的一件事是将NEQ作为参数插入,而不是通过公共块获取它。
我在使用gfortran编译的旧fortan代码时遇到了一些麻烦。Gfortran与数组大小的常见块
INTEGER NEQ
DOUBLE PRECISION RE
COMMON /DM18J/ RE,NEQ
CALL FUNC(NEQ,RE)
代码的问题是该函数假定RE是一个NEQ大小的数组。但是,我不能事先指定数组的大小,因为它来自公共块。
由于代码非常冗长,我希望在不诉诸模块变量的情况下修复yhis。我想尝试的一件事是将NEQ作为参数插入,而不是通过公共块获取它。
如果RE是一个数组,那么它应该被声明为这样。对于参数来说,它的大小为100
parameter (maxre = 100)
integer neq
double precision re(maxre)
common /dm18j/re, neq
当调用你的例程时,你需要指定函数需要操作的数组的大小。这不一定是数组的大小。您的阵列可能有10000个元素,但如果您只希望在前2个元素上操作,只需将NEQ设置为2.
! sanity check
if (neq .gt. maxre) then
print *, 'increase the size of maxre to at least ', neq
stop
end if
call func(re, neq)
我改变了代码中所有常用块的大小。这个伎俩。 – Hugo 2014-11-17 12:23:15
它不清楚你在问什么。你是说你有一段时间的旧代码,现在gfortran正在抛出一个编译错误?错误是什么?你是否想改变工作代码,最新的变化是什么? – agentp 2014-11-14 18:23:42
这是旧代码,无需在英特尔Fortran和g95编译器中投诉。由于排名不匹配而引发警告。 – Hugo 2014-11-17 12:22:35