密度ベースソルバー
理論:波の速さの差が収束を遅らせる
概要
密度ベースソルバーは高速の流れ向きだと聞きますが、低速だと何が困るんですか?
流れの中では、情報は流れに乗って進むものと、音として前後に伝わるものがある。密度ベースは両方を同時に解くので、時間刻みや収束の速さは最も速い音波と最も遅い流れの差で決まる。高速の流れではこの差は小さいが、低速では音速が流速よりずっと速く、差が何十倍、何百倍にもなる。すると音波に合わせた細かい時間刻みで、ゆっくりした流れの変化を追いかけることになり、なかなか収束しない。さらに低マッハ数では数値誤差による人工的な粘性も大きくなり、精度も落ちる。これを直すのが前処理だ。
波の速さと剛性
u は流速、c は音速、N は流れ方向のセル数。陽解法で流れが領域を1回通過するのに必要なステップ数を n_step とした。
Weiss-Smith型の前処理
理想気体の場合。U_r は基準速度で、低速では流速、音速を超えたら音速とする。マッハ数が小さいとき最大の波の速さは流速の約1.62倍(黄金比)になる。
航空から生まれた解き方
密度ベースの解き方は、1970〜80年代に航空機の遷音速・超音速の流れを計算するために発達した。マコーマック法や、ジェイムソンらの有限体積法とルンゲ・クッタ法の組み合わせ、ローの近似リーマン解法などが代表で、衝撃波を鋭くとらえられるのが強みだった。一方で低速の流れには弱く、1980〜90年代にターケルやワイス・スミスらが前処理を提案して、同じソルバーで低速から超音速までを扱えるようにした。
計算例
例1:マッハ数と収束の速さ(200セル・CFL 1・陽解法)
| マッハ数 | 波の速さの比(前処理なし) | 1回通過のステップ数 | 前処理あり:比 | 前処理あり:ステップ数 |
|---|---|---|---|---|
| 0.01 | 101 | 20,200 | 3.2 | 323 |
| 0.05 | 21 | 4,200 | 3.2 | 323 |
| 0.1 | 11 | 2,200 | 3.2 | 324 |
| 0.3 | 4.3 | 866 | 3.0 | 328 |
| 2.0 | 1.5 | 300 | (不要) | 300 |
前処理ありの比は、最大の波(u′ + c′)と最小の波(u′)の比。マッハ2では基準速度が音速で頭打ちになり、前処理は効かない(もともと不要)。
例2:マッハ2の垂直衝撃波(γ = 1.4)
| 量 | 理論値 |
|---|---|
| 圧力比 p₂/p₁ | 4.500 |
| 密度比 ρ₂/ρ₁ | 2.667 |
| 温度比 T₂/T₁ | 1.687 |
| 衝撃波後のマッハ数 | 0.577 |
| 全圧比 p₀₂/p₀₁ | 0.721 |
密度ベースソルバーの検証によく使う値。衝撃波の前後で値が2〜3セルで切り替わり、振動がないことも確認する。
マッハ0.01だと、前処理で60倍以上速くなるんですね。
ステップ数で見るとそうなる。ただし前処理は時間微分の項を書き換えているので、途中の時間変化は物理的に正しくない。定常解だけを求める場合に使う。非定常の計算では、実時間の刻みの中で擬似時間の反復をする二重時間刻み法と組み合わせ、擬似時間の反復にだけ前処理をかける。また前処理は衝撃波の捕獲そのものには関係しないので、低速の部分と超音速の部分が混ざる流れ、たとえば超音速ノズルの出口付近の淀んだ領域などで効果が大きい。逆に全体が低速で圧縮性の影響もないなら、圧力ベースのソルバーを使うほうが素直なことが多い。
使い分けと設定
- マッハ数がおおむね0.3を超える、または衝撃波があるなら密度ベースを検討する。
- 低速の領域を含むなら前処理を有効にする。
- 非定常なら二重時間刻み法を使い、前処理は擬似時間だけにかける。
- 陰解法やマルチグリッドで CFL を大きくして収束を速める。
- 衝撃波管や垂直衝撃波の理論値で検証する。
「残差が下がらない換気計算」
ある部屋の換気を、手元にあった密度ベースの設定のまま計算したところ、残差が数万回の反復でもほとんど下がらなかった。風速は0.5 m/s程度で、マッハ数は約0.0015。波の速さの比は約680倍で、前処理がない状態では収束しないのは当然だった。前処理を有効にすると数百回で収束したが、最終的には圧力ベースのソルバーに切り替えたほうが速く、結果も安定した。ソルバーの選択はマッハ数から決めるのがよい。
よくある間違い
間違いと対策
| 間違い | 起きること | 対策 |
|---|---|---|
| 低速で前処理なし | 収束せず精度も低い | 前処理を有効化 |
| 非定常で前処理を直接使用 | 時間変化が誤る | 二重時間刻み |
| 衝撃波で振動 | 圧力が負になる | 制限関数を使う |
| CFLを大きくしすぎ | 発散 | 徐々に上げる |
| 全体が低速なのに密度ベース | 計算が遅い | 圧力ベースを検討 |
関連する内容も知りたいです。
関連トピック
なった
詳しく
報告