Error: Two main PROGRAMs in an f77 Program
Error: Two main PROGRAMs in an f77 Program
我读了一篇有 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
编辑:
有人告诉我不要 link 保管箱。美好的。这是整个程序:
我从您的保管箱下载了 Algorithm634.f。
正如编译器消息所暗示的那样,有 2 个单独的程序,我将它们创建为 generate.for 和 driver.for.
如果你将它们link编译为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 编译器都有一个关联的 "debugger",它允许您单步执行程序,这样您就可以完成下一阶段。
code.f或code.f或表示代码排版为固定格式代码。与 F77 编译器一样,所有 F90+ Fortran 编译器都可以识别此代码并且应该可以处理。
总而言之,解决方案是将 Algorithm634.f 分成 2 个单独的文件。
我读了一篇有 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
编辑: 有人告诉我不要 link 保管箱。美好的。这是整个程序:
我从您的保管箱下载了 Algorithm634.f。 正如编译器消息所暗示的那样,有 2 个单独的程序,我将它们创建为 generate.for 和 driver.for.
如果你将它们link编译为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 编译器都有一个关联的 "debugger",它允许您单步执行程序,这样您就可以完成下一阶段。
code.f或code.f或表示代码排版为固定格式代码。与 F77 编译器一样,所有 F90+ Fortran 编译器都可以识别此代码并且应该可以处理。
总而言之,解决方案是将 Algorithm634.f 分成 2 个单独的文件。