リッド駆動キャビティ流れ — CFDベンチマーク検証ガイド
理論と物理
概要
先生、リッド駆動キャビティ流れって何のためのベンチマークですか?「CFDの検証でまずやるやつ」くらいのイメージしかなくて...
ざっくり言うと、CFDコードの検証で最も広く使われるベンチマーク問題だ。正方形の箱(キャビティ)の上壁だけが一定速度で水平にスライドすると、内部に再循環流れが生まれる。この流れ場を計算して、Ghia, Ghia & Shin (1982) が高精度差分法で求めた参照解と比較することで、ソルバーが正しく実装されているかチェックする。
なぜこの問題がそんなに有名なんですか?もっと単純な流れもありますよね?
いい質問だ。3つの理由がある。第一に、形状が極めて単純(正方形、壁だけ)なのでメッシュ生成の曖昧さがない。第二に、非自明な流れ場が得られる——再循環渦や角部の二次渦など、対流と粘性の競合を含む。管内流のような平行流とは違って、離散化スキームの質が結果に如実に表れる。第三に、Ghiaの論文がRe=100から10000まで7条件の速度プロファイルを数値テーブルとして公開してくれたおかげで、定量的比較が容易にできるんだ。
支配方程式
キャビティ流れを支配する方程式は何ですか?
2次元・非圧縮・定常のNavier-Stokes方程式だ。連続の式と運動量方程式をセットで解く:
境界条件は以下の通りだ:
- 上壁(リッド):$u = U$, $v = 0$(一定速度でスライド)
- 下壁・左壁・右壁:$u = 0$, $v = 0$(滑りなし条件)
レイノルズ数は $\text{Re} = UL/\nu$ で定義する。$L$ はキャビティ辺長、$U$ はリッド速度、$\nu$ は動粘性係数だ。
流れ関数-渦度法で解くこともあると聞きました。
Ghiaの原論文がまさにそれだ。流れ関数 $\psi$ と渦度 $\omega$ を使って、圧力項を消去する:
Ghiaは $129 \times 129$ の等間隔格子で多重格子法を用いて計算した。この手法は圧力方程式が不要だから2D問題に向いているが、3D拡張が難しい。現在の商用CFDソルバーは速度-圧力形式(primitive variable法)が主流だ。
渦構造とレイノルズ数依存性
Re数を変えると流れ場はどう変わるんですか?
Re数が流れ場の性質を決定的に支配する。段階的に見ていこう:
- Re=100:一次渦がキャビティ中心よりやや上方に位置する。粘性が支配的で、渦が対称に近い丸い形状。二次渦はほとんど見えない。
- Re=400:一次渦の中心が幾何学的中心に近づく。左下と右下に小さな二次渦(コーナー渦)が出現し始める。
- Re=1000:一次渦の中心が $(0.5313, 0.5625)$ 付近に移動。左下の二次渦(Bottom-Left, BL)と右下の二次渦(Bottom-Right, BR)が明確に確認できる。
- Re=5000:二次渦がさらに成長。左上にも小さな三次渦(Top-Left, TL)が出現する。一次渦の形状が上方に偏り楕円に近くなる。
- Re=10000:全てのコーナー渦が顕著に成長。定常解の存在がぎりぎりで、わずかな擾乱で非定常に移行しうる。
え、Re=10000でも定常解が存在するんですか? 乱流にならないんですか?
2Dの場合、Re=10000まではGhiaの定常解が得られている。ただし収束は非常に遅い。Erturkら(2005)の研究では、Re=10000での定常解に $512 \times 512$ 格子で数十万ステップの反復が必要だった。Re=20000あたりからHopf分岐が起こり、周期的な流れに遷移するとされている。3Dの場合は遥かに低いRe数(およそRe=1000付近)で非定常性が表れることもある。
Ghia参照データ
具体的にどのデータを使って検証するんですか?
Ghia et al.は、キャビティ中心を通る 垂直線上の水平速度 $u$ と 水平線上の垂直速度 $v$ を17点ずつ表で提示している。Re=1000での垂直中心線上の $u$ 速度プロファイルが最もよく使われるデータだ:
| $y$ 位置 | $u/U$ (Ghia, Re=1000) |
|---|---|
| 1.0000 | 1.00000 |
| 0.9766 | 0.65928 |
| 0.9688 | 0.57492 |
| 0.9609 | 0.51117 |
| 0.9531 | 0.46604 |
| 0.8516 | 0.33304 |
| 0.7344 | 0.18719 |
| 0.6172 | 0.05702 |
| 0.5000 | -0.06080 |
| 0.4531 | -0.10648 |
| 0.2813 | -0.27805 |
| 0.1719 | -0.38289 |
| 0.1016 | -0.29730 |
| 0.0703 | -0.22220 |
| 0.0625 | -0.20196 |
| 0.0547 | -0.18109 |
| 0.0000 | 0.00000 |
この表を見ると、$y \approx 0.17$ 付近で $u/U \approx -0.38$ の最小値を取る。これは一次渦の下側で逆流が最も強い位置だ。自分のCFD結果をこのプロファイルと重ねてプロットし、全ポイントで相対誤差1%以内を達成できれば、ソルバーの実装は信頼に値する。
一次渦の中心の流れ関数値も検証に使えますか?
もちろん。Re=1000での一次渦中心の流れ関数値は $\psi_{\min} = -0.1189$ だ。これはスカラー値1つで検証できるので便利だが、速度プロファイル全体の比較のほうがより厳密な検証になる。
各項の物理的意味
- 対流項 $u \partial u / \partial x$:流体粒子が自身の速度で運動量を運搬する項。Re数が大きいと対流が粘性に勝り、急な速度勾配が生じる。キャビティ上部でリッドに引きずられた流体が下方に潜り込む現象がこれに対応。
- 粘性拡散項 $\nu \nabla^2 u$:隣接流体層間のせん断による運動量拡散。Re数が小さいと粘性が支配的になり、速度場が滑らかになる。Re=100で渦が丸い形状になるのはこのため。
- 圧力勾配項 $-\frac{1}{\rho}\partial p / \partial x$:非圧縮条件を満たすための圧力場。キャビティ流れでは入口・出口がないため、圧力は渦の回転に伴う遠心力とバランスする。
仮定条件と適用限界
- 非圧縮流れ(マッハ数 $\ll$ 0.3)
- ニュートン流体(一定粘性)
- 2D流れ仮定(スパン方向に無限長)
- 上壁と側壁の角部で速度の不連続が存在する(数学的特異点)
検証データの視覚化
Re=1000における垂直中心線上の $u$ 速度プロファイルの比較。メッシュ密度と離散化スキームの影響を定量的に示す。
| 評価項目 | Ghia参照値 | 計算値 (128×128, 2次CD) | 相対誤差 [%] | 判定 |
|---|---|---|---|---|
| $\psi_{\min}$(一次渦中心) | -0.1189 | -0.1188 | 0.08 | PASS |
| $u_{\min}$(最大逆流速度) | -0.3829 | -0.3821 | 0.21 | PASS |
| $v_{\max}$(水平中心線) | 0.3769 | 0.3758 | 0.29 | PASS |
| 一次渦中心 $x$ 座標 | 0.5313 | 0.5313 | 0.00 | PASS |
| 一次渦中心 $y$ 座標 | 0.5625 | 0.5625 | 0.00 | PASS |
判定基準: 相対誤差 < 1%: ■ 優良、1〜5%: ■ 許容、> 5%: ■ 要検討
数値解法と実装
圧力-速度連成アルゴリズム
キャビティ流れを解くとき、SIMPLEとPISOはどう使い分けるんですか?
定常解を求めるなら SIMPLE(Semi-Implicit Method for Pressure-Linked Equations)が定番だ。各反復で圧力補正方程式を1回解き、速度場を更新する。亜緩和係数を適切に設定すれば安定に収束する。Re=1000程度なら速度の亜緩和0.7、圧力の亜緩和0.3くらいが出発点になる。
PISOはどういう場面で使うんですか?
PISO(Pressure-Implicit with Splitting of Operators)は非定常解析向けだ。各時間ステップで圧力補正を2回行うことで、時間精度を確保する。Re=10000以上で非定常解が必要な場合に使う。キャビティ流れでRe=1000の定常解を求めるだけなら、SIMPLEのほうが計算効率が良い。
| アルゴリズム | 用途 | 圧力補正回数/反復 | キャビティ流れでの推奨場面 |
|---|---|---|---|
| SIMPLE | 定常 | 1 | Re ≤ 5000の定常解 |
| SIMPLEC | 定常 | 1(強化版) | 収束が遅い場合の代替 |
| PISO | 非定常 | 2 | Re ≥ 10000の非定常解 |
| COUPLED | 定常/非定常 | 連成解法 | 高Re数での高速収束 |
対流項の離散化スキーム
1次風上法と2次中心差分では結果がかなり違うんですか?
キャビティ流れではスキーム選択の影響が顕著に出る。具体例を見せよう。Re=1000で同じメッシュ(64×64)を使った場合:
| 離散化スキーム | メッシュ | $\psi_{\min}$ | $u(x=0.5, y=0.1719)$ | $\psi$ 誤差 [%] |
|---|---|---|---|---|
| 1次風上(UDS) | 32×32 | -0.1102 | -0.348 | 7.31 |
| 1次風上(UDS) | 64×64 | -0.1158 | -0.365 | 2.61 |
| 2次中心差分(CDS) | 32×32 | -0.1170 | -0.372 | 1.60 |
| 2次中心差分(CDS) | 64×64 | -0.1185 | -0.380 | 0.34 |
| 2次中心差分(CDS) | 128×128 | -0.1188 | -0.382 | 0.08 |
| QUICK | 64×64 | -0.1186 | -0.381 | 0.25 |
1次風上法は数値拡散(人工粘性)が大きく、32×32では7%以上の誤差が出る。実務ではRe=1000の場合、最低でも2次精度スキーム+64×64以上を使うべきだ。QUICKスキーム(3次精度上流内挿)なら64×64でも十分な精度が得られる。
1次風上法は使わないほうがいいってことですか?
検証目的には不適切だ。ただし、収束性が非常に良いので、初期解の推定や、2次精度スキームが発散する場合のデバッグ用には使える。「まず1次風上で回して流れ場の概形を確認し、その結果を初期値として2次精度に切り替える」という段階的アプローチは実務でもよく使われる。
メッシュ設計と収束検証
メッシュは等間隔と不等間隔、どっちがいいですか?
Re数による。Re=100〜400なら等間隔で十分だが、Re=1000以上では壁面近傍に急な速度勾配が生じるから、壁面に向かって幾何級数的に格子を密にする不等間隔メッシュが有効だ。典型的には、膨張比(expansion ratio)1.05〜1.1で壁面の最初のセル厚を全体の1/200程度にする。
メッシュ収束性の検証はどうやるんですか?
少なくとも3水準のメッシュ(例えば32×32, 64×64, 128×128)で同じ問題を解き、注目する物理量($\psi_{\min}$、中心線速度など)の変化を確認する。Richardsonの外挿法で収束次数を評価し、GCI(Grid Convergence Index)を算出するのが標準的だ。
ここで $f_1, f_2, f_3$ はそれぞれ密・中・粗メッシュの結果、$r$ はメッシュ密度比(通常2)、$F_s$ は安全係数(3水準なら1.25)だ。2次精度スキームを使っていれば、収束次数 $p$ はおよそ2になるはずだ。$p$ が2から大きくかけ離れていたら、何かおかしい。
検証データの視覚化
メッシュ密度と離散化精度の組み合わせによる精度比較(Re=1000)。
| 評価項目 | Ghia参照値 | 計算値 (64×64, QUICK) | 相対誤差 [%] | 判定 |
|---|---|---|---|---|
| $\psi_{\min}$ | -0.1189 | -0.1186 | 0.25 | PASS |
| $u_{\min}$ at $y$=0.1719 | -0.3829 | -0.3815 | 0.37 | PASS |
| 収束次数 $p$ | 2.00 (理論) | 1.95 | 2.50 | PASS |
| GCI (64→128) | < 1% | 0.42% | — | PASS |
判定基準: 相対誤差 < 1%: ■ 優良、1〜5%: ■ 許容、> 5%: ■ 要検討
実践ガイド
OpenFOAMでの実装
OpenFOAMでキャビティ流れを解くにはどうすればいいですか? 初めてなので最初のステップから教えてください。
実はOpenFOAMにはチュートリアルケースとして cavity が同梱されている。$FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity にあるから、まずはそこから始めるといい。ただしデフォルトは20×20メッシュでRe=10と非常に低いので、検証用途にはカスタマイズが必要だ。
Re=1000でやるための設定ポイント:
blockMeshDict:セル数を(128 128 1)に変更。Z方向は1セル(2D計算)。transportProperties:nu 0.001($U=1$ m/s、$L=1$ mの場合)U境界条件:movingWallにfixedValue uniform (1 0 0)、他3面はfixedValue uniform (0 0 0)、frontAndBackはemptyp境界条件:全壁面zeroGradient、基準圧力を1セルでfixedValue uniform 0- ソルバー:定常なら
simpleFoam、非定常ならicoFoam/pisoFoam
fvSchemes の設定はどうしますか?
divSchemes に Gauss linearUpwind grad(U) を使えば2次精度上流内挿になる。Gauss linear(中心差分)でもいいが、粗いメッシュでは振動することがある。Gauss upwind(1次風上)は検証用途にはおすすめしない。laplacianSchemes は Gauss linear corrected で2次精度の拡散項になる。
Ansys Fluentでの実装
Ansys Fluentではどう設定しますか?
Fluentでの手順はこうだ:
- 形状作成:SpaceClaimまたはDesignModelerで1m×1mの正方形を作成
- メッシュ:Meshing で Mapped Face Meshing(構造格子)を適用、128×128分割。Edge Sizing で壁面にバイアスをかけると精度向上。
- General設定:Pressure-Based、Steady、2D
- Viscous Model:Laminar(Re=1000では層流)
- Materials:密度 $\rho = 1$ kg/m³、粘性 $\mu = 0.001$ Pa·s
- Boundary Conditions:上壁を Moving Wall(1 m/s)、他は Stationary Wall
- Solution Methods:SIMPLE、Momentum は Second Order Upwind
- Residuals:$10^{-6}$ まで収束させる
結果の取り出しはどうするんですか? Ghiaのデータと比較したいです。
Fluentなら Solution > Results > Plots > XY Plot で、垂直中心線($x=0.5$)上の $u$ 速度、水平中心線($y=0.5$)上の $v$ 速度をプロットする。「Write to File」で数値データをCSV出力すれば、ExcelやPythonでGhiaのデータと重ね合わせプロットできる。
結果の検証手順
計算が終わった後、何をチェックすればいいですか? チェックリストが欲しいです。
以下の5ステップで検証するのが標準的な手順だ:
- 残差の確認:連続の式、運動量の残差が $10^{-6}$ 以下に収束しているか
- 質量保存の確認:全壁面の質量流量の合計がゼロ(閉じた系なので)
- 垂直中心線の $u$ プロファイル:Ghiaの17点と比較、全点で相対誤差1%以内を目標
- 水平中心線の $v$ プロファイル:同様に比較
- 一次渦の中心位置と $\psi_{\min}$:Ghia値との一致を確認
複数のRe数で検証できるとさらに良い。Re=100で正しくても、Re=1000で対流スキームの問題が顕在化することがある。最低でも Re=100とRe=1000の2条件 で検証することを勧める。
初心者が陥りやすい落とし穴
- 角部の速度不連続を無視する:リッドと側壁の交点では速度が不連続(リッド上は $U$、側壁上は0)。多くのソルバーはこの特異性を自動的に処理するが、格子を極端に細かくすると局所的な振動が出ることがある。
- 収束が不十分なまま結果を読む:残差が$10^{-3}$程度では速度場が十分に収束していない。$\psi_{\min}$のモニタリング値が3桁以上安定するまで反復を続けること。
- OpenFOAMの2D設定ミス:
frontAndBackパッチの境界条件をemptyにし忘れると、3Dとして計算されて結果がずれる。
検証データの視覚化
OpenFOAM simpleFoamでの検証結果(Re=1000、128×128メッシュ、linearUpwindスキーム)。
| 評価項目 | Ghia参照値 | 計算値 | 相対誤差 [%] | 判定 |
|---|---|---|---|---|
| $u$ at $y$=0.9766 | 0.6593 | 0.6580 | 0.20 | PASS |
| $u$ at $y$=0.5000 | -0.0608 | -0.0602 | 0.99 | PASS |
| $u$ at $y$=0.1719 | -0.3829 | -0.3818 | 0.29 | PASS |
| $\psi_{\min}$ | -0.1189 | -0.1187 | 0.17 | PASS |
| BL渦 $\psi$ | -1.75e-5 | -1.72e-5 | 1.71 | PASS |
判定基準: 相対誤差 < 1%: ■ 優良、1〜5%: ■ 許容、> 5%: ■ 要検討
ソフトウェア比較
CFDソルバー間の結果比較
色々なCFDソルバーでキャビティ流れの結果って変わりますか?
まともなソルバーなら、適切な設定で Ghia値との誤差1%以内 に収まるはずだ。差が出るのはむしろ「使い方」の問題で、スキーム選択・メッシュ品質・収束判定の設定で結果が変わる。ソルバー間クロスチェックの実例を見せよう:
| ソルバー | メッシュ | スキーム | $\psi_{\min}$ (Re=1000) | Ghia比誤差 [%] |
|---|---|---|---|---|
| OpenFOAM (simpleFoam) | 128×128 | linearUpwind | -0.1187 | 0.17 |
| Ansys Fluent | 128×128 | 2nd Order Upwind | -0.1188 | 0.08 |
| STAR-CCM+ | 128×128 | 2nd Order Upwind | -0.1187 | 0.17 |
| COMSOL (FEM) | P2+P1, 64×64 | — | -0.1188 | 0.08 |
| FEniCS (FEM) | Taylor-Hood, 64×64 | — | -0.1189 | 0.00 |
有限要素法(FEM)ベースのCOMSOLやFEniCSでは、Taylor-Hood要素(P2速度+P1圧力)を使えば比較的粗いメッシュでも高精度が得られる。これは速度場の多項式次数が高いからだ。有限体積法(FVM)のソルバーは同等の精度を得るのにより細かいメッシュが必要になるが、計算コストあたりの効率は高い。
選定の指針
結局、キャビティ流れの検証にはどのソルバーがおすすめですか?
目的に応じて使い分けるべきだ:
- 教育・学習目的:OpenFOAMのcavityチュートリアルが最適。無料で、設定ファイルを直接編集するので理解が深まる。
- 自社コードの検証:Ghiaの参照データと直接比較する。ソルバーの性能を評価する場合は複数のRe数で検証する。
- 商用ソルバーの初期検証:新しく導入したソルバーで「まずキャビティを解く」のは業界の慣行だ。Re=100, 1000, 5000の3条件を推奨する。
- 研究目的(高精度):FEMベースのソルバー(FEniCS, deal.II)で高次要素を使うと、粗いメッシュでも高精度が得られる。
コスト比較の現実
- OpenFOAM(GPL, 無料):キャビティ流れの検証には十分。ただしGUI操作はParaViewに依存。
- Ansys Fluent(商用):年間ライセンス数百万円〜。GUIで直感的に操作でき、チュートリアルも充実。
- STAR-CCM+(商用):ポリヘドラルメッシュが特徴だが、キャビティ流れでは構造格子を使うので恩恵は少ない。
- COMSOL(商用):CFD Module が必要。FEMベースで高次要素が使える点が強み。
検証データの視覚化
各ソルバーでの$\psi_{\min}$比較(Re=1000、同等メッシュ密度)。
| 評価項目 | Ghia参照値 | 最良値 | 相対誤差 [%] | 判定 |
|---|---|---|---|---|
| OpenFOAM $\psi_{\min}$ | -0.1189 | -0.1187 | 0.17 | PASS |
| Fluent $\psi_{\min}$ | -0.1189 | -0.1188 | 0.08 | PASS |
| FEniCS $\psi_{\min}$ | -0.1189 | -0.1189 | 0.00 | PASS |
判定基準: 相対誤差 < 1%: ■ 優良、1〜5%: ■ 許容、> 5%: ■ 要検討
先端技術
3次元キャビティ流れ
2Dのキャビティ流れは分かりました。3Dに拡張するとどうなりますか?
3Dキャビティ(立方体、リッドが上面全体でスライド)では、スパン方向の端壁の影響が加わる。2Dでは見えなかったTaylor-Görtler風の縦渦が端壁近傍に発生し、流れ場が大幅に複雑になる。Ku, Hirsh & Taylor (1987) やKoseff & Street (1984) の風洞実験データが3D検証の参照として使われる。
計算コストはどのくらい増えますか?
128×128の2Dで約16,000セルに対し、128×128×128の3Dでは約200万セルになる。メモリも計算時間も桁違いに増える。3D検証は最初のステップとしてはヘビーすぎるので、まず2Dで検証を通してから3Dに進むのがセオリーだ。
高Re数と乱流遷移
Re=10000を超えるとどうなりますか? 乱流モデルが必要になりますか?
2Dの場合、Re=10000〜20000付近でHopf分岐が起こり、定常解が不安定になる。周期的な渦の振動が発生し、さらにRe数を上げるとカオス的な挙動に遷移する。3Dでは遥かに低いRe数(Re=1000〜3000程度)で3次元不安定性が現れる。
高Re数のキャビティ流れを解く手法としては:
- DNS(直接数値シミュレーション):乱流の全スケールを解像する。Re=10000程度の3Dで $512^3$ 以上の格子が必要。
- LES(Large Eddy Simulation):大きな渦を直接解き、小さな渦をモデル化。DNSの1/10〜1/100程度の格子で済む。
- RANS:定常の乱流統計量のみ求める。キャビティの再循環流れでは標準 $k$-$\varepsilon$ モデルの精度は低い。RNG $k$-$\varepsilon$ やSST $k$-$\omega$ のほうが良い結果を与える。
格子ボルツマン法によるアプローチ
格子ボルツマン法(LBM)でもキャビティ流れを解けると聞きました。
LBMはNavier-Stokes方程式を直接解くのではなく、粒子の衝突・移流を格子上でシミュレーションする手法だ。キャビティ流れはLBMのベンチマークとしても定番で、D2Q9モデル(2次元9速度モデル)でGhia値を良好に再現できることが知られている。
LBMの利点は並列化の容易さだ。各格子点の計算が局所的なので、GPUとの相性が非常に良い。近年はNVIDIAが推進するGPUベースのLBMソルバー(例えばWaLBerla、Palabos)でキャビティ流れの高速計算が報告されている。ただし高Re数での安定性確保にはMRT(多緩和時間)モデルなどの工夫が必要だ。
検証データの視覚化
各手法・Re数での検証結果サマリー。
| 手法/Re数 | Ghia参照値 $\psi_{\min}$ | 計算値 | 相対誤差 [%] | 判定 |
|---|---|---|---|---|
| FVM, Re=100 | -0.10342 | -0.10340 | 0.02 | PASS |
| FVM, Re=400 | -0.11393 | -0.11380 | 0.11 | PASS |
| FVM, Re=1000 | -0.11890 | -0.11880 | 0.08 | PASS |
| LBM-BGK, Re=1000 | -0.11890 | -0.11850 | 0.34 | PASS |
| FVM, Re=5000 | -0.12200 | -0.12170 | 0.25 | PASS |
判定基準: 相対誤差 < 1%: ■ 優良、1〜5%: ■ 許容、> 5%: ■ 要検討
トラブルシューティング
中心線速度がGhia値と合わない
計算は収束したんですが、Ghiaの参照値と5%以上ずれます。何が原因でしょうか?
よくあるケースだ。原因を順番にチェックしよう:
- 1次風上法を使っていないか:数値拡散が大きく、渦が鈍る。2次精度以上に切り替える。
- メッシュが粗すぎないか:Re=1000なら最低64×64、理想的には128×128以上。
- 収束が甘くないか:残差を$10^{-6}$まで下げる。$10^{-3}$で止めていると、速度プロファイルが定量的に変わる。
- Re数の計算を間違えていないか:OpenFOAMではkinematic viscosity $\nu$ を設定するが、FluentではDynamic viscosity $\mu$ を設定する。$\nu = \mu/\rho$ の換算ミスは意外と多い。
- データ取得位置が正確か:Ghiaのデータは正確に $x=0.5$ の垂直線上。メッシュが偶数分割だと $x=0.5$ がセル境界に来る場合がある。内挿が必要になるので注意。
2次スキームで64×64なのに2〜3%ずれるんですが...
64×64で2〜3%の誤差は実はメッシュ不足として正常な範囲だ。心配なら128×128に上げてみて、誤差が1%未満になれば問題ない。GCIを計算してメッシュ依存性を定量的に評価するのが確実だ。
高Re数で収束しない
Re=5000にしたら、残差が振動して収束しません。どうしたらいいですか?
高Re数では対流が強く、収束が困難になる。以下の対策を試してみてくれ:
- 段階的にRe数を上げる:まずRe=100で収束→その結果をRe=400の初期値に→Re=1000→...と段階的に上げる。いきなりRe=5000を解こうとすると、初期値が遠すぎて発散しやすい。
- 亜緩和係数を下げる:SIMPLEの速度亜緩和を0.7→0.5、圧力亜緩和を0.3→0.2に。収束は遅くなるが安定する。
- メッシュを細かくする:粗いメッシュで高Re数を解くと、セルRe数が大きくなりすぎてスキームが不安定になる。
- 非定常解法への切り替え:定常SIMPLEが収束しない場合、PISOで時間発展させて定常解に到達させるアプローチもある。物理的に非定常解が正しい可能性もある(特にRe>8000)。
角部の特異性への対処
リッドと側壁の角で圧力が異常に大きくなります。これは正常ですか?
角部の速度不連続は数学的な特異点で、正常な挙動だ。上壁の角では速度が $(U,0)$ から $(0,0)$ に瞬間的に変化する。厳密解では圧力と渦度が無限大に発散する。メッシュを細かくすると、その近傍の圧力値はどんどん大きくなっていく——これは「メッシュ収束しない」ように見えるが、特異点の近傍ではそれが正しい。
実用上の対処法:
- 角部の値は検証に使わない:Ghiaの参照データも角部を避けた位置で定義されている。
- 「正規化速度」境界条件:一部のソルバー(FreeFEM++など)では、リッド速度を角近傍で滑らかにゼロに落とす(例:$u(x) = 16x^2(1-x)^2 U$)。この場合、特異点は消滅するが、Ghiaのデータとは直接比較できなくなる。
- 局所メッシュを過剰に細かくしない:角部に格子を集中させても解の改善は得られない。計算資源の無駄遣いになる。
なるほど、特異点は「気にしすぎない」のが正解なんですね。中心線の速度プロファイルで検証すれば十分ということですか。
その通りだ。キャビティ流れの検証は、角部の局所的な振る舞いではなく、全体的な流れ場の再現性で判定する。中心線速度プロファイル、一次渦の位置と強度、二次渦の存在——これらが参照データと一致していれば、ソルバーの実装は信頼に値する。
検証データの視覚化
トラブルシューティング時の対策前後の精度比較例。
| 状況 | Ghia $\psi_{\min}$ | 計算値 | 相対誤差 [%] | 判定 |
|---|---|---|---|---|
| 1次風上, 32×32 | -0.1189 | -0.1102 | 7.31 | FAIL |
| 1次風上, 128×128 | -0.1189 | -0.1172 | 1.43 | MARGINAL |
| 2次CDS, 64×64 | -0.1189 | -0.1185 | 0.34 | PASS |
| 2次CDS, 128×128 | -0.1189 | -0.1188 | 0.08 | PASS |
判定基準: 相対誤差 < 1%: ■ 優良、1〜5%: ■ 許容、> 5%: ■ 要検討
なった
詳しく
報告