This module store Variable Infomation from NAMELIST and Provide. These Information is expected to be used by io_gt4_out_mod .
NAMELIST から出力する変数に関する情報を取得する。 これらの情報は io_gt4_out_mod にて用いられることが想定されている。
もしかすると、 io_gt4_out_mod モジュール内に格納される べきかも知れません。
use type_mod, only : INTKIND, STRING, TOKEN use gt4_history, only : GT_HISTORY_VARINFO, GT_HISTORY_ATTR
private public :: VAR_INFO ! derived types public :: varinfo_init, varinfo_inquire, varinfo_end ! subroutines
interface varinfo_attrs_init module procedure varinfo_attrs_init0, varinfo_attrs_init1 end interface
変数に関する各情報を格納 (データ本体は含まない)
type VAR_INFO character(STRING) :: varkey = '' ! 変数キー character(STRING) :: file = '' ! 出力するファイル integer(INTKIND) :: StepInterval = 0 ! 出力ステップ間隔 integer(INTKIND) :: OutputStep = 0 ! 出力回数 type(GT_HISTORY_VARINFO):: varinfo ! gt4 変数情報 type(GT_HISTORY_ATTR), pointer & & :: attrs(:) =>null() ! 属性情報群 end type VAR_INFO
モジュールを初期化し、NAMELIST から値を取得する。 NAMELIST から値が取得できないものに関しては上記のデフォルト値が 用いられる。
NAMELIST ファイルは、メインプログラムにて nmlfile_mod の nmlfile_init で指定されることが想定されているが、 もしもこの初期化ルーチンより以前に指定されていなければ、 nmlfile_init のデフォルトで指定される NAMELIST ファイルを 読む。
subroutine varinfo_init
use type_mod, only: STRING, TOKEN, INTKIND, REKIND, DBKIND, & & NMLARRAY use nmlfile_mod,only: nmlfile_init, nmlfile_open, nmlfile_close use dc_types, only: GT_TOKEN => TOKEN, GT_STRING => STRING use dc_trace, only: DbgMessage, BeginSub, EndSub use dc_message,only: MessageNotify
変数に関する基本情報を設定するための NAMELIST で、 複数の varinfo_nml を用意する事で、複数の変数の設定が可能である。 変数 varkey はモデル毎に 内部で設定される物理量のマーカで、具体的には io_gt4_out_mod モジュールの io_gt4_out_SetVars サブルーチンでマーカを設定し、 io_gt4_out_Put サブルーチンでデータを file に 指定されたファイルに出力する。もしも file を与えない、 または空文字を与えた場合には、 io_gt4_out_nml で与えた default_output 変数で指定されたファイルに出力する。
varname, dimnum, dimnames, longname, units, xtype は出力される変数に付加される情報である。
StepInterval, OutputStep を与えない、またはゼロ以下の値を 与えた場合には time_mod の time_nml で与えた StepInterval, OutputStep が用いられる。
character(STRING) :: varkey = '' ! 変数キー character(STRING) :: file = '' ! 出力するファイル character(GT_TOKEN) :: varname = '' ! 変数名 integer(INTKIND) :: dimnum = 0 ! 依存する次元 character(GT_TOKEN) :: dimnames(NMLARRAY) = '' ! 依存する次元 character(GT_STRING) :: longname = '' ! 変数の記述的名称 character(GT_STRING) :: units = '' ! 変数の単位 character(GT_TOKEN) :: xtype = '' ! 変数の型 integer(INTKIND) :: StepInterval = 0 ! 出力ステップ間隔 integer(INTKIND) :: OutputStep = 0 ! 出力回数 namelist /varinfo_nml/ & & varkey , & ! 変数キー & file , & ! 出力するファイル & varname , & ! 変数名 & dimnum , & ! 依存する次元の数 & dimnames , & ! 依存する次元変数名 & longname , & ! 変数の記述的名称 & units , & ! 変数の単位 & xtype , & ! 変数の型 & StepInterval , & ! 出力回数 & OutputStep ! 出力ステップ間隔
変数 varattr の属性情報を与える。 NAMELIST に複数の varinfo_attr_nml を用意しておく事で 複数の変数に対し、複数の情報を与える事が可能である。 与えない場合には属性情報は付加されない。
attrtype には与える属性値の種類を設定する。 <URL:http://www.gfd-dennou.org/arch/gtool4/gt4f90io-current/doc/gt_history.htm#derived_gthistoryattr> を参照せよ。なお、arraysize に 1 以上の値を設定すると、 配列データが優先されて属性値に設定される。
character(GT_STRING) :: varattr = '' ! 属性を付加する変数名 character(GT_TOKEN) :: attrname = '' ! 属性名 character(GT_TOKEN) :: attrtype = '' ! 属性値の型 character(GT_STRING) :: cvalue = '' ! 属性の値 (文字) integer(INTKIND) :: ivalue = 0 ! 属性の値 (整数) real(REKIND) :: rvalue = 0.0 ! 属性の値 (単精度実数) real(DBKIND) :: dvalue = 0.0d0 ! 属性の値 (倍精度実数) logical :: lvalue = .false.! 属性の値 (論理) integer(INTKIND) :: arraysize= 0 ! 配列のサイズ integer(INTKIND) :: iarray(NMLARRAY) = 0 ! 属性の値 (整数) real(REKIND) :: rarray(NMLARRAY) = 0.0 ! 属性の値 (単精度実数) real(DBKIND) :: darray(NMLARRAY) = 0.0d0! 属性の値 (倍精度実数) namelist /varinfo_attr_nml/ & & varattr , & ! 属性を付加する変数名 & attrname , & ! 属性名 & attrtype , & ! 属性値の型 & cvalue , & ! 属性の値 (文字) & ivalue , & ! 属性の値 (整数) & rvalue , & ! 属性の値 (単精度実数) & dvalue , & ! 属性の値 (倍精度実数) & lvalue , & ! 属性の値 (論理) & arraysize , & ! 配列のサイズ & iarray , & ! 属性の値 (整数) & rarray , & ! 属性の値 (単精度実数) & darray ! 属性の値 (倍精度実数)
変数キー varkey に対応する変数情報 info を返す。 stat にはステータスを返す。正常に変数情報が返れば 0, varkey に対応する情報が無ければ 1, varinfo_init による初期化が行なわれていない場合は -1 を返す。
subroutine varinfo_inquire(varkey, info, stat)
use type_mod, only: STRING, TOKEN, INTKIND, REKIND, DBKIND use dc_trace, only: DbgMessage, BeginSub, EndSub use dc_error, only: StoreError, USR_ECHAR
character(*), intent(in) :: varkey ! 変数キー
type(VAR_INFO), intent(out) :: info ! VAR_INFO 変数 integer(INTKIND), intent(out) :: stat ! ステータス
varinfo_init で設定された値を破棄し、デフォルトに戻す。
subroutine varinfo_end
use dc_trace, only: DbgMessage, BeginSub, EndSub
varinfo_mod の内部サブルーチン。 構造体 VAR_INFO の1次元配列のコピーを行なう。
subroutine varinfo_copy(from, to)
use type_mod , only: STRING, INTKIND use dc_trace , only: BeginSub, EndSub, DbgMessage
type(VAR_INFO), intent(in) :: from(:)
type(VAR_INFO), intent(out) :: to(:)
varinfo_mod の内部サブルーチン。 構造体 GT_HISTORY_ATTR の1次元配列のコピーを行なう。
subroutine varinfo_attrs_copy(from, to)
use type_mod, only: STRING, INTKIND use gt4_history, only: GT_HISTORY_ATTR use dc_trace, only: BeginSub, EndSub, DbgMessage
type(GT_HISTORY_ATTR), intent(in) :: from(:)
type(GT_HISTORY_ATTR), intent(out) :: to(:)
varinfo_mod の内部サブルーチン。 構造体 GT_HISTORY_ATTR 変数の初期化を行なう。
subroutine varinfo_attrs_init0(attrs)
use type_mod, only: STRING, INTKIND use gt4_history, only: GT_HISTORY_ATTR use dc_trace, only: BeginSub, EndSub, DbgMessage
type(GT_HISTORY_ATTR), intent(inout):: attrs
varinfo_mod の内部サブルーチン。 構造体 GT_HISTORY_ATTR の1次元配列の初期化を行なう。
subroutine varinfo_attrs_init1(attrs)
use type_mod, only: STRING, INTKIND use gt4_history, only: GT_HISTORY_ATTR use dc_trace, only: BeginSub, EndSub, DbgMessage
type(GT_HISTORY_ATTR), intent(inout):: attrs(:)