Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用pgfortran进行行延拓_Fortran_Fortran77_Pgi - Fatal编程技术网

使用pgfortran进行行延拓

使用pgfortran进行行延拓,fortran,fortran77,pgi,Fortran,Fortran77,Pgi,我正在尝试编译一个使用pgf90或pgfortran(可以处理所有类型的源文件,如f90或f77)的文件,该文件是使用fortran 77构造编写的(即具有.f扩展名)。我的问题是关于行的延续 open(10,file='/home/adaba/original/potentialenergy/vorticity/data/run/fort.10') 所以这一行显然超出了第72列。这是我试过的。我尝试在新行的第6列中使用“&”字符将其分成两行,并对其进行编译。它编译得很好,但是当我运行程序时,

我正在尝试编译一个使用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位的

,我想先试试

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

或者,您应该能够通过将文件名拆分为两行来构造文件名。比如:

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

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

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

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

或者,您应该能够通过将文件名拆分为两行来构造文件名。比如:

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

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

展开上面的@Ross answer: 在自由格式Fortran标准中,还有另一种方法:可以使用如下字符串延续语法:

open(10,file=“/home/adaba/original/&
&势能/涡度/数据/运行/fort.10“


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

展开上面的@Ross answer: 在自由格式Fortran标准中,还有另一种方法:可以使用如下字符串延续语法:

open(10,file=“/home/adaba/original/&
&势能/涡度/数据/运行/fort.10“


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

您到底是如何将其分成两行的?另外,当添加
-Mextend
时,可能是另一个错误导致了问题。您到底是如何将其分成两行的?另外,当添加
-Mextend
时,可能是另一个错误导致了问题。我在第二个解决方案中遇到语法错误。pgf90在上行中的“与”号之后报告错误。哎呀,对不起,对于固定格式源代码,上行中的“与”号不应该存在。现在怎么样?这个有效。我仍然要处理子程序文件打开的问题。我仍然有二进制字符。但这已经完成了。许多感谢您的第二个解决方案出现语法错误。pgf90在上行中的“与”号之后报告错误哎呀,对不起-对于固定格式源,上行中的“与”号不应存在。现在怎么样?这个有效。我仍然要处理子程序文件打开的问题。我仍然有二进制字符。但这已经完成了。非常感谢