我们运行程序时,一般都要求可执行文件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&