本章では力学過程のコードの構造と計算手順を説明する. ここでいう力学過程と はスペクトルで計算される部分のことを指し, 移流項や水平拡散項, 圧力勾配項 などである. あるいは物理過程以外と言っても良いかもしれない. スペクトル とは球面調和関数展開の係数のことであり, スペクトルへの変換とは球関数展開 に他ならない.
実際の時間積分は力学過程の中で行われる. 物理過程で計算された時間変化 項は力学過程に引き渡され, 力学過程の時間変化項に加えられ, セミインプ リシット法による時間積分に組み込まれる. ただし, 降水過程などの調節過程は時 間積分後に適用される.
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つのステップに分けられる. これを詳しく書くと以下のようになる.
(3.1) を解くのが第1段階 である. ここでは支配方程式系とその離散化ドキュメント の 3.5 節と同様, 太字で鉛直に離散化したベクトルを表 し, 下線で行列を表す. は発散で,
(3.3) |
(3.4) |
はサブルーチン SemiImplMatrix で計算され, LU分解される. は時間刻みの大きさが変らない限り設定し直す必要がない. の計算と (3.1) を解く作業 はサブルーチン TimeIntegration で行われる.
● 第2段階: 時間積分
時間積分も TimeIntegration が行う.
第1段階で
が
求まったので発散の時間積分は容易である:
(3.7) |
以下の各節で, 具体的な計算手順とプログラムソースとの対応を述べる.
ここでは, これ以後の節で述べられるモデル変数の表記法を述べる.
モデル変数は
のようなフォントで示され,
その入出力に関連して表 3.1 のように分類される.
NonLinearOnGridの直前で計算される, 地表面気圧の空間変化と渦度発散について記す. 灰色文字で示されるのは SPMODEL ライブラリ (Takehiro et al., 2006) から提供される 関数である. この節では変数の時間ステップは全て であるため, 簡単化のため の表記を省略する. 経度, 緯度, 鉛直方向添え字 の表記も省略する.
サブルーチン NonLinearOnGrid では格子点上で について計算を行う. この節では時間 と 経度, 緯度方向添え字 の表記を省略する.
(3.14) |
(3.15) |
(3.26) | ||
(3.27) |
(3.28) |
(3.35) | ||
(3.36) |
サブルーチン NonLinearOnGrid から得られた値から に関するスペクトル時間変化項を計算する. この節でも変数の時間ステップは全て であるため, 簡単化のため の表記を省略する. なお, 本来 と記載されるべき 表記を, 変数名を記載する関係からチルダを省略して と記載する.
地形, の予報変数 , および 物理過程の時間変化項 の格子点値から, スペクトル値を算出する. この節でも3.5.3節と同様に, と記載されるべき 表記を, 変数名を記載する関係からチルダを省略して と記載する.
注: 本節は書き換え中であるため, 支配方程式系とその離散化の文章とは対応していない.
3.3節 述べた時間積分の2つの手続きは TimeIntegration で行われる. ここでは TimeIntegration 内の計算の流れを, 物理量とモデ ル変数の対応を示しながら説明する.
時間積分の第1段階は (3.1) を解くことである. 時間に依存しない行列 はサブルーチン SemiImplMatrix で計算され, LU分解されて として TimeIntegration で使用される. 本来SemiImplMatrixは, サブルーチンDynamicsの冒頭で呼ばれるが, ここに を表す式とモデル内の変数との対応を示すこととする.
(3.57) |
(3.58) |
(3.1)は サブルーチン LUSolve により解かれる. 結果は として 変数 に格納される. LUSolve の引数は, および LU 分解された とそのピボット ( , , ) である.
(3.5) と (3.6) を解く. 以下に式とモデル変数との対応を記す.