応用 — 産業CFDにおけるモデル選択
応用 — 産業CFDにおけるモデル選択
12章にわたって積み上げた道具を一枚の意思決定表に整理し、どの流れにどの乱流モデルが適するかを判断する目を養って本書を閉じる。
はじめに
ここまで来た読者にとって、RANS・LES・DNSという略語はもはや暗記すべき単語ではなく、それぞれの仮定とコスト構造が頭の中に立ち上がる道具になっているはずだ。最終章の狙いは新しい数式を導入することではなく、すでに手にしているものを整理することである。読み終えたとき、論文や商用CFDマニュアルを開いて「なぜこの人はこのモデルを選んだのか」を自分で評価できるようになる。
本論 1 — 第1章の五つの特性に戻る
第1章で乱流を五つの特性で定義した — 不規則性、拡散性、大きなレイノルズ数、3次元の渦度変動、散逸である。本書全体は結局、この五つを どう尊重するか、どう迂回するか の物語だった。
- DNS(第10章)は五つをそのまま解こうとする。最も小さな散逸スケール (エタ、コルモゴロフ長さ)まで格子を敷き、すべての渦度変動を直接計算する。モデルは無い。
- LES(第11章)は大きな渦だけ直接解き、格子より小さなスケールの散逸はSGS(sub-grid stress)モデルに肩代わりさせる。五つの特性のうち大きなスケールはそのまま、小さなスケールはモデルで置き換える。
- RANS(第5–6章)は五つの特性すべてを時間平均の中に吸収し、平均場だけを解く。渦度変動そのものは計算されず、その効果(レイノルズ応力 )のみがモデル化される。
三つのアプローチは「何を解き、何をモデルで置き換えるか」という一行の問いに対する三つの答えだ。
本論 2 — 一枚の比較表
| アプローチ | 直接解くもの | モデルで置き換えるもの | コスト(Re依存) | 壁格子要求 | 効果が大きい領域 |
|---|---|---|---|---|---|
| DNS | 最小の まですべてのスケール | 無し | 研究、検証データ生成 | ||
| LES | 大きな渦 | SGS応力 | 壁近傍 | 燃焼、空力音響、非定常流 | |
| ハイブリッド(DES) | 壁はRANS、コアはLES | 領域による | LESとRANSの中間 | 壁関数または解像 | 外部空力、剥離流 |
| RANS(k-ω SST) | 平均場のみ | レイノルズ応力すべて | Re非依存 | または壁関数 | 日常の産業設計 |
| RANS + 壁関数 | 平均場のみ | レイノルズ応力すべて | 最安 | 高速な設計反復 |
(ワイプラス)は第6・7章で出てきた無次元壁距離。 という数字は恐ろしい。レイノルズ数が10倍になればDNSのコストは1000倍になる。航空機翼の でDNSが現実的に不可能な理由がこれだ。
本論 3 — 意思決定の流れ
散文一段落のフローチャートにすればこうなる。
流れの レイノルズ数が5000以下 で形状が単純なら — たとえば小さなチャネルや低速の実験室環境 — DNSを検討する価値がある。可能ならば最もクリーンな答えを返す。それが無理で、剥離・再付着・燃焼・騒音 のような 本質的に非定常な物理 が重要で、計算予算を日単位で使えるならLESを、壁近傍の格子負担を減らしたければDESを選ぶ。それ以外の 多くの産業設計 — ポンプ、バルブ、車体外形、HVACダクト — ではRANSが正解で、なかでも k-ω SST が安全なデフォルトだ。理由は単純で、k-ω SSTは壁近傍ではk-ω、自由せん断領域ではk-εに切り替わるよう設計されており、剥離に強く自由流の感度も低い。
本論 4 — よく踏む地雷
- 格子数より のほうが効く。 1000万格子メッシュでも第一セルの が200ならSSTの意味は失われる。逆に100万格子でも で敷ければ十分信頼できる結果が得られる。
- LESを「平均速度の入口条件」で始めてはいけない。 LESは入口から乱流変動を要求する。合成乱流(synthetic turbulence)入口や事前計算したチャネル流の断面を再利用しなければ、ドメインのかなり奥まで層流のように流れてしまう。
- DNSの結果を産業コードの検証にそのまま使ってはいけない。 DNSは通常、周期境界や人工的な強制力(forcing)で定常状態を作った結果だ。産業形状の境界条件とは異なるので、比較は「同じ統計量を同じ領域で」を守って初めて意味を持つ。
- k-εは自由せん断流には強いが剥離には弱い。 前章で扱った自由ジェット・後流・混合層はk-εの本拠地だが、車体後部の剥離領域では剥離点を遅く予測する傾向がある。SSTが産業デフォルトになったのはこのためだ。
Pythonで確かめる
本論3の意思決定ルールをそのまま関数にする。三つの例に適用して結果を見る。
import numpy as np
def recommend(Re, time_budget_hours, is_near_wall_important):
# 本論3のルールをそのままコード化
if Re < 5000 and time_budget_hours > 100:
return "DNS"
if is_near_wall_important and time_budget_hours > 24:
return "LES (壁まで解像)"
if is_near_wall_important and time_budget_hours <= 24:
return "RANS k-ω SST"
if (not is_near_wall_important) and time_budget_hours > 24:
return "DES"
return "RANS k-ε with 壁関数"
# 例1: 低レイノルズ数のチャネル実験再現(研究目的)
print(recommend(Re=3000, time_budget_hours=200,
is_near_wall_important=True))
# 例2: 自動車外部空力、剥離領域の精度が必要
print(recommend(Re=2.0e6, time_budget_hours=72,
is_near_wall_important=False))
# 例3: ポンプ羽根車の設計反復(当日回答)
print(recommend(Re=5.0e5, time_budget_hours=8,
is_near_wall_important=True))
出力は順に DNS、DES、RANS k-ω SST となる。単純なルールだが、最初の一手を出すには十分だ。実プロジェクトではこの上に検証データの有無、ライセンス費、チームの習熟度が乗ってくる。
おわりに
ここまで付き合ってくれた読者に心から感謝したい。本書のねらいは「乱流の専門家を作ること」ではなく「他人のCFD作業を批判的に読めるようにすること」だった。次はコードを自分の手で動かす番だ — OpenFOAM、SU2、code_saturne のようなオープンコードを一つ選び、平板境界層や後方ステップ流のような定型ケースを再現してみることを勧める。そこからが本当の出発点だ。