从发电站(4)移植到intel fortran编译器(11/2003)

时间:2009-10-20 13:21:24

标签: fortran fortran-common-block

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

我观察到的是,在电站中,所有变量都被视为全局变量(甚至是局部变量)。在intel fortran(2003)中,它们具有独立的本地和全球范围。所以我需要将所有局部变量设为gloabal。是否有任何选项(来自属性)使所有局部变量在fortran 2003中变为全局变量。因为我的代码中存在大量变量。而不是将所有局部变量分配给全局(在COMMON块中的意思),有人可以建议一个好的解决方案吗?

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

在将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的后代,所以它真的是一种“自然”的方式。但是,如果没有看到一些实际数据,很难像这样猜测并提供一般性建议。


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