中心差分スキーム

カテゴリ: CFDのソルバー手法 | 2026-10-01 改稿
CAE visualization for central difference theory - technical simulation diagram
中央差分スキーム

理論:両隣から勾配を求める

概要

🙋

CFDで中心差分を使ったら、温度の分布にありえない凸凹が出ました。バグでしょうか?

🎓

バグではなく、中心差分の性質だろうね。中心差分は、ある点の勾配を両隣の値の差から求める。2次精度で、人工的な拡散を加えないのが長所だ。でも、流れ(対流)が拡散に比べて強いと、下流側の値が自分に逆向きに効いてしまい、解が点ごとにジグザグに振動する。目安は『セルペクレ数』が2を超えるかどうか。格子を細かくするか、風上系のスキームを混ぜるのが対処法だよ。

離散化した式

$$ u\frac{d\phi}{dx} = \Gamma\frac{d^2\phi}{dx^2} \ \Rightarrow\ \left(\frac{2\Gamma}{h^2}\right)\phi_i = \left(\frac{\Gamma}{h^2} + \frac{u}{2h}\right)\phi_{i-1} + \left(\frac{\Gamma}{h^2} - \frac{u}{2h}\right)\phi_{i+1} $$

1次元の定常な対流拡散の式を、対流項も拡散項も中心差分で離散化した形。右辺の2つ目の係数は、流れが強いと負になる。

セルペクレ数の条件

$$ Pe_c = \frac{u\,h}{\Gamma} \le 2 \quad \Leftrightarrow \quad \frac{\Gamma}{h^2} - \frac{u}{2h} \ge 0, \qquad \phi_{exact} = \frac{e^{Pe\,x} - 1}{e^{Pe} - 1} $$

係数がすべて正(または0)なら、解は隣の値の重み付き平均になり、振動は起きない。その条件がセルペクレ数2以下。右は計算例に使う厳密解で、$Pe = uL/\Gamma$ は全体のペクレ数。

Coffee Break よもやま話

「風上」という発想

中心差分の振動は、1950年代から数値計算の研究者を悩ませてきた。1952年にクーラン、アイザクソン、リースは、情報が流れてくる上流側(風上)の値を使う差分を提案し、振動しない代わりに精度が1次に落ちるという取引が知られるようになった。1980年代にはハーテンが、振動を起こさない条件(TVD)を数学的に整理し、急な変化のあるところだけ風上寄りにする制限関数つきのスキームが広まった。今の汎用CFDソフトの対流項のスキーム選択は、この長い議論の上にある。

計算例:1次元の対流拡散

区間[0, 1]で左端0・右端1、全体のペクレ数50の定常な対流拡散を、中心差分(CDS)と1次風上差分(UDS)で解いた。厳密解は右端の近くで急に立ち上がる。

分割数セルペクレ数中心差分の最小値中心差分の最大誤差風上差分の最大誤差
105.0−0.4290.4360.160
202.5−0.1110.1930.204
252.00.0000.1350.198
501.00.0000.0350.132
1000.50.0000.0080.077
2000.250.0000.0020.042
🙋

10分割だと、振動しない風上差分のほうが誤差が小さいんですね。

🎓

そう。粗い格子では、中心差分は0から1の間に収まるはずの解を−0.43まで振動させてしまう。温度なら絶対零度より低くなるような、物理的にありえない値だ。でもセルペクレ数が2以下になる25分割からは振動が消え、細かくするほど誤差は格子幅の2乗で減る。100分割では中心差分0.008、風上差分0.077と、10倍違う。風上差分は1次精度だから、細かくしても誤差がなかなか減らない。『安定だが粗い』と『正確だが条件つき』の取引なんだ。

例2:収束の次数

ペクレ数10で格子を細かくすると、中心差分の誤差の減り方は2.00次、風上差分は0.97次に近づいた(200分割で中心差分0.0001、風上差分0.0090)。

スキームの選び方

  1. 流速・格子幅・拡散係数(粘性係数)からセルペクレ数の分布を見積もる。
  2. RANSの定常計算では、2次精度の風上系か制限関数つきのスキームを基本にする。
  3. LESでは数値拡散が乱流の渦を消してしまうので、中心差分系(必要なら少し風上を混ぜる)を使う。
  4. 急な変化(衝撃波・境界の薄い層)には、振動を抑える制限関数を使う。
  5. 格子を細かくして結果が変わらないことを確かめる。
Coffee Break よもやま話

「きれいな結果が実は間違い」

配管の中の混合をCFDで調べたら、濃度の分布はきれいで振動もなかったのに、実験より混合がずっと早く進んでいた——という例がある。安定させるために1次風上差分を使っていて、数値拡散が実際の拡散の何倍にもなっていた。2次精度のスキームに変えると、実験に近い混合の遅さが再現された。振動しない結果は安心に見えるが、数値拡散で『混ぜすぎ』ていることがある。粗い風上差分の結果ほど、格子の細かさを変えて確かめる必要がある。

よくある間違い

間違いと対策

間違い起きること対策
粗い格子で中心差分振動・範囲外の値セルペクレ数を2以下に
1次風上差分のまま数値拡散で混ぜすぎ2次精度のスキーム
LESで風上差分乱流の渦が消える中心差分系
振動を物理現象と誤解誤った結論格子を変えて確認
振動がないから正しいと判断数値拡散を見落とす格子収束を確認
🙋

関連する内容も知りたいです。

🎓

リチャードソン外挿ツールで収束の次数を試せるよ。スキームの詳しい比較は風上差分スキーム、基礎は有限体積法の基礎、時間方向はCFDの時間積分、高精度の方法はスペクトル法、圧力の解き方は圧力と速度の連成ソルバーが参考になる。

関連シミュレーター

この分野のインタラクティブシミュレーターで理論を体感しよう

シミュレーター一覧

関連する分野

熱解析V&V・品質保証構造解析
この記事の評価
ご回答ありがとうございます!
参考に
なった
もっと
詳しく
誤りを
報告
参考になった
0
もっと詳しく
0
誤りを報告
0