【发布时间】:2012-10-03 20:39:59
【问题描述】:
我是 Fortran 新手,并试图重新利用我继承的更大程序的一部分代码。当程序运行时,它会提示输入输出文件名。我宁愿直接在代码中指定这些输出文件名,这样我就可以并行/一次全部运行程序(程序运行时间约为15小时,需要运行66个不同的文件,所以我更愿意一次运行它们而不是一个接一个地运行它们,因为这需要相当长的时间)。
我正在使用的代码如下所示:
24 print *,'Enter output filename'
25 read(*,*) fout
26 print *,'Enter parameter estimate output filename'
27 read(*,*) foutb
28 print *,'Enter seed for random number generator'
29 read(*,*) idum
30 if(idum.gt.0) idum = -idum
我尝试过的一切都给了我:
At line 25 of file v1.f95:
Fortran runtime error: End of file
我检查了我是否有正确的行尾。 有什么建议么?
【问题讨论】:
-
该错误可能来自其他地方 - 来自试图从文件中读取的内容超出文件所能提供的内容的代码。您实际上尝试过什么?你有66个执行核心的电脑吗?否则,尝试同时运行 66 个程序可能无法达到预期的加速效果。
-
我(认为我)知道错误来自那部分代码的原因是因为它在错误代码之前说
At line 25 of file v1.f95,这部分代码从第24行开始。我有访问具有足够节点的计算机集群,这就是我想让它工作的原因。我已经尝试删除print行,并尝试了各种重定向读取文件的方法,如下所示:read(*,'(file.out)') fout错误总是相同的,这让我觉得我只是遗漏了一些关于如何指定一个输出文件。 -
我也尝试将
status=new作为读取命令的一部分,但没有成功。 -
如果您想在代码中直接指定
fout变量的值(我假设它是字符类型),那么您可以使用的语句类型可能只是fout = 'file.out'.这以及read语句的语法和含义是基本的 Fortran,不适合在这里教学。这可能 (?) 不是您想要的 - 每次运行的文件名都相同。因此,请考虑您希望如何指定事物(独立于可能编写的任何代码),然后花一些时间学习可能使您实现所需目标的语言基础知识。 -
谢谢,伊恩。你对在哪里可以找到一个好的基础起点有什么建议吗?我是Fortran新手,一直在参考(pic.dhe.ibm.com/infocenter/comphelp/v111v131/index.jsp?topic=/…)
标签: fortran