【问题标题】:Porting from power station(4) to intel fortran compiler(11/2003)从电站 (4) 移植到英特尔 fortran 编译器 (11/2003)
【发布时间】:2010-12-08 08:25:25
【问题描述】:

将 Fortran 代码从电站移植到 fortran 编译器 (2003) 时需要注意哪些必要条件?

我观察到的是,在电站中,所有变量都被视为全局变量(甚至局部变量也是如此)。在 intel fortran(2003) 中,它们对本地和全局具有不同的范围。所以我需要将所有局部变量设置为全局变量。在fortran 2003中是否有任何选项(来自属性)可以使所有局部变量成为全局变量。因为我的代码中有数百个变量。与其将所有局部变量分配给全局(在 COMMON 块中的意思),任何人都可以提出一个好的解决方案吗?

在将代码从 powerstation 移植到 intel fortran 编译器 (11/2003) 时,除此之外我还需要注意任何其他问题吗?

【问题讨论】:

    标签: fortran fortran-common-block


    【解决方案1】:

    我不具体了解这两个编译器,但是如果您必须将所有变量放入公共块中,那就太奇怪了。所有变量都是全局变量的证据是什么?使用较旧的编译器与较新的编译器相比,子程序(子例程和函数)中的局部变量可能存在的问题是变量的值是否在子程序的调用中保持不变。 Fortran 标准仅在使用“save”属性声明变量时才保证这种行为。一些较旧的编译器使所有变量都保持不变(静态内存),无论是否使用“保存”。如果程序员省略了“保存”,则在将旧程序移植到新编译器时,这可能会导致错误。许多较新的编译器提供编译选项以使所有变量持久化(例如,当前英特尔 Fortran 编译器的 /Qsave)。或者您可以在每个子程序中添加“save”——不带变量的“save”将使所有变量都持久化。

    【讨论】:

      【解决方案2】:

      在将 fortran 代码从电站移植到 fortran 编译器(2003 年)时,我需要注意哪些必要条件?

      Fortran Powerstation 只是一个编译器。英特尔的 Visual Fortran 也是如此。
      而fortran是一种语言。尽管上述两个都确实有一些非标准的供应商扩展,但只要您坚持标准,移植应该没有问题(fortran77 标准编译器应该在当今最新的编译器上编译没有错误)。

      所以只有当你使用一些非标准的、MS 特定的东西时才会出现问题。如果没有看到一些实际代码,没有人可以真正帮助您。

      我观察到的是,在电站中,所有变量都被视为全局变量(甚至局部变量也是如此)。在 intel fortran(2003) 中,它们对本地和全局具有不同的范围。所以我需要将所有局部变量都设置为全局变量。

      嗯,不。 我的意思是,你可以说,fortran 中有“全局”和“局部”变量(尽管它们不是这样称呼的),但我向你保证,它们在两个编译器中都得到了正确处理。我最近都使用了 FPS(我可能仍然将它安装在某个地方)并且它们被视为应有的方式。

      在 fortran 2003 中是否有任何选项(来自属性)可以将所有局部变量设置为全局变量。因为我的代码中有数百个变量。与其将所有局部变量分配给全局变量(意味着在 COMMON 块中),任何人都可以提出一个好的解决方案吗?

      就个人而言,如果可以的话,我会避免使用 COMMON 块。它们很好,但在大多数情况下它们是可以避免的。

      在将代码从 powerstation 移植到 intel fortran 编译器 (11/2003) 时,除此之外我还需要注意任何其他问题吗?

      库和模块的重命名。

      英特尔的编译器系列是 MS 的后代,因此它确实是一种“自然”的方式。但是,在没有看到一些实际数据的情况下,很难像这样猜测并给出一般性的建议。


      附言然而,一些“一般建议”可以在Intel's sofware forums 上找到,还有大量其他用户。他们主要关心从 CVF 到 IVF 的过渡,但我想你可以不时找到一个 FPS 用户。虽然,我再说一遍,fortran 是一种非常标准化的语言。因此,非常便携。考虑到已经说过的,从一个编译器跳转到另一个编译器应该不会有困难。

      【讨论】:

        猜你喜欢
        • 2016-04-26
        • 2017-03-06
        • 1970-01-01
        • 2010-12-04
        • 1970-01-01
        • 1970-01-01
        • 2021-11-14
        • 2012-04-23
        • 1970-01-01
        相关资源
        最近更新 更多