対流拡散(Convection-Diffusion) — CAE用語解説
対流拡散方程式とは
対流拡散方程式って、流体解析でどういう位置づけなんですか? Navier-Stokes方程式とは別物ですか?
実は別物じゃなくて、むしろNavier-Stokes方程式の「骨格」そのものだよ。運動量方程式の各成分も、温度の輸送方程式も、濃度のスカラー輸送も、全部「対流 + 拡散 = ソース」という同じ形をしている。だから対流拡散方程式を理解するのは、CFD全体の数値手法を理解する近道なんだ。
なるほど! じゃあ、もう少し具体的にどんな式なのか教えてください。
例えば川に温水を流し込む場面を想像してみて。温水は川の流れに乗って下流に運ばれる(これが対流)。同時に周りの冷水との温度差で熱が広がっていく(これが拡散)。この2つの効果を1つの式にまとめたのが対流拡散方程式だ。
支配方程式
スカラー量 $\phi$ に対する定常対流拡散方程式は次の形をとる:
$$\nabla \cdot (\rho \mathbf{u} \phi) = \nabla \cdot (\Gamma \nabla \phi) + S$$ここで、左辺が対流項、右辺第1項が拡散項、$S$ がソース項である。$\rho$ は密度、$\mathbf{u}$ は速度ベクトル、$\Gamma$ は拡散係数を表す。
非定常の場合は時間微分項が加わる:
$$\frac{\partial (\rho \phi)}{\partial t} + \nabla \cdot (\rho \mathbf{u} \phi) = \nabla \cdot (\Gamma \nabla \phi) + S$$1次元定常・ソース項なしの最もシンプルな形に限定すると:
$$u \frac{d\phi}{dx} = \Gamma \frac{d^2\phi}{dx^2}$$この単純な式が、数値解法の安定性を議論する出発点になる。
Peclet数と対流拡散のバランス
対流と拡散のどっちが強いかって、どうやって判断するんですか?
それを表すのがPeclet数(Pe)だ。Reynolds数が慣性力と粘性力の比だったのと同じように、Peclet数は対流輸送と拡散輸送の比を表す無次元数だよ。実はPe = Re × Pr(プラントル数)という関係があって、Reynolds数とも密接につながっている。
Peclet数の定義:
$$\mathrm{Pe} = \frac{UL}{\alpha} = \frac{\text{対流輸送の強さ}}{\text{拡散輸送の強さ}}$$ここで $U$ は代表速度、$L$ は代表長さ、$\alpha = \Gamma/\rho$ は拡散率。有限体積法の文脈では、セル幅 $\Delta x$ を用いたセル・Peclet数(格子Peclet数)が極めて重要になる:
$$\mathrm{Pe}_{\text{cell}} = \frac{\rho u \Delta x}{\Gamma}$$Pe が大きいと何が起きるんですか? 小さいとどうなりますか?
Pe が小さい(Pe ≪ 1)と拡散支配で、情報が全方向に均等に広がる。熱伝導だけの問題みたいなイメージだね。逆に Pe が大きい(Pe ≫ 1)と対流支配で、情報は流れの方向に一方的に運ばれる。煙突の煙が風に流される様子がまさにそれだ。問題は、この対流支配のケースで中心差分を使うと数値的に不安定になることなんだ。
数値拡散の問題
中心差分で不安定になるって、具体的にどういうことですか? 中心差分は2次精度で良い方法だと習ったんですけど…
確かに中心差分は2次精度で拡散方程式なら問題ない。でも対流項を中心差分で離散化すると、セル・Peclet数が2を超えたときにwiggle(非物理的な振動)が出るんだ。例えば0°Cの部屋に100°Cの温風を送り込むシミュレーションで、温度が −20°C になったり 120°C になったりする。物理的にあり得ないよね。
えっ、温度がマイナスに!? なぜそんなことが起きるんですか?
直感的に言うと、対流が強い流れでは上流側の情報が圧倒的に重要なのに、中心差分は上流と下流の情報を同じ重みで使ってしまう。これが離散化の係数行列で対角優位性を壊し、アンダーシュートやオーバーシュートを生む。数学的には、離散化が有界性(boundedness)を満たさなくなるということだ。
中心差分による1次元対流拡散方程式の離散化で、係数行列の対角優位条件は:
$$|\mathrm{Pe}_{\text{cell}}| = \left|\frac{\rho u \Delta x}{\Gamma}\right| \leq 2$$この条件に違反すると解が振動する。実際の工業的CFDでは Pecell ≫ 2 になるケースが多いため、安定化が不可欠となる。
風上差分と安定化手法
振動を抑えるにはどうすればいいんですか?
一番シンプルなのが1次風上差分(First-Order Upwind)だ。セル界面の値を、上流側のセルの値で近似する。対流の方向を考慮するから振動は完全に抑えられる。でも代償として数値拡散(numerical diffusion)が発生する。
数値拡散って具体的にはどういう影響ですか? 実務ではどれくらい問題になりますか?
たとえば煙の輸送シミュレーションで、本来はシャープな煙の境界が数値拡散のせいでボケてしまう。自動車の排気ガスの拡散シミュレーションだと、濃度のピーク値が実際より低く見積もられて、影響範囲が広く見えてしまう。メッシュを粗くするほどこの偽拡散は大きくなるから、1次風上差分を粗いメッシュで使うのは実務ではかなり危険だ。
1次風上差分の打切り誤差をTaylor展開で調べると:
$$u \frac{d\phi}{dx} \approx u \frac{\phi_i - \phi_{i-1}}{\Delta x} + \underbrace{\frac{u \Delta x}{2} \frac{d^2\phi}{dx^2}}_{\text{数値拡散項}} + O(\Delta x^2)$$数値拡散項は実質的に $\Gamma_{\text{false}} = \rho u \Delta x / 2$ という偽の拡散係数を追加していることに相当する。つまり、メッシュが粗いほど、また対流が強いほど、偽拡散は大きくなる。
SUPG法とその仲間たち
有限要素法だと風上差分と違う方法があるって聞いたんですけど、SUPG法ってどういう仕組みなんですか?
SUPG法(Streamline Upwind Petrov-Galerkin)は、BrooksとHughesが1982年に提案した有限要素法の安定化手法だ。ガラーキン法の重み関数に、流線方向の摂動項を追加する。ざっくり言うと「重み関数を少しだけ上流側に偏らせる」ことで、風上効果を得るんだ。
SUPG法では、標準的なガラーキン重み関数 $w$ に対し、修正された重み関数 $\tilde{w}$ を用いる:
$$\tilde{w} = w + \tau \, \mathbf{u} \cdot \nabla w$$ここで $\tau$ は安定化パラメータで、要素サイズ・速度・拡散係数から決まる:
$$\tau = \frac{h}{2\|\mathbf{u}\|} \left( \coth \mathrm{Pe}_e - \frac{1}{\mathrm{Pe}_e} \right)$$$\mathrm{Pe}_e = \|\mathbf{u}\| h / (2\Gamma)$ は要素Peclet数、$h$ は要素の流線方向サイズである。
SUPG以外にも安定化手法はあるんですか?
たくさんあるよ。有限要素法ではGLS法(Galerkin/Least-Squares)がSUPGの一般化として知られている。ソース項がある場合にも一貫性が保たれるのが利点だ。さらに非定常の非圧縮性流れではPSPG法(Pressure-Stabilizing Petrov-Galerkin)を組み合わせて、速度と圧力の両方を安定化することが多い。有限体積法の世界ではTVD(Total Variation Diminishing)リミッターやENO/WENOスキームが主流だね。
TVDリミッターって何をしてるんですか? 名前がカッコいいですけど…
TVDは「Total Variation Diminishing」の略で、解の全変動が時間とともに増加しないことを保証するスキームだ。具体的には、勾配の復元に「リミッター関数」を挟むことで、新しい極値(振動)が生まれるのを防ぐ。Van Leer、Minmod、Superbeeなどいろいろな種類があって、リミッターが強いほど振動は抑えられるけどその分数値拡散が増える。この匙加減がCFD屋さんの腕の見せ所だね。
実務での使い分けガイド
いろいろありすぎて混乱してきました…。実務ではどう使い分ければいいんですか?
まずRANSで定常計算なら、2次風上差分(Second-Order Upwind)から始めるのが鉄板だ。収束しにくいときだけ1次風上で初期解を作ってから切り替える。LESの場合は数値拡散がSGSモデルと干渉するから、中心差分系を使うのがセオリー。圧縮性の衝撃波がある流れだとTVD系のリミッター付きスキームが安全だね。
メッシュを細かくすれば、どのスキームでも結果は一致するんですか?
理論的にはその通り。メッシュを十分に細かくすれば Pecell → 0 に近づいて、全スキームで一致する。でも実務では計算リソースの制約があるから、「許容されるメッシュの粗さで最も精度の良いスキーム」を選ぶのがポイントだ。だからこそ離散化スキームの選択はCFD解析者の腕の見せ所なんだよ。
OpenFOAMだとどのスキームがデフォルトなんですか?
OpenFOAMではfvSchemesファイルのdivSchemesで設定するよ。デフォルトのチュートリアルではGauss linearUpwind grad(U)(2次風上)がよく使われる。Gauss linearが中心差分、Gauss upwindが1次風上だ。TVD系はGauss linearUpwindやGauss vanLeerなど。設定1行でスキームが切り替わるから、結果の差を比較するのも簡単だよ。
関連用語
- Reynolds数 — 慣性力と粘性力の比を表す無次元数
- Peclet数 — 対流輸送と拡散輸送の比を表す無次元数
- 離散化 — 連続方程式を代数方程式に変換する操作
- Courant数 — 時間刻みとメッシュサイズの安定性指標
- 数値拡散 — 離散化に起因する偽の拡散効果
- 風上差分法 — 対流方向を考慮した離散化手法
- SUPG法 — 有限要素法の流線方向安定化手法
- TVDスキーム — 全変動非増加を保証する離散化手法
- Navier-Stokes方程式 — 粘性流体の運動を記述する基礎方程式
CAE用語の正確な理解は、チーム内のコミュニケーションの基盤です。 — Project NovaSolverは実務者の学習支援も視野に入れています。
対流拡散の離散化で困っていることを教えてください
Project NovaSolverは、CAEエンジニアが日々直面する課題——セットアップの煩雑さ、計算コスト、結果の解釈——の解決を目指しています。あなたの実務経験が、より良いツール開発の原動力になります。
お問い合わせ(準備中)関連トピック
なった
詳しく
報告