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

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

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

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

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

\subsection{\label{label:7} Dependency}

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

\subsubsection{\label{label:10} 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:11} 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:12} 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:13} 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:14} 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:15} 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:16} 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:17} 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:18} 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:19} 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:20} 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:21} 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:22} 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:23} 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:24} 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:25} Terminate module}

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

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

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

\end{document}
