衝撃波管問題(Riemannソルバー)
理論と物理
衝撃波管問題とは
先生、衝撃波管問題ってCFDの教科書で必ず出てきますけど、なんでそんなに重要なんですか?
衝撃波管問題(Sod問題に代表される1次元Riemann問題)は、圧縮性流れの数値スキームの精度と安定性を評価するための最も基本的なベンチマークだからだよ。厳密解が解析的に得られるため、数値解との比較で数値拡散やオーバーシュート、衝撃波解像度を定量的に評価できる。
厳密解が得られるというのは、具体的にどういう仕組みですか?
1次元Euler方程式の初期値問題として定式化するんだ。管の中央にダイアフラム(隔膜)があって、左側が高圧 $(\rho_L, u_L, p_L)$、右側が低圧 $(\rho_R, u_R, p_R)$ の状態。ダイアフラムを破ると、3つの波が発生する。
1. 左に進む膨張波(希薄波、rarefaction fan)
2. 中央の接触不連続面(contact discontinuity)
3. 右に進む衝撃波(shock wave)
1次元Euler方程式の保存形はこうなる。
全エネルギーは $E = \frac{p}{\gamma - 1} + \frac{1}{2}\rho u^2$ だ。
Rankine-Hugoniot関係式
衝撃波の前後の状態はどう関係づけられるんですか?
衝撃波を跨ぐ保存則から導かれるのがRankine-Hugoniot関係式だ。衝撃波速度を $s$ とすると、
ここで $[\cdot]$ は衝撃波前後の差を表す。圧力比で表すと、
$M_s$ は衝撃波マッハ数だ。これと接触不連続面での圧力・速度の連続条件、膨張波内のリーマン不変量を組み合わせると、4つの領域(左未擾乱、膨張波内、星領域、右未擾乱)の全状態量が決定される。
星領域(star region)って何ですか?
接触不連続面の左右の領域で、圧力と速度は等しい($p^ = p_L^ = p_R^$, $u^ = u_L^ = u_R^$)けど、密度は不連続になる領域だよ。この $p^*$ を求める方程式は非線形なので、Newton-Raphson法で反復的に解く。
Godunov法誕生の背景——1959年ソ連の論文が世界を変えた
1959年、ソビエト連邦の数学者セルゲイ・ゴドゥノフは「局所的なRiemann問題の解を使って保存則を離散化する」という革命的なアイデアを論文として発表した。今日のCFDで使われる「有限体積法+Riemannソルバー」の基礎はここから始まる。興味深いのは、この論文が冷戦のさなかに書かれ、しばらく西側世界に知られなかったこと。1970年代以降に英訳・紹介されて初めてその重要性が広く認識された。衝撃波管問題の厳密解を理解するとゴドゥノフのアイデアの天才性が見えてくる——「膜が破れた瞬間の解を使って次のステップを計算する」というシンプルさが全てだ。
各項の物理的意味
- 時間項 $\partial(\rho\phi)/\partial t$:蛇口をひねった瞬間を思い浮かべてください。最初は水がバタバタと不安定に出て、しばらくすると安定した流れになりますよね? この「変化している最中」を記述するのが時間項です。心臓の拍動で血流が脈打つのも、エンジンのバルブが開閉するたびに流れが変動するのも、すべて非定常現象。では定常解析とは? 「十分時間が経って流れが落ち着いた後」だけを見る——つまりこの項をゼロにする。計算コストが大幅に下がるため、まず定常で解いてみるのがCFDの基本戦略です。
- 対流項 $\nabla \cdot (\rho \mathbf{u} \phi)$:川に落ち葉を落としたらどうなりますか? 流れに乗って下流に運ばれますよね。これが「対流」——流体の動きが物を運ぶ効果です。暖房の温風が部屋の端まで届くのも、空気という「運び屋」が熱を対流で輸送しているから。ここが面白いところ——この項は「速度×速度」を含むため非線形です。つまり、流れが速くなるとこの項が急激に強くなり、制御が難しくなる。これが乱流の根本原因です。よくある勘違い:「対流と伝導は同じようなもの」→ 全然違います! 対流は流れが運ぶ、伝導は分子が伝える。桁違いの効率差があります。
- 拡散項 $\nabla \cdot (\Gamma \nabla \phi)$:コーヒーにミルクを入れて放置したことはありますか? かき混ぜなくても、しばらく経つと自然に混ざりますよね。あれが分子拡散です。では次の質問——ハチミツとお水、どちらが流しやすいですか? 当然お水ですよね。ハチミツは粘性($\mu$)が高いから流れにくい。粘性が大きいと拡散項が強くなり、流体は「もったりした」動きになります。レイノルズ数が小さい流れ(ゆっくり、ドロドロ)では拡散が支配的。逆にRe数が大きい流れでは対流が圧倒し、拡散は脇役になります。
- 圧力項 $-\nabla p$:注射器のピストンを押すと、液体が針先から勢いよく出ますよね? なぜでしょう? ピストン側が高圧、針先が低圧——この圧力差が流体を押す力になるからです。ダムの放水も同じ原理。天気図で等圧線がギュッと密になっている場所では? そう、強風が吹きます。「圧力差があるところに流れが生まれる」——これがナビエ-ストークス方程式の圧力項の物理的意味。ここでの勘違いポイント:CFDの「圧力」は絶対圧ではなくゲージ圧のことが多い。圧縮性解析に切り替えたとたんに結果がおかしくなる場合、絶対圧/ゲージ圧の混同が原因かもしれません。
- ソース項 $S_\phi$:暖められた空気が上に昇る——なぜでしょう? 周囲より軽く(密度が低く)なったから、浮力で押し上げられるのです。この浮力はソース項として方程式に追加されます。他にも、ガスコンロの炎で化学反応熱が発生する、工場の電磁ポンプで金属溶湯にローレンツ力がかかる…これらはすべて「外部から流体にエネルギーや力を注入する」作用であり、ソース項で表現します。ソース項を忘れるとどうなるか? 自然対流の解析で浮力を入れ忘れると、流体は一切動かない——冬の部屋で暖房をつけたのに暖かい空気が上に行かない、という物理的にありえない結果になります。
仮定条件と適用限界
- 連続体仮定:クヌッセン数 Kn < 0.01(分子平均自由行程 ≪ 代表長さ)で成立
- ニュートン流体仮定:せん断応力と歪み速度が線形関係(非ニュートン流体では粘度モデルが必要)
- 非圧縮性仮定(Ma < 0.3の場合):密度を一定として扱う。マッハ数0.3以上では圧縮性効果を考慮
- ブシネスク近似(自然対流):密度変化を浮力項のみで考慮し、他の項では一定密度を使用
- 適用外ケース:希薄気体(Kn > 0.1)、超音速・極超音速流れ(衝撃波捕捉が必要)、自由表面流れ(VOF/Level Set等が必要)
次元解析と単位系
| 変数 | SI単位 | 注意点・換算メモ |
|---|---|---|
| 速度 $u$ | m/s | 入口条件で体積流量から換算する際、断面積の単位に注意 |
| 圧力 $p$ | Pa | ゲージ圧と絶対圧の区別。圧縮性解析では絶対圧を使用 |
| 密度 $\rho$ | kg/m³ | 空気: 約1.225 kg/m³@20°C、水: 約998 kg/m³@20°C |
| 粘性係数 $\mu$ | Pa·s | 動粘性係数 $\nu = \mu/\rho$ [m²/s] との混同に注意 |
| レイノルズ数 $Re$ | 無次元 | $Re = \rho u L / \mu$。層流/乱流遷移の判定指標 |
| CFL数 | 無次元 | $CFL = u \Delta t / \Delta x$。時間刻みの安定性に直結 |
数値解法と実装
Godunov法とRiemannソルバー
RiemannソルバーがCFDの中でどういう役割を果たしているのか、改めて教えてください。
Godunovの考え方は、各セル界面でのフラックスを局所的なRiemann問題の解から求めるというものだ。セル $i$ と $i+1$ の境界では、左状態 $\mathbf{U}_i$ と右状態 $\mathbf{U}_{i+1}$ から成るRiemann問題を解き、界面フラックス $\mathbf{F}_{i+1/2}$ を決定する。
厳密Riemannソルバーは毎回Newton法の反復が必要で計算コストが高い。そこで実用的な近似Riemannソルバーが多数開発されてきた。代表的なものを比較しよう。
| ソルバー | 原理 | 衝撃波 | 接触不連続面 | 膨張波 | コスト |
|---|---|---|---|---|---|
| Exact(Godunov) | 厳密解 | 正確 | 正確 | 正確 | 高 |
| Roe | 近似ヤコビアンの線形化 | 良好 | 良好 | 良好 | 中 |
| HLL | 2波近似(最速・最遅波) | 良好 | 拡散大 | 良好 | 低 |
| HLLC | 3波近似(接触波追加) | 良好 | 良好 | 良好 | 低〜中 |
| AUSM+ | 圧力-対流分離 | 良好 | やや拡散 | 良好 | 低 |
| Rusanov(LLF) | 最大固有値で近似 | 安定 | 拡散大 | 安定 | 最低 |
HLLだと接触不連続面がぼやけるのに、HLLCだと良好なのはなぜですか?
HLLは波を2本しか考慮しないから、接触不連続面(3本目の波)の情報が失われるんだ。HLLCのCはContact waveのCで、3本目の波を追加することで接触不連続面を解像できるようになった。Toroの教科書に詳しい導出がある。
Roeソルバーの詳細
Roeソルバーはどういう仕組みで近似しているんですか?
Roeの考え方は、非線形のEuler方程式を界面で線形化するというものだ。Roe平均状態を使ってヤコビアン行列 $\hat{A}$ を構成し、
Roe平均の密度と速度は以下で定義される。
Roeソルバーの弱点はありますか?
膨張衝撃波(expansion shock)という非物理的な解を生成する場合がある。これはエントロピー条件に違反するもので、Harten-Hyman entropy fixで修正する必要がある。また、低マッハ数領域では過度な数値拡散が生じる問題もあり、Low-Mach Roe修正(Rieper fix等)が提案されているよ。
MUSCL法とTVD制限関数
1次精度だと数値拡散が大きすぎると思うんですが、高次精度化はどうするんですか?
MUSCL(Monotonic Upstream-centered Scheme for Conservation Laws)法で2次精度化するのが標準だ。セル界面の左右状態を線形再構成で外挿する。
ここで $\phi(r)$ がTVDリミッター関数、$r$ は解の滑らかさの指標だ。リミッターを選ぶことで、滑らかな領域では2次精度、不連続近傍では1次精度に自動的に切り替わる。
衝撃波管実験——100年以上前から使われる「教科書の王者」
衝撃波管(shock tube)は1899年にフランスのPaul Vernierが考案した装置で、高圧ガスと低圧ガスを仕切り板で区切り、仕切りを破ることで衝撃波を発生させます。装置自体は非常にシンプルなのに、衝撃波・膨張波・接触不連続面という圧縮性流体力学の三大要素が一度に現れるため、教育・検証・研究用途で今日まで使われ続けています。特に「Sod問題」(1978年)は圧縮性CFDの標準ベンチマークとして有名で、新しいRiemannソルバーを開発したら必ずSodテストにかけます。これに合格しないスキームは表に出せません。
風上差分(Upwind)
1次風上: 数値拡散が大きいが安定。2次風上: 精度向上するが振動のリスク。高レイノルズ数流れでは必須。
中心差分(Central Differencing)
2次精度だが、Pe数 > 2で数値振動が発生。低レイノルズ数の拡散支配流れに適する。
TVDスキーム(MUSCL、QUICK等)
リミッタ関数により数値振動を抑制しつつ高精度を維持。衝撃波や急勾配の捕捉に有効。
有限体積法 vs 有限要素法
FVM: 保存則を自然に満足。CFDの主流。FEM: 複雑形状・マルチフィジックスに有利。SPH等のメッシュフリー法も発展中。
CFL条件(クーラン数)
陽解法: CFL ≤ 1が安定条件。陰解法: CFL > 1でも安定だが、精度と反復回数に影響。LES: CFL ≈ 1を推奨。物理的意味: 1タイムステップで情報が1セル以上進まないこと。
残差モニタリング
連続の式・運動量・エネルギーの各残差が3〜4桁低下で収束と判断。質量保存の残差は特に重要。
緩和係数
圧力: 0.2〜0.3、速度: 0.5〜0.7が一般的な初期値。発散する場合は緩和係数を下げる。収束後は上げて加速。
非定常計算の内部反復
各タイムステップ内で定常解に収束するまで反復。内部反復数: 5〜20回が目安。残差がタイムステップ間で変動する場合は時間刻みを見直す。
SIMPLE法のたとえ
SIMPLE法は「交互に調整する」手法。まず速度を仮に求め(予測ステップ)、その速度で質量保存が満たされるよう圧力を補正し(補正ステップ)、補正された圧力で速度を修正する——このキャッチボールを繰り返して正解に近づく。2人で棚を水平にする作業に似ている:片方が高さを合わせ、もう片方がバランスを取り、これを交互に繰り返す。
風上差分のたとえ
風上差分は「川の流れに立って上流の情報を重視する」手法。川の中にいる人が下流を見ても水の出所は分からない——上流の情報が下流を決めるという物理を反映した離散化手法。精度は1次だが、流れの方向を正しく捕捉するため安定性が高い。
実践ガイド
Sod問題の初期条件
Sod問題の具体的な設定を教えてください。
Sod (1978) の標準的な初期条件は以下の通りだ。管の長さを1、ダイアフラム位置を $x = 0.5$ とする。
| 状態量 | 左側 $(x < 0.5)$ | 右側 $(x > 0.5)$ |
|---|---|---|
| 密度 $\rho$ | 1.0 | 0.125 |
| 速度 $u$ | 0.0 | 0.0 |
| 圧力 $p$ | 1.0 | 0.1 |
比熱比 $\gamma = 1.4$(理想気体)。出力時刻は $t = 0.2$ が標準だ。
この問題をOpenFOAMで解く場合、どう設定すればいいですか?
rhoCentralFoamを使う。0/ディレクトリの初期条件はsetFieldsユーティリティで設定するのが簡単だ。system/setFieldsDictに左右の状態を定義して実行する。メッシュはblockMeshDictで1次元に1000セル程度配置すれば十分だよ。
数値解の評価ポイント
数値解を厳密解と比較するとき、何に注目すべきですか?
4つの観点で評価するのが標準的だ。
1. 衝撃波の解像度: 衝撃波が何セルで捕捉されているか。理想は2-3セル。5セル以上は数値拡散が過大。
2. 接触不連続面の解像度: 密度の不連続が保持されているか。数値拡散で最も影響を受けやすい。
3. 膨張波の滑らかさ: 膨張波内にオーバーシュートやアンダーシュートがないか。リミッター関数の効果がここに現れる。
4. Wall-heating問題: 衝撃波の壁面反射時に壁面近傍で非物理的な温度上昇が出る。Godunovスキームの既知問題で、Noh問題でテストできる。
他のベンチマーク問題
Sod問題以外にもテストに使える問題はありますか?
いくつかの標準的な問題を紹介しよう。それぞれ異なる側面をテストできる。
| 問題名 | 特徴 | テスト対象 |
|---|---|---|
| Sod (1978) | 標準的な衝撃波管 | 基本的な衝撃波・接触不連続面捕捉 |
| Lax (1954) | Sodより強い衝撃波 | 強い衝撃波での安定性 |
| Shu-Osher (1989) | 衝撃波とエントロピー波の干渉 | 高次精度スキームの分散関係 |
| Woodward-Colella (1984) | ダブルマッハ反射 | 2Dでの衝撃波干渉解像 |
| Noh (1987) | 衝撃波の壁面反射 | Wall-heating問題のテスト |
| Einfeldt (1988) | 123問題 | 膨張波の正確な再現 |
Shu-Osher問題は面白そうですね。衝撃波の後ろの振動構造が解像できるかをテストするわけですか?
その通り。衝撃波がサイン波状のエントロピー変動に突入するという設定で、衝撃波後方に高周波の密度変動が生じる。1次精度や散逸の大きいスキームではこの高周波成分が消えてしまう。WENO5やMP5といった高次精度スキームの性能評価にはうってつけだよ。
衝撃波管実験——1856年に考案された「最も単純な高速流の実験装置」
衝撃波管(Shock Tube)は高圧室と低圧室を隔膜(ダイアフラム)で仕切り、隔膜破断によって衝撃波を発生させる装置だ。1856年にVieille(仏)が最初に記述し、1940〜50年代にCFD検証用の標準実験装置として確立された。衝撃波管はリーマン問題(高低圧力の不連続が時間発展する問題)の完全解析解が存在する唯一の非定常衝撃波問題であり、数値スキーム(Godunov法、WENO法)の精度検証に今も使われる。CAEでは「数値ディフュージョン」の評価として、衝撃波の厚さが格子幅にどのくらい依存するかをこの問題で確認する。
解析フローのたとえ
CFDの解析フローは「水族館の水槽を設計する」感覚で考えてみてください。まず水槽の形を決め(計算領域)、水の入り口と出口を設計し(境界条件)、ポンプの強さを設定する(流量条件)。魚がどう泳ぐか見たければ粒子追跡。水温が気になれば熱解析を追加。…どうですか? 意外と直感的ではありませんか?
初心者が陥りやすい落とし穴
「y+って何ですか?」——この質問が出たら要注意。壁面近くのメッシュ解像度を表すy+は、CFDの結果精度を左右する最重要パラメータの1つ。壁関数を使うなら30〜300、壁を完全に解像するなら1以下。これを確認せずに「摩擦抵抗が合わない!」と悩む人がとても多い。体温計の先端をちゃんと脇に挟まないで「熱がないのに37.5度って出た!」と慌てているようなものです。
境界条件の考え方
入口の境界条件は「蛇口をどのくらい開けるか」と同じ。ちょろちょろ出すか(低速)、全開にするか(高速)。でもCFDではもう一つ——「どのくらい暴れた水を出すか」(乱流強度)も指定する必要があります。蛇口の開け方を間違えると、下流のシンク全体の流れが変わりますよね? CFDでも入口条件のミスは下流全体に波及します。
ソフトウェア比較
各CFDソフトのフラックススキーム
主要なCFDソフトではどのRiemannソルバーが実装されているんですか?
ソフトごとの対応状況をまとめるよ。
| ソフト | 利用可能なフラックス | デフォルト | 備考 |
|---|---|---|---|
| Ansys Fluent | Roe-FDS, AUSM | Roe-FDS | 密度ベースソルバー時。AUSM+は低マッハ数で安定 |
| STAR-CCM+ | Roe, AUSM+, HLLC | AUSM+ | Coupled Flowソルバー時 |
| OpenFOAM | Kurganov-Tadmor(中心差分ベース) | KT | rhoCentralFoamの標準。Roeは追加実装必要 |
| SU2 | Roe, HLLC, AUSM, JST | Roe | オープンソース。航空宇宙向け |
| Eilmer | Roe, AUSM+, HLLC, Lax-Friedrichs | AUSM+ | オープンソース極超音速ソルバー |
OpenFOAMのKurganov-Tadmorスキームは厳密にはRiemannソルバーではないんですね?
良い指摘だ。KTスキームはRiemann問題を解かずに、局所的な最大波速を使って数値粘性を制御する中心差分系のスキームだ。実装が簡単でロバストだけど、接触不連続面の解像度はRoeやHLLCに劣る。OpenFOAMでRoeソルバーを使いたい場合は、rhoPimpleFoamにカスタムフラックスを実装するか、blastFOAMのようなサードパーティライブラリを利用する手がある。
Fluent密度ベースソルバーの設定詳細
Fluentで衝撃波管問題を解く手順を教えてください。
Fluent GUIでの手順はこうだ。
1. General: Solver Type = Density-Based, Time = Transient
2. Models: Energy = On, Viscous = Inviscid(Euler方程式として解く場合)
3. Materials: Ideal Gas, $\gamma = 1.4$
4. Solution Methods: Flux Type = Roe-FDS, Spatial Discretization = Second Order Upwind
5. Solution Controls: Courant Number = 0.5(初期値)
6. Initialization: 左右で異なる初期条件をRegion Patchingで設定
Journalファイルで自動化もできますよね?
もちろん。Fluent Journalファイルでパラメータスタディを回すのは実務でよくやる。初期条件の圧力比やメッシュ密度を変えて一括実行し、格子収束性を確認するのに便利だよ。
SU2での高次精度解析
SU2はオープンソースですよね。高次精度スキームが使えるんですか?
SU2は2次精度のMUSCL再構成がデフォルトで使えるし、JST(Jameson-Schmidt-Turkel)スキームの人工散逸パラメータも調整可能だ。設定ファイル(.cfg)での指定はこんな感じだね。
| パラメータ | 設定値 | 意味 |
|---|---|---|
| CONV_NUM_METHOD_FLOW | ROE | フラックススキーム |
| MUSCL_FLOW | YES | 2次精度MUSCL再構成 |
| SLOPE_LIMITER_FLOW | VENKATAKRISHNAN | TVDリミッター |
| VENKAT_LIMITER_COEFF | 0.05 | リミッター強度 |
| TIME_MARCHING | DUAL_TIME_STEPPING-2ND_ORDER | 時間進行法 |
Venkatakrishnanリミッターのcoeffが小さいほど強いリミッティングということですか?
その通り。0に近いほど1次精度に近づいて振動は消えるけど散逸が増す。0.05-0.1が衝撃波管問題ではバランスの良い値だよ。
各ソフトでRiemannソルバーの実装が微妙に違う理由
衝撃波管問題の厳密解は誰が計算しても同じなのに、FluentとOpenFOAMとStarCCM+で数値解を比べると微妙にずれる——これ、CFDを始めて最初にモヤモヤする経験の一つだ。原因は各ソフトのRiemannソルバーの「近似の程度」と「リミッター関数の実装」が違うから。Roe法を使っているか、HLL系か、さらにエントロピー修正の係数がどう設定されているか。ブラックボックスに見えるソルバーも、マニュアルの深いところに実装の詳細が書いてある。そこを読み込むのが商用ツールを使いこなす近道だ。
選定で最も重要な3つの問い
- 「何を解くか」:衝撃波管問題(Riemannソルバー)に必要な物理モデル・要素タイプが対応しているか。例えば、流体ではLES対応の有無、構造では接触・大変形の対応能力が差になる。
- 「誰が使うか」:初心者チームならGUIが充実したツール、経験者ならスクリプト駆動の柔軟なツールが適する。自動車のAT車(GUI)とMT車(スクリプト)の違いに似ている。
- 「どこまで拡張するか」:将来の解析規模拡大(HPC対応)、他部門への展開、他ツールとの連携を見据えた選択が長期的なコスト削減につながる。
先端技術
WENO/WCNSスキーム
2次精度を超える高次精度スキームにはどんなものがありますか?
圧縮性流れの高次精度スキームとして最も研究されているのがWENO(Weighted Essentially Non-Oscillatory)スキームだ。基本的な考え方は、複数のステンシル候補から非線形重みを使って最適な補間を選択するというもの。
WENO5(5次精度)の場合、3つの3点ステンシルの重み付き組み合わせで5次精度の精度を実現する。衝撃波近傍では振動しないステンシルに自動的に重みが集中し、滑らかな領域では全ステンシルが等しく寄与して高次精度が発揮される。
ここで $\omega_k$ は滑らかさ指標(smoothness indicator)$\beta_k$ に基づく非線形重みだ。
WENOスキームは商用ソフトに実装されていますか?
残念ながら主要な商用CFDソフト(Fluent、STAR-CCM+、CFX)にはWENOは標準搭載されていない。使えるのはオープンソースや研究コードだ。OpenFOAMにはblastFOAMプロジェクトでWENO実装がある。また、JAXAのFaSTARやDLRのTAUコードにも実装されているよ。
Discontinuous Galerkin法
DG(Discontinuous Galerkin)法も圧縮性流れで使われていますよね?
DG法はセル内を高次多項式で近似し、セル界面でRiemannソルバーを使ってフラックスを評価するという、有限要素法とGodunovスキームのハイブリッドだ。任意の高次精度を達成でき、非構造格子との相性も良い。
衝撃波管問題へのDG法の適用で注意すべきは、不連続近傍でのGibbs振動への対策だ。以下のアプローチが使われる。
- Slope limiter: TVBM limiterなど。低次に落ちるため精度が下がる
- Artificial viscosity: Persson-Peraire型の局所人工粘性。衝撃波検出センサーと併用
- Sub-cell shock capturing: DGセル内でFV的な衝撃波捕捉を行う
DG法を使える商用ソフトはありますか?
Fluentの最新版(2024R2以降)にPoly-Hexcore格子と組み合わせたDG法ベースのソルバーが試験的に導入されている。オープンソースではNektar++、Flexi、HOPRなどがDG法による圧縮性流れソルバーを提供しているよ。
Riemann問題の拡張
古典的な衝撃波管以外に、Riemann問題の概念が応用されている分野はありますか?
たくさんあるよ。いくつか紹介しよう。
DG(Discontinuous Galerkin)法も圧縮性流れで使われていますよね?
DG法はセル内を高次多項式で近似し、セル界面でRiemannソルバーを使ってフラックスを評価するという、有限要素法とGodunovスキームのハイブリッドだ。任意の高次精度を達成でき、非構造格子との相性も良い。
衝撃波管問題へのDG法の適用で注意すべきは、不連続近傍でのGibbs振動への対策だ。以下のアプローチが使われる。
DG法を使える商用ソフトはありますか?
Fluentの最新版(2024R2以降)にPoly-Hexcore格子と組み合わせたDG法ベースのソルバーが試験的に導入されている。オープンソースではNektar++、Flexi、HOPRなどがDG法による圧縮性流れソルバーを提供しているよ。
古典的な衝撃波管以外に、Riemann問題の概念が応用されている分野はありますか?
たくさんあるよ。いくつか紹介しよう。
| 拡張分野 | 内容 | 代表的な手法 |
|---|---|---|
| 多成分流体 | 異なるガスの界面問題 | Ghost Fluid Method |
| MHD | 磁気流体のRiemann問題(7波) | HLLD ソルバー |
| 相対論的流体 | 特殊相対論的Euler方程式 | HLLC-SR |
| 浅水波方程式 | 河川・津波のダム崩壊問題 | HLL/HLLC |
| 弾塑性体 | 衝撃波の固体伝播 | Godunov法ベースのsolid mechanics |
MHDだと波が7本になるんですか。すごく複雑ですね。
MHDでは磁場の影響で速い磁気音波、遅い磁気音波、アルヴェン波、接触不連続面の7つの特性速度があるからね。HLLDソルバーはこれを効率的に近似した手法で、宇宙物理の数値シミュレーションで広く使われている。
Roeスキームの「エントロピー修正」——なぜゼロ割りを防ぐ必要があるか
Roeスキームは高精度な衝撃波計算で人気ですが、有名な弱点として「エントロピー違反」があります。音速点(マッハ数が1に近い領域)でRoe平均の固有値がゼロに近づくと、数値的に非物理的な膨張衝撃波(エントロピー違反解)が生成されてしまうのです。Harten(1983年)はエントロピー修正として固有値に小さな値を加えることで問題を回避する方法を提案しました。このパラメータ(一般にεやδと呼ばれる)の設定は「大きすぎると精度劣化、小さすぎるとエントロピー違反」というジレンマで、ノズル喉部や膨張扇まわりの精度に直接影響します。高次精度Riemannソルバーを使う際はこの修正の実装を必ず確認してください。
トラブルシューティング
数値振動(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つだけ変えて再実行——複数の変更を同時に行うと、何が効いたか分からなくなる。科学実験と同じ「対照実験」の原則
- 物理に立ち返る——計算結果が「重力に逆らって物が浮く」ような非物理的な結果なら、入力データの根本的な間違いを疑う
関連トピック
なった
詳しく
報告