0

我正在尝试用 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 位

4

2 回答 2

1

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

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

这里只有一个字符串拆分并继续分为两行。两个&符号之间的空白被完全忽略。但是第一个和第二个符号之前和之后的任何内容,甚至是空格,都算作字符串的一部分。

于 2017-07-09T17:25:12.490 回答
1

在我的脑海中,有几件事我会先尝试。

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

或者,您应该能够通过将文件名分成两行来构造文件名。就像是:

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

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

于 2017-07-08T04:31:09.883 回答