科学Fortran编译错误

Gar*_*y Z 4 fortran declaration scientific-computing

我正在研究科学建模程序,还没有让我的程序编译.我没有触及我教授之前坚持的代码,只有makefile.经过多次尝试,我得到的最远的是这个错误:

Error on line 1112: Declaration error for xxmf: adjustable dimension on non-argument
   upcase:
   intrpl:
   splin:
   mtrnpr:
Run Code Online (Sandbox Code Playgroud)

我的教授坚持认为这只是一个编译问题,并且应该有一些涉及全局变量的选项,我可以使用它来解决这个问题.我发现最接近的是使用该选项

 -Mipa=safeall
Run Code Online (Sandbox Code Playgroud)

在makefile中,但我不确定我是否将它放在正确的位置,或者它是否有所不同,因为我仍然得到相同的错误.

Jon*_*rsi 11

OOF - 听起来像是你有一个旧的代码的正常工作与一个古老的f77编译器的上司的特别版本,但会引起心痛了你一段时间,因为你慢慢使其达到标准,使标准compilant编译器会做正确的事.

可调节数组是这样的:

subroutine mysub(a,n)
integer n
real a(n)
Run Code Online (Sandbox Code Playgroud)

- 也就是说,或多或少地按照你在C中的方式传递数组.Fortran90及以后版本允许你使用假定形状的数组

subroutine mysub90(a)
real a(:)
n=size(x,1)
Run Code Online (Sandbox Code Playgroud)

因为编译器确保传递正确的数组大小,所以它更清晰.

所以听起来你的主管的代码在一些不是子程序中的参数的东西中使用这种构造,可能是在运行时创建特定大小的数组的一种方式.标准Fortran77从未允许这样做,但是有几个编译器作为扩展.幸运的是,您现在可以使用可分配数组作为执行此操作的标准方法,因此我建议只更改变量,让您现在感到悲伤的是可分配数组.

顺便提一下,有很多静态代码分析工具可以让你主动发现这样的问题并追踪它们. 理解是一个很好的商业,具有约2周的评估许可证,会发现很多问题. 尽管不是用户友好,但Forcheck非常彻底.使用这些工具拖动你的主管代码踢和尖叫进入2010年将是一个艰难的过程,但它将是你的时间的一个很好的投资.另一个很好的工具集是eclipse + photran,但不幸的是,大多数情况下假设你有很好的fortran90代码 - 在你使用它之前还需要一段时间.

(并且在任何人开始对fortran做出讽刺的评论之前 - 是的,是的,那里有很多旧的蹩脚的fortran代码,但现在这对fortran来说并不是唯一的,是吗.)