错误:f77程序中的两个主要程序

时间:2018-06-13 11:10:56

标签: fortran gfortran fortran77

我读了一篇有f77 fortran代码的论文。我想运行程序并逐步完成它,以便将其移植到MATLAB中。但是,当我尝试运行该程序时,它不起作用。我收到以下错误:

$f77 -g Algorithm634.f 
Algorithm634.f:10.72:

      INTEGER FITDEG,DIMEN,NFPOLS,NFPTS,NEPTS,NEPOLS,EVLDEG,TOPS        
                                                                        1
Algorithm634.f:142.72:

      INTEGER DIMEN,FITDEG,NFPOLS,NFPTS,EVLDEG,NEPOLS,NEPTS             
                                                                        2
Error: Two main PROGRAMs at (1) and (2)

显然,我需要重构代码。上面列出的(1)生成随后在(2)中使用的数据。但是,我不熟悉旧的f77程序。我不确定如何重构这一点。

Dropbox Fortran file and Papers

编辑: 我被告知不要链接到Dropbox。精细。这是整个计划:

https://pastebin.com/ULLLPmdL

1 个答案:

答案 0 :(得分:2)

我从你的Dropbox下载了Algorithm634.f. 正如编译器消息所示,有两个独立的程序,我创建它们为generate.for和driver.for。

如果您将它们编译并链接为generate.exe和driver.exe,则可以运行它们。

首先是生成程序,如:

gFortran generate.for -o generate.exe
generate > generate.txt

这将生成驱动程序所需的数据文件。

然后使用驱动程序,如:

gFortran driver.for -o driver.exe
driver < generate.txt > driver.txt

这将产生一些输出,您可以查看。

(实际上,我通过将第一个可执行行包含为:

来更改generate.for
  open (unit=16, file='gendat.txt')

然后将所有write (6,更改为write (16,,以便将输出写入文件,而不是重定向。

然后我通过将第一个可执行行包含为:

来更改driver.for
  open (unit=15, file='gendat.txt')

然后将所有read (5,更改为read (15,,以便从文件中读取输入,而不是重定向。

更改单元5,6到15,16是为了避免在1:9范围内保留文件单元号的潜在问题,这些不同的Fortran编译器可以应用。 )

我会留给你确认程序有效。 大多数Fortran编译器都有一个关联的调试器&#34;这将允许您逐步完成该程序,以便您可以完成下一阶段。

code.f或code.for表示代码布局是固定格式代码。与F77编译器一样,所有F90 + Fortran编译器都能识别这些代码并应该应对。

总之,解决方案是将Algorithm634.f分成两个单独的文件。