与pgfortran续行

时间:2017-07-08 01:34:08

标签: fortran fortran77 pgi

我正在尝试用pgf90或pgfortran编译一个文件(可以处理所有类型的源文件,即f90或f77),这些文件是用fortran 77构造编写的(即扩展名为.f)。我的问题是延续线。

open(10,file='/home/adaba/original/potentialenergy/vorticity/data/run/fort.10')

所以这条线明显超越了第72栏。这就是我尝试过的。我尝试使用'&'将其分成两行。新行中第6列的字符并编译它。它编译得很好,但是当我运行程序时,我得到一个错误,说没有找到这样的文件,因为它将行继续解释为run和fort.10之间的额外空格,并报告找不到文件。

所以我将代码保存在一行中,然后添加-Mextend,这是用于行扩展的pgi特定指令。现在它似乎在一个子例程中稍后在另一个文件名的末尾添加了一些奇怪的字符。它确实正确地打开了fort.10,但它在代码中很晚才打开另一个文件,并在该文件的末尾添加了一些奇怪的字符(二进制)。在Emacs这是我的编辑器,我只能在fort.10声明后看到紫色(表明某些东西不对)。

有人可以帮助pgi fortran吗?

更新

open(10,file='/home/adabas/originalPV/potentialenergy/vorticity/' // &
 &     'data/run/fort.10')

我在&(在上面一行)或附近得到pgf90-s-0034语法错误

pgf版本是17.0.4 64位

2 个答案:

答案 0 :(得分:1)

在我的脑海中,我会先尝试一些事情。

您可以请求编译器允许fixed format(。f)文件超过72个字符。在PGI中,这是使用-Mextend编译器标志完成的。

或者,您应该能够通过将文件分成两行来构造文件名。类似的东西:

 open(10,file='/home/adaba/original/' //
& 'potentialenergy/vorticity/data/run/fort.10')

其中//是组合字符串的运算符。还有其他方法可以做到这一点 - 例如,您可以先将字符串定义为fname

答案 1 :(得分:1)

扩展@Ross上面的回答: 在自由格式的Fortran标准中,还有另一种方法:您可以使用STRING延续语法,如下所示:

open(10,file = "/home/adaba/original/& &potentialenergy/vorticity/data/run/fort.10" )

这里只有一个单独的字符串分割并连续两行。两个&符号之间的空白区域完全被忽略。但是在第一个和第二个&符号之后的任何东西,甚至是空格,都算作字符串的一部分。