使用不同的输入参数在fortran中多次运行代码

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)

假设我想用不同的半径运行此代码,而不是必须进入代码并手动更改值,我希望有一个具有不同参数选择的文件并让它运行多次.

当然,通过创建不同参数选择和循环的数组,可以解决这个问题.但是,我不想这样做,因为我实际上有多个参数我想为每次运行更改.

响应下面的评论之一,如果每个运行的文件都有不同的输入选择,那么如何为每次运行的不同参数选择获取不同的行?

Pie*_*uyl 7

我已经多次使用过"行人"式的方法.

为避免重新编译,解决方案是对参数文件的名称进行硬编码并从该文件中读取数据.每次运行代码都必须有自己的参数副本,因此它自己的目录.

我在下面给出一个单个参数的示例,但是如果需要,可以对其进行概括.它依赖于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)
  1. Fortran代码的作用:打开命名文件parameters.txt并读取radius值的第一个条目.

  2. 在bash脚本的作用:对于一些参数的值,创建一个新的目录,创建一个文件名为parameters.txt在该目录中,然后执行Fortran程序code 该目录中.

评论:

  1. 这可以扩展到几个变量parameters.txt,使用bash程序中的第二个循环,每行一个或每行几个变量.

  2. 如果您可以使用更现代版本的Fortran,请提及它.那里有更多的选择.

  3. 其他语言(Python,如arclight建议或其他语言)可用于编写脚本.许多计算集群使用bash来运行作业,因此可以用于参数运行(radius的值可以通过作业排队系统传递).

  4. 我任意使用了11个文件单元号.您的实际情况需要确实为您的程序使用可用的单元号.