This module support to input NAMELIST.
NAMELIST を取得するための支援モジュールである。 ファイルから NAMELIST を取得する場合に便利な サブルーチンを用意している。 NAMELIST を取得するモジュールおよびプログラムは、 原則的に全てこのモジュールを呼ぶ。
現在、あるプログラムで読み込む事が可能な NAMELIST ファイルは、 メインプログラムで nmlfile_init(nml) と呼んだ際の nml という ファイル名に固定されてしまう。実行プログラムで引数としてファイル名を 取得したり、標準入力からファイル名を取得するなどして、 再コンパイル無しに NAMELIST ファイルを変更できると良いかもしれない。
use type_mod, only : TOKEN, INTKIND, STRING
private public :: nmlfile_init, nmlfile_end ! subroutines public :: nmlfile_open, nmlfile_close ! subroutines public :: nmlfile ! functions
nmlfile_mod モジュールの初期化ルーチン。 引数 nml に渡された文字列を NAMELIST ファイル名として格納し、 そのファイルを nmlfile_open で open、 nmlfile_close で close する。
メインプログラムにおいて、他のモジュールの初期化ルーチンよりも先に 呼ばれる事が想定されており、その際に引数 nml に渡された NAMELIST ファイル名を以降 (正確には nmlfile_end が呼ばれるまで)、 他のモジュールでも利用する事となる。
もしも、メインプログラムにおいて呼ばなかった場合や 引数無しで呼ばれた場合、または引数に空白を与えた場合は、 デフォルトの NAMELIST ファイル nmlfile.nml が読み込まれる。
subroutine nmlfile_init(nml)
use type_mod, only: STRING, TOKEN, INTKIND use dc_trace, only: BeginSub, EndSub, DbgMessage use dc_message,only: MessageNotify
character(*), intent(in), optional :: nml ! NAMELIST file name
nmlfile_mod に格納している NAMELIST ファイルを「適当な」装置番号で Open し、その装置番号を nmlunit として返し、readable に .true. を 返す。もしも Open が失敗した、またはファイルが読み取り不可能な 場合には nmlunit に -1 を、readable に .false. を返す。
なお、以前にこのプログラムにて NAMELIST ファイルが Open されている場合、 既に Open されている装置番号を自動的に閉じる。
subroutine nmlfile_open(nmlunit, readable)
use type_mod, only: STRING, TOKEN, INTKIND use dc_trace, only: BeginSub, EndSub, DbgMessage use dc_string, only: CPrintf use dc_message,only: MessageNotify
integer(INTKIND), intent(out):: nmlunit ! Device Number for nml file logical , intent(out):: readable ! Readable Flag
nmlfile_open で開いたファイルを Close する。 nmlfile_open が呼ばれていない場合には何もせずに終了する。
subroutine nmlfile_close()
use type_mod, only: STRING, TOKEN, INTKIND use dc_trace, only: BeginSub, EndSub, DbgMessage use dc_string, only: CPrintf use dc_message,only: MessageNotify
character(TOKEN) function nmlfile() result(result)
use type_mod, only: STRING, TOKEN, INTKIND use dc_trace, only: BeginSub, EndSub, DbgMessage use dc_string, only: CPrintf use dc_message,only: MessageNotify
nmlfile_init で設定された値を破棄し、 読み込む NAMELIST ファイルの名前を nmlfile.nml に戻す。
subroutine nmlfile_end()
use type_mod, only: STRING use dc_trace, only: BeginSub, EndSub, DbgMessage