Kyl*_*Lee 2 fortran gfortran fortran77
我想用不同的输入参数集多次运行fortran 77程序; 我已经确定输出文件名会因我使用的不同输入参数而改变,但我不确定如何运行具有不同输入参数集的程序,而无需每次都更改参数来转到代码.
为了说明我的问题,这是一个简单的代码.
PROGRAM CODE
IMPLICIT DOUBLE PRECISION (A-H, J-Z)
COMMON / param / radius
radius = 2
write(*,*) 'radius = ', radius
write(*,*) 'the area is = ', 3.14*radius*radius
END
Run Code Online (Sandbox Code Playgroud)
假设我想用不同的半径运行此代码,而不是必须进入代码并手动更改值,我希望有一个具有不同参数选择的文件并让它运行多次.
当然,通过创建不同参数选择和循环的数组,可以解决这个问题.但是,我不想这样做,因为我实际上有多个参数我想为每次运行更改.
响应下面的评论之一,如果每个运行的文件都有不同的输入选择,那么如何为每次运行的不同参数选择获取不同的行?
我已经多次使用过"行人"式的方法.
为避免重新编译,解决方案是对参数文件的名称进行硬编码并从该文件中读取数据.每次运行代码都必须有自己的参数副本,因此它自己的目录.
我在下面给出一个单个参数的示例,但是如果需要,可以对其进行概括.它依赖于bash中的驱动程序脚本.
Fortran计划:
PROGRAM CODE
IMPLICIT DOUBLE PRECISION (A-H, J-Z)
COMMON / param / radius
open(11, file='parameters.txt')
read(11,*) radius
close(11)
write(*,*) 'radius = ', radius
write(*,*) 'the area is = ', 3.14*radius*radius
END
Run Code Online (Sandbox Code Playgroud)
bash程序:
for radius in 01 02 05 10
do
RUNDIR=run_${radius}
mkdir ${RUNDIR}
echo "${radius}" > ${RUNDIR}/parameters.txt
(cd ${RUNDIR} ; ../code)
done
Run Code Online (Sandbox Code Playgroud)
编译Fortran代码:
gfortran -std=legacy -o code code.f
Run Code Online (Sandbox Code Playgroud)
并执行参数运行:
bash parametricrun.sh
Run Code Online (Sandbox Code Playgroud)
Fortran代码的作用:打开命名文件parameters.txt并读取radius值的第一个条目.
在bash脚本的作用:对于一些参数的值,创建一个新的目录,创建一个文件名为parameters.txt在该目录中,然后执行Fortran程序code 在该目录中.
评论:
这可以扩展到几个变量parameters.txt,使用bash程序中的第二个循环,每行一个或每行几个变量.
如果您可以使用更现代版本的Fortran,请提及它.那里有更多的选择.
其他语言(Python,如arclight建议或其他语言)可用于编写脚本.许多计算集群使用bash来运行作业,因此可以用于参数运行(radius的值可以通过作业排队系统传递).
我任意使用了11个文件单元号.您的实际情况需要确实为您的程序使用可用的单元号.
| 归档时间: |
|
| 查看次数: |
1291 次 |
| 最近记录: |