プログラム全体は, 制御を行うメインプログラム (arare.f90) と, 個々の設 定と計算を行う複数のモジュールおよびサブルーチンから構成されている. モ ジュールとサブルーチンは 気象庁標準コーディングルール にしたがい,
のいずれかに分類されるように作成している.
複数のサブルーチンで用いられる定数の値を決めるモジュール. 定数 の値はそのモジュール内で確定し, モジュールを呼び出す親プログラ ム内ではその定数の値は変更されない.
親プログラム側では use 文でモジュールを呼び出すだけで定数の値が 確定する.
以下のモジュールが該当する.
複数のサブルーチンで用いられる変数の型, 変数が配列であった場合 の大きさ, 変数の値を決めるモジュール. 定数の値はそのモジュール 内で確定し, モジュールを呼び出す親プログラム内ではその定数の値 は変更されない.
親プログラム側では use 文でモジュールを呼び出すだけではなく, モ ジュール内に含まれる変数の値を確定するサブルーチンを呼び出す必 要がある.
以下のモジュールが該当する.
同じような機能をもつサブルーチンをまとめたモジュール. このモジュー ル内で値を代入した変数は他のモジュールまたは外部サブルーチン内 でその値を変更されることがある.
以下のモジュールが該当する.
上記のモジュールには含まれないもの. 以下のサブルーチンが該当する.
プログラムの書法は基本的には 気象庁標準コーディングルール に準拠している. これに加え, 変数と変数配列に作用させる微分や平均操作を行う配列関数を, SPMODEL の書法に準じて記述することにより, ソースコードの可読性の向上をめざしている.
変数は
[格子点位置情報]_[変数名]_[時間方向添字]
と記述し, 配列関数は
[出力変数の格子点位置情報]_[演算名]_[入力変数の格子点位置情報]
と記述する. 変数名の具体例は変数名リストを参照.
その変数が配置されている格子点の位置を表す. x-z の 2 次元交互格子 (Arakawa C グリッド)の場合, 以下の接頭詞を付ける.
3 次元の場合は
とする.
基本的なルールは以下の通りである.
時間レベルを表す. 以下の添字を用いる.
A: 時刻 t+Δt (1 ステップ計算後:After ) B: 時刻 t (現在の時刻 :A の次なので B) C: 時刻 t-Δt (1 ステップ計算前: ) D: 時刻 t-2Δt (2 ステップ計算前: ) E: ...
座標 X, Lon Y, Lat Z, Rad, Press, Sigma 座標格子間隔 DelX, DelY, DelZ 暦(構造体にする?) Date Date%Year, Date%Month, Date%Day, Date%Hour, Date%Min, Date%Sec 時間 Time 時間格子間隔(長い) DelTLong (短い) DelTShort
速度 VelX, VelLon VelY, VelLat VelZ, VelRad, VelPress, VelSigma 流線関数 Psi 速度ポテンシャル Chi 渦度 Vortx, RotVx Vorty, RotVy Vortz, RotVz, Zeta 水平発散 Div, DivVxVy 温度 Temp 仮温度 Vtemp 温位 Theta, Ptemp 仮温位 Vtheta, Vptemp 密度 Dens, Rho 圧力 Press エクスナー関数 Exner ジオポテンシャル Gph, Phi トレーサー混合比 Q**** * 水蒸気 Qvap * 雨水 Qrai * 雲水 Qclw * ダスト Qdust 降水量 Rain
円周率 Pi ステファン-ボルツマン定数 ?? 重力加速度 Grav 気体定数 GasR 定圧比熱 Cp 定積比熱 Cv 非熱比 Gamma 自転角速度 Omega 気体分子量 GasWt
ここではメインプログラム arare.f90 の処理のおおまかな流れを記す.
2005/02/07 杉山 耕一朗, 北守 太一, 小高 正嗣