\documentclass[titlepage]{jarticle}
\title{DCPAM Reference Manual}
\author{GFD Dennou Club}
\begin{document}
\maketitle
\tableofcontents
\clearpage
\section{\label{label:0} Module varinfo\_mod}

\begin{itemize}
\item Developers: Morikawa Yasuhiro
\item Version: \$Id: varinfo.f90,v 1.8 2005/01/19 08:52:45 morikawa Exp \$
\item Tag Name: \$Name:  \$
\item Change History: 
\end{itemize}
\subsection{\label{label:1} Overview}

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  にて用いられることが想定されている。

\subsection{\label{label:2} Error Handling}

\subsection{\label{label:3} Known Bugs}

\subsection{\label{label:4} Note}

\subsection{\label{label:5} Future Plans}

もしかすると、 io\_gt4\_out\_mod  モジュール内に格納される
べきかも知れません。

\subsection{\label{label:6} Dependency}

\begin{verbatim}
use type_mod,      only : INTKIND, STRING, TOKEN
use gt4_history,   only : GT_HISTORY_VARINFO, GT_HISTORY_ATTR
\end{verbatim}
\subsection{\label{label:7} Public Interface}

\begin{verbatim}
private
public :: VAR_INFO                                   ! derived types
public :: varinfo_init, varinfo_inquire, varinfo_end ! subroutines
\end{verbatim}
\subsection{\label{label:8} Generic Procedure}

\begin{verbatim}
interface varinfo_attrs_init
   module procedure varinfo_attrs_init0, varinfo_attrs_init1
end interface
\end{verbatim}
\subsection{\label{label:9} Derived Types}

変数に関する各情報を格納 (データ本体は含まない)

\begin{verbatim}
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), allocatable &
        &                  :: attrs(:)     ! 属性情報群
end type VAR_INFO
\end{verbatim}
\subsection{\label{label:10} Procedure Interface}

\subsubsection{\label{label:11} Initialize module and acquire NAMELIST}

モジュールを初期化し、NAMELIST から値を取得する。
NAMELIST から値が取得できないものに関しては上記のデフォルト値が
用いられる。

NAMELIST ファイルは、メインプログラムにて  nmlfile\_mod  の
 nmlfile\_init  で指定されることが想定されているが、
もしもこの初期化ルーチンより以前に指定されていなければ、
 nmlfile\_init  のデフォルトで指定される NAMELIST ファイルを
読む。

\begin{verbatim}
subroutine varinfo_init
\end{verbatim}
\paragraph{\label{label:12} Dependency} \

\begin{verbatim}
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
\end{verbatim}
\paragraph{\label{label:13} NAMELIST varinfo\_nml} \

変数に関する基本情報を設定するための 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 が用いられる。

\begin{verbatim}
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        ! 出力ステップ間隔
\end{verbatim}
\paragraph{\label{label:14} NAMELIST varinfo\_attr\_nml} \

変数 varattr の属性情報を与える。
NAMELIST に複数の varinfo\_attr\_nml を用意しておく事で
複数の変数に対し、複数の情報を与える事が可能である。
与えない場合には属性情報は付加されない。

attrtype には与える属性値の種類を設定する。
$<$URL:http://www.gfd-dennou.org/arch/gtool4/gt4f90io-current/doc/gt\_history.htm\#derived\_gthistoryattr$>$
を参照せよ。なお、arraysize に 1 以上の値を設定すると、
配列データが優先されて属性値に設定される。

\begin{verbatim}
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            ! 属性の値 (倍精度実数)
\end{verbatim}
\subsubsection{\label{label:15} Return Variable Information about varkey.}

変数キー varkey に対応する変数情報 info を返す。
stat にはステータスを返す。正常に変数情報が返れば 0,
varkey に対応する情報が無ければ 1,  varinfo\_init 
による初期化が行なわれていない場合は -1 を返す。

\begin{verbatim}
subroutine varinfo_inquire(varkey, info, stat)
\end{verbatim}
\paragraph{\label{label:16} Dependency} \

\begin{verbatim}
use type_mod,  only: STRING, TOKEN, INTKIND, REKIND, DBKIND
use dc_trace,  only: DbgMessage, BeginSub, EndSub
use dc_error,  only: StoreError, USR_ECHAR
\end{verbatim}
\paragraph{\label{label:17} Input} \

\begin{verbatim}
character(*),     intent(in)  :: varkey ! 変数キー
\end{verbatim}
\paragraph{\label{label:18} Output} \

\begin{verbatim}
type(VAR_INFO),   intent(out) :: info   ! VAR_INFO 変数
integer(INTKIND), intent(out) :: stat   ! ステータス
\end{verbatim}
\subsubsection{\label{label:19} Terminate module}

varinfo\_init で設定された値を破棄し、デフォルトに戻す。

\begin{verbatim}
subroutine varinfo_end
\end{verbatim}
\paragraph{\label{label:20} Dependency} \

\begin{verbatim}
use dc_trace,  only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\subsubsection{\label{label:21} Copy VAR\_INFO array.}

varinfo\_mod の内部サブルーチン。
構造体  VAR\_INFO  の1次元配列のコピーを行なう。

\begin{verbatim}
subroutine varinfo_copy(from, to)
\end{verbatim}
\paragraph{\label{label:22} Dependency} \

\begin{verbatim}
use type_mod   , only: STRING, INTKIND
use dc_trace   , only: BeginSub, EndSub, DbgMessage
\end{verbatim}
\paragraph{\label{label:23} Input} \

\begin{verbatim}
type(VAR_INFO), intent(in)  :: from(:)
\end{verbatim}
\paragraph{\label{label:24} Output} \

\begin{verbatim}
type(VAR_INFO), intent(out) :: to(:)
\end{verbatim}
\subsubsection{\label{label:25} Copy GT\_HISTORY\_ATTR array.}

varinfo\_mod の内部サブルーチン。
構造体 GT\_HISTORY\_ATTR
の1次元配列のコピーを行なう。

\begin{verbatim}
subroutine varinfo_attrs_copy(from, to)
\end{verbatim}
\paragraph{\label{label:26} Dependency} \

\begin{verbatim}
use type_mod, only: STRING, INTKIND
use gt4_history, only: GT_HISTORY_ATTR
use dc_trace, only: BeginSub, EndSub, DbgMessage
\end{verbatim}
\paragraph{\label{label:27} Input} \

\begin{verbatim}
type(GT_HISTORY_ATTR), intent(in)  :: from(:)
\end{verbatim}
\paragraph{\label{label:28} Output} \

\begin{verbatim}
type(GT_HISTORY_ATTR), intent(out) :: to(:)
\end{verbatim}
\subsubsection{\label{label:29} Initialize GT\_HISTORY\_ATTR variable.}

varinfo\_mod の内部サブルーチン。
構造体 GT\_HISTORY\_ATTR
変数の初期化を行なう。

\begin{verbatim}
subroutine varinfo_attrs_init0(attrs)
\end{verbatim}
\paragraph{\label{label:30} Dependency} \

\begin{verbatim}
use type_mod, only: STRING, INTKIND
use gt4_history, only: GT_HISTORY_ATTR
use dc_trace, only: BeginSub, EndSub, DbgMessage
\end{verbatim}
\paragraph{\label{label:31} In/Out} \

\begin{verbatim}
type(GT_HISTORY_ATTR), intent(inout):: attrs
\end{verbatim}
\subsubsection{\label{label:32} Initialize GT\_HISTORY\_ATTR variable.}

varinfo\_mod の内部サブルーチン。
構造体 GT\_HISTORY\_ATTR
の1次元配列の初期化を行なう。

\begin{verbatim}
subroutine varinfo_attrs_init1(attrs)
\end{verbatim}
\paragraph{\label{label:33} Dependency} \

\begin{verbatim}
use type_mod, only: STRING, INTKIND
use gt4_history, only: GT_HISTORY_ATTR
use dc_trace, only: BeginSub, EndSub, DbgMessage
\end{verbatim}
\paragraph{\label{label:34} In/Out} \

\begin{verbatim}
type(GT_HISTORY_ATTR), intent(inout):: attrs(:)
\end{verbatim}

\end{document}
