変数名・微分平均演算について

本文書では, 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 $