\documentclass[titlepage]{jarticle}
\title{DCPAM Reference Manual}
\author{GFD Dennou Club}
\begin{document}
\maketitle
\tableofcontents
\clearpage
\section{\label{label:0} 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:1} Overview}

This module set axis Z or axis Altitude.

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

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

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

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

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

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

\begin{verbatim}
use type_mod,      only : INTKIND, STRING
use axis_type_mod, only : AXISINFO
\end{verbatim}
\subsection{\label{label:7} 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:8} Procedure Interface}

\subsubsection{\label{label:9} 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:10} 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:11} 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:12} 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:13} 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:14} 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:15} 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:16} Dependency} \

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

\begin{verbatim}
type(AXISINFO), intent(inout) :: Dim, DimHalf  ! 次元情報を包括する変数
\end{verbatim}
\subsubsection{\label{label:18} 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:19} 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:20} In/Out} \

\begin{verbatim}
type(AXISINFO), intent(inout) :: Dim, DimHalf  ! 次元情報を包括する変数
\end{verbatim}
\subsubsection{\label{label:21} 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:22} In/Out} \

\begin{verbatim}
type(AXISINFO), intent(inout) :: Dim        ! 次元情報を包括する変数
\end{verbatim}
\subsubsection{\label{label:23} 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:24} 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:25} In/Out} \

\begin{verbatim}
type(AXISINFO), intent(inout) :: Dim        ! 次元情報を包括する変数
\end{verbatim}
\subsubsection{\label{label:26} 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:27} In/Out} \

\begin{verbatim}
type(AXISINFO), intent(inout) :: DimHalf        ! 次元情報を包括する変数
\end{verbatim}
\subsubsection{\label{label:28} 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:29} 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:30} In/Out} \

\begin{verbatim}
type(AXISINFO), intent(inout) :: DimHalf        ! 次元情報を包括する変数
\end{verbatim}
\subsubsection{\label{label:31} 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:32} 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:33} Input} \

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

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

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

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

\begin{verbatim}
use dc_trace,  only: DbgMessage, BeginSub, EndSub
\end{verbatim}

\end{document}
