Riemann 問題から Godunov 法まで - 数値フラックスの核心
CFD の心臓部である Riemann 問題を深掘りし、Exact/Approximate Riemann Solver がどのように数値フラックスを決定するのかを解説します。
Riemann 問題:CFD の心臓#
有限体積法 (Finite Volume Method) において、セル境界の 数値フラックス (numerical flux) をどのように計算するかは、解の正確さと安定性を左右する極めて重要な要素です。この数値フラックスを決定する鍵となるのが Riemann 問題 です。
Riemann 問題とは?#
初期条件が一つの不連続面を境に、左右で異なる定数値を持つ初期値問題のことです。
1次元 Euler 方程式に対し、この問題の解析解は三つの波 (wave) で構成されます。
- 左向きの波 (rarefaction または shock)
- 接触不連続 (contact discontinuity)
- 右向きの波 (rarefaction または shock)
Godunov のアイデア (1959)#
Godunov の核心となる洞察は、シンプルながらも強力なものでした。
セル境界におけるフラックスを求めるには、隣接する二つのセルの平均値を左右の状態量として、Riemann 問題を解けばよい。
有限体積法の更新公式は以下の通りです。
ここで こそが、Riemann 問題の解から決定される数値フラックスです。
Exact Riemann Solver#
厳密な Riemann 解法 (Exact Riemann Solver) では、Newton-Raphson 反復法を用いてスター領域 (star region) の圧力 を求めます。左右の波の種類 (shock/rarefaction) に応じて、Rankine-Hugoniot 関係式または等エントロピー関係式を適用します。
衝撃波 (Shock wave) の関係式 (, or ):
ここで 、 です。
膨張波 (Rarefaction wave) の関係式 ():
は以下の条件を満足します。
Approximate Riemann Solver:なぜ必要なのか?#
厳密解法は反復計算が必要なため、計算コストが高くなります。実際の CFD コードでは、その多くが 近似 Riemann 解法 (Approximate Riemann Solver) を使用しています。
Roe Solver (1981)#
Roe は非線形な Riemann 問題を 線形化 (linearization) し、行列 に対する線形 Riemann 問題へと変換します。
Roe 平均 (Roe average) を用いて を構成します。
長所: 接触不連続を正確に捕捉。 短所: エントロピー条件に違反する可能性(エントロピー修正が必要)。
HLLC Solver (Toro, 1994)#
HLL 解法を改良し、 接触不連続 (Contact) を復元 したものが HLLC です。三つの波の速度 (wave speed) を推定します。
スター領域のフラックスは以下の通りです。
HLLC は実装がシンプルでありながら頑健 (robust) であるため、 圧縮性多相流コードで最も広く利用されています 。
AUSM+ (Liou, 1996)#
AUSM 系は、フラックスを対流項 (convective) と圧力項 (pressure) に分離します。
ここで はセル境界の質量流量、 は対流される物理量です。低マッハ数流でも安定しているため、全速度域スキーム (all-speed scheme) への拡張が容易です。
多相流への拡張#
多相流では界面の両側で状態方程式 (EOS) が異なるため、Riemann 解法を マルチマテリアル (multi-material) 版へと一般化する必要があります。
代表的なアプローチには以下があります。
- Ghost Fluid Method: 界面付近で反対側の流体のゴーストセルを構成し、各相において独立したシングルマテリアルの Riemann 問題を解きます。
- HLLC for multi-material: スター領域において両側の EOS をそれぞれ適用し、 を決定します。
次の記事では、 界面捕捉法 (VOF, Level Set, Diffuse Interface) を比較します。
左右の圧力比を 1000:1 まで上げると、両側の波が shock になる瞬間が見える。
x–t 다이어그램에서 좌·우로 가는 파(shock 또는 rarefaction)와 가운데 접촉 불연속이 보인다. p_L > p_R이 충분히 크면 양쪽 모두 shock이 된다.
役に立ったらシェアしてください。