% 表題   dcpam5  コード解説 -- メインプログラムの流れ
%
% 履歴 
%\Drireki{2009/02/24  森川靖大}
%
\section{メインプログラムの流れ}


\Dfigref{メインプログラムの構造}
    にメインプログラムとその直接の下請ルーチンから見た
    モデルの構造の概要を示す. さらに入出力に関連する部分も書き加えた.
\Dmodelp が必要とする入力ファイルは初期値ファイルと
    地表面に関する境界値, 地形ファイル
    である.
但し, 初期値ファイル以外は省略して, デフォルトまたは陽に指定した
    一定値を用いることができる.
出力ファイルとしては, 
    結果を残すためのヒストリーファイル
    と時間積分を延長するためのリスタートファイルが出力される.
後者は延長積分時に初期値ファイルとして使われる. 

モデルは初期化部分と時間積分のメインループの二つの部分に分けることが
    できる.
前者は初期値の読み込みと若干の定数の設定を行う.
後者が言うまでもなくモデルの主要部分である.
境界値, 地形ファイルの読み込みはループに組み込まれてはいるが, 
     現在のところ最初の一回しか読み込まれないので時間変化しない.
%
\begin{figure}
 \begin{center}
  \latexhtml
    {\Depsf[110mm]{general/mainstruct.eps}}
    {\Depsf[160mm]{general/mainstruct.eps}}
 \end{center}
  \caption[\Dmodelp の構造の概要]{
            {\bf \Dmodelp の構造の概要}. アルファベット太字で書かれているの
            はメインプログラム {\tt dcpam\_main} ({\tt dcpam\_main.F90})
            中で呼ばれているサブルーチンである.
            骨格を把握する上で冗長なものはひとまとめにしてあり, 
            個別のサブルーチン名は記載していない. 
            {\tt MainInit} および{\tt MainTerminate} は
            メインプログラムファイル中に内部副プログラムとして
            定義されるサブルーチンである.
            破線は, メインループの初回でのみ呼ばれることを示す. 
            図中では, 地表面ファイル入力がその一例として示されている. 
            診断量であるヒストリデータは, その出力の初期化と
            終了処理は主プログラムの{\tt MainInit}および
            {\tt MainTerminate}で行い, 出力自体は各所で行う. }
 \Dfiglab{メインプログラムの構造}
\end{figure}

時間積分にはリープフロッグのセミインプリシット法が用いられているので, 時
    間の流れは単純ではない.
例えば $\Delta t = 10$ 分として, ある時刻 $t = 90(t-\Delta t), 100 (t)$
    の値を用いて
    $t = 110 (t+\Delta t)$ の値を計算した場合,
    この $t = 110 $の値をそのまま用いる
    のではなく, 時間フィルター (\Dfigref{メインプログラムの構造} の
    {\rm TimeFilter}) を用いてこの 3 レベルの値から $t = 100 $の
    値を修正する.
次のステップでは, $ t = 100 (t-\Delta t), 110 (t)$ の値を用い, 次の
    ステップの値を計算することとなる. 
%図 \ref{図:時間積分ループ} は時間積分ループの時
%間とデータの流れの概要を示す. 図に「時刻を更新するとき」とあるが, 通常の
%ステップでは時刻 $t-\Delta t$ の値を $t$ での値に書き換えて次のステップ
%にのぞむ. 更新されないのは, 単一時刻の初期値から出発するため時間刻を徐々
%に伸ばしていくときだけである. リープフロッグの計算モードの除去は時々の再
%スタートでなく, 時間フィルターにより行われる.

モデルの時間積分はリープフロッグスキームのセミインプリシット法により行わ
れる. 物理過程で計算された時間変化項は力学過程に引き渡され, 時間積分は力
学過程の中で行われる. ただし, 物理過程のうち, 降水過程などの調節過程は時
間積分後に適用される. 

%\begin{figure}
%  \begin{center}
%%   \epsfile{file=general/jikansekibun.kdraw_ps,height=13cm}
%  \end{center}
%  \caption[時間積分ループの時間とデータの流れ]{
%      {\bf 時間積分ループの時間とデータの流れ}.
%      {\tt GA}, {\tt GB} はそれぞれ現在とその前のステップのグリッド値を表
%      す. 時間変化率 {\tt GT} のうち表面にでるのは物理過程によるもののみ
%%      である. そこでは $t-\Delta t$ での時間変化率を基本とするが, 拡散な
%%      どはインプリシットで扱い, $t+\Delta t$ での値を推定値する.
%%      $\circ\!\!\!\rightarrow$ はデータの流れを, $\bullet\!\!\!\rightarrow$ 
%      は制御パラメターを表す.}
%  \label{図:時間積分ループ}
%\end{figure}
