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

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

This module output data with gtool4 netCDF conventions.

gtool4 netCDF 規約に基づくデータを出力する。

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

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

\begin{itemize}
\item 1つのファイルに異なる StepInterval が設定される場合、
    HistoryCreate には先に設定されたものの StepInterval で時間間隔を
    決めるため、後で設定した変数の StepInterval が前のものよりも
    小さい場合には整合的でなくなる。

\begin{itemize}
\item 回避方法

\begin{itemize}
\item 異なる StepInterval を設定する場合にはそれらは
        別個のファイルに分ける。
\end{itemize}
\end{itemize}
\end{itemize}
\subsection{\label{label:4} Note}

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

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

\begin{verbatim}
use type_mod,      only : REKIND, DBKIND, INTKIND, TOKEN, STRING
use axis_type_mod, only : AXISINFO
use gt4_history,   only : GT_HISTORY
\end{verbatim}
\subsection{\label{label:7} Public Interface}

\begin{verbatim}
private
public :: io_gt4_out_init, io_gt4_out_end    ! subroutines
public :: io_gt4_out_SetDims                 ! subroutines
public :: io_gt4_out_SetVars, io_gt4_out_Put ! subroutines
\end{verbatim}
\subsection{\label{label:8} Generic Procedure}

\begin{verbatim}
interface io_gt4_out_Put
   module procedure io_gt4_out_Put3Real
   module procedure io_gt4_out_Put2Real
   module procedure io_gt4_out_Put0Real
   module procedure io_gt4_out_Put3Double
   module procedure io_gt4_out_Put2Double
   module procedure io_gt4_out_Put0Double
end interface
\end{verbatim}
\subsection{\label{label:9} Derived Types}

出力変数データ格納用構造体。 io\_gt4\_out\_SetVars  で設定。

\begin{verbatim}
type IO_GT4_OUT_VARS
   character(STRING), allocatable :: varkeys(:) ! 変数キー
   character(STRING)              :: file       ! 出力ファイル
   type(GT_HISTORY)               :: gt_history ! GT_HISTORY 変数
   logical                        :: created    ! HistoryCreate 済かどうか
   type(IO_GT4_OUT_VARS), pointer :: next
end type IO_GT4_OUT_VARS
\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 io_gt4_out_init
\end{verbatim}
\paragraph{\label{label:12} Dependency} \

\begin{verbatim}
use type_mod,    only : REKIND, DBKIND, INTKIND, TOKEN, STRING
use nmlfile_mod, only : nmlfile_init, nmlfile_open, nmlfile_close
use time_mod,    only : time_init
use varinfo_mod, only : varinfo_init
use dc_trace,    only : SetDebug, BeginSub, EndSub, DbgMessage
use dc_message,  only : MessageNotify
\end{verbatim}
\paragraph{\label{label:13} NAMELIST} \

出力ファイル設定。
file に与えたものがデフォルトの出力ファイルとなる。
その他の情報は出力する gtool4 netCDF データの大域データとして
与えられる。

\begin{verbatim}
character(STRING) ::                      &
     & file         = 'result.nc'       , & ! 出力ファイル名 (デフォルト)
     & title        = 'GCM Test'        , & ! タイトル
     & source       = 'DCPAM'           , & ! モデル名 (作成手段)
     & institution  = 'GFD Dennou Club'     ! 実行者名 (作成者)

namelist /io_gt4_out_nml/ &
     & file        , & ! 出力ファイル名 (デフォルト)
     & title       , & ! タイトル
     & source      , & ! モデル名 (作成手段)
     & institution     ! 実行者名 (作成者)
\end{verbatim}
\subsubsection{\label{label:14} Set Dimension}

出力する gtool4 netCDF データの座標情報を設定する。
複数回呼ぶ事で複数の座標を設定する。
現在の所、設定した座標は出力する全ての netCDF ファイルに
出力される。

\begin{verbatim}
subroutine io_gt4_out_SetDims(axis)
\end{verbatim}
\paragraph{\label{label:15} Dependency} \

\begin{verbatim}
use type_mod,      only : REKIND, DBKIND, INTKIND, TOKEN, STRING
use axis_type_mod, only : AXISINFO, axis_type_copy
use dc_trace,      only : SetDebug, BeginSub, EndSub, DbgMessage
\end{verbatim}
\paragraph{\label{label:16} Input} \

\begin{verbatim}
type(AXISINFO), intent(in)   :: axis
\end{verbatim}
\subsubsection{\label{label:17} Set Variables}

出力する変数を設定する。
複数回呼ぶ事で複数の変数を設定できる。
このサブルーチンで設定するのは変数キー varkey のみであり、
具体的な情報は  varinfo\_mod  の  varinfo\_init  にて
NAMELIST  varinfo\_nml  で設定される。
(本来は、デフォルトの値はプログラム無いにハードコードすべきかも知れない)。

\begin{verbatim}
subroutine io_gt4_out_SetVars(varkey)
\end{verbatim}
\paragraph{\label{label:18} Dependency} \

\begin{verbatim}
use type_mod,    only : REKIND, DBKIND, INTKIND, TOKEN, STRING
use time_mod,    only : InitTime, DelTime, StepInterval,    &
     &                  tvar, ttype, tname, tunit
use varinfo_mod, only : varinfo_inquire, VAR_INFO
use gt4_history, only : GT_HISTORY   , GT_HISTORY_AXIS    , &
     &                  HistoryCreate, HistoryAddVariable , &
     &                  HistoryCopyVariable               , &
     &                  HistoryAddAttr, HistoryPut
use dc_string,   only : JoinChar
use dc_trace,    only : SetDebug, BeginSub, EndSub, DbgMessage
\end{verbatim}
\paragraph{\label{label:19} Input} \

\begin{verbatim}
character(*), intent(in)      :: varkey      ! 変数キー
\end{verbatim}
\subsubsection{\label{label:20} Put 3-Dimensional Single Precision Data to netCDF file}

変数キー varkey にデータ xyz\_Var を出力する。
 varinfo\_mod  の  varinfo\_init  の
NAMELIST  varinfo\_nml  で対応する varkey が
与えられていない場合、データは出力されない。

各 varkey に対応する  varinfo\_mod  の StepInterval および
OutputStep と、 time\_mod  の CurrentLoop から、
出力するタイミングが正しいかどうかをチェックして出力する。
出力するタイミングでないと判定された場合は何もせずに終了する。
なお、 varinfo\_mod  の StepInterval および OutputStep が
無効な値 (ゼロ以下) の場合には  time\_mod  の StepInterval 
と OutputStep が用いられる。具体的な判定方法は以下の通りである。

\begin{itemize}
\item CurrentLoop を StepInterval で割り、余りが 0 の場合には出力。
\item CurrentLoop が StepInterval * OutputStep よりも
    大きくなってしまったら以降出力は行なわない。
\end{itemize}
\begin{verbatim}
subroutine io_gt4_out_Put3Real(varkey, xyz_Var)
\end{verbatim}
\paragraph{\label{label:21} Dependency} \

\begin{verbatim}
use type_mod,    only : REKIND, DBKIND, INTKIND, TOKEN, STRING
use time_mod,    only : StepInterval, OutputStep, CurrentLoop
use varinfo_mod, only : varinfo_inquire, VAR_INFO
use gt4_history, only : HistoryPut
use dc_trace,    only : SetDebug, BeginSub, EndSub, DbgMessage
use dc_message,  only : MessageNotify
\end{verbatim}
\paragraph{\label{label:22} Input} \

\begin{verbatim}
character(*),      intent(in):: varkey         ! 変数名
real(REKIND),      intent(in):: xyz_Var(:,:,:) ! 出力データ
\end{verbatim}
\subsubsection{\label{label:23} Put 2-Dimensional Single Precision Data to netCDF file}

機能は  io\_gt4\_out\_Put3Real  と基本的に同じ。
ただしこちらは単精度実数 2 次元のデータを出力する。

\begin{verbatim}
subroutine io_gt4_out_Put2Real(varkey, xy_Var)
\end{verbatim}
\paragraph{\label{label:24} Dependency} \

\begin{verbatim}
use type_mod,    only : REKIND, DBKIND, INTKIND, TOKEN, STRING
use time_mod,    only : StepInterval, OutputStep, CurrentLoop
use varinfo_mod, only : varinfo_inquire, VAR_INFO
use gt4_history, only : HistoryPut
use dc_trace,    only : SetDebug, BeginSub, EndSub, DbgMessage
use dc_message,  only : MessageNotify
\end{verbatim}
\paragraph{\label{label:25} Input} \

\begin{verbatim}
character(*),      intent(in):: varkey         ! 変数名
real(REKIND),      intent(in):: xy_Var(:,:) ! 出力データ
\end{verbatim}
\subsubsection{\label{label:26} Put 0-Dimensional Single Precision Data to netCDF file}

機能は  io\_gt4\_out\_Put3Real  と基本的に同じ。
ただしこちらは単精度実数 0 次元のデータを出力する。

\begin{verbatim}
subroutine io_gt4_out_Put0Real(varkey, Var)
\end{verbatim}
\paragraph{\label{label:27} Dependency} \

\begin{verbatim}
use type_mod,    only : REKIND, DBKIND, INTKIND, TOKEN, STRING
use time_mod,    only : StepInterval, OutputStep, CurrentLoop
use varinfo_mod, only : varinfo_inquire, VAR_INFO
use gt4_history, only : HistoryPut
use dc_trace,    only : SetDebug, BeginSub, EndSub, DbgMessage
use dc_message,  only : MessageNotify
\end{verbatim}
\paragraph{\label{label:28} Input} \

\begin{verbatim}
character(*),      intent(in):: varkey         ! 変数名
real(REKIND),      intent(in):: Var ! 出力データ
\end{verbatim}
\subsubsection{\label{label:29} Put 3-Dimensional Double Precision Data to netCDF file}

機能は  io\_gt4\_out\_Put3Real  と基本的に同じ。
ただしこちらは倍精度実数 3 次元のデータを出力する。

\begin{verbatim}
subroutine io_gt4_out_Put3Double(varkey, xyz_Var)
\end{verbatim}
\paragraph{\label{label:30} Dependency} \

\begin{verbatim}
use type_mod,    only : REKIND, DBKIND, INTKIND, TOKEN, STRING
use time_mod,    only : StepInterval, OutputStep, CurrentLoop
use varinfo_mod, only : varinfo_inquire, VAR_INFO
use gt4_history, only : HistoryPut
use dc_trace,    only : SetDebug, BeginSub, EndSub, DbgMessage
use dc_message,  only : MessageNotify
\end{verbatim}
\paragraph{\label{label:31} Input} \

\begin{verbatim}
character(*),      intent(in):: varkey         ! 変数名
real(DBKIND),      intent(in):: xyz_Var(:,:,:) ! 出力データ
\end{verbatim}
\subsubsection{\label{label:32} Put 2-Dimensional Double Precision Data to netCDF file}

機能は  io\_gt4\_out\_Put3Real  と基本的に同じ。
ただしこちらは倍精度実数 2 次元のデータを出力する。

\begin{verbatim}
subroutine io_gt4_out_Put2Double(varkey, xy_Var)
\end{verbatim}
\paragraph{\label{label:33} Dependency} \

\begin{verbatim}
use type_mod,    only : REKIND, DBKIND, INTKIND, TOKEN, STRING
use time_mod,    only : StepInterval, OutputStep, CurrentLoop
use varinfo_mod, only : varinfo_inquire, VAR_INFO
use gt4_history, only : HistoryPut
use dc_trace,    only : SetDebug, BeginSub, EndSub, DbgMessage
use dc_message,  only : MessageNotify
\end{verbatim}
\paragraph{\label{label:34} Input} \

\begin{verbatim}
character(*),      intent(in):: varkey         ! 変数名
real(DBKIND),      intent(in):: xy_Var(:,:) ! 出力データ
\end{verbatim}
\subsubsection{\label{label:35} Put 2-Dimensional Double Precision Data to netCDF file}

機能は  io\_gt4\_out\_Put3Real  と基本的に同じ。
ただしこちらは倍精度実数 2 次元のデータを出力する。

\begin{verbatim}
subroutine io_gt4_out_Put0Double(varkey, Var)
\end{verbatim}
\paragraph{\label{label:36} Dependency} \

\begin{verbatim}
use type_mod,    only : REKIND, DBKIND, INTKIND, TOKEN, STRING
use time_mod,    only : StepInterval, OutputStep, CurrentLoop
use varinfo_mod, only : varinfo_inquire, VAR_INFO
use gt4_history, only : HistoryPut
use dc_trace,    only : SetDebug, BeginSub, EndSub, DbgMessage
use dc_message,  only : MessageNotify
\end{verbatim}
\paragraph{\label{label:37} Input} \

\begin{verbatim}
character(*),      intent(in):: varkey         ! 変数名
real(DBKIND),      intent(in):: Var ! 出力データ
\end{verbatim}
\subsubsection{\label{label:38} Terminate module}

 io\_gt4\_out\_init で設定された値を破棄し、
デフォルトの値に戻す。
また、HistoryClose によって、HistoryCreate 等に対応する終了処理
を行なう。

\begin{verbatim}
subroutine io_gt4_out_end
\end{verbatim}
\paragraph{\label{label:39} Dependency} \

\begin{verbatim}
use type_mod,    only : REKIND, DBKIND, INTKIND, TOKEN, STRING
use gt4_history, only : HistoryClose
use dc_trace,    only : SetDebug, BeginSub, EndSub, DbgMessage
\end{verbatim}

\end{document}
