衝撃波管問題(Riemannソルバー) — よくある問題と対策
より充実した内容を shock-tube-riemann.html でご覧いただけます。
数値振動(Gibbs現象)
衝撃波の前後に数値的な振動が出てしまうんですが、どうすればいいですか?
不連続面近傍のオーバーシュート/アンダーシュートは高次精度スキームの宿命だ。対策の選択肢を整理しよう。
| 対策 | メリット | デメリット |
|---|---|---|
| 1次精度に落とす | 振動完全消滅 | 数値拡散で解がぼやける |
| TVDリミッターを強める | 振動抑制しつつ2次精度 | 滑らかな領域の精度が低下 |
| WENO/MP系スキーム | 高次精度を維持 | 実装が複雑、計算コスト増 |
| 人工粘性追加 | 実装簡単 | 粘性量の調整が経験的 |
Fluentで2次精度風上差分を使っていて振動が出る場合は?
Fluentでは「Solution Methods」でSpatial DiscretizationをFirst Order Upwindに一旦落として収束させ、その解を初期値にしてSecond Orderに切り替えるという手順が有効だ。また、Gradient LimiterのMethodをStandardからMultidimensional Limiterに変更すると振動が抑制されることもある。
Carbuncle現象
「Carbuncle現象」って何ですか?先輩が困っていたんですが...
Carbuncle現象は、強い垂直衝撃波の数値解が格子に依存した非物理的な不安定構造を示す問題だ。Roe系スキームで特に発生しやすい。衝撃波面が格子に平行に配置されたとき、衝撃波面上に不規則な凹凸が成長してしまう。
対策はいくつかある。
1. HLL系スキームへの切り替え: HLLやHLLCは接触不連続面の解像度が低い代わりにCarbuncleフリー
2. H-correction(Sanders et al., 1998): Roeスキームに横方向の数値粘性を追加
3. Rotated Roe: フラックス計算の座標系を局所的に回転させる
4. AUSM+up: 低マッハ数補正付きAUSMはCarbuncleに対してロバスト
STAR-CCM+のデフォルトがAUSM+なのは、この問題を避けるためですか?
それも理由の一つだよ。AUSM系は衝撃波安定性に優れるから、汎用ソルバーのデフォルトには適しているんだ。
低マッハ数領域での精度劣化
圧縮性ソルバーで低マッハ数($M < 0.3$)の流れを解くと精度が悪いと聞きましたが?
Godunov系スキームは低マッハ数で過度な数値拡散を生じる。これはフラックスの散逸項が $O(1/M)$ でスケーリングするためだ。対策として以下がある。
全速度域で使えるソルバーがあれば理想的ですね。
All-speed schemeは活発な研究分野で、STAR-CCM+のCoupled Flowソルバーはそれに近い設計思想だよ。非圧縮極限と圧縮性を一つのフレームワークで扱える点が強みだ。
衝撃波管のトラブルあるある——「負圧力」が出たら要注意
Riemannソルバーを実装して衝撃波管問題を走らせると、初心者が最初にハマるのが「負の圧力・密度」の出現だ。物理的にありえない値が出た瞬間に計算は発散する。原因の多くは初期の圧力比が大きすぎてソルバーが追いつかないか、メッシュが粗すぎて膨張波の波頭を解像できていないかのどちらか。実務では「まず圧力比10から始めて徐々に上げる」という地味な作業で9割の問題は解決する。残り1割は数値粘性の設定を見直すことになる。
トラブル解決の考え方
「解析が合わない」と思ったら
- まず深呼吸——焦って設定をランダムに変えると、問題がさらに複雑になる
- 最小再現ケースを作る——衝撃波管問題(Riemannソルバー)の問題を最も単純な形で再現する。「引き算のデバッグ」が最も効率的
- 1つだけ変えて再実行——複数の変更を同時に行うと、何が効いたか分からなくなる。科学実験と同じ「対照実験」の原則
- 物理に立ち返る——計算結果が「重力に逆らって物が浮く」ような非物理的な結果なら、入力データの根本的な間違いを疑う
関連トピック
なった
詳しく
報告