gt4f90io には実行プログラムのコマンドライン引数を解析する するサブルーチンを提供するモジュール dc_args が用意され ています. これを用いるとプログラム実行時のオプション指定, ヘルプメッセージの表示などが可能になります.
例として, Fortran 90/95 汎用モジュール: (1) 種別型パラメタの提供 で用いたサンプルプログラムに コマンドライン引数を与えるように修正したプログラムを示します (ソースコードはこちら). 赤字(カラーがでない場合はボールド)が dc_args に関係している箇所です. 関連して必要となる dc_types, dc_string, dc_message モジュールで提供されているデータ型とサブルーチンも use 文で参照しています.
!= Sample program for gt4_history/gt4f90io ! ! * 2007/06/27 M.Odaka ! * 2006/10/25 Y.Morikawa ! * 2003/08/21 M.Odaka ! * 2001/02/27 S.Takehiro ! ! Solving diffusion equation ! \[ ! du/dt = \kappa d^2 u/dx^2 ! \] ! for giving values of $u$ at $x=[0,1]$. ! program diffusion_7 use gt4_history ! モジュール指定 use dc_types, only : DP, STRING ! モジュール指定 use dc_message, only: MessageNotify ! モジュール指定 use dc_string, only : StoA, StoI ! モジュール指定 use dc_args, only : ARGS, Open, Debug, Help, Strict, Close, Option ! モジュール指定 integer, parameter :: nx=30 ! グリッド数 integer :: nt=200 ! 時間ステップ数 integer, parameter :: ndisp=10 ! 出力間隔 real(DP), parameter :: dx=1.0/(nx-1) ! グリッド間隔 real(DP), parameter :: dt=0.0005 ! 時間間隔 real(DP), dimension(nx):: x=(/(dx*(i-1),i=1,nx)/) ! 座標変数 real(DP), dimension(nx):: temp ! 温度 real(DP), parameter :: kappa=1.0 ! 熱拡散係数 type(ARGS) :: arg ! 引数 logical :: OPT_step ! 引数用論理変数 character(STRING) :: VAL_step ! 引数の値 call Open(arg) ! 引数の初期化 call Option(arg, StoA('-S', '--step'), OPT_step, VAL_step, & & help="Specify time step (nt) [default value is 200]." ) ! "-S/--step" オプションの設定 call Debug(arg) ! デバッグオプションの自動設定 call Help(arg) ! ヘルプオプションの自動設定 call Strict(arg) ! 無効なオプション指定時に警告表示 if (OPT_step) then nt = StoI(VAL_step) ! 引数の値を入力 call MessageNotify( "M", "diffusion_7", & & "Time step is %d", i=(/nt/) ) ! メッセージの出力 end if call Close(arg) ! 引数の使用終了 tinit = 0.0 ! 初期時刻設定 temp = exp(-((x-0.5)/0.1)**2) ! 初期値設定 call HistoryCreate( & ! ヒストリー作成 & file='diffusion_7.nc', title='Diffusion equation', & & source='Sample program of gt4_history/gt4f90io', & & institution='GFD_Dennou Club davis project', & & dims=(/'x','t'/), dimsizes=(/nx,0/), & & longnames=(/'X-coordinate','time '/), & & units=(/'m','s'/), & & origin=real(tinit), interval=real(ndisp*dt) ) call HistoryPut('x',x) ! 次元変数出力 call HistoryAddVariable( & ! 変数定義 & varname='temp', dims=(/'x','t'/), & & longname='temperature', units='K', xtype='double') call HistoryAddAttr('temp','gt_graph_tick_all',1) call HistoryAddAttr('temp','gt_graph_contour_spacing',(/0.0,1.0,0.01/)) call HistoryAddAttr('temp','+gt_user_davis_kappa',kappa) call HistoryPut('temp',temp) ! 変数出力 do it=1,nt temp(2:nx-1) = temp(2:nx-1) & ! 時間積分 & + kappa*(temp(3:nx)-2*temp(2:nx-1)+temp(1:nx-2))/dx**2*dt if ( mod(it,ndisp) == 0 ) then call HistoryPut('temp',temp) ! 変数出力 endif enddo call HistoryClose stop end program diffusion_7
このプログラムではコマンドラインオプションで計算ステップ数を指定できる ようにしています. また, デバッグモードでの実行 ( Fortran90 汎用ライブラリ: (4) デバッグ補助 参照), ヘルプメッセージの出力もオプションで指定できます.
計算ステップ数の指定はプログラム実行時に
$ ./a.out -S=<計算ステップ数>
または
$ ./a.out --step=<計算ステップ数>
とします.
デバッグモードで実行する場合
& ./a.out -D
とします. デバッグメッセージはデフォルトでは標準出力に出力されます.
ヘルプメッセージの出力は
$ a.out -H
とします. このときプログラムは以下のようなヘルプメッセージを表示 して終了します.
Options:: -S=VAL, --step=VAL Specify time step (nt) [default value is 200]. -D=VAL, --debug=VAL call dc_trace#SetDebug (display a lot of messages for debug). VAL is unit number (default is standard output) -h=VAL, -H=VAL, --help=VAL display this help and exit. VAL is unit number (default is standard output)
以下では dc_args モジュール サブルーチンが行っていることを大まかに説明します. ここで扱っていないサブルーチンの機能を含むより詳しい説明は リファレンスマニュアル を参照してください.