我对Fortran非常新,所以请原谅这个问题中的任何无知。 无论如何,我正在努力优化一些模拟软件。
为了更清楚我正在编辑的子程序在开始时初始化一些静态变量,无论起始条件是什么,它们应该是相同的。
问题是我有另一段编码在每个时间步骤中调用这个子例程重新初始化数百个变量,应该保持不变。为了解决这个问题,我创建了一个派生类型,其中包含程序中其他模块的所有这些变量,我正在编辑软件以初始化派生类型变量而不是模块变量,这样我就可以引用不同的时间步骤。
我的问题是,我正在做不开心的工作。如果我只是把所有初始化的东西都放在我的主程序之外的子程序中,然后在编译时将它们链接起来,那么所有的变量都会在函数调用中保留它们的值。
答案 0 :(得分:2)
如果您有一个应该初始化一次并且从未更改的变量,请为其指定参数属性:
real, parameter :: pi = 3.141592
编译器会将“变量”视为无法更改的常量。如果您错误地尝试更改此类变量,编译器将通知您错误。
这会回答你的问题吗?
答案 1 :(得分:-2)
我不知道你在做什么,但FORTRAN是一个3GL,它通过参考传递参数。如果您希望main中的变量位于子例程中,则需要将其放在公共块中。 COMMON块就像C中的全局变量一样。