キャビティ流れ(蓋駆動)
理論と物理
概要
先生、lid-driven cavity ってCFDで一番最初にやるベンチマーク問題ですよね?
その通り。正方形キャビティの上面(蓋)を一定速度で水平にスライドさせる問題だ。幾何形状が単純で境界条件も明確、しかもRe数を変えると豊かな流れ構造が現れる。Ghia et al. (1982) のベンチマークデータが40年以上にわたって使われ続けている。
問題設定
問題の定式化を教えてください。
正方形キャビティ(一辺 $L$)の上壁面が速度 $U$ で $x$ 方向に移動する。他の3壁面は静止。支配方程式は非圧縮Navier-Stokes方程式だ。
無次元パラメータは $Re = UL/\nu$ の一つだけだ。境界条件は、
- 上壁面: $u = U$, $v = 0$
- 下壁面・左壁面・右壁面: $u = 0$, $v = 0$
流れ構造のRe依存性
Re数によってどう変わるんですか?
以下のように整理できる。
| Re | 主渦の位置(中心座標) | コーナー渦 | 流れの性質 |
|---|---|---|---|
| 100 | (0.6189, 0.7344) | 下隅に微小渦 | 定常、主渦がやや上方・右寄り |
| 400 | (0.5547, 0.6055) | 下両隅に渦 | 定常、主渦が中心に近づく |
| 1000 | (0.5313, 0.5625) | 下両隅+左上に渦 | 定常、主渦がほぼ中心 |
| 5000 | (0.5117, 0.5352) | 全コーナーに渦 | 定常(2D)、3Dでは不安定 |
| 10000 | (0.5117, 0.5313) | 渦の階層構造 | 2Dでは定常/弱非定常、3Dでは乱流化 |
コーナー渦って、角に小さな渦ができるんですよね。
そうだ。Moffatt (1964) が理論的に示したように、鋭角コーナーでは無限の渦列が存在する。各渦の強度は幾何級数的に減少する。CFDでは最初の2〜3個の渦が解像できれば十分だが、メッシュをコーナーに向けて細かくする必要がある。
渦度-流れ関数定式化
2Dの場合は渦度-流れ関数で解くことが多いんですか?
2D非圧縮流では渦度-流れ関数定式化が連続の式を自動的に満たすため効率的だ。
$$ \frac{\partial \omega}{\partial t} + u\frac{\partial \omega}{\partial x} + v\frac{\partial \omega}{\partial y} = \nu \nabla^2 \omega $$
$$ \nabla^2 \psi = -\omega $$
2Dの場合は渦度-流れ関数で解くことが多いんですか?
2D非圧縮流では渦度-流れ関数定式化が連続の式を自動的に満たすため効率的だ。
ここで渦度 $\omega = \partial v/\partial x - \partial u/\partial y$、流れ関数 $\psi$ は $u = \partial \psi / \partial y$, $v = -\partial \psi / \partial x$ だ。
ただし3Dや可変密度流れへの拡張が困難なので、汎用CFDコードでは速度-圧力定式化(primitive variable formulation)が標準だ。
蓋の角の特異性
蓋の端で壁面速度が不連続になりますよね。これは問題にならないんですか?
良い指摘だ。蓋の角($(0,L)$ と $(L,L)$)では速度が不連続になる。$u = U$(上壁面)と $u = 0$(側壁面)が同時に成立しない。これは数学的な特異点であり、メッシュを細かくしても解が収束しない。
実務的な対処法は、
- 角から数セル離れた領域で結果を評価する
- 正則化条件を使う(蓋の速度を角に向かってスムーズにゼロに遷移させる)
- 特異性を承知の上で、十分なメッシュ密度で計算し、角以外の領域の精度を確保する
Ghia(1982年)のデータが40年以上引用される理由
キャビティ流れの「正解データ」として世界中で使われているのが、GhiaらがJournal of Computational Physicsに1982年に発表した論文です。Re数1000、3200、5000、10000の各ケースでの速度プロファイルが表データで掲載されており、今も年間数百〜千本の論文で引用されています。なぜ40年以上通用し続けているのか——それは「問題設定がシンプルで再現性が高く、格子収束されたデータが当時の最高水準で示されているから」です。新しいCFDソルバーや数値スキームを開発したとき、「Ghia基準」に通るかどうかが最初のチェックポイントになっています。
各項の物理的意味
- 時間項 $\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$。時間刻みの安定性に直結 |
数値解法と実装
数値手法の選択
キャビティ流れを解くにはどんな手法がいいですか?
キャビティ流れは閉じた領域で入口も出口もないという特殊性がある。圧力の絶対値が一意に決まらないため、参照圧力を1点で固定する必要がある。
| 手法 | 適用範囲 | 備考 |
|---|---|---|
| 有限差分法(等間隔格子) | Re < $10^4$ | Ghia et al. の元データもこの手法 |
| 有限体積法(FVM) | 汎用 | 商用CFDの標準。SIMPLE/PIMPLEで連成 |
| 有限要素法(FEM) | 汎用 | Taylor-Hood要素(P2/P1)でLBB条件充足 |
| スペクトル法 | 高精度計算 | Chebyshev多項式基底。指数的収束 |
| 格子ボルツマン法(LBM) | Re < $10^4$ 程度 | 壁面バウンスバックで実装が容易 |
FVM での実装(SIMPLE法)
SIMPLE法の手順を簡単に教えてください。
キャビティ流れでのSIMPLE反復は以下の通りだ。
SIMPLE法の手順を簡単に教えてください。
キャビティ流れでのSIMPLE反復は以下の通りだ。
1. 圧力場 $p^*$ を仮定
2. 運動量方程式を $p^$ で解いて仮速度 $\mathbf{u}^$ を得る
3. 圧力補正方程式 $\nabla \cdot (\frac{1}{a_P} \nabla p') = \nabla \cdot \mathbf{u}^*$ を解く
4. 速度と圧力を補正: $p = p^ + \alpha_p p'$, $\mathbf{u} = \mathbf{u}^ - \frac{1}{a_P} \nabla p'$
5. 収束判定。未収束なら1に戻る
キャビティ流れでは入口出口がないため、圧力の基準を1点(例えば左下角のセル)で固定する。OpenFOAM では p の fvSolution で reference cell と reference value を指定する。
格子ボルツマン法
格子ボルツマン法(LBM)でも解けるんですか?
LBM は cavity flow の入門として非常に人気がある。D2Q9 モデル(2次元9速度)で、BGK衝突演算子を使えば簡単に実装できる。
$$ f_i(\mathbf{x} + \mathbf{c}_i \Delta t, t + \Delta t) = f_i(\mathbf{x}, t) - \frac{1}{\tau}[f_i(\mathbf{x}, t) - f_i^{eq}(\mathbf{x}, t)] $$
緩和時間 $\tau$ と動粘度の関係は $\nu = c_s^2 (\tau - 0.5) \Delta t$ で、$c_s = 1/\sqrt{3}$(格子音速)だ。上壁面の移動は Zou-He 境界条件で実装する。
LBM だと圧力-速度連成を解く必要がないんですね。
そうだ。LBM は陽的手法なので反復が不要で、並列化も容易だ。ただし、高Re数では数値安定性に注意が必要で、MRT(Multi-Relaxation Time)モデルや正則化手法が使われる。
Ghia ベンチマークとの比較方法
Ghia et al. のデータとどう比較すればいいですか?
比較対象は2つだ。
格子ボルツマン法(LBM)でも解けるんですか?
LBM は cavity flow の入門として非常に人気がある。D2Q9 モデル(2次元9速度)で、BGK衝突演算子を使えば簡単に実装できる。
緩和時間 $\tau$ と動粘度の関係は $\nu = c_s^2 (\tau - 0.5) \Delta t$ で、$c_s = 1/\sqrt{3}$(格子音速)だ。上壁面の移動は Zou-He 境界条件で実装する。
LBM だと圧力-速度連成を解く必要がないんですね。
そうだ。LBM は陽的手法なので反復が不要で、並列化も容易だ。ただし、高Re数では数値安定性に注意が必要で、MRT(Multi-Relaxation Time)モデルや正則化手法が使われる。
Ghia et al. のデータとどう比較すればいいですか?
比較対象は2つだ。
1. キャビティ中央の垂直線($x = 0.5$)上の $u$ 速度: 上壁面で $u = 1$、底壁面で $u = 0$、中間で再循環による負の $u$ が現れる
2. キャビティ中央の水平線($y = 0.5$)上の $v$ 速度: 左壁面近くで正、右壁面近くで負
Ghia et al. は $129 \times 129$ の均一格子で Re = 100, 400, 1000, 3200, 5000, 7500, 10000 のデータを tabulate している。これらの離散点の値と自分のCFD結果を比較して、相対誤差が $1\%$ 以内であれば良好だ。
コーナー渦が「圧力-速度連成の鍵穴」になる話
蓋駆動キャビティの数値計算では、4つのコーナー近傍に微小な二次渦・三次渦が入れ子状に生まれます。これらは理論的には無限に小さな渦が続く「Moffatt渦」として知られていますが、数値計算では格子解像度に限界があるため必ず途中で消えます。面白いのは「この入れ子渦を正確に再現できるかどうか」が圧力-速度連成スキームの品質試験になること。SIMPLE法・SIMPLEC法・PISO法などを比較するベンチマークとして、コーナー渦の数と形状が使われることがあります。「コーナーをちゃんと計算できるか」は意外と難しい問題です。
風上差分(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次だが、流れの方向を正しく捕捉するため安定性が高い。
実践ガイド
実践手順
キャビティ流れのベンチマーク計算を実際にやる手順を教えてください。
OpenFOAM を例に説明しよう。
1. メッシュ生成: blockMeshDict で $N \times N$ の均一格子を定義。$N = 64, 128, 256$ の3水準
2. 境界条件: 上壁面 movingWall に $U = (1, 0, 0)$、他3壁面は fixedValue (0 0 0)
3. 物性値: $\nu = 1/Re$($U = 1$, $L = 1$ の無次元化)
4. ソルバー: icoFoam(層流・非定常)または simpleFoam(定常)
5. 後処理: 中央線上の速度を sampleDict で抽出し、Ghia データと比較
メッシュ収束性
何分割あれば十分ですか?
Re数によって必要な解像度が変わる。
| Re | 最低必要分割数 | Ghia の分割数 | 推奨分割数 |
|---|---|---|---|
| 100 | $32 \times 32$ | $129 \times 129$ | $64 \times 64$ |
| 1000 | $64 \times 64$ | $129 \times 129$ | $128 \times 128$ |
| 5000 | $128 \times 128$ | $257 \times 257$ | $256 \times 256$ |
| 10000 | $256 \times 256$ | $257 \times 257$ | $512 \times 512$ |
均一格子じゃなくて、壁面近くを細かくしたほうがいいんじゃないですか?
その通り。壁面近傍とコーナー部にメッシュを集中させると、同じセル数でも精度が向上する。blockMeshDict の simpleGrading で壁面方向にストレッチをかける(grading ratio 5〜10)のが効果的だ。
Ghia データとの比較プロット
Re = 1000 のときの代表的な値を教えてください。
Ghia et al. (1982) の Re = 1000 データから主要な値を示す。
$x = 0.5$ 上の $u$ 速度:
| $y$ | $u$ |
|---|---|
| 1.0000 | 1.00000 |
| 0.9766 | 0.65928 |
| 0.9688 | 0.57492 |
| 0.5000 | -0.06080 |
| 0.0547 | -0.24533 |
| 0.0000 | 0.00000 |
特に $y \approx 0.05$ 付近の負の $u$($\approx -0.25$)は、底壁面近くの再循環を表している。この値が合えば、下部コーナー渦の構造が正しく解像できている証拠だ。
3D キャビティ
3Dのキャビティ流れも研究されているんですか?
3Dではスパン方向($z$方向)の端壁面効果が加わる。Koseff & Street (1984) の実験が有名だ。2Dでは定常な Re = 3200 が、3Dでは非定常になることが知られている。
3D cavity の臨界 Re はスパン方向のアスペクト比に依存するが、SAR (Span Aspect Ratio) = 3 の場合、Re $\approx 800$ で3D不安定性が発現する(Albensoeder & Kuhlmann 2006)。
塗料の撹拌タンクとキャビティ流れの共通点
工場の塗料撹拌タンクは「上蓋を動かす代わりにインペラで液体を動かす」という意味でキャビティ流れに近い物理を持っています。タンク内に「デッドゾーン(流れが淀んで撹拌されない領域)」ができると塗料が不均一になったり沈殿が起きたりします。このデッドゾーンはキャビティ流れでいう「コーナー近傍の低速域」にあたります。蓋駆動キャビティのCFDで「副渦の位置と大きさ」を正確に計算できれば、タンク設計でのデッドゾーン予測精度も上がります。学術的なベンチマーク問題が、現場の製品品質改善に直結するのは珍しいことではありません。
解析フローのたとえ
CFDの解析フローは「水族館の水槽を設計する」感覚で考えてみてください。まず水槽の形を決め(計算領域)、水の入り口と出口を設計し(境界条件)、ポンプの強さを設定する(流量条件)。魚がどう泳ぐか見たければ粒子追跡。水温が気になれば熱解析を追加。…どうですか? 意外と直感的ではありませんか?
初心者が陥りやすい落とし穴
「y+って何ですか?」——この質問が出たら要注意。壁面近くのメッシュ解像度を表すy+は、CFDの結果精度を左右する最重要パラメータの1つ。壁関数を使うなら30〜300、壁を完全に解像するなら1以下。これを確認せずに「摩擦抵抗が合わない!」と悩む人がとても多い。体温計の先端をちゃんと脇に挟まないで「熱がないのに37.5度って出た!」と慌てているようなものです。
境界条件の考え方
入口の境界条件は「蛇口をどのくらい開けるか」と同じ。ちょろちょろ出すか(低速)、全開にするか(高速)。でもCFDではもう一つ——「どのくらい暴れた水を出すか」(乱流強度)も指定する必要があります。蛇口の開け方を間違えると、下流のシンク全体の流れが変わりますよね? CFDでも入口条件のミスは下流全体に波及します。
ソフトウェア比較
ツール別の実装
キャビティ流れはどのCFDツールでも解けますよね。違いはありますか?
ベンチマーク問題としてはどのツールでも解けるが、教育・学習目的での使いやすさに差がある。
| ツール | 設定の容易さ | 精度確認 | 教育利用 |
|---|---|---|---|
| Ansys Fluent | チュートリアルあり | Custom Field Function | 大学ライセンスあり |
| COMSOL | GUI で数分で設定完了 | 理論解・参照解の直接比較可能 | 教育に最適 |
| OpenFOAM | cavity チュートリアルが初学者向け | Python/GNUplot で比較 | 無償で学習に最適 |
| FEniCS/Firedrake | Pythonスクリプトで実装 | 高次FEM、自動微分 | 研究・教育向け |
| Palabos | LBMベース。C++ | cavity サンプルあり | LBM学習に最適 |
OpenFOAM の cavity チュートリアル
OpenFOAM の有名な cavity チュートリアルについて教えてください。
OpenFOAM の入門チュートリアルとして $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity が提供されている。$20 \times 20$ の粗い均一格子で Re = 10 のキャビティ流れを解く。
これをベンチマーク用に拡張するには、
- メッシュを $128 \times 128$ 以上に変更(
blockMeshDict の hex の分割数を変更)
- $\nu$ を変更して Re = 100, 400, 1000 を計算
sampleDict で中央線データを抽出
- Ghia データ(テキストファイルで入手可能)と Python matplotlib で比較プロット
Ansys Fluent での設定
Fluent だとどう設定しますか?
Fluent の場合は以下の手順だ。
OpenFOAM の有名な cavity チュートリアルについて教えてください。
OpenFOAM の入門チュートリアルとして $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity が提供されている。$20 \times 20$ の粗い均一格子で Re = 10 のキャビティ流れを解く。
これをベンチマーク用に拡張するには、
blockMeshDict の hex の分割数を変更)sampleDict で中央線データを抽出Fluent だとどう設定しますか?
Fluent の場合は以下の手順だ。
1. Meshing: 正方形領域に Face Meshing で $128 \times 128$ の均一格子を生成
2. Setup: Viscous Model → Laminar、Fluid Material → 密度と粘度を設定
3. Boundary Conditions: 上壁面を Moving Wall($U = 1$ m/s, $x$ 方向)、他は Stationary Wall
4. Solution Methods: SIMPLE、Second Order Upwind
5. Reference Values: 圧力の Operating Point を設定(浮動圧力を避ける)
6. Run: 3000〜5000 iterations で残差が $10^{-6}$ 以下に収束
7. Post: 中央線上のXY Plot で速度プロファイルを確認
COMSOL での設定
COMSOL なら初学者でも簡単そうですね。
COMSOL では数クリックで設定できる。
1. 2D モデル → Laminar Flow (spf) を選択
2. 正方形ジオメトリ($1 \times 1$ m)を作成
3. 上辺を Wall → Sliding Wall($U_w = 1$ m/s)に設定
4. 他の3辺は No Slip(デフォルト)
5. Fluid Properties で $\mu$ と $\rho$ を設定(Re に対応)
6. Mapped メッシュで均一分割
7. Stationary Study で求解
8. Line Graph で中央線上の速度を Ghia データと比較
ツールの違いを理解するのに、同じ問題を複数のツールで解いてみるのも勉強になりますよね。
その通り。同じ問題を OpenFOAM, Fluent, COMSOL で解いて結果を比較するのは、各ツールの特性を理解する良い方法だ。離散化スキームの影響もよく分かる。
「Ghia論文との比較」がソルバー入門の登竜門になっている理由
CFDを学び始めた人が最初に取り組む「自分のコードが動いているか確認する」課題として、蓋駆動キャビティとGhia論文との比較は世界標準になっています。理由は単純で「入口・出口境界条件が不要」「3D計算が不要」「実験装置がなくても答えが確認できる」の3つが揃っているから。OpenFOAMのチュートリアルにも含まれていますし、商用ソルバーの入門トレーニングでも必ず登場します。「キャビティでGhia論文と合いました」は「CFD計算の基礎が動いている」の証明書として業界で通用します。シンプルな問題だからこそ、教育・検証・ソルバー評価の3役を一手に担えます。
選定で最も重要な3つの問い
- 「何を解くか」:キャビティ流れ(蓋駆動)に必要な物理モデル・要素タイプが対応しているか。例えば、流体ではLES対応の有無、構造では接触・大変形の対応能力が差になる。
- 「誰が使うか」:初心者チームならGUIが充実したツール、経験者ならスクリプト駆動の柔軟なツールが適する。自動車のAT車(GUI)とMT車(スクリプト)の違いに似ている。
- 「どこまで拡張するか」:将来の解析規模拡大(HPC対応)、他部門への展開、他ツールとの連携を見据えた選択が長期的なコスト削減につながる。
先端技術
安定性解析と分岐
キャビティ流れの安定性解析ってどうやるんですか?
定常解を基底状態として微小擾乱の成長率を調べる。時間発展法(DNS で擾乱のパワー法的成長を追跡)またはグローバル安定性解析(一般化固有値問題を解く)が使われる。
2Dキャビティの Hopf 分岐は Re $\approx 8000\text{--}8500$ で起こる(Fortin et al. 1997、Bruneau & Saad 2006)。この値は格子解像度に敏感で、Re = 8000 とも 8500 とも報告されている。3Dの場合は、centrifugal instability(Taylor-Goertler 型)が Re $\approx 800\text{--}1000$ で現れる。
正則化 lid-driven cavity
蓋の角の特異性を避ける方法はあるんですか?
正則化(regularized)lid-driven cavity では、蓋の速度を角に向かってスムーズにゼロに遷移させる。例えば、
この正則化により角の特異性が消え、メッシュ収束性が改善する。高精度ベンチマーク(Botella & Peyret 1998 のスペクトル法解など)ではこの正則化が使われている。
高精度参照解
Ghia のデータより精度が高い参照解はありますか?
以下の研究がより高精度な参照解を提供している。
| 研究者 | 手法 | Re | 格子/次数 | 精度 |
|---|---|---|---|---|
| Ghia et al. (1982) | FDM | 100-10000 | $257 \times 257$ | 工学的精度 |
| Botella & Peyret (1998) | スペクトル法 | 1000 | $N = 96$ | 12桁以上 |
| Erturk et al. (2005) | FDM(高次) | 100-21000 | $601 \times 601$ | 高精度 |
| Bruneau & Saad (2006) | マルチグリッドFDM | 1000-10000 | $2048 \times 2048$ | 非定常解含む |
Botella & Peyret は12桁の精度ですか。すごいですね。
スペクトル法の指数的収束の威力だ。ただし正則化された lid-driven cavity での結果なので、特異点がある場合のGhia データとは直接比較できないことに注意。
機械学習への応用
キャビティ流れは機械学習の研究でも使われているんですか?
サロゲートモデルの構築やPINN(Physics-Informed Neural Networks)の検証に頻繁に使われている。
- PINN: Raissi et al. (2019) は cavity flow を含むNS方程式のPINN解法を実証
- オートエンコーダ: 異なるRe数の流れ場をlatent spaceで補間
- 強化学習: キャビティ内の能動制御(壁面吹出し/吸込み)の最適化
PINN ってデータなしでNS方程式の解を学習できるんですか?
損失関数にNS方程式の残差を含めるので、原理的にはデータなしで解ける。ただし、実際には境界条件のデータが必要だし、高Re数では収束が困難だ。cavity flow はRe $\leq 1000$ 程度でPINNの動作を確認するのに適した問題だ。
Re=8000を超えると突然3Dになる——キャビティ流れの「転換点」
2Dのキャビティ流れは、Re数を上げていくとある時点で解が3次元化します。実験とLESの研究によると、Re≈8000〜10000程度で流れがスパン方向(奥行き方向)に不均一になり始め、真の3D乱流に移行します。2DのRANS計算ではこの変化は検知できません。建築や電子機器冷却の実設計では筐体内部の「空洞」でまさにこの現象が起きることがあり、「2Dで計算したら均一な混合が出た、でも実機では偏りがあった」という事例の裏に3D遷移が潜んでいることがあります。Ghia論文のデータが2Dでよく使われる一方、3D拡張は今も研究の最前線です。
トラブルシューティング
よくある問題と対策
キャビティ流れの計算で起きるトラブルを教えてください。
1. Ghia データと合わない
確認ポイント:
- メッシュ密度: Re = 1000 なら最低 $64 \times 64$ 以上。$32 \times 32$ だと $5\text{--}10\%$ の誤差が出る
- 空間離散化スキーム: 1次風上(First Order Upwind)だと数値拡散で渦が弱まる。最低2次精度を使う
- 参照点のずれ: Ghia のデータは $129 \times 129$ の格子点上の値。自分のメッシュとの内挿誤差に注意
- Re数の定義: $Re = UL/\nu$ であることを確認。$L$ をキャビティの一辺の長さとしているか
2. 圧力が振動する
圧力のコンター図がチェッカーボード模様になるんですが。
原因: collocated配置(速度と圧力を同じ格子点に配置)で Rhie-Chow 補間が不適切な場合に起こる。
対策:
- Rhie-Chow momentum interpolation が有効になっているか確認(OpenFOAM では標準で有効)
- staggered grid(速度と圧力を異なる格子点に配置)を使う手法もある(古典的FDMコード)
- 圧力の under-relaxation を $0.2\text{--}0.3$ に設定
3. 高Re数で収束しない
Re > 5000 では非線形性が強く、SIMPLE法の収束が遅くなる。
対策:
- 擬似時間進行法: 非定常ソルバー(PIMPLE)で十分長い時間走らせて定常解に収束させる
- continuation法: 低Re(例: Re=100)の収束解を初期条件にして、Re を段階的に上げる
- マルチグリッド: AMG前処理を圧力方程式に使用。OpenFOAMでは
GAMGソルバー
Re を段階的に上げるのは良い方法ですね。
いわゆる parameter continuation だ。Re=100 → 400 → 1000 → 3200 → 5000 → 10000 と段階的に上げる。各段階で前段の解を初期条件にする。
4. コーナー渦が解像できない
Moffatt 渦は幾何級数的に小さくなるので、均一格子では解像が困難だ。
対策: コーナーに向かって格子を幾何級数的に細かくする。OpenFOAM の blockMesh なら simpleGrading で壁面への grading ratio を $10\text{--}20$ に設定。
5. 3D計算で2Dと異なる結果が出る
3Dで計算したら2Dの結果と違うんですが。
Re > 800 程度では3D不安定性(Taylor-Goertler渦)が発現するので、3Dの結果が2Dと異なるのは物理的に正しい。
確認事項:
- スパン方向に周期境界を使っているか(端壁面がある場合は端壁効果が加わる)
- スパン方向の解像度が十分か(不安定波長の $1/10$ 以下のメッシュ幅)
- 2D計算との差が不安定性によるものか、数値誤差によるものかを区別するため、低Re(Re=100)で2Dと3Dが一致することを先に確認
段階的に検証を進める姿勢が大事なんですね。
その通りだ。cavity flow は「簡単な問題」と思われがちだが、高Re数での分岐現象、コーナー特異性、3D不安定性など、数値流体力学の本質的な問題を含んでいる。だからこそ40年以上にわたってベンチマーク問題として使われ続けているんだ。
「中央渦の中心位置がずれる」のはメッシュのせいか数値拡散か
キャビティ流れで「Ghia論文の渦中心位置と自分の計算が合わない」場合、真っ先に疑うのはメッシュ解像度ですが、実はそれ以外にも原因があります。移流項の離散化スキームが低精度(1次精度の上流差分)の場合、数値拡散で渦が「実際より下方向にぼやける」効果が出ます。少なくとも2次精度以上のスキームを使わないと中心位置はずれがちです。また、高Re数(Re=10000)ではキャビティが定常解に落ち着かず、弱い振動解になることがある。収束判定を「残差が10⁻⁶」だけで行うと「振動しながら残差が下がっている」状態を正常終了と誤認することがあります。速度の時系列も確認することが大切です。
「解析が合わない」と思ったら
- まず深呼吸——焦って設定をランダムに変えると、問題がさらに複雑になる
- 最小再現ケースを作る——キャビティ流れ(蓋駆動)の問題を最も単純な形で再現する。「引き算のデバッグ」が最も効率的
- 1つだけ変えて再実行——複数の変更を同時に行うと、何が効いたか分からなくなる。科学実験と同じ「対照実験」の原則
- 物理に立ち返る——計算結果が「重力に逆らって物が浮く」ような非物理的な結果なら、入力データの根本的な間違いを疑う
関連トピック
なった
詳しく
報告