合并两个FORTRAN代码
我有两个FORTRAN代码,除了一行代码和OPEN语句中的文件名外,几乎完全相同。这一行不同的代码产生了我正在寻找的两个不同的最终结果,因此我有两个不同的代码 如果可能的话,我想把这两个代码合并成一个 最好的方法是什么?具体来说,我只希望有一个FORTRAN文件,它将运行FORTRAN“代码”中的任意一个。这样,当我需要编辑任一代码时,我只在一个文件中进行编辑。现在有两个不同的文件,这有点不方便 下面是两个不同文件的简化示例代码,即Sample.f90和Sample2.f90。如果我可以使用允许我选择使用哪个初始条件的IF语句,R=COSx+y或R=SINx+y,该怎么办?我一点也不熟悉如何使用IF语句合并两个FORTRAN代码,fortran,Fortran,我有两个FORTRAN代码,除了一行代码和OPEN语句中的文件名外,几乎完全相同。这一行不同的代码产生了我正在寻找的两个不同的最终结果,因此我有两个不同的代码 如果可能的话,我想把这两个代码合并成一个 最好的方法是什么?具体来说,我只希望有一个FORTRAN文件,它将运行FORTRAN“代码”中的任意一个。这样,当我需要编辑任一代码时,我只在一个文件中进行编辑。现在有两个不同的文件,这有点不方便 下面是两个不同文件的简化示例代码,即Sample.f90和Sample2.f90。如果我可以使用允许
PROGRAM SAMPLE !Sample.f90
USE TestModule
IMPLICIT NONE
REAL, DIMENSION(-10,10) :: R
INTEGER :: i,j
REAL :: x,y
OPEN(UNIT = 100, FILE = 'Sample1.dat')
DO j = -10,10
DO i = -10,10
x = i*0.1
y = j*0.1
R(i,j) = COS(x+y)
END DO
END DO
WRITE(100,*) R(0,1)
END PROGRAM
!The next program is of the form:
PROGRAM SAMPLE2 !Sample2.f90
USE TestModule2
IMPLICIT NONE
REAL, DIMENSION(-10,10) :: R
INTEGER :: i,j
REAL :: x,y
OPEN(UNIT = 101, FILE = 'Sample2.dat')
DO j = -10,10
DO i = -10,10
x = i*0.1
y = j*0.1
R(i,j) = SIN(x+y)
END DO
END DO
WRITE(101,*) R(0,1)
END PROGRAM
还有运行时方法。您有一个要运行哪个版本的交互式查询,然后是一个IF语句,它根据该查询选择两个可选语句之一。另一个版本是使用内在的GET_command_参数从命令行读取选项 编译时方法是使用预处理器选择一条语句或另一条语句,方法是使用编译命令DSYM定义一个符号,例如SYM或not,使用ifdef SYM,else,endif选择要编译的Fortran语句 一些代码片段。将选项声明为整数,将文件名声明为字符串
read (*, '( "Input choice: " )', advance="no" ) choice
或
然后:
和类似的IF语句来设置初始条件
或者,您可以在编译命令中包含或不包含-DCHOICEONE,并使用预处理器行:
#ifdef CHOICEONE
filename = "FileOne.txt"
#else
filename = "FileTwo.txt"
#endif
等等。你为什么不给我们看看有问题的代码?帮助您找到解决方案会更容易一些。@JLH代码很长,但这就是为什么我没有发布完整/可验证的示例代码的原因。但是,如果您仍然建议OK(可能不是全部),这足以给我们提供如何帮助您的线索。将它们都放在一个文件中,然后在顶部编写一个函数来选择要运行的。或者更好的办法是只需输入一行,添加不同的行并选择。@Kevin谢谢您的帮助。我觉得这很合乎逻辑。您建议如何将它们都放在一个文件中,或仅放在一个文件中?现在我有两个不同的.f90文件。谢谢你的回答。你能提供实际的FORTRAN代码吗?我不知道如何实施你的建议。如果使用If语句选择初始条件,那么打开行中所有文件的名称如何?我是否也必须将所有打开的文件行移动到IF语句中?此外,您还提到了stackoverflow上的示例-where?使用两个IF语句,一个用于文件名,另一个用于初始条件。@JeffFaraci您真的需要亲自尝试一下。@Holmz您有什么有用的建议吗?@M.S.B.IF语句应该包含什么?我不知道如何使用引用实际FORTRAN文件名的IF语句。如何构造交互式查询?你能提供一些代码吗?否则,对于熟悉这些东西的人来说,你的答案可能听起来不错,但这对我这个初学者来说真的没有太大帮助。谢谢
if (choice /=1 .AND. choice /=2 ) then
write (*, *) "bad choice"
stop
end if
if (choice == 1) then
filename = "FileOne.txt"
else
filename = "FileTwo.txt"
end if
open (file=filename, ....
#ifdef CHOICEONE
filename = "FileOne.txt"
#else
filename = "FileTwo.txt"
#endif