% 表題   AGCM5 第3部 コード解説    メインプログラム
%
% 履歴
\Drireki{97/03/06  堀之内武}
%

\section{メインプログラムの流れ}

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

モデルは初期化部分と時間積分のメインループの二つの部分に分けることが出来
る. 前者は初期値の読み込みと若干の定数の設定を行う. 後者が言うまでもなく
モデルの主要部分である. 境界値, 地形ファイルの読み込みはループに組み込ま
れてはいるが, 現在のところ下請のサブルーチン {\tt RDCON} の仕様により, 
最初の一回しか読み込まれないので時間変化しない. 改良が望まれる. 

\begin{figure}
  \vspace*{-5mm}
  \begin{center}
   \epsfile{file=gaiyou/mainstruct.kdraw_ps,height=20cm}
  \end{center}
  \caption[AGCM5の構造の概要]{
            {\bf AGCM5の構造の概要}.  アルファベット太字で書かれているの
            はメインプログラム {\tt GCM5} ({\tt aadmn.F})中で呼ばれている
            サブルーチンである.  さらに, 入出力に関連する部分を加え
            た. {\tt HISTIN} により出力のためのデータを各所で {\tt
            HISTOU} 下の作業配列にためておき, {\tt HISTOU} のコールで一
            気に出力する. なお, メインで呼ばれているサブルーチンのうち, 
            骨格を把握するためは必要ないものは割愛した.}
  \label{図:構造概要}
\end{figure}

時間積分にはリープフロッグのセミインプリシット法が用いられているので, 時
間の流れは単純ではない. 図 \ref{図:時間積分ループ} は時間積分ループの時
間とデータの流れの概要を示す. 図に「時刻を更新するとき」とあるが, 通常の
ステップでは時刻 $t-\Delta t$ の値を $t$ での値に書き換えて次のステップ
にのぞむ. 更新されないのは, 単一時刻の初期値から出発するため時間刻を徐々
に伸ばしていくときだけである. リープフロッグの計算モードの除去は時々の再
スタートでなく, 時間フィルターにより行われる.

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

\begin{figure}
  \begin{center}
   \epsfile{file=gaiyou/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}
