【问题标题】:Fortran references to variablesFortran 对变量的引用
【发布时间】:2013-04-03 04:05:54
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: fortran


    【解决方案1】:

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

    real, parameter :: pi = 3.141592

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

    这能回答你的问题吗?

    【讨论】:

    • 有点,但问题是这需要和我现在做的一样多的工作。我想知道模块是如何工作的。如果我在一个子程序中初始化一个模块中的变量,如果我将该模块包含在另一个子程序中,它将保持其值
    【解决方案2】:

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

    【讨论】:

    • 在任何情况下,任何人都不应使用通用块编写新的 Fortran。除此之外,将变量传递给子程序的唯一方法是使用公共块的建议是错误的。只是错了。
    猜你喜欢
    • 1970-01-01
    • 2018-04-13
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多