変数名・微分平均演算について
本文書では, deepconv/arare5 の変数の命名ルールや微分平均演算について述べる.
変数名
deepconv/arare5 では, 離散化マニュアル の図 1.1 に示されるように, 水平方向に Arakawa C グリッド, 鉛直方向に Lorentz グリッドを用いる. スカラー量は格 子の中心に配置され, ベクトル量は中心から半格子ずらして配置される.
そのため, deepconv/arare5 では混乱を避けるために, 変数名や関数名には格 子の位置を表す接頭詞を付けている. 時間変化する物理量の場合には, 接尾詞 として時刻を表す情報を付す.
配列型の変数名の基本形は以下のようになっている. (次元情報に関する接頭詞)_(物理的意味)(時間方向添字)
次元情報は以下の通りである.
x 格子点データ(x / 経度座標) y 格子点データ(y / 緯度座標) z 格子点データ(z / 動径座標) p 格子点データ半整数レベル(x / 経度座標) q 格子点データ半整数レベル(y / 緯度座標) r 格子点データ半整数レベル(z / 動径座標) a 格子点データ(任意) f 物質データ
時刻情報は以下の通りである
Bl 長い時間ステップでの 1 つ前の時刻 (Before Long) Nl 長い時間ステップでの現在の時刻 (Now Long) Al 長い時間ステップでの 1 つ後の時刻 (After Long) Ns 短い時間ステップでの現在の時刻 (Before Short) As 短い時間ステップでの 1 つ後の時刻 (After Short)
例えば以下のような変数名となる.
xyz_PTempNl (現時刻での温位) pyz_VelXAl (X 方向の速度. 長い時間ステップで 1 つ後) xqz_VelYBl (Y 方向の速度. 長い時間ステップで 1 つ前)
微分・平均演算
微分・平均演算を行う場合は, 格子点位置を考慮する必要がある. deepconv/arare5 ではそのための関数を用意している.
- 平均演算: src/setup/axesset.f90
- 2 次精度中心差分:src/utils/xyz_deriv_module.f90
- 2 次精度中心差分:src/utils/xyz_deriv_c4_module.f90
例えば格子の中心位置での速度 u を求める場合には以下のようにする.
xyz_VelX = xyz_pyz( pyz_VelX )
温位の x 微分は以下のように書ける. 関数の接頭詞・接尾詞が, 変数名の接頭詞・接尾詞と一致することがポイントである.
xyz_DPTempDX = xyz_pyz( pyz_dx_xyz( xyz_PTemp ) ) ^^^^^^^^ ^^^^^^^^
このやり方は手軽であり, デバックもし易い. しかし, 細かい関数を多段に呼 び出しているため, 計算速度の面では不利である. 計算速度的にボトルネック となるソースは, do ループを陽に用いて (f77 的に) 書くと良いだろう (deepconv/arare5 の力学コアは仕方なくそうしている).
$Id: grid_operation.rd,v 1.1 2014/03/04 04:44:04 sugiyama Exp $