0

我有一个带有很多子例程的旧代码,它们都在 Fortran 77 中,所以现在我想更新一个我需要根据 Fortran 90/95 代码更新的子例程,有没有办法将它转换为 77?

4

2 回答 2

1

一些编译器具有允许您在固定格式和自由格式 Fortran 文件之间切换的声明。

正如其他人所指出的,尽可能使用最新的编译器,因为它们应该是向后兼容的。文件要么是固定形式的自由形式,要么使用文件结尾.f,要么.f90将它们分开。

如果您绝对需要,在英特尔中,指令是!DIR$ FREEFORM并且!DIR$ NOFREEFORM如果您需要控制每行或每节文件的读取。如果您“必须”使用以固定形式编写的旧包含文件,但您想在代码中使用自由形式的 Fortran,这将很有用,那么您可以编写:

module important_new_code

<lots of use-statements>

!DIR$ NOFREEFORM
include 'old_style_includes.incl'
!DIR$ FREEFORM

<rest of module in modern fortran>

end module

但是,这会使您的代码特定于编译器,并且通常不是一个好主意!最好的办法始终是正确解决您的问题。

于 2020-03-17T11:17:02.223 回答
0

我不完全确定你想做什么。但正如评论中所指出的,您可以混合使用 Fortran 90/95 和 Fortran 77(但当然不能在同一个文件中)。使用ifort,您可以编写一个f90 文件,其中包含名为file_1.f90 的主程序和另一个f77 文件,其中包含在您的主文件中调用的一些子程序,名为file_2.f77。将它们编译在一起:

ifort -c file_1.f90
ifort -c file_2.f77
ifort file_1.o file_2.o -o file_1

在前两行中,您创建目标文件 (*.o),然后将其链接在一起创建目标文件(此处为 file_1)。如果您需要更多库,您可以在最后一行以通常的方式链接它们。希望这对您有所帮助。

于 2013-10-24T11:57:16.493 回答