在95程序中为fortran 77接口

时间:2012-12-21 17:07:15

标签: fortran implementation fortran77 fortran95

我对Fortran很新,只能在fortran 95和2003中写。现在我有一个主要用95编写的程序,但它完全采用fortran 77语法,并且还包含77个功能。

现在我需要另一个程序中的功能,但不想重写整个程序。我的想法是取代

program my_prog

module my_mod
subroutine my_prog()

替换似乎不起作用。编译器声明来自

的语法
subroutine my_prog()

错了。有没有人对这个主题有一些体验,或者知道是否有可能在不重写代码的情况下实现代码?

2 个答案:

答案 0 :(得分:4)

模块子程序sub的正确语法是

module name_of_the_module

  use whatever

  implicit none

  !some variables and interfaces

  contains

    subroutine sub
      !here is the code of your subroutine
    end subroutine sub

end module name_of_the_module

否则,应该注意,您可以从较新的代码调用FORTRAN 77中的代码。它(除了一些例外)仍然是一个有效的Fortran 2008代码,只是旧的风格。唯一的例外是您不能在一个源文件中混合使用免费和固定源格式。这也可能是你的问题。

最好的办法是让旧的函数和子程序也符合自由源格式(参见“交集格式”here)并将它们放入模块中,如上所示。

答案 1 :(得分:0)

仅将子程序打包到模块中可能在某些情况下有效,但在其他情况下可能无效。 Fortran 77的一些功能现已被宣布为过时。你有几个选择。

  1. 编译器开关:许多编译器提供编译时开关来编译遗留代码。这取决于编译器到编译器,将来可能会改变

  2. 使用工具:人们编写的工具允许您将f77代码转换为f90 / 95。为此,请参阅: http://www.atmos.illinois.edu/courses/atms391-sp11/Fortran-converters.html

  3. 手动更新源代码:有些人在do-loops中使用了浮点变量。使用上面讨论的自动工具可能很难。在存在像(goto)这样的遗留语句的情况下,您可能需要手动工作。为此,请参阅以下链接:

  4. http://www.cisl.ucar.edu/zine/96/fall/articles/3.f90.conversion.html

    http://iprc.soest.hawaii.edu/users/furue/improve-fortran.html

    从长远来看,您需要逐行手动完成代码并自行进行更改。这是最便携的解决方案。