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

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

This module provide parameter of KIND.

種別型パラメタ値を提供するモジュールである。
この他のモジュールおよびプログラムは原則的に全て
このモジュールを参照するようにする。
そのようにすることで、種別型パラメタ値を変更したい場合、
このモジュール内の値を変更するだけで全てのモジュールに
その変更が適用される。

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

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

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

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

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

none.

\subsection{\label{label:7} Public Interface}

\begin{verbatim}
private
public :: REKIND, DBKIND, INTKIND, TOKEN, STRING, NMLARRAY ! variables
\end{verbatim}
\subsection{\label{label:8} Public Data}

\begin{verbatim}
integer, parameter:: TOKEN   = 32   ! 単語の文字列の長さ
integer, parameter:: STRING  = 500  ! 文章の文字列の長さ

integer, parameter:: REKIND  = kind(0.0e0) ! 単精度実数の精度
integer, parameter:: DBKIND  = kind(0.0d0) ! 倍精度実数の精度
integer, parameter:: INTKIND = kind(0)     ! 整数の精度

integer, parameter:: NMLARRAY = 100 ! NAMELIST で配列を取得する際の
                                    ! デフォルトの配列サイズ
\end{verbatim}
\section{\label{label:9} Module dc\_message
}

\begin{itemize}
\item Editor: Morikawa Yasuhiro
\item Last Update: 2004/12/25
\item Created: 2004/12/23
\end{itemize}
\subsection{\label{label:10} Overview
}

エラー処理も含めたメッセージ・警告の出力を行なう。
dcl の MSGDMP.f
の上位互換としても利用できるようにしてある (つもり)。
エラー処理自体は dc\_error モジュールに依存。
出力装置は標準出力に決め打ち。

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

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

\subsection{\label{label:13} Note
}

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

\subsection{\label{label:15} Public Interface
}

\begin{verbatim}
private
public:: MessageNotify ! subroutines
\end{verbatim}
\subsection{\label{label:16} Generic Procedure
}

\begin{verbatim}
interface MessageNotify
   module procedure MessageNotifyC
   module procedure MessageNotifyI
end interface
\end{verbatim}
\subsection{\label{label:17} Procedure Interface
}

\subsubsection{\label{label:18} メッセージ・警告・エラーの出力
}

メッセージ・警告・エラーを出力したい場合に用います。
標準出力に出力されます。

文字型変数 where にはプログラム名 (サブルーチン名) など、
プログラム内のどこでメッセージを出力するのかを示すものを与えます。

文字型変数 message には、出力したい文字列を与えます。
オプション変数 i, r, d, L, s, n, c1, c2, c3 を付加する事も出来ます。
詳細に関しては dc\_string モジュールの CPrintf を参照して下さい。

文字型変数 level は出力するメッセージの種類を決める引数で、
{\em 'W'} (または{\em 'Warning'}
など {\em 'W'} で始まる文字) を与える事で{\em 警告}を、
{\em 'E'} (または{\em 'Error'}
など {\em 'E'} で始まる文字) を与える事で
{\em エラー (メッセージ出力後プログラムを終了) }を、
それ以外の文字を与える事で{\em 通常のメッセージ}を出力します。
なお、エラー出力する場合、エラーコード
は USR\_ECHAR となります。

\begin{verbatim}
subroutine MessageNotifyC(level, where, message, &
     & i, r, d, L, n, c1, c2, c3)
\end{verbatim}
\paragraph{\label{label:19} Dependency
} \

\begin{verbatim}
use dc_types  ,only: string
use dc_string ,only: UChar, StrHead, Printf, CPrintf
use dc_error  ,only: StoreError, USR_ECHAR
\end{verbatim}
\paragraph{\label{label:20} Input
} \

\begin{verbatim}
character(*), intent(in)          :: level
character(*), intent(in)          :: where
character(*), intent(in)          :: message
integer     , intent(in), optional:: i(:), n(:)
real        , intent(in), optional:: r(:)
real(8)     , intent(in), optional:: d(:)
logical     , intent(in), optional:: L(:)
character(*), intent(in), optional:: c1, c2, c3
\end{verbatim}
\subsubsection{\label{label:21} メッセージ・警告・エラーの出力
}

原則的に MessageNotifyC と同様ですが、こちらは第１引数に数値型変数
number をとります。この number はそのまま StoreError に引き渡されます。

\begin{verbatim}
subroutine MessageNotifyI(number, where, message, &
     & i, r, d, L, n, c1, c2, c3)
\end{verbatim}
\paragraph{\label{label:22} Dependency
} \

\begin{verbatim}
use dc_string ,only: CPrintf
use dc_error  ,only: StoreError, USR_ECHAR
\end{verbatim}
\paragraph{\label{label:23} Input
} \

\begin{verbatim}
integer,      intent(in)          :: number
character(*), intent(in)          :: where
character(*), intent(in), optional:: message
integer     , intent(in), optional:: i(:), n(:)
real        , intent(in), optional:: r(:)
real(8)     , intent(in), optional:: d(:)
logical     , intent(in), optional:: L(:)
character(*), intent(in), optional:: c1, c2, c3
\end{verbatim}
\subsection{\label{label:24} Output Example
}

\begin{verbatim}
　
*** MESSAGE [where] ***  message
　
*** WARNING [where] ***  message
　
*** ERROR (Code number) [where] *** message
\end{verbatim}
\section{\label{label:25} Module nmlfile\_mod}

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

This module support to input NAMELIST.

NAMELIST を取得するための支援モジュールである。
ファイルから NAMELIST を取得する場合に便利な
サブルーチンを用意している。
NAMELIST を取得するモジュールおよびプログラムは、
原則的に全てこのモジュールを呼ぶ。

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

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

\subsection{\label{label:29} Note}

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

現在、あるプログラムで読み込む事が可能な NAMELIST ファイルは、
メインプログラムで nmlfile\_init(nml) と呼んだ際の nml という
ファイル名に固定されてしまう。実行プログラムで引数としてファイル名を
取得したり、標準入力からファイル名を取得するなどして、
再コンパイル無しに NAMELIST ファイルを変更できると良いかもしれない。

\subsection{\label{label:31} Dependency}

\begin{verbatim}
use type_mod,   only : TOKEN, INTKIND, STRING
\end{verbatim}
\subsection{\label{label:32} Public Interface}

\begin{verbatim}
private
public :: nmlfile_init, nmlfile_end    ! subroutines
public :: nmlfile_open, nmlfile_close  ! subroutines
public :: nmlfile                      ! functions
\end{verbatim}
\subsection{\label{label:33} Procedure Interface}

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

nmlfile\_mod モジュールの初期化ルーチン。
引数 nml に渡された文字列を NAMELIST ファイル名として格納し、
そのファイルを nmlfile\_open で open、 nmlfile\_close で
close する。

メインプログラムにおいて、他のモジュールの初期化ルーチンよりも先に
呼ばれる事が想定されており、その際に引数 nml に渡された NAMELIST
ファイル名を以降 (正確には nmlfile\_end が呼ばれるまで)、
他のモジュールでも利用する事となる。

もしも、メインプログラムにおいて呼ばなかった場合や
引数無しで呼ばれた場合、または引数に空白を与えた場合は、
デフォルトの NAMELIST ファイル {\em  nmlfile.nml } が読み込まれる。

\begin{verbatim}
subroutine nmlfile_init(nml)
\end{verbatim}
\paragraph{\label{label:35} Dependency} \

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

\begin{verbatim}
character(*), intent(in), optional :: nml  ! NAMELIST file name
\end{verbatim}
\subsubsection{\label{label:37} Open NAMELIST file, and Return Device Number}

nmlfile\_mod に格納している NAMELIST ファイルを「適当な」装置番号で
Open し、その装置番号を nmlunit として返し、readable に .true. を
返す。もしも Open が失敗した、またはファイルが読み取り不可能な
場合には nmlunit に -1 を、readable に .false. を返す。

なお、以前にこのプログラムにて NAMELIST ファイルが Open されている場合、
既に Open されている装置番号を自動的に閉じる。

\begin{verbatim}
subroutine nmlfile_open(nmlunit, readable)
\end{verbatim}
\paragraph{\label{label:38} Dependency} \

\begin{verbatim}
use type_mod,  only: STRING, TOKEN, INTKIND
use dc_trace,  only: BeginSub, EndSub, DbgMessage
use dc_string, only: CPrintf
use dc_message,only: MessageNotify
\end{verbatim}
\paragraph{\label{label:39} Output} \

\begin{verbatim}
integer(INTKIND), intent(out):: nmlunit  ! Device Number for nml file
logical         , intent(out):: readable ! Readable Flag
\end{verbatim}
\subsubsection{\label{label:40} Close NAMELIST file}

nmlfile\_open で開いたファイルを Close する。
nmlfile\_open が呼ばれていない場合には何もせずに終了する。

\begin{verbatim}
subroutine nmlfile_close()
\end{verbatim}
\paragraph{\label{label:41} Dependency} \

\begin{verbatim}
use type_mod,  only: STRING, TOKEN, INTKIND
use dc_trace,  only: BeginSub, EndSub, DbgMessage
use dc_string, only: CPrintf
use dc_message,only: MessageNotify
\end{verbatim}
\subsubsection{\label{label:42} Return NAMELIST file name}

\begin{verbatim}
character(TOKEN) function nmlfile() result(result)
\end{verbatim}
\paragraph{\label{label:43} Dependency} \

\begin{verbatim}
use type_mod,  only: STRING, TOKEN, INTKIND
use dc_trace,  only: BeginSub, EndSub, DbgMessage
use dc_string, only: CPrintf
use dc_message,only: MessageNotify
\end{verbatim}
\subsubsection{\label{label:44} Terminate module}

nmlfile\_init で設定された値を破棄し、
読み込む NAMELIST ファイルの名前を {\em  nmlfile.nml } に戻す。

\begin{verbatim}
subroutine nmlfile_end()
\end{verbatim}
\paragraph{\label{label:45} Dependency} \

\begin{verbatim}
use type_mod,  only: STRING
use dc_trace,  only: BeginSub, EndSub, DbgMessage
\end{verbatim}
\section{\label{label:46} Module constants\_mod}

\begin{itemize}
\item Developers: Morikawa Yasuhiro
\item Version: \$Id: constants.f90,v 1.10 2005/01/20 11:03:46 morikawa Exp \$
\item Tag Name: \$Name:  \$
\item Change History: 
\end{itemize}
\subsection{\label{label:47} Overview}

This module set physical constants.
Default value is standard condition on the earth.
These values could be changed by NAMELIST.

物理定数を設定するためのモジュールである。
デフォルトでは地球上の標準状態の値を持っているが、
NAMELIST により変更することも可能である。

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

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

\subsection{\label{label:50} Note}

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

\subsection{\label{label:52} Dependency}

\begin{verbatim}
use type_mod, only : REKIND, DBKIND, INTKIND, TOKEN, STRING
\end{verbatim}
\subsection{\label{label:53} Public Interface}

\begin{verbatim}
private
public :: constants_init, constants_end  ! subroutines
public :: & ! variables
     &    PI, R0, Omega, Grav, Cp, RAir, EL, CpVap, RVap,  &
     &    DH2O, EpsV, ES0, StB, FKarm, EpsVT, SecPerDay,   &
     &    EFoldTime, TempAve, TimeFilter, VisOrder,        &
     &    TimeFilterStepInt
\end{verbatim}
\subsection{\label{label:54} Public Data}

\begin{verbatim}
real(DBKIND), save  ::  & ! follow data is default values.
     &
     & PI        = 3.141592653589793 , & ! 円周率
     & R0        = 6.371d6           , & ! 球の半径
     & Omega     = 7.292d-5          , & ! 回転角速度
     & Grav      = 9.8d0             , & ! 重力加速度
     &
     & Cp        = 1004.6d0          , & ! 大気定圧比熱
     & RAir      = 287.04d0          , & ! 大気気体定数
     & EL        = 2.5d6             , & ! 水の凝結の潜熱
     & CpVap     = 1810.0d0          , & ! 水蒸気定圧比熱
     & RVap      = 461.0d0           , & ! 水蒸気気体定数
     & DH2O      = 1000.0d0          , & ! 水の密度
     & EpsV      = 0.6226464208      , & ! 水と大気の分子量比ε
     & ES0       = 611.0d0           , & ! ０℃飽和蒸気圧：Ｐａ
     & StB       = 5.67d-8           , & ! Stefan-Boltzman
     & FKarm     = 0.4d0             , & ! Karman 定数
     & EpsVT     = 0.6060479376      , & ! 1/ε-1
     &
     & SecPerDay = 86400.0d0         , & ! 1日あたりの秒数 
     &
     & EFoldTime = 8640.0d0          , & ! 最大波数に対する e-folding time
     & TempAve   = 300.0             , & ! 平均温度
     & TimeFilter= 0.05                  ! 時間フィルター係数

integer(INTKIND), save ::  &
     & VisOrder          = 4         , & ! 超粘性の次数
     & TimeFilterStepInt = 1             ! 時間フィルターするステップ間隔
\end{verbatim}
\subsection{\label{label:55} Procedure Interface}

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

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

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

\begin{verbatim}
subroutine constants_init
\end{verbatim}
\paragraph{\label{label:57} Dependency} \

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

\begin{verbatim}
namelist /constants_nml/ &
     &
     & PI                , & ! 円周率
     & R0                , & ! 球の半径
     & Omega             , & ! 回転角速度
     & Grav              , & ! 重力加速度
     &
     & Cp                , & ! 大気定圧比熱
     & RAir              , & ! 大気気体定数
     & EL                , & ! 水の凝結の潜熱
     & CpVap             , & ! 水蒸気定圧比熱
     & RVap              , & ! 水蒸気気体定数
     & DH2O              , & ! 水の密度
     & EpsV              , & ! 水と大気の分子量比ε
     & ES0               , & ! ０℃飽和蒸気圧：Ｐａ
     & StB               , & ! Stefan-Boltzman
     & FKarm             , & ! Karman 定数
     & EpsVT             , & ! 1/ε-1
     &
     & SecPerDay         , & ! 1日あたりの秒数
     &
     & EFoldTime         , & ! 最大波数に対する e-folding time
     & TempAve           , & ! 平均温度
     & TimeFilter        , & ! 時間フィルター係数
     & TimeFilterStepInt , & ! 時間フィルターするステップ間隔
     & VisOrder              ! 超粘性の次数
\end{verbatim}
\subsubsection{\label{label:59} Terminate module}

NAMELIST から読み込んだ値を破棄し、各定数をデフォルトの値に戻す。

\begin{verbatim}
subroutine constants_end
\end{verbatim}
\paragraph{\label{label:60} Dependency} \

\begin{verbatim}
use dc_trace,    only : BeginSub, EndSub, DbgMessage
\end{verbatim}
\section{\label{label:61} Module time\_mod}

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

This module set "Time" and "Step".

時刻や「計算ステップ」に関して設定するためのモジュールである。

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

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

\subsection{\label{label:65} Note}

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

\subsection{\label{label:67} Dependency}

\begin{verbatim}
use type_mod,    only : REKIND, DBKIND, INTKIND, TOKEN, STRING
\end{verbatim}
\subsection{\label{label:68} Public Interface}

\begin{verbatim}
private
public :: time_init, time_progress, time_end,  & ! subroutines
     &    InitTime, DelTime,                   & ! variables
     &    StepInterval, OutputStep,            & ! variables
     &    CurrentTime, CurrentLoop,            & ! variables
     &    tvar, ttype, tname, tunit              ! variables
\end{verbatim}
\subsection{\label{label:69} Public Data}

データ出力の際のステップ間隔や出力回数などに関する情報。
 time\_init  で設定。

\begin{verbatim}
real(DBKIND)     , save ::  &
     & InitTime = 0.0     , & ! 積分開始時刻
     & DelTime  = 300         ! 時間ステップ

integer(INTKIND) , save ::  & 
     & StepInterval = 1   , & ! 出力ステップ間隔
     & OutputStep   = 1       ! 出力回数

character(STRING), save ::  &
     & tvar  = 'time'     , & ! 時刻変数名
     & ttype = 'float'    , & ! 時刻変数の型
     & tname = 'time'     , & ! 時刻の名称
     & tunit = 'seconds'      ! 時刻の単位
\end{verbatim}
現在の時刻やループ回数を保持してある変数。
 time\_init  で初期設定され、 time\_progress 
で更新される。

\begin{verbatim}
real(DBKIND)     , save :: CurrentTime = 0.0  ! 現在時刻
integer(INTKIND) , save :: CurrentLoop = 1    ! 現在のループ回数
\end{verbatim}
\subsection{\label{label:70} Procedure Interface}

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

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

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

\begin{verbatim}
subroutine time_init
\end{verbatim}
\paragraph{\label{label:72} Dependency} \

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

InitTime に与えられた数値に DelTime を加えた値が、
CurrentTime に代入される。

\begin{verbatim}
namelist /time_nml/    &
     &
     & InitTime      , &   ! 積分開始時刻
     & DelTime       , &   ! 時間ステップ
     &
     & StepInterval  , &   ! 出力回数
     & OutputStep    , &   ! 出力ステップ間隔
     &
     & tvar          , &   ! 時刻変数名
     & ttype         , &   ! 時刻変数の型
     & tname         , &   ! 時刻の名称
     & tunit               ! 時刻の単位
\end{verbatim}
\subsubsection{\label{label:74} Progress Time and Number of Loop}

CurrentTime を  time\_init  で指定された DelTime 分だけ進め、
CurrentLoop を 1 増やす。
今の所、時間を指定したり巻戻したりできない。

\begin{verbatim}
subroutine time_progress
\end{verbatim}
\paragraph{\label{label:75} Dependency} \

\begin{verbatim}
use type_mod,    only : STRING
use dc_trace,    only : BeginSub, EndSub, DbgMessage
\end{verbatim}
\subsubsection{\label{label:76} Terminate module}

NAMELIST から読み込んだ値を破棄し、各定数をデフォルトの値に戻す。

\begin{verbatim}
subroutine time_end
\end{verbatim}
\paragraph{\label{label:77} Dependency} \

\begin{verbatim}
use type_mod,    only : STRING
use dc_trace,    only : BeginSub, EndSub, DbgMessage
\end{verbatim}
\section{\label{label:78} Module grid\_3d\_mod}

\begin{itemize}
\item Developers: Morikawa Yasuhiro
\item Version: \$Id: grid\_3d.f90,v 1.7 2005/01/19 08:52:30 morikawa Exp \$
\item Tag Name: \$Name:  \$
\item Change History: 
\end{itemize}
\subsection{\label{label:79} Overview}

This module set 3 Dimensional Grid Information.

3 次元の格子点情報の設定を行うためのモジュールである。

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

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

\subsection{\label{label:82} Note}

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

もしかすると、「３次元」という枠組ではなく、それぞれの次元に分けた
モジュールにすべきかも知れない。

\subsection{\label{label:84} Dependency}

\begin{verbatim}
use type_mod, only : INTKIND, STRING
\end{verbatim}
\subsection{\label{label:85} Public Interface}

\begin{verbatim}
private
public :: grid_3d_init, grid_3d_end ! subroutines
public :: im, jm, km                ! variables
\end{verbatim}
\subsection{\label{label:86} Public Data}

grid\_3d\_init において値が設定される。以下はデフォルト値。

\begin{verbatim}
integer(INTKIND), save :: im = 64 , &  ! 格子点の設定(X)
     &                    jm = 32 , &  ! 格子点の設定(Y)
     &                    km = 12      ! 格子点の設定(Y)
\end{verbatim}
\subsection{\label{label:87} Procedure Interface}

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

NAMELIST から x 軸、 y 軸、 z 軸の格子点数を取得する。
取得できない場合、またはゼロ以下の値が与えられた場合、
上記のデフォルト値が強制的に設定される。

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

\begin{verbatim}
subroutine grid_3d_init
\end{verbatim}
\paragraph{\label{label:89} Dependency} \

\begin{verbatim}
use type_mod,   only: INTKIND
use nmlfile_mod,only: nmlfile_init, nmlfile_open, nmlfile_close
use dc_trace,   only: DbgMessage, BeginSub, EndSub
use dc_message, only: MessageNotify
\end{verbatim}
\paragraph{\label{label:90} NAMELIST} \

\begin{verbatim}
namelist /grid_3d_nml/ & 
     & im , &      ! 東西格子点数
     & jm , &      ! 南北格子点数
     & km          ! 鉛直格子点数
\end{verbatim}
\subsubsection{\label{label:91} Terminate module}

NAMELIST から読み込んだ値を破棄し、各定数をデフォルトの値に戻す。

\begin{verbatim}
subroutine grid_3d_end
\end{verbatim}
\paragraph{\label{label:92} Dependency} \

\begin{verbatim}
use dc_trace,  only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\section{\label{label:93} Module grid\_wavenumber\_mod}

\begin{itemize}
\item Developers: Morikawa Yasuhiro
\item Version: \$Id: grid\_wavenumber.f90,v 1.7 2005/01/19 08:52:30 morikawa Exp \$
\item Tag Name: \$Name:  \$
\item Change History: 
\end{itemize}
\subsection{\label{label:94} Overview}

This module set maximum wavenumber of harmonic function in spectral method.

スペクトル法を用いる際の球面調和関数の最大波数の設定を行う。

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

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

\subsection{\label{label:97} Note}

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

\subsection{\label{label:99} Dependency}

\begin{verbatim}
use type_mod, only : INTKIND, STRING
\end{verbatim}
\subsection{\label{label:100} Public Interface}

\begin{verbatim}
private
public :: grid_wavenumber_init, grid_wavenumber_end ! subroutine
public :: nm                                        ! variables
\end{verbatim}
\subsection{\label{label:101} Public Data}

grid\_wavenumber\_init において値が設定される。以下はデフォルト値。

\begin{verbatim}
integer(INTKIND), save :: nm = 21      ! 波数の設定
\end{verbatim}
\subsection{\label{label:102} Procedure Interface}

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

NAMELIST から最大波数を取得する。
取得できない場合、またはゼロ以下の値が与えられた場合、
上記のデフォルト値が強制的に設定される。

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

\begin{verbatim}
subroutine grid_wavenumber_init
\end{verbatim}
\paragraph{\label{label:104} Dependency} \

\begin{verbatim}
use type_mod,   only: INTKIND
use nmlfile_mod,only: nmlfile_init, nmlfile_open, nmlfile_close
use dc_trace,   only: DbgMessage, BeginSub, EndSub
use dc_message, only: MessageNotify
\end{verbatim}
\paragraph{\label{label:105} NAMELIST} \

\begin{verbatim}
namelist /grid_wavenumber_nml/ nm ! 最大波数
\end{verbatim}
\subsubsection{\label{label:106} Terminate module}

NAMELIST から読み込んだ値を破棄し、各定数をデフォルトの値に戻す。

\begin{verbatim}
subroutine grid_wavenumber_end
\end{verbatim}
\paragraph{\label{label:107} Dependency} \

\begin{verbatim}
use dc_trace,  only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\section{\label{label:108} Module spml\_mod}

\begin{itemize}
\item Developers: Morikawa Yasuhiro
\item Version: \$Id: spml.f90,v 1.6 2005/01/20 11:02:09 morikawa Exp \$
\item Tag Name: \$Name:  \$
\item Change History: 
\end{itemize}
\subsection{\label{label:109} Overview}

This module is wrapper of
wa\_module
in SPMODEL.

SPMODEL ライブラリの
wa\_module
のラッパーモジュールである。
他のモジュールから SPMODEL のサブルーチンおよび関数を
呼ぶ場合には、原則的にこのモジュールを介して呼び出す。

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

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

\subsection{\label{label:112} Note}

wa\_module
の全ての関数をそのまま利用できるよう、private をつけていない。
実際にこのモジュールで行なっているのは、初期化を複数回行なわないように
しているだけである。

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

\subsection{\label{label:114} Dependency}

このモジュール内部で用いるだけでなく、力学コアなどに wa\_module の
関数群を提供するという意味で、敢えて only 属性をつけていない。
(本来は必要な全ての関数を指定すべきであろうが)。

\begin{verbatim}
use wa_module
use w_module,   only : rn
use type_mod,   only : STRING
\end{verbatim}
\subsection{\label{label:115} Public Interface}

\begin{verbatim}
public :: spml_init, spml_end  ! subroutines
\end{verbatim}
その他、wa\_module
で提供される関数群。

\subsection{\label{label:116} Procedure Interface}

\subsubsection{\label{label:117} Initialize wa\_module}

wa\_module
の初期化関数
wa\_Initial
を呼ぶ。

\begin{verbatim}
subroutine spml_init
\end{verbatim}
\paragraph{\label{label:118} Dependency} \

\begin{verbatim}
use type_mod           , only: INTKIND, STRING
use grid_3d_mod        , only: im, jm, km, grid_3d_init
use grid_wavenumber_mod, only: nm, grid_wavenumber_init
use dc_trace,    only: DbgMessage, BeginSub, EndSub
use dc_error,    only: StoreError, USR_ECHAR
use wa_module,   only: wa_Initial
\end{verbatim}
\subsubsection{\label{label:119} Terminate module}

現状では wa\_Initial を解除できないので、
何もしない。
wa\_Initial による初期化を解除できるのなら、
spml\_init による初期化フラグをオフにすべきである。

\begin{verbatim}
subroutine spml_end
\end{verbatim}
\paragraph{\label{label:120} Dependency} \

\begin{verbatim}
use type_mod,  only: INTKIND, STRING
use dc_trace,  only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\section{\label{label:121} Module axis\_type\_mod}

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

This module provide derived types including all information 
about Axes data, and utility to treat the derived type variables.

座標軸に関する全ての情報を包括する構造体、
およびその構造体変数を扱うためのユーティリティを提供する。

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

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

\subsection{\label{label:125} Note}

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

\subsection{\label{label:127} Dependency}

\begin{verbatim}
use type_mod,    only: REKIND, DBKIND, INTKIND, TOKEN, STRING
use gt4_history, only: GT_HISTORY_AXIS, GT_HISTORY_ATTR
\end{verbatim}
\subsection{\label{label:128} Public Interface}

\begin{verbatim}
private
public :: AXISINFO                        ! derived types
public :: axis_type_copy, axis_attrs_copy ! subroutines
public :: axis_attrs_init                 ! subroutines
\end{verbatim}
\subsection{\label{label:129} Generic Procedure}

\begin{verbatim}
interface axis_type_copy
   module procedure axis_type_copy0, axis_type_copy1
end interface

interface axis_attrs_init
   module procedure axis_attrs_init0, axis_attrs_init1
end interface
\end{verbatim}
\subsection{\label{label:130} Derived Types}

\paragraph{\label{label:131} 次元に関する情報、およびデータを格納} \

\begin{verbatim}
type AXISINFO
   type(GT_HISTORY_AXIS)             :: axisinfo ! gt4 変数情報
   type(GT_HISTORY_ATTR), allocatable:: attrs(:) ! 属性情報群
   real(DBKIND)         , allocatable:: a_Dim(:) ! 次元データ
   logical                :: stored = .false.  ! 格納完了フラグ
end type AXISINFO
\end{verbatim}
\subsection{\label{label:132} Procedure Interface}

\subsubsection{\label{label:133} Copy AXISINFO data (for 0 dimensional data)}

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

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

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

\begin{verbatim}
type(AXISINFO), intent(out) :: to
\end{verbatim}
\subsubsection{\label{label:137} Copy AXISINFO data (for 1 dimensional data)}

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

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

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

\begin{verbatim}
type(AXISINFO), intent(out) :: to(:)
\end{verbatim}
\subsubsection{\label{label:141} Copy AXISATTR (in gt4f90io) data (for 1 dimensional data)}

\begin{verbatim}
subroutine axis_attrs_copy(from, to)
\end{verbatim}
\paragraph{\label{label:142} 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:143} Input} \

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

\begin{verbatim}
type(GT_HISTORY_ATTR), intent(out) :: to(:)
\end{verbatim}
\subsubsection{\label{label:145} Initialize AXISATTR (in gt4f90io) data (for 0 dimensional data)}

\begin{verbatim}
subroutine axis_attrs_init0(attrs)
\end{verbatim}
\paragraph{\label{label:146} 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:147} In/Out} \

\begin{verbatim}
type(GT_HISTORY_ATTR), intent(inout):: attrs
\end{verbatim}
\subsubsection{\label{label:148} Initialize AXISATTR (in gt4f90io) data (for 1 dimensional data)}

\begin{verbatim}
subroutine axis_attrs_init1(attrs)
\end{verbatim}
\paragraph{\label{label:149} 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:150} In/Out} \

\begin{verbatim}
type(GT_HISTORY_ATTR), intent(inout):: attrs(:)
\end{verbatim}
\section{\label{label:151} Module axis\_x\_mod}

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

This module set axis X or axis Longitude.

X 軸または経度軸を設定する。

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

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

netCDF データから X 軸を入力する axis\_x\_netcdf にて、
元データが radians でも degrees でも、そのまま入力されるように
なっている。本来は元データの units から判定すべき。

\subsection{\label{label:155} Note}

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

\subsection{\label{label:157} Dependency}

\begin{verbatim}
use type_mod,      only : INTKIND, STRING
use axis_type_mod, only : AXISINFO
\end{verbatim}
\subsection{\label{label:158} Public Interface}

\begin{verbatim}
private
public :: axis_x_init, axis_x_weight, axis_x_spectral ! subroutines
public :: axis_x_manual, axis_x_netcdf, axis_x_end    ! subroutines
\end{verbatim}
\subsection{\label{label:159} Procedure Interface}

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

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

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

\begin{verbatim}
subroutine axis_x_init
\end{verbatim}
\paragraph{\label{label:161} Dependency} \

\begin{verbatim}
use type_mod,  only: STRING, TOKEN, INTKIND, REKIND, DBKIND, NMLARRAY
use nmlfile_mod,only: nmlfile_init, nmlfile_open, nmlfile_close
use grid_3d_mod,only: im, grid_3d_init
use spml_mod,   only: spml_init
use axis_type_mod, only : axis_attrs_copy, axis_attrs_init
use gt4_history, only: GT_HISTORY_ATTR
use dc_types,  only: GT_TOKEN => TOKEN, GT_STRING => STRING
use dc_url,    only: GT_ATMARK, GT_QUESTION
use dc_trace,  only: DbgMessage, BeginSub, EndSub
use dc_message,only: MessageNotify
\end{verbatim}
\paragraph{\label{label:162} NAMELIST} \

X 軸の次元変数に関する情報を与える。
値を与えないものに関しては以下のデフォルトの値が用いられる。

変数 decision には X 軸のデータをどのように与えるかを指定する。

\begin{itemize}
\item \verb! 'manual' !

\begin{itemize}
\item Data 配列に格納したデータをそのまま X 軸として与える。
\end{itemize}
\item \verb! 'spectral' !

\begin{itemize}
\item スペクトル法を用いる事を想定し、 length に応じて自動的に
    X 軸のデータが決まる。
\end{itemize}
\item gtool4 変数 (例えば \verb! 'foo.nc@lon' ! など)

\begin{itemize}
\item 該当する変数から X 軸のデータを取得する。
\end{itemize}
\end{itemize}
変数 length には、 grid\_3d\_mod の公開要素  im  と同じ
値を与えなければならない。

\begin{verbatim}
character(TOKEN)  :: name     = 'lon'          ! 次元変数名
integer(INTKIND)  :: length   = 64             ! 次元長 (配列サイズ)
character(STRING) :: longname = 'Longitude'    ! 次元変数の記述的名称
character(STRING) :: units    = 'degrees_east' ! 次元変数の単位
character(TOKEN)  :: xtype    = 'float'        ! 次元変数の型
character(STRING) :: decision = 'spectral'     ! 次元データの取得方法
real(REKIND)      :: Data(NMLARRAY)  = 0.0        ! 次元データ入力用

namelist /axis_x_nml/ &
     & name         , &  ! 次元変数名
     & length       , &  ! 次元長 (配列サイズ)
     & longname     , &  ! 次元変数の記述的名称
     & units        , &  ! 次元変数の単位
     & xtype        , &  ! 次元変数の型
     & decision     , &  ! 次元データの取得方法
     & Data              ! 次元データ
\end{verbatim}
X 軸の次元変数の属性に関する情報を与える。
NAMELIST に複数の axis\_x\_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_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 /axis_x_attr_nml/ &
     & attrname     , &  ! 属性名
     & attrtype     , &  ! 属性値の型
     & cvalue       , &  ! 属性の値 (文字)
     & ivalue       , &  ! 属性の値 (整数)
     & rvalue       , &  ! 属性の値 (単精度実数)
     & dvalue       , &  ! 属性の値 (倍精度実数)
     & lvalue       , &  ! 属性の値 (論理)
     & arraysize    , &  ! 配列のサイズ
     & iarray       , &  ! 属性の値 (整数)
     & rarray       , &  ! 属性の値 (単精度実数)
     & darray            ! 属性の値 (倍精度実数)
\end{verbatim}
\subsubsection{\label{label:163} Return Weight of axis X}

重みデータとその付加情報を返す。
 axis\_x\_init  の NAMELIST axis\_x\_nml の decision 変数で
\verb! 'spectral' ! 以外が与えられた場合は値を代入しないで返す。

また、X 軸の次元変数に重みデータに関する付加情報を加える。

\begin{verbatim}
subroutine axis_x_weight(Dim_Weight)
\end{verbatim}
\paragraph{\label{label:164} Dependency} \

\begin{verbatim}
use constants_mod, only: constants_init, pi
use axis_type_mod, only: axis_type_copy, axis_attrs_copy, axis_attrs_init
use spml_mod,   only: wa_module_x_Lon_Weight => x_Lon_Weight
use grid_3d_mod,only: im
use gt4_history,only: GT_HISTORY_ATTR
use dc_trace,   only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\paragraph{\label{label:165} Output} \

\begin{verbatim}
type(AXISINFO), intent(out) :: Dim_Weight ! 次元情報を包括する変数
\end{verbatim}
\subsubsection{\label{label:166} Return Data of axis X for Spectral Method.}

スペクトル法を用いる場合を想定した X 軸のデータを返す。

 axis\_x\_init  の NAMELIST axis\_x\_nml の units に 
\verb! 'radian' ! または \verb! 'rad.' ! を与える場合には
単位がラジアンでデータが返される。それ以外では度数でデータが返る。

 axis\_x\_init  の NAMELIST axis\_x\_nml の decision 変数で
\verb! 'spectral' ! 以外が与えられた場合は値を代入しないで返す。

\begin{verbatim}
subroutine axis_x_spectral(Dim)
\end{verbatim}
\paragraph{\label{label:167} Dependency} \

\begin{verbatim}
use axis_type_mod, only: axis_type_copy
use constants_mod, only: constants_init, pi
use spml_mod,   only: wa_module_x_Lon => x_Lon
use dc_string,  only: toChar, StrHead, LChar
use dc_trace,   only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\paragraph{\label{label:168} In/Out} \

\begin{verbatim}
type(AXISINFO), intent(inout) :: Dim        ! 次元情報を包括する変数
\end{verbatim}
\subsubsection{\label{label:169} Return Data of axis X from NAMELIST}

NAMELIST から代入されたデータを X 軸データとして返す。

 axis\_x\_init  の NAMELIST axis\_x\_nml の decision 変数で
\verb! 'manual' ! 以外が与えられた場合は値を代入しないで返す。

\begin{verbatim}
subroutine axis_x_manual(Dim)
\end{verbatim}
\paragraph{\label{label:170} Dependency} \

\begin{verbatim}
use axis_type_mod, only: axis_type_copy
use spml_mod,   only: wa_module_x_Lon => x_Lon
use dc_trace,   only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\paragraph{\label{label:171} In/Out} \

\begin{verbatim}
type(AXISINFO), intent(inout) :: Dim        ! 次元情報を包括する変数
\end{verbatim}
\subsubsection{\label{label:172} Return Data of axis X from netCDF file}

netCDF データから取得したデータを X 軸のデータとして返す。

現在、取得先のデータの単位に関わらず、そのままデータが
入力される。\ref{label:3} 参照。

 axis\_x\_init  の NAMELIST axis\_x\_nml の decision 変数で
gtool4 変数以外が与えられた場合は値を代入しないで返す。

\begin{verbatim}
subroutine axis_x_netcdf(Dim)
\end{verbatim}
\paragraph{\label{label:173} Dependency} \

\begin{verbatim}
use axis_type_mod, only: axis_type_copy
use gt4_history,only: HistoryGet
use dc_url  ,   only: UrlSplit
use dc_trace,   only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\paragraph{\label{label:174} In/Out} \

\begin{verbatim}
type(AXISINFO), intent(inout) :: Dim        ! 次元情報を包括する変数
\end{verbatim}
\subsubsection{\label{label:175} Terminate module}

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

\begin{verbatim}
subroutine axis_x_end()
\end{verbatim}
\paragraph{\label{label:176} Dependency} \

\begin{verbatim}
use dc_trace,  only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\section{\label{label:177} Module axis\_y\_mod}

\begin{itemize}
\item Developers: Morikawa Yasuhiro
\item Version: \$Id: axis\_y.f90,v 1.9 2005/01/19 08:52:24 morikawa Exp \$
\item Tag Name: \$Name:  \$
\item Change History: 
\end{itemize}
\subsection{\label{label:178} Overview}

This module set axis Y or axis Latitude.

Y 軸または緯度軸を設定する。

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

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

netCDF データから Y 軸を入力する axis\_y\_netcdf にて、
元データが radians でも degrees でも、そのまま入力されるように
なっている。本来は元データの units から判定すべき。

\subsection{\label{label:181} Note}

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

\subsection{\label{label:183} Dependency}

\begin{verbatim}
use type_mod,      only : INTKIND, STRING
use axis_type_mod, only : AXISINFO
\end{verbatim}
\subsection{\label{label:184} Public Interface}

\begin{verbatim}
private
public :: axis_y_init, axis_y_weight, axis_y_spectral ! subroutines
public :: axis_y_manual, axis_y_netcdf, axis_y_end    ! subroutines
\end{verbatim}
\subsection{\label{label:185} Procedure Interface}

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

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

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

\begin{verbatim}
subroutine axis_y_init
\end{verbatim}
\paragraph{\label{label:187} Dependency} \

\begin{verbatim}
use type_mod,  only: STRING, TOKEN, INTKIND, REKIND, DBKIND, NMLARRAY
use nmlfile_mod,only: nmlfile_init, nmlfile_open, nmlfile_close
use grid_3d_mod,only: jm, grid_3d_init
use spml_mod,   only: spml_init
use axis_type_mod, only : axis_attrs_copy, axis_attrs_init
use gt4_history, only: GT_HISTORY_ATTR
use dc_types,  only: GT_TOKEN => TOKEN, GT_STRING => STRING
use dc_url,    only: GT_ATMARK, GT_QUESTION
use dc_trace,  only: DbgMessage, BeginSub, EndSub
use dc_message,only: MessageNotify
\end{verbatim}
\paragraph{\label{label:188} NAMELIST} \

Y 軸の次元変数に関する情報を与える。
値を与えないものに関しては以下のデフォルトの値が用いられる。

変数 decision には Y 軸のデータをどのように与えるかを指定する。

\begin{itemize}
\item \verb! 'manual' !

\begin{itemize}
\item Data 配列に格納したデータをそのまま Y 軸として与える。
\end{itemize}
\item \verb! 'spectral' !

\begin{itemize}
\item スペクトル法を用いる事を想定し、 length に応じて自動的に
    Y 軸のデータが決まる。
\end{itemize}
\item gtool4 変数 (例えば \verb! 'foo.nc@lon' ! など)

\begin{itemize}
\item 該当する変数から Y 軸のデータを取得する。
\end{itemize}
\end{itemize}
変数 length には、 grid\_3d\_mod の公開要素  jm  と同じ
値を与えなければならない。

\begin{verbatim}
character(TOKEN)  :: name     = 'lat'           ! 次元変数名
integer(INTKIND)  :: length   = 32              ! 次元長 (配列サイズ)
character(STRING) :: longname = 'Latitude'      ! 次元変数の記述的名称
character(STRING) :: units    = 'degrees_north' ! 次元変数の単位
character(TOKEN)  :: xtype    = 'float'         ! 次元変数の型
character(STRING) :: decision = 'spectral'      ! 次元データの取得方法
real(REKIND)      :: Data(NMLARRAY)  = 0.0      ! 次元データ入力用

namelist /axis_y_nml/ &
     & name         , &  ! 次元変数名
     & length       , &  ! 次元長 (配列サイズ)
     & longname     , &  ! 次元変数の記述的名称
     & units        , &  ! 次元変数の単位
     & xtype        , &  ! 次元変数の型
     & decision     , &  ! 次元データの取得方法
     & Data              ! 次元データ
\end{verbatim}
Y 軸の次元変数の属性に関する情報を与える。
NAMELIST に複数の axis\_y\_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_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 /axis_y_attr_nml/ &
     & attrname     , &  ! 属性名
     & attrtype     , &  ! 属性値の型
     & cvalue       , &  ! 属性の値 (文字)
     & ivalue       , &  ! 属性の値 (整数)
     & rvalue       , &  ! 属性の値 (単精度実数)
     & dvalue       , &  ! 属性の値 (倍精度実数)
     & lvalue       , &  ! 属性の値 (論理)
     & arraysize    , &  ! 配列のサイズ
     & iarray       , &  ! 属性の値 (整数)
     & rarray       , &  ! 属性の値 (単精度実数)
     & darray            ! 属性の値 (倍精度実数)
\end{verbatim}
\subsubsection{\label{label:189} Return Weight of axis Y}

重みデータとその付加情報を返す。
 axis\_y\_init  の NAMELIST axis\_y\_nml の decision 変数で
\verb! 'spectral' ! 以外が与えられた場合は値を代入しないで返す。

また、Y 軸の次元変数に重みデータに関する付加情報を加える。

\begin{verbatim}
subroutine axis_y_weight(Dim_Weight)
\end{verbatim}
\paragraph{\label{label:190} Dependency} \

\begin{verbatim}
use constants_mod, only: constants_init, pi
use axis_type_mod, only: axis_type_copy, axis_attrs_copy, axis_attrs_init
use spml_mod,   only: wa_module_y_Lat_Weight => y_Lat_Weight
use grid_3d_mod,only: jm
use gt4_history,only: GT_HISTORY_ATTR
use dc_trace,   only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\paragraph{\label{label:191} Output} \

\begin{verbatim}
type(AXISINFO), intent(out) :: Dim_Weight ! 次元情報を包括する変数
\end{verbatim}
\subsubsection{\label{label:192} Return Data of axis Y for Spectral Method.}

スペクトル法を用いる場合を想定した Y 軸のデータを返す。

 axis\_y\_init  の NAMELIST axis\_y\_nml の units に
\verb! 'radian' ! または \verb! 'rad.' ! を与える場合には
単位がラジアンでデータが返される。それ以外では度数でデータが返る。

 axis\_y\_init  の NAMELIST axis\_y\_nml の decision 変数で
\verb! 'spectral' ! 以外が与えられた場合は値を代入しないで返す。

\begin{verbatim}
subroutine axis_y_spectral(Dim)
\end{verbatim}
\paragraph{\label{label:193} Dependency} \

\begin{verbatim}
use axis_type_mod, only: axis_type_copy
use constants_mod, only: constants_init, pi
use spml_mod,   only: wa_module_y_Lat => y_Lat
use dc_string,  only: toChar, StrHead, LChar
use dc_trace,   only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\paragraph{\label{label:194} In/Out} \

\begin{verbatim}
type(AXISINFO), intent(inout) :: Dim        ! 次元情報を包括する変数
\end{verbatim}
\subsubsection{\label{label:195} Return Data of axis Y from NAMELIST}

NAMELIST から代入されたデータを Y 軸データとして返す。

 axis\_y\_init  の NAMELIST axis\_y\_nml の decision 変数で
\verb! 'manual' ! 以外が与えられた場合は値を代入しないで返す。

\begin{verbatim}
subroutine axis_y_manual(Dim)
\end{verbatim}
\paragraph{\label{label:196} Dependency} \

\begin{verbatim}
use axis_type_mod, only: axis_type_copy
use spml_mod,   only: wa_module_y_Lat => y_Lat
use dc_trace,   only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\paragraph{\label{label:197} In/Out} \

\begin{verbatim}
type(AXISINFO), intent(inout) :: Dim        ! 次元情報を包括する変数
\end{verbatim}
\subsubsection{\label{label:198} Return Data of axis Y from netCDF file}

netCDF データから取得したデータを Y 軸のデータとして返す。

現在、取得先のデータの単位に関わらず、そのままデータが
入力される。\ref{label:3} 参照。

 axis\_y\_init  の NAMELIST axis\_y\_nml の decision 変数で
gtool4 変数以外が与えられた場合は値を代入しないで返す。

\begin{verbatim}
subroutine axis_y_netcdf(Dim)
\end{verbatim}
\paragraph{\label{label:199} Dependency} \

\begin{verbatim}
use axis_type_mod, only: axis_type_copy
use gt4_history,only: HistoryGet
use dc_url  ,   only: UrlSplit
use dc_trace,   only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\paragraph{\label{label:200} In/Out} \

\begin{verbatim}
type(AXISINFO), intent(inout) :: Dim        ! 次元情報を包括する変数
\end{verbatim}
\subsubsection{\label{label:201} Terminate module}

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

\begin{verbatim}
subroutine axis_y_end()
\end{verbatim}
\paragraph{\label{label:202} Dependency} \

\begin{verbatim}
use dc_trace,  only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\section{\label{label:203} Module axis\_z\_mod}

\begin{itemize}
\item Developers: Morikawa Yasuhiro
\item Version: \$Id: axis\_z.f90,v 1.9 2005/01/19 08:52:24 morikawa Exp \$
\item Tag Name: \$Name:  \$
\item Change History: 
\end{itemize}
\subsection{\label{label:204} Overview}

This module set axis Z or axis Altitude.

Z 軸または高度軸を設定する。

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

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

\begin{itemize}
\item netCDF データから Z 軸を入力する axis\_z\_netcdf にて、
  および axis\_z\_half\_netcdf にて、元データの units によらず
  データを入力しているが、本来は判定すべき。
  (特に圧力座標を扱う場合には必須となるはず)。
\item 現在は半整数レベルもこのモジュールで読み込んでいるが、
  別モジュールにすべきかも知れない。(「バグ情報」と違うが)。
\end{itemize}
\subsection{\label{label:207} Note}

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

\subsection{\label{label:209} Dependency}

\begin{verbatim}
use type_mod,      only : INTKIND, STRING
use axis_type_mod, only : AXISINFO
\end{verbatim}
\subsection{\label{label:210} Public Interface}

\begin{verbatim}
private
public :: axis_z_init, axis_z_end       ! subroutines
public :: axis_z_manual, axis_z_netcdf  ! subroutines
public :: axis_z_sigmahalf_manual       ! subroutines
public :: axis_z_sigmahalf_netcdf       ! subroutines
public :: axis_z_half_manual            ! subroutines
public :: axis_z_half_netcdf            ! subroutines
\end{verbatim}
\subsection{\label{label:211} Procedure Interface}

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

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

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

\begin{verbatim}
subroutine axis_z_init
\end{verbatim}
\paragraph{\label{label:213} Dependency} \

\begin{verbatim}
use type_mod   ,only: STRING, TOKEN, INTKIND, REKIND, DBKIND, NMLARRAY
use nmlfile_mod,only: nmlfile_init, nmlfile_open, nmlfile_close
use grid_3d_mod,only: km, grid_3d_init
use axis_type_mod, only : axis_attrs_copy, axis_attrs_init
use constants_mod,only: constants_init
use gt4_history, only: GT_HISTORY_ATTR
use dc_types,  only: GT_TOKEN => TOKEN, GT_STRING => STRING
use dc_url     ,only: GT_ATMARK, GT_QUESTION
use dc_string  ,only: toChar
use dc_trace   ,only: DbgMessage, BeginSub, EndSub
use dc_message ,only: MessageNotify
\end{verbatim}
\paragraph{\label{label:214} NAMELIST axis\_z\_nml} \

axis\_z\_nml には、Z 軸の次元変数に関する情報を与える。
値を与えないものに関しては以下のデフォルトの値が用いられる。

変数 decision には Z 軸のデータをどのように与えるかを指定する。

\begin{itemize}
\item \verb! 'manual' !

\begin{itemize}
\item Data 配列に格納したデータをそのまま Z 軸として与える。
\end{itemize}
\item \verb! 'sigmahalf' !

\begin{itemize}
\item Z 軸が整数σレベルであると想定し、 axis\_z\_half\_nml で
    与えられる半整数σレベルの値から、自動的に
    Z 軸のデータを決める。
    よって、axis\_z\_half\_nml に有効なデータが与えられない
    場合にはデータは定まらない。
\end{itemize}
\item gtool4 変数 (例えば \verb! 'foo.nc@lon' ! など)

\begin{itemize}
\item 該当する変数から Z 軸のデータを取得する。
\end{itemize}
\item 上記以外

\begin{itemize}
\item 現在は \verb! 'sigmahalf' ! の場合と同様に設定される
\end{itemize}
\end{itemize}
変数 length には、 grid\_3d\_mod の公開要素  km  と同じ
値を与えなければならない。

\begin{verbatim}
character(TOKEN)  :: name     = 'sigma'       ! 次元変数名
integer(INTKIND)  :: length   = 12            ! 次元長 (配列サイズ)
character(STRING) :: longname = 'sigma at full level' ! 次元変数の記述的名称
character(STRING) :: units    = 'sigma_level' ! 次元変数の単位
character(TOKEN)  :: xtype    = 'float'       ! 次元変数の型
character(STRING) :: decision = 'sigmahalf'   ! 次元データの取得方法
real(REKIND)      :: Data(NMLARRAY)   = 0.0! 次元データ入力用

namelist /axis_z_nml/ &
     & name         , &  ! 次元変数名
     & length       , &  ! 次元長 (配列サイズ)
     & longname     , &  ! 次元変数の記述的名称
     & units        , &  ! 次元変数の単位
     & xtype        , &  ! 次元変数の型
     & decision     , &  ! 次元データの取得方法
     & Data              ! 次元データ
\end{verbatim}
\paragraph{\label{label:215} NAMELIST axis\_z\_half\_nml} \

axiz\_z\_half\_nml には、Z 軸の半整数レベルの次元変数に関する
情報を与える。
値を与えないものに関しては以下のデフォルトの値が用いられる。

変数 decision には Z 軸のデータをどのように与えるかを指定する。

\begin{itemize}
\item \verb! 'manual' !

\begin{itemize}
\item Data 配列に格納したデータをそのまま 
    Z 軸半整数レベルとして与える。
\end{itemize}
\item gtool4 変数 (例えば \verb! 'foo.nc@lon' ! など)

\begin{itemize}
\item 該当する変数から Z 軸のデータを取得する。
\end{itemize}
\item 上記以外

\begin{itemize}
\item 現在は \verb! 'manual' ! の場合と同様に設定される
\end{itemize}
\end{itemize}
変数 length には、 grid\_3d\_mod の公開要素  km  に
プラス １ した値を与えなければならない。

\begin{verbatim}
name        = 'sigmahalf'   ! 次元変数名
length      = 13            ! 次元長 (配列サイズ)
longname    = 'sigma at half level' ! 次元変数の記述的名称
units       = 'sigma_level' ! 次元変数の単位
xtype       = 'float'       ! 次元変数の型
decision    = 'manual'      ! 次元データの取得方法
Data(1:13)  = (/1, 0.99, 0.97, 0.93, 0.85, 0.75, 0.63, 0.5, &
     &             0.36, 0.22, 0.1, 0.05, 0/)  ! 次元データ入力用

namelist /axis_z_half_nml/ &
     & name         , &  ! 次元変数名
     & length       , &  ! 次元長 (配列サイズ)
     & longname     , &  ! 次元変数の記述的名称
     & units        , &  ! 次元変数の単位
     & xtype        , &  ! 次元変数の型
     & decision     , &  ! 次元データの取得方法
     & Data              ! 次元データ
\end{verbatim}
\paragraph{\label{label:216} NAMELIST axis\_z\_attr\_nml} \

Z 軸の次元変数の属性に関する情報を与える。
NAMELIST に複数の axis\_z\_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_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 /axis_z_attr_nml/ &
     & attrname     , &  ! 属性名
     & attrtype     , &  ! 属性値の型
     & cvalue       , &  ! 属性の値 (文字)
     & ivalue       , &  ! 属性の値 (整数)
     & rvalue       , &  ! 属性の値 (単精度実数)
     & dvalue       , &  ! 属性の値 (倍精度実数)
     & lvalue       , &  ! 属性の値 (論理)
     & arraysize    , &  ! 配列のサイズ
     & iarray       , &  ! 属性の値 (整数)
     & rarray       , &  ! 属性の値 (単精度実数)
     & darray            ! 属性の値 (倍精度実数)
\end{verbatim}
\paragraph{\label{label:217} NAMELIST axis\_z\_half\_attr\_nml} \

Z 軸の半整数レベルの次元変数の属性に関する情報を与える。
NAMELIST に複数の axis\_z\_half\_attr\_nml を用意しておく事で
複数の情報を与える事が可能である。
与えない場合には属性情報は付加されない。

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

\begin{verbatim}
namelist /axis_z_half_attr_nml/ &
     & attrname     , &  ! 属性名
     & attrtype     , &  ! 属性値の型
     & cvalue       , &  ! 属性の値 (文字)
     & ivalue       , &  ! 属性の値 (整数)
     & rvalue       , &  ! 属性の値 (単精度実数)
     & dvalue       , &  ! 属性の値 (倍精度実数)
     & lvalue       , &  ! 属性の値 (論理)
     & arraysize    , &  ! 配列のサイズ
     & iarray       , &  ! 属性の値 (整数)
     & rarray       , &  ! 属性の値 (単精度実数)
     & darray            ! 属性の値 (倍精度実数)
\end{verbatim}
\subsubsection{\label{label:218} Return Sigma Full Level and Sigma Half Level (from NAMELIST) as Data of axis Z}

NAMELIST から取得した半整数σレベルのデータと、
その半整数σレベルから生成した整数σレベルデータを返す。

 axis\_z\_init  の NAMELIST axis\_z\_nml の decision 変数で
\verb! 'sigmahalf' ! が与えられ、且つ
NAMELIST axis\_z\_half\_nml の decision 変数で
\verb! 'manual' !が与えられている場合以外は、値に何も代入せず返す。

\begin{verbatim}
subroutine axis_z_sigmahalf_manual(Dim, DimHalf)
\end{verbatim}
\paragraph{\label{label:219} Dependency} \

\begin{verbatim}
use axis_type_mod, only: axis_type_copy
use dc_trace,   only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\paragraph{\label{label:220} In/Out} \

\begin{verbatim}
type(AXISINFO), intent(inout) :: Dim, DimHalf  ! 次元情報を包括する変数
\end{verbatim}
\subsubsection{\label{label:221} Return Sigma Full Level and Sigma Half Level (from netCDF Data) as Data of axis Z}

netCDF データから取得した半整数σレベルのデータと、
その半整数σレベルから生成した整数σレベルデータを返す。

 axis\_z\_init  の NAMELIST axis\_z\_nml の decision 変数で
\verb! 'sigmahalf' ! が与えられ、且つ
NAMELIST axis\_z\_half\_nml の decision 変数で
gtool4変数が与えられている場合以外は、値に何も代入せず返す。

\begin{verbatim}
subroutine axis_z_sigmahalf_netcdf(Dim, DimHalf)
\end{verbatim}
\paragraph{\label{label:222} Dependency} \

\begin{verbatim}
use axis_type_mod, only: axis_type_copy
use gt4_history,only: HistoryGet
use dc_url  ,   only: UrlSplit
use dc_trace,   only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\paragraph{\label{label:223} In/Out} \

\begin{verbatim}
type(AXISINFO), intent(inout) :: Dim, DimHalf  ! 次元情報を包括する変数
\end{verbatim}
\subsubsection{\label{label:224} Return Data of axis Z from NAMELIST}

NAMELIST から代入されたデータを Z 軸データとして返す。

 axis\_z\_init  の NAMELIST axis\_z\_nml の decision 変数で
\verb! 'manual' ! 以外が与えられた場合は値を代入しないで返す。

\begin{verbatim}
subroutine axis_z_manual(Dim)
  use axis_type_mod, only: axis_type_copy
  use dc_trace,   only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\paragraph{\label{label:225} In/Out} \

\begin{verbatim}
type(AXISINFO), intent(inout) :: Dim        ! 次元情報を包括する変数
\end{verbatim}
\subsubsection{\label{label:226} Return Data of axis Z from netCDF file}

netCDF データから取得したデータを Z 軸のデータとして返す。

 axis\_z\_init  の NAMELIST axis\_z\_nml の decision 変数で
gtool4 変数以外が与えられた場合は値を代入しないで返す。

\begin{verbatim}
subroutine axis_z_netcdf(Dim)
\end{verbatim}
\paragraph{\label{label:227} Dependency} \

\begin{verbatim}
use type_mod,      only: STRING
use axis_type_mod, only: axis_type_copy
use gt4_history,only: HistoryGet
use dc_url  ,   only: UrlSplit
use dc_trace,   only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\paragraph{\label{label:228} In/Out} \

\begin{verbatim}
type(AXISINFO), intent(inout) :: Dim        ! 次元情報を包括する変数
\end{verbatim}
\subsubsection{\label{label:229} Return Half Level Data of axis Z from NAMELIST}

NAMELIST から代入された半整数レベルのデータを半整数レベルの
Z 軸データとして返す。

 axis\_z\_init  の NAMELIST axis\_z\_half\_nml の decision 変数で
\verb! 'manual' ! 以外が与えられた場合は値を代入しないで返す。

\begin{verbatim}
subroutine axis_z_half_manual(DimHalf)
  use axis_type_mod, only: axis_type_copy
  use dc_trace,   only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\paragraph{\label{label:230} In/Out} \

\begin{verbatim}
type(AXISINFO), intent(inout) :: DimHalf        ! 次元情報を包括する変数
\end{verbatim}
\subsubsection{\label{label:231} Return Half Level Data of axis Z from netCDF file}

netCDF データから取得した半整数レベルデータを半整数レベルの
Z 軸のデータとして返す。

 axis\_z\_init  の NAMELIST axis\_z\_half\_nml の decision 変数で
gtool4 変数以外が与えられた場合は値を代入しないで返す。

\begin{verbatim}
subroutine axis_z_half_netcdf(DimHalf)
\end{verbatim}
\paragraph{\label{label:232} Dependency} \

\begin{verbatim}
use type_mod,      only: STRING
use axis_type_mod, only: axis_type_copy
use gt4_history,only: HistoryGet
use dc_url  ,   only: UrlSplit
use dc_trace,   only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\paragraph{\label{label:233} In/Out} \

\begin{verbatim}
type(AXISINFO), intent(inout) :: DimHalf        ! 次元情報を包括する変数
\end{verbatim}
\subsubsection{\label{label:234} Generate Sigma Level from Sigma Half Level.}

axis\_z\_mod の内部サブルーチン。

引数 DimHalf を半整数σレベルとして、その値から整数σレベルを生成し、
引数 Dim として返す。

\begin{verbatim}
subroutine gen_sigma_from_half(DimHalf, Dim)
\end{verbatim}
\paragraph{\label{label:235} Dependency} \

\begin{verbatim}
use type_mod,   only: DBKIND, STRING, REKIND
use constants_mod,only: RAir, Cp
use dc_string,  only: toChar
use dc_trace,   only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\paragraph{\label{label:236} Input} \

\begin{verbatim}
type(AXISINFO), intent(in)   :: DimHalf ! 半整数σレベル
\end{verbatim}
\paragraph{\label{label:237} In/Out} \

\begin{verbatim}
type(AXISINFO), intent(inout):: Dim     ! 整数σレベル
\end{verbatim}
\subsubsection{\label{label:238} Terminate module}

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

\begin{verbatim}
subroutine axis_z_end
\end{verbatim}
\paragraph{\label{label:239} Dependency} \

\begin{verbatim}
use dc_trace,  only: DbgMessage, BeginSub, EndSub
\end{verbatim}
\section{\label{label:240} 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:241} 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:242} Error Handling}

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

\subsection{\label{label:244} Note}

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

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

\subsection{\label{label:246} 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:247} Public Interface}

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

\begin{verbatim}
interface varinfo_attrs_init
   module procedure varinfo_attrs_init0, varinfo_attrs_init1
end interface
\end{verbatim}
\subsection{\label{label:249} 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:250} Procedure Interface}

\subsubsection{\label{label:251} 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:252} 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:253} 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:254} 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:255} 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:256} 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:257} Input} \

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

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

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

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

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

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

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

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

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

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

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

\begin{verbatim}
subroutine varinfo_attrs_copy(from, to)
\end{verbatim}
\paragraph{\label{label:266} 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:267} Input} \

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

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

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

\begin{verbatim}
subroutine varinfo_attrs_init0(attrs)
\end{verbatim}
\paragraph{\label{label:270} 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:271} In/Out} \

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

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

\begin{verbatim}
subroutine varinfo_attrs_init1(attrs)
\end{verbatim}
\paragraph{\label{label:273} 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:274} In/Out} \

\begin{verbatim}
type(GT_HISTORY_ATTR), intent(inout):: attrs(:)
\end{verbatim}
\section{\label{label:275} 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:276} Overview}

This module output data with gtool4 netCDF conventions.

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

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

\subsection{\label{label:278} 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:279} Note}

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

\subsection{\label{label:281} 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:282} 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:283} 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:284} 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:285} Procedure Interface}

\subsubsection{\label{label:286} 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:287} 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:288} 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:289} Set Dimension}

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

\begin{verbatim}
subroutine io_gt4_out_SetDims(axis)
\end{verbatim}
\paragraph{\label{label:290} 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:291} Input} \

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

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

\begin{verbatim}
subroutine io_gt4_out_SetVars(varkey)
\end{verbatim}
\paragraph{\label{label:293} 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:294} Input} \

\begin{verbatim}
character(*), intent(in)      :: varkey      ! 変数キー
\end{verbatim}
\subsubsection{\label{label:295} 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:296} 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:297} Input} \

\begin{verbatim}
character(*),      intent(in):: varkey         ! 変数名
real(REKIND),      intent(in):: xyz_Var(:,:,:) ! 出力データ
\end{verbatim}
\subsubsection{\label{label:298} 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:299} 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:300} Input} \

\begin{verbatim}
character(*),      intent(in):: varkey         ! 変数名
real(REKIND),      intent(in):: xy_Var(:,:) ! 出力データ
\end{verbatim}
\subsubsection{\label{label:301} 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:302} 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:303} Input} \

\begin{verbatim}
character(*),      intent(in):: varkey         ! 変数名
real(REKIND),      intent(in):: Var ! 出力データ
\end{verbatim}
\subsubsection{\label{label:304} 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:305} 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:306} Input} \

\begin{verbatim}
character(*),      intent(in):: varkey         ! 変数名
real(DBKIND),      intent(in):: xyz_Var(:,:,:) ! 出力データ
\end{verbatim}
\subsubsection{\label{label:307} 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:308} 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:309} Input} \

\begin{verbatim}
character(*),      intent(in):: varkey         ! 変数名
real(DBKIND),      intent(in):: xy_Var(:,:) ! 出力データ
\end{verbatim}
\subsubsection{\label{label:310} 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:311} 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:312} Input} \

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

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

\begin{verbatim}
subroutine io_gt4_out_end
\end{verbatim}
\paragraph{\label{label:314} 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}
\section{\label{label:315} Module dynamics\_mod}

\begin{itemize}
\item Developers: Morikawa Yasuhiro
\item Version: \$Id: dynamics.f90,v 1.20 2005/01/22 09:30:59 morikawa Exp \$
\item Tag Name: \$Name:  \$
\item Change History: 
\end{itemize}
\subsection{\label{label:316} Overview}

Calculate Dynamical Core.

力学コア部分を演算するモジュール。演算している方程式系、
および離散化の手法は以下の通り。

\begin{itemize}
\item 支配方程式系 : Governing Equations

\begin{itemize}
\item 球座標プリミティブ方程式系 :
     Primitive Equations in Spherical Coordinate
\end{itemize}
\item 水平離散化 : Horizontal Discretization

\begin{itemize}
\item スペクトル法 : Spectral Method

\begin{itemize}
\item 三角形切断   : Triangle Truncation
\item 変換法       : Transform Method
\end{itemize}
\end{itemize}
\item 鉛直離散化 : Vertical Discretization

\begin{itemize}
\item σ座標系    : Sigma Coordinate (Arakawa and Suarez(1983))

\begin{itemize}
\item Lorenz 格子 : Lorenz Grid
\end{itemize}
\end{itemize}
\item 時間積分 : Time Integral

\begin{itemize}
\item leap frog : リープフロッグ
\end{itemize}
\end{itemize}
\subsection{\label{label:317} Reference}

\begin{itemize}
\item Arakawa, A., Suarez, M. J., 1983:
  Vertical differencing of the primitive equations
  in sigma coordinates.
  Mon. Wea. Rev., 111, 34--35.
\end{itemize}
\subsection{\label{label:318} Error Handling}

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

\begin{itemize}
\item 粘性計算の wa\_NumVis\_wa と wa\_NumVisScaler\_wa をとりあえず SPMODEL
  から移植したため、名称などがそのままである。
  本来はモジュール内部のものとして名称その他の検討が必要であろう。
\end{itemize}
\subsection{\label{label:320} Note}

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

現在、力学コアの全てがこのモジュール内にある。本来ならば、
解く方程式や項の種類によってモジュール化がなされるべきである。

\subsection{\label{label:322} Dependency}

\begin{verbatim}
use type_mod,    only: STRING, REKIND, DBKIND, INTKIND
\end{verbatim}
\subsection{\label{label:323} Public Interface}

\begin{verbatim}
private
public :: dynamics_init, dynamics_leapfrog  ! subroutines
public :: dynamics_diagnostic, dynamics_end ! subroutines
public :: dynamics_diffusion                ! subroutines
\end{verbatim}
\subsection{\label{label:324} Procedure Interface}

\subsubsection{\label{label:325} Initialize module and Calculate Non-Predictional Value.}

以降のサブルーチンで用いる変数の allocate 、および
時間発展しない量の演算を行なう。
また、変数データ出力のための初期設定も行なう。

\begin{verbatim}
subroutine dynamics_init(x_Lon, y_Lat, z_Sigma, r_Sigma)
\end{verbatim}
\paragraph{\label{label:326} Dependency} \

\begin{verbatim}
use type_mod,    only: STRING, REKIND, DBKIND, INTKIND
use grid_3d_mod,         only: im, jm, km
use grid_wavenumber_mod, only: nm
use constants_mod, only: constants_init, R0, Omega, Cp, RAir, &
     &                   TempAve, VisOrder, EFoldTime
use time_mod,    only: DelTime
use spml_mod,    only: spml_init, xy_Lat, rn
use io_gt4_out_mod,only: io_gt4_out_init, io_gt4_out_SetVars
use dc_trace,    only: DbgMessage, BeginSub, EndSub, DataDump
use dc_string,   only: toChar
\end{verbatim}
\paragraph{\label{label:327} Input} \

\begin{verbatim}
real(DBKIND), intent(in) :: &
     & x_Lon(:)           , & ! intent(in): 経度座標
     & y_Lat(:)           , & ! intent(in): 緯度座標
     & z_Sigma(:)         , & ! intent(in): σレベル(整数)座標
     & r_Sigma(:)             ! intent(in): σレベル(半整数)座標
\end{verbatim}
\subsubsection{\label{label:328} Calculate Predictional Values.}

時間発展する量の演算を行なう。
演算するデータの出力も行なう。

\begin{verbatim}
subroutine dynamics_leapfrog                                &
     & ( x_Lon       , y_Lat       , z_Sigma  , r_Sigma   , &
     &
     &   xyz_VelLon_b, xyz_VelLat_b, xyz_Vor_b, xyz_Div_b , &
     &   xyz_Temp_b  , xyz_QVap_b  , xy_Ps_b  ,             &
     &
     &   xyz_VelLon_n, xyz_VelLat_n, xyz_Vor_n, xyz_Div_n , &
     &   xyz_Temp_n  , xyz_QVap_n  , xy_Ps_n  ,             &
     &
     &   xyz_VelLon_a, xyz_VelLat_a, xyz_Vor_a, xyz_Div_a , &
     &   xyz_Temp_a  , xyz_QVap_a  , xy_Ps_a             )
\end{verbatim}
\paragraph{\label{label:329} Dependency} \

\begin{verbatim}
use type_mod,    only: STRING, REKIND, DBKIND, INTKIND
use grid_3d_mod,         only: im, jm, km
use grid_wavenumber_mod, only: nm
use constants_mod, only: R0, Cp, EpsVT
use time_mod,    only: DelTime, CurrentTime
use spml_mod,    only: w_xy, xy_w , xy_GradLon_w, xy_GradLat_w, &
     &                 w_Div_xy_xy, w_LaplaInv_w,               &
     &                 wa_xya, xya_wa, wa_Div_xya_xya, wa_Lapla_wa
use io_gt4_out_mod,only: io_gt4_out_Put
use dc_trace,    only: DbgMessage, BeginSub, EndSub, DataDump
use dc_string,   only: toChar
\end{verbatim}
\paragraph{\label{label:330} Input} \

\begin{verbatim}
real(DBKIND), intent(in) :: &
     & x_Lon(:)          , & ! intent(in): 経度座標
     & y_Lat(:)          , & ! intent(in): 緯度座標
     & z_Sigma(:)        , & ! intent(in): σレベル(整数)座標
     & r_Sigma(:)        , & ! intent(in): σレベル(半整数)座標
     &
     & xyz_VelLon_b(:,:,:) , & ! intent(in): 速度経度成分 (t-Δt)
     & xyz_VelLat_b(:,:,:) , & ! intent(in): 速度緯度成分 (t-Δt)
     & xyz_Vor_b(:,:,:)    , & ! intent(in): 渦度         (t-Δt)
     & xyz_Div_b(:,:,:)    , & ! intent(in): 発散         (t-Δt)
     & xyz_Temp_b(:,:,:)   , & ! intent(in): 温度         (t-Δt)
     & xyz_QVap_b(:,:,:)   , & ! intent(in): 比湿         (t-Δt)
     & xy_Ps_b(:,:)        , & ! intent(in): 地表面気圧   (t-Δt)
     &
     & xyz_VelLon_n(:,:,:) , & ! intent(in): 速度経度成分 (t)
     & xyz_VelLat_n(:,:,:) , & ! intent(in): 速度緯度成分 (t)
     & xyz_Vor_n(:,:,:)    , & ! intent(in): 渦度         (t)
     & xyz_Div_n(:,:,:)    , & ! intent(in): 発散         (t)
     & xyz_Temp_n(:,:,:)   , & ! intent(in): 温度         (t)
     & xyz_QVap_n(:,:,:)   , & ! intent(in): 比湿         (t)
     & xy_Ps_n(:,:)            ! intent(in): 地表面気圧   (t)
\end{verbatim}
\paragraph{\label{label:331} Output} \

\begin{verbatim}
real(DBKIND), intent(out) :: &
     & xyz_VelLon_a(:,:,:) , & ! intent(out): 速度経度成分 (t+Δt)
     & xyz_VelLat_a(:,:,:) , & ! intent(out): 速度緯度成分 (t+Δt)
     & xyz_Vor_a(:,:,:)  , & ! intent(out): 渦度         (t+Δt)
     & xyz_Div_a(:,:,:)  , & ! intent(out): 発散         (t+Δt)
     & xyz_Temp_a(:,:,:) , & ! intent(out): 温度         (t+Δt)
     & xyz_QVap_a(:,:,:) , & ! intent(out): 比湿         (t+Δt)
     & xy_Ps_a(:,:)          ! intent(out): 地表面気圧   (t+Δt)
\end{verbatim}
\subsubsection{\label{label:332} Calculate Diffusion Term}

t-Δt の値から水平拡散項を求め、それを t+Δt の値に加える。

\begin{verbatim}
subroutine dynamics_diffusion(                         &
  & xyz_Vor_b , xyz_Div_b , xyz_Temp_b , xyz_QVap_b  , &
  & xyz_Vor_a , xyz_Div_a , xyz_Temp_a , xyz_QVap_a        )
\end{verbatim}
\paragraph{\label{label:333} Dependency} \

\begin{verbatim}
use type_mod,    only: STRING, REKIND, DBKIND, INTKIND
use time_mod,    only: DelTime, CurrentTime
use grid_3d_mod, only: km
use grid_wavenumber_mod, only: nm
use spml_mod,    only: wa_xya, xya_wa, l_nm
use io_gt4_out_mod,only: io_gt4_out_Put
use dc_trace,    only: DbgMessage, BeginSub, EndSub, DataDump
\end{verbatim}
\paragraph{\label{label:334} Input} \

\begin{verbatim}
real(DBKIND), intent(in) :: &
     & xyz_Vor_b(:,:,:)  , & ! 渦度 (t-Δt)
     & xyz_Div_b(:,:,:)  , & ! 発散 (t-Δt)
     & xyz_Temp_b(:,:,:) , & ! 温度 (t-Δt)
     & xyz_QVap_b(:,:,:)     ! 比湿 (t-Δt)
\end{verbatim}
\paragraph{\label{label:335} In/Out} \

\begin{verbatim}
real(DBKIND), intent(inout) :: &
     & xyz_Vor_a(:,:,:)  , & ! 渦度 (t+Δt)
     & xyz_Div_a(:,:,:)  , & ! 発散 (t+Δt)
     & xyz_Temp_a(:,:,:) , & ! 温度 (t+Δt)
     & xyz_QVap_a(:,:,:)     ! 比湿 (t+Δt)
\end{verbatim}
\subsubsection{\label{label:336} Calculate Diagnostic Values.}

診断的に得られる量の演算を行なう。
現在は渦度発散から速度成分 (経度方向、緯度方向) の演算を行なうのみである。

\begin{verbatim}
subroutine dynamics_diagnostic                              &
     & ( x_Lon       , y_Lat       , z_Sigma  , r_Sigma   , &
     &
     &   xyz_VelLon_a, xyz_VelLat_a, xyz_Vor_a, xyz_Div_a , &
     &   xyz_Temp_a  , xyz_QVap_a  , xy_Ps_a               )
\end{verbatim}
\paragraph{\label{label:337} Dependency} \

\begin{verbatim}
use type_mod,    only: STRING, REKIND, DBKIND, INTKIND
use grid_3d_mod,         only: im, jm, km
use grid_wavenumber_mod, only: nm
use constants_mod, only: R0, Grav
use spml_mod,    only: wa_xya, xya_GradLon_wa, xya_GradLat_wa, &
     &                 wa_LaplaInv_wa, IntLonLat_xy
use io_gt4_out_mod,only: io_gt4_out_Put
use dc_trace,    only: DbgMessage, BeginSub, EndSub, DataDump
use dc_string,   only: toChar
\end{verbatim}
\paragraph{\label{label:338} Input} \

\begin{verbatim}
real(DBKIND), intent(in) :: &
     & x_Lon(:)          , & ! intent(in): 経度座標
     & y_Lat(:)          , & ! intent(in): 緯度座標
     & z_Sigma(:)        , & ! intent(in): σレベル(整数)座標
     & r_Sigma(:)    , & ! intent(in): σレベル(半整数)座標
     &
     & xyz_Vor_a(:,:,:)  , & ! intent(in): 渦度         (t+Δt)
     & xyz_Div_a(:,:,:)  , & ! intent(in): 発散         (t+Δt)
     & xyz_Temp_a(:,:,:) , & ! intent(in): 温度         (t+Δt)
     & xyz_QVap_a(:,:,:) , & ! intent(in): 比湿         (t+Δt)
     & xy_Ps_a(:,:)          ! intent(in): 地表面気圧   (t+Δt)
\end{verbatim}
\paragraph{\label{label:339} In/Output} \

\begin{verbatim}
real(DBKIND), intent(out) :: &
     & xyz_VelLon_a(:,:,:) , & ! intent(out): 速度経度成分 (t+Δt)
     & xyz_VelLat_a(:,:,:)     ! intent(out): 速度緯度成分 (t+Δt)
\end{verbatim}
\subsubsection{\label{label:340} Terminate module}

dynamics\_init で allocate した変数を deallocate し、
演算した値も全て破棄する。

\begin{verbatim}
subroutine dynamics_end
\end{verbatim}
\paragraph{\label{label:341} Dependency} \

\begin{verbatim}
use type_mod,    only: STRING, REKIND, DBKIND, INTKIND
use dc_trace,    only: BeginSub, EndSub, DbgMessage
\end{verbatim}
\section{\label{label:342} Module hs94forcing\_mod}

\begin{itemize}
\item Developers: Morikawa Yasuhiro
\item Version: \$Id: hs94forcing.f90,v 1.9 2005/01/22 09:23:41 morikawa Exp \$
\item Tag Name: \$Name:  \$
\item Change History: 
\end{itemize}
\subsection{\label{label:343} Overview}

This module compute heating and dissipation 
for Held and Suarez(1994) benchmark integration of a dry GCM.

Held and Suarez(1994) の乾燥大気 GCM ベンチマーク用の加熱と散逸を計算する。

\subsection{\label{label:344} Reference}

\begin{itemize}
\item Held, I. M., Suarez, M. J., 1994: 
  A proposal for the intercomparison of the dynamical cores of
  atmospheric general circuation models.
  Bull. Am. Meteor. Soc., 75, 1825--1830.
\end{itemize}
\subsection{\label{label:345} Error Handling}

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

\begin{itemize}
\item 地球半径や回転角速度、重力加速度などの物理定数が constant\_mod
  に依存するようになっている。正しくテストしたいのならば、それらが
  Held and Suarez(1994) の実験設定と整合的かどうかチェックするように
  すべきである。
\end{itemize}
\subsection{\label{label:347} Note}

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

\subsection{\label{label:349} Dependency}

\begin{verbatim}
use type_mod,    only : STRING, DBKIND
\end{verbatim}
\subsection{\label{label:350} Public Interface}

\begin{verbatim}
private
public:: hs94forcing_init, hs94forcing, hs94forcing_end  ! subroutines
\end{verbatim}
\paragraph{\label{label:351} Input} \

\begin{verbatim}
type(AXISINFO), intent(in) :: &
     & x_Lon                , & ! 経度座標
     & y_Lat                , & ! 緯度座標
     & z_Sigma                  ! σレベル(整数)座標
\end{verbatim}
\subsubsection{\label{label:352} 加熱と散逸の計算}

加熱と散逸の結果は xyz\_VelLon\_phy, xyz\_VelLat\_phy, xyz\_Temp\_phy 
として返る。

\begin{verbatim}
subroutine hs94forcing( &
     & xyz_VelLon_b  , xyz_VelLat_b  , xyz_Temp_b  , xy_Ps_b    , &
     & xyz_VelLon_phy, xyz_VelLat_phy, xyz_Temp_phy            )
\end{verbatim}
\paragraph{\label{label:353} Dependency} \

\begin{verbatim}
use type_mod,      only: INTKIND, STRING, TOKEN, REKIND, DBKIND
use constants_mod, only: RAir, Cp, SecPerDay
use grid_3d_mod  , only: im, jm, km
use io_gt4_out_mod,only: io_gt4_out_Put
use dc_trace     , only: DbgMessage, BeginSub, EndSub, DataDump
\end{verbatim}
\paragraph{\label{label:354} Input} \

\begin{verbatim}
real(DBKIND), intent(in) :: &
     & xyz_VelLon_b(:,:,:) , & ! 速度経度成分 (t-Δt)
     & xyz_VelLat_b(:,:,:) , & ! 速度緯度成分 (t-Δt)
     & xyz_Temp_b(:,:,:)   , & ! 温度         (t-Δt)
     & xy_Ps_b(:,:)            ! 地表面気圧   (t-Δt)
\end{verbatim}
\paragraph{\label{label:355} Output} \

\begin{verbatim}
real(DBKIND), intent(out) :: &
     & xyz_VelLon_phy(:,:,:) , & ! 速度経度成分の加熱散逸効果
     & xyz_VelLat_phy(:,:,:) , & ! 速度緯度成分の加熱散逸効果
     & xyz_Temp_phy(:,:,:)       ! 温度の加熱散逸効果
\end{verbatim}
\subsubsection{\label{label:356} Terminate module}

 hs94forcing\_init で allocate した変数を deallocate する。

\begin{verbatim}
subroutine hs94forcing_end
\end{verbatim}
\paragraph{\label{label:357} Dependency} \

\begin{verbatim}
use type_mod, only: STRING, DBKIND, INTKIND
use dc_trace, only: BeginSub, EndSub, DbgMessage
\end{verbatim}

\end{document}
