0

我对 Fortran 非常陌生,所以请原谅对这个问题的任何无知。无论如何,我正在优化一些模拟软件。

为了更清楚,我正在编辑的子程序在开始时初始化了一些静态变量,无论开始条件是什么,它们都应该是相同的。

问题是我有另一段代码在它的每个时间步骤中调用这个子例程,重新初始化数百个变量,这应该保持不变。为了解决这个问题,我创建了一个派生类型,其中包括程序中其他模块的所有这些变量,并且我正在编辑软件以初始化派生类型变量而不是模块变量,以便我可以跨不同的时间步进行引用。

我的问题是,我是否在做不必要的工作。如果我只是将所有初始化内容放入主程序之外的子例程中,然后在编译时将它们链接起来,那么所有变量是否会在函数调用中保留它们的值。

4

2 回答 2

2

如果你有一个变量应该被初始化一次并且永远不会改变,给它参数属性:

real, parameter :: pi = 3.141592

编译器会将“变量”视为无法更改的常量。如果您错误地尝试更改此类变量,编译器会通知您您的错误。

这回答了你的问题了吗?

于 2013-04-01T21:08:47.853 回答
-2

我不知道你在做什么,但 FORTRAN 是一个 3GL,它通过引用传递参数。如果您希望主程序中的变量位于子程序中,则需要将其放在一个公共块中。COMMON 块就像 C 中的全局变量。

于 2013-04-02T20:05:54.497 回答