具有数组大小的Gfortran COMMON块

时间:2014-11-14 15:58:57

标签: arrays fortran gfortran fortran-common-block

我在使用gfortran编译的旧fortan代码时遇到了一些麻烦。

 INTEGER NEQ
 DOUBLE PRECISION RE
 COMMON /DM18J/ RE,NEQ
 CALL FUNC(NEQ,RE)

代码的问题在于该函数假定RE是一个大小为NEQ的数组。但是,我无法预先指定数组的大小,因为它来自公共块。

由于代码非常冗长,我希望在不使用模块变量的情况下修复yhis。我可能想要尝试的是插入NEQ作为参数,而不是通过公共块获取它。

1 个答案:

答案 0 :(得分:1)

如果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)