本章では力学過程のコードの構造と計算手順を説明する. ここでいう力学過程と はスペクトルで計算される部分のことを指し, 移流項や水平拡散項, 圧力勾配項 などである. あるいは物理過程以外と言っても良いかもしれない. スペクトル とは球面調和関数展開の係数のことであり, スペクトルへの変換とは球関数展開 に他ならない.
実際の時間積分は力学過程の中で行われる. 物理過程で計算された時間変化 項は力学過程に引き渡され, 力学過程の時間変化項に加えられ, セミインプ リシット法による時間積分に組み込まれる. 但し, 降水過程などの調節過程は時 間積分後に適用される.
Fig.3.1〜 Fig.3.3 に力学過程サブルーチン Dynamics の流れを示す. 四角枠内の太文字はサブルーチン名を表している. Dynamics とサブルーチン間にやりとりされる変数が示されている. 四角枠内が空白であるものは, 簡略に記述できるため Dynamics サブルーチン本体に直接コードが記述されているものである. これらのサブルーチンは, モジュール dynamics_hspl_vas83 内に ひとまとめにされている. DynamicsInitおよびSemiImplMatrix 内で設定されたパラメータや配列はモジュール内の共有変数として保存され, 各サブルーチンはその変数を参照する仕組みとなっているため, 原則的に Dynamics と各サブルーチンとでやり取りされるのは 時間変化する変数のみとなる.
Dynamics で呼ばれている NonLinearOnGrid は時間変化率の非重力波(NG)項を計算する. TimeIntegration はセミインプリシット時間積分 (3.3.1節参照)を行う. 以上の2つが Dynamics の主な下請ルーチンである.
NonLinearOnGrid 以前に呼ばれるサブルーチンは 必要な定数等の準備にあてられる. SemiImplMatrix までは原則的に時間に依存しない. TimeIntegration の前後で格子点値とスペクトル値の変換を行う. その後, 水平粘性に失われた運動エネルギーを補償する 摩擦熱を行い, Dynamics 外に出ない量の出力(DiagOutput)を行う. DiagOutput では診断量の計算を行うが, これは モニターのためであり, 時間積分には影響しない.
セミインプリシット法については, 支配方程式系とその離散化ドキュメント の 3.5 節に解説があるので 参照のこと. 時刻 から へのセミインプリシットの 計算手順は以下のようにまとめられる.
以上の手順の説明は 3.3.2 節で行う.
3.3.1 節で述べたように, セミインプリシット時間積分 は2つのステップに分けられる. これを詳しく書くと以下のようになる.
はサブルーチン SemiImplMatrix で計算され, LU分解される. は時間刻みの大きさが変らない限り設定し直す必要がない. の計算と (3.2) を解く作業 はサブルーチン TimeIntegration で行われる.
● 第2段階: 時間積分
時間積分も TimeIntegration が行う.
第1段階で
が
求まったので発散の時間積分は容易である:
(3.8) |
以下の各節で, 具体的な計算手順とプログラムソースとの対応を述べる.
ここでは, これ以後の節で述べられるモデル変数の表記法を述べる.
モデル変数は
のようなフォントで示され,
その入出力に関連して表 3.1 のように分類される.
NonLinearOnGridの直前で計算される, 地表面気圧の空間変化と渦度発散について記す. 灰色文字で示されるのは spml ライブラリの関数である.
非重力波(NG)項はサブルーチン NonLinearOnGrid で計算される.
NG 項の計算に関する式の各項の下にモデル中の変数名を記す. 以下で, 数式と対応 させて書く場合のモデル変数の表記法は Table 3.1 に従って統一する.
NonLinearOnGrid の出力変数は, 以上の10個の時間変化項と, 以下の変数である.
NonLinearOnGrid の入力変数は時刻 でのグリッド値 , ( = 変数名) である.
次に時間変化項の具体的な中身とモデル変数の対応を見ることにする.
(3.21) |
(3.22) |
(3.31) | ||
(3.32) |
(3.33) |
(3.40) | ||
(3.41) |
サブルーチン NonLinearOnGrid から得られた 非重力波項 や, 物理過程の時間変化項 , の予報変数 を スペクトルデータ へ変換する.
3.3.2節 述べた時間積分の2つの手続きは TimeIntegration で行われる. ここでは TimeIntegration 内の計算の流れを, 物理量とモデ ル変数の対応を示しながら説明する.
時間積分の第1段階は (3.2) を解くことである. 時間に依存しない行列 は SemiImplMatrix で計算され, LU分解されて として TimeIntegration で使用されるので, 最初にするべきことは を求めることである. (3.5) を再掲し, 各 項の下にモデル内の変数名を記す.
(3.6) と (3.7) を解く. 以下に式とモデル変数との対応を記す.