% 表題   dcpam5  コード解説 -- 力学過程 -- 力学過程 Dynamics の流れ
%
% 履歴 
%\Drireki{2009/07/11  森川靖大}
%\Drireki{2009/02/19  森川靖大}

\section[力学過程の流れ]{力学過程 {\tt Dynamics} の流れ}


\Dfigref{力学過程Dynamicsの流れ1}〜
\Dfigref{力学過程Dynamicsの流れ3}
に力学過程サブルーチン {\tt Dynamics}
の流れを示す. 四角枠内の太文字はサブルーチン名を表している.
{\tt Dynamics} とサブルーチン間にやりとりされる変数が示されている. 
四角枠内が空白であるものは, 簡略に記述できるため {\tt Dynamics}
サブルーチン本体に直接コードが記述されているものである. 
これらのサブルーチンは, モジュール {\tt dynamics\_hspl\_vas83} 内に
ひとまとめにされている. {\tt DynamicsInit}および{\tt SemiImplMatrix}
内で設定されたパラメータや配列はモジュール内の共有変数として保存され, 
各サブルーチンはその変数を参照する仕組みとなっているため, 
原則的に {\tt Dynamics} と各サブルーチンとでやり取りされるのは
時間変化する変数のみとなる. 

{\tt Dynamics} で呼ばれている {\tt NonLinearOnGrid}
は時間変化率の非重力波(NG)項を計算する. 
%物理過程から引き渡された時間変化項 (添え字 phy が付記された変数)
%に, 時刻 $t$ のデータから計算した非線型項等を加えたものが NG 項である. 
{\tt TimeIntegration} はセミインプリシット時間積分
(\ref{subsec:セミインプリシット時間積分の概要}節参照)を行う. 以上の2つが
{\tt Dynamics} の主な下請ルーチンである.

{\tt NonLinearOnGrid} 以前に呼ばれるサブルーチンは
必要な定数等の準備にあてられる. 
{\tt SemiImplMatrix} までは原則的に時間に依存しない.
{\tt TimeIntegration} の前後で格子点値とスペクトル値の変換を行う.
その後, 水平粘性に失われた運動エネルギーを補償する
摩擦熱を行い, {\tt Dynamics} 外に出ない量の出力({\tt DiagOutput})を行う.
{\tt DiagOutput} では診断量の計算を行うが, これは
モニターのためであり, 時間積分には影響しない.

\begin{figure}
 \begin{center}
  \latexhtml
    {\Depsf[150mm]{dynamics/dynamics-flow1.eps}}
    {\Depsf[180mm]{dynamics/dynamics-flow1.eps}}
 \end{center}
  \caption[力学過程 Dynamics の流れ1]{
            {\bf 力学過程 {\tt Dynamics} の流れ1}. 
            四角枠内の太文字はサブルーチン名であり, 
            {\tt Dynamics} が呼ぶサブルーチンと引数を示している.
            引数は, 特に注記されていないものは格子点値である. 
            四角枠内が空白であるものは, 簡略に記述できるため {\tt Dynamics}
            サブルーチン本体に直接コードが記述されているものである. 
            ここでは {\tt Dynamics} が引数として値を受け取り, 
            初期設定 ({\tt DynamicsInit}, {\tt SemiImplMatrix}) および
            非線形項の計算 ({\tt NonLinearOnGrid}) の結果得られた
            値からスペクトル値で表現された時間変化を求める
            ところまでが記されている.
            これ以後の処理については
            \Dfigref{力学過程Dynamicsの流れ2}を参照されたい. 
            }
 \Dfiglab{力学過程Dynamicsの流れ1}
\end{figure}
%
\begin{figure}
 \begin{center}
  \latexhtml
    {\Depsf[150mm]{dynamics/dynamics-flow2.eps}}
    {\Depsf[180mm]{dynamics/dynamics-flow2.eps}}
 \end{center}
  \caption[力学過程 Dynamics の流れ2]{
            {\bf 力学過程 {\tt Dynamics} の流れ2}. 
            \Dfigref{力学過程Dynamicsの流れ1}の続きである.
            図の見方については\Dfigref{力学過程Dynamicsの流れ1}を参照せよ. 
            ここでは格子点値をスペクトル値に変換し,
            それらを用いて, セミインプリシット時間積分
            {\tt TimeIntegration} を行っている. 
            これ以後の処理については
            \Dfigref{力学過程Dynamicsの流れ3}を参照されたい. 
            }
 \Dfiglab{力学過程Dynamicsの流れ2}
\end{figure}
%
\begin{figure}
 \begin{center}
  \latexhtml
    {\Depsf[150mm]{dynamics/dynamics-flow3.eps}}
    {\Depsf[180mm]{dynamics/dynamics-flow3.eps}}
 \end{center}
  \caption[力学過程 Dynamics の流れ3]{
            {\bf 力学過程 {\tt Dynamics} の流れ3}. 
            \Dfigref{力学過程Dynamicsの流れ2}の続きである.
            図の見方については\Dfigref{力学過程Dynamicsの流れ1}を参照せよ. 
            ここではスペクトル値を格子点値に戻し,
            摩擦熱補正をかけた後, ヒストリデータを出力し,
            最後に $t+\Delta t$の値をサブルーチンの外に返している. 
            }
 \Dfiglab{力学過程Dynamicsの流れ3}
\end{figure}
