链接代码是 1981 年(超过 35 年前!)编写的旧代码,似乎所有警告消息都来自现在已过时的使用单元素数组作为假定大小数组的方法,例如,
DIMENSION M(1), ZETA(1), IPAR(1), LTOL(1), TOL(1),
所以,我想只要编译成功,就可以忽略所有警告消息。如果需要,可以通过某些编译器选项或通过将此类数组修改为假定大小的数组来抑制警告,例如
DIMENSION M(*), ZETA(*), IPAR(*), LTOL(*), TOL(*),
另一个问题是作者将一个名为DUMM 等的标量变量传递给了一个子程序中没有使用的虚拟数组参数。因此,为了避免警告,我们还需要在调用方将这些变量显式声明为DUMM(1)。
要实际修改代码,请将DIMENSION 语句中的(*) 和,*) 中的虚拟参数替换为(1) 和,1)(可以手动或通过sed/awk 完成)。那么原始代码和修改代码之间的区别如下。虽然目前还不清楚代码是否正常工作,但这至少消除了 gfortran 和 ifort 的所有警告。
457,458c457,461
< DIMENSION M(1), ZETA(1), IPAR(1), LTOL(1), TOL(1),
< 1 FIXPNT(1), ISPACE(1), FSPACE(1)
---
> DIMENSION M(*), ZETA(*), IPAR(*), LTOL(*), TOL(*),
> 1 FIXPNT(*), ISPACE(*), FSPACE(*)
>
> dimension dum1(1), dum2(1), dum3(1), dum4(1)
>
769,771c772,774
< DIMENSION XI(1), XIOLD(1), XIJ(1), ALPHA(1), ALDIF(1), RHS(1)
< DIMENSION A(1), VALSTR(1), SLOPE(1), ACCUM(1), IPIV(1), INTEGS(1)
< DIMENSION DALPHA(1), EALPHA(1) , FIXPNT(1)
---
> DIMENSION XI(*), XIOLD(*), XIJ(*), ALPHA(*), ALDIF(*), RHS(*)
> DIMENSION A(*), VALSTR(*), SLOPE(*), ACCUM(*), IPIV(*), INTEGS(*)
> DIMENSION DALPHA(*), EALPHA(*) , FIXPNT(*)
1260,1261c1263,1266
< DIMENSION D1(40), D2(40), ZV(40), SLOPE(1), ACCUM(1), VALSTR(1)
< DIMENSION XI(1), XIOLD(1), XIJ(1), ALDIF(1), FIXPNT(1)
---
> DIMENSION D1(40), D2(40), ZV(40), SLOPE(*), ACCUM(*), VALSTR(*)
> DIMENSION XI(*), XIOLD(*), XIJ(*), ALDIF(*), FIXPNT(*)
>
> dimension dumm(1)
1755c1760,1762
< DIMENSION XIOLD(1), ALDIF(1), VALSTR(1), WORK(MSTAR,1)
---
> DIMENSION XIOLD(*), ALDIF(*), VALSTR(*), WORK(MSTAR,*)
>
> dimension dumm(1)
1899,1900c1906,1907
< DIMENSION ALPHO(1), XI(1), XIOLD(1), XIJ(1), ALPHA(1)
< DIMENSION ALDIF(1), RHS(1), A(1), IPIV(1), INTEGS(3,1)
---
> DIMENSION ALPHO(*), XI(*), XIOLD(*), XIJ(*), ALPHA(*)
> DIMENSION ALDIF(*), RHS(*), A(*), IPIV(*), INTEGS(3,*)
1901a1909,1910
>
> dimension dummy(1)
2163,2164c2172,2173
< DIMENSION Q(NROW,1), Z(1), DF(NCOMP,1)
< DIMENSION XI(1), BASEF(620), ALPHO(1), DG(40)
---
> DIMENSION Q(NROW,*), Z(*), DF(NCOMP,*)
> DIMENSION XI(*), BASEF(620), ALPHO(*), DG(40)
2329c2338,2341
< DIMENSION Z(1), FSPACE(1), ISPACE(1)
---
> DIMENSION Z(*), FSPACE(*), ISPACE(*)
>
> dimension dumm(1)
>
2332c2344,2345
< CALL APPROX (ISPACE(5), X, Z, FSPACE(IS6), FSPACE, ISPACE,
---
> CALL APPROX (ISPACE(5), X, Z, FSPACE(IS6), FSPACE, ISPACE(1),
> c CALL APPROX (ISPACE(5), X, Z, FSPACE(IS6), FSPACE, ISPACE,
2374c2387
< DIMENSION Z(1), VN(1), XI(1), ALDIF(1), M(1), DMVAL(1)
---
> DIMENSION Z(*), VN(*), XI(*), ALDIF(*), M(*), DMVAL(*)
2482c2495
< DIMENSION VN(1), M(1)
---
> DIMENSION VN(*), M(*)
2532c2545
< DIMENSION VN(1), XI(1), M(1)
---
> DIMENSION VN(*), XI(*), M(*)
2612c2625
< DIMENSION BASEF(1), VN(1), XMESH(1)
---
> DIMENSION BASEF(*), VN(*), XMESH(*)
2889c2902
< DIMENSION ALDIF(1), ALPHA(1), XI(1), M(1)
---
> DIMENSION ALDIF(*), ALPHA(*), XI(*), M(*)
3004,3005c3017,3018
< DIMENSION UHIGH(1) , AR(20), ARM1(20)
< DIMENSION ALDIF(1), XIOLD(1)
---
> DIMENSION UHIGH(*) , AR(20), ARM1(20)
> DIMENSION ALDIF(*), XIOLD(*)