3 次元数値シミュレーション コードの設計 花輪 知幸
数値シミュレーションによる研 究 モデルの設定 – 微分方程式 – 境界条件・初期条件 数値計算 – 計算コードの作成 – 実行 – データ解析 論文作成
問題設定 3 次元理想電磁流体方程式 ( 断熱的 ) 時間に依存しない重力場 φ = φ (x, y, z) 固定境界 ( v ⊥ = 0, B || = 0) 数値格子 x i = h i, y j = h j, z k = h k 0 ≦ i, j, k ≦ N (N+1) 3 のセル
プログラムの設計 プログラミング言語の選択 データ構造 – 変数の種類 アルゴリズム – 計算の手順
データ構造 セルごとに必要な変数 (配列 ) – 原始変数 ρ, T, v, B – 保存変数 U = (ρ, ρv, B, ρE) – 流束 F (F x, F y, F z ) – 重力加速度 g (g x, g y, g z ) 境界 i, j, k = -1 or N +1 を含む 全体で共通の変数 ( スカラー ) t, Δt, N step, N, など
計算の手順 (1 次精度 ) 1. 初期条件の作成 2. 原始変数 ( ρ, v, B, T) → 保存変数 (ρ, ρv,ρE, B) 3. 数値流束 (F*) を求める 4.Δt だけ進んだ時刻の保存変数を求める 5. 保存変数 → 原始変数 6.[ 計算結果の出力 ] 2— 6は繰り返す。
計算の手順 ( 2次精度 ) 1. 初期条件の作成 2. 原始変数 ( ρ, v, B, T) → 保存変数 (ρ, ρv,ρE, B) 3. 境界での原始変数を補間により求める (MUSCL) 4. 補間された原始変数より数値流束 (F*) を求める 5.Δt /2 だけ進んだ時刻の保存変数を求める 6. 保存変数 → 原始変数 (Δt/2 だけ進んでいる ) 7. 境界での原始変数を補間により求める (MUSCL) 8. 補間された原始変数より数値流束 (F*) を求める 9.Δt だけ進んだ時刻の保存変数を求める 10. 保存変数 → 原始変数 (Δt だけ進んでいる ) 11.[ 計算結果の出力 ] 2—11 は繰り返す。
MUSCL 法 矩形で近似 (1 次精度 ) 台形で近似 (2 次精度 )
MUSC L ( つづ き ) 風上から線形外挿 (単調性を守る → 流束制限関数 )
コード作成のこつ プログラム全体を機能別に分割し、部分 ごとに完成させる。 部分ごとに定性的・定量的な試験を行い、 期待通りの動作を確認する。 確認のために解析解など、予め解が予測 される場合を考える。 確認にはグラフを用いる。 確認作業の間は計算量を小さくする。