FORTRAN_getarg

我们运行程序时,一般都要求可执行文件rtm_i.e和参数文件parameter.par在同一个目录下,

程序中是这样的:

SUBROUTINE READPAR(.....................................)

OPEN(33,FILE='parameter.par')

........

这样就定死要求,'parameter.par'文件必须在可执行程序运行的目录下。

发作业命令:

#!/bin/sh

 MPI_BIN=/software/gpu_dev_tools/mpich2-1.4.1p1/bin
time $MPI_BIN/mpirun -np 103 -machinefile hostlist ./rtm_i_v4.e >log_rtm&

 

 

但,若移植到软件界面中,要求可执行程序与参数文件可以在不同的路径下,那么,在Fortran中,就用到getarg函数了。

思路是:将参数文件包含至发作业的命令行中,然后,执行时,程序中读入参数文件,并去找。用getarg函数。

【from:http://blog.sina.com.cn/s/blog_67f37e760101k2r7.html

getarg是用来返回你输入的命令行参数的。
call getarg(n,buffer)
其中n是命令序号, buffer是相应的命令行参数。运行程序本身的命令是0号,跟在它后面的参数是1,2。。。号。

例如:“发作业的命令time $MPI_BIN/mpirun -np 103 -machinefile hostlist ./rtm_i_v4.e  parameter.par >log_rtm&” ,其中,./rtm_i_v4.e对应0号命令,parameter.par 对应1号命令

比如,你写这样一个小程序:
character*80 buff
call getarg(0,buff)
write(*,*) buff
call getarg(1, buff)
write(*,*) buff
call getarg(2, buff )
write (*,*) buff
end
然后编译它,比如把这个可执行程序命名为mypro,然后键入命令如下
Linux系统,键入
./mypro   ar1 ar2
可以看到结果是
./mypro
ar1
ar2
Windows下,则键入
mypro ar1 ar2
可看到结果是
mypro
ar1
ar2
可见,用命令行方式,程序执行命令本身是第0个参数,后面跟的第1,2。。个参量则可以用相应的getarg来获得。利用这个getarg,你可以在外部输入命令时控制程序中的一些东西。

 

现在程序变成这样:

      CHARACTER*256 fn_par

*===================================================================
      call getarg(1, fn_par)
      write(*,*) fn_par

*===== INPUTING THE PARAMETERS FOR RUNNING THE CODE

CALL READPAR(........................,fn_par,

........

SUBROUTINE READPAR(.....................................,fn_par)

 CHARACTER*256 fn_par

 OPEN(33, FILE=fn_par)

  ........

 

发作业命令变成这样:

#!/bin/sh

 

MPI_BIN=/software/gpu_dev_tools/mpich2-1.4.1p1/bin
time $MPI_BIN/mpirun -np 103 -machinefile hostlist ./rtm_i_v4.e /autofs/is0002/chengxiang/guosj_v2/4liuxy_GPURTM/parameter_rtm_image.par >log_rtm&

posted @ 2015-10-10 16:20  tsguosj  阅读(3881)  评论(0编辑  收藏  举报