レイノルズ平均とRANS方程式

ナビエ–ストークスを平均すると方程式の数は変わらないのに未知数が増える — 乱流モデリング全体の出発点である閉じこめ問題を導入する。

はじめに

第3章で見たナビエ–ストークス方程式は原理的にあらゆる流れを記述するが、乱流ではすべての渦スケールを解く必要があり、産業計算には高すぎる。そこで1894年にオズボーン・レイノルズが提案したのが時間平均を取る迂回路である。本章を終えた読者は、平均操作がなぜ方程式の数より速く未知数を増やすのか、そしてなぜ第6章で「乱流粘性モデル」が必要になるのかを一言で説明できるようになる。

本論 1 — レイノルズ分解: 信号を平均と変動に分ける

中心のアイデアは単純だ。乱流中のある点の速度 uiu_i は速く揺らぐが、十分長い時間で平均を取れば平均値 uˉi\bar{u}_i(上に棒を引いた記号、「uバー」と読む)と変動分 uiu'_i(「u プライム」)に分けられる。

ui=uˉi+ui,ui=0u_i = \bar{u}_i + u'_i, \qquad \overline{u'_i} = 0

言葉で言えば「信号を平均し、残りを乱流ノイズと定義する。定義上ノイズの平均はゼロ」。二つ目の式は新たな仮定ではなく分解そのものの帰結だ — 平均を引いた残りを平均すればゼロにしかなり得ない。

圧力 pp、温度 TT、濃度 cc などあらゆる流れ変数を同じ方式で分解する。この分解を**レイノルズ分解(Reynolds decomposition)**と呼ぶ。

本論 2 — 平均が生み出す新しい項

レイノルズ分解を第3章の非圧縮ナビエ–ストークス運動量方程式に代入し、両辺を平均する。平均演算は微分と交換するので(f/t=fˉ/t\overline{\partial f / \partial t} = \partial \bar{f} / \partial t)、時間微分・圧力勾配・粘性項はすべて平均記号が内側に入った形でそのまま残る。

問題は対流項 ujui/xju_j \partial u_i / \partial x_j である。二つの速度の積なので分解後は

(uˉj+uj)(uˉi+ui)xj\overline{(\bar{u}_j + u'_j)\,\frac{\partial (\bar{u}_i + u'_i)}{\partial x_j}}

となり、交差項のうちプライムが一回だけ入った項は ui=0\overline{u'_i} = 0 により消える。両方プライムが入った項 ujui/xj\overline{u'_j \, \partial u'_i / \partial x_j}残る。連続方程式 (uj/xj=0\partial u'_j / \partial x_j = 0) を使って微分の積として書き直すと、この項は uiuj/xj\partial \overline{u'_i u'_j} / \partial x_j の形に整理される。

平均をすべて取り終えた最終形が**RANS方程式(Reynolds-Averaged Navier–Stokes)**である:

uˉit+uˉjuˉixj=1ρpˉxi+ν2uˉixjxjuiujxj\frac{\partial \bar{u}_i}{\partial t} + \bar{u}_j \frac{\partial \bar{u}_i}{\partial x_j} = -\frac{1}{\rho}\frac{\partial \bar{p}}{\partial x_i} + \nu \frac{\partial^2 \bar{u}_i}{\partial x_j \partial x_j} - \frac{\partial \overline{u'_i u'_j}}{\partial x_j}

ここで ρ\rho(ロー、密度)と ν\nu(ニュー、動粘性係数)は第3章と同じ。形は元のナビエ–ストークスとほぼ同じだが、右辺の最後に新しい項 uiuj/xj-\partial \overline{u'_i u'_j} / \partial x_j が加わっている。

本論 3 — レイノルズ応力と閉じこめ問題

この新しい項の中の uiuj\overline{u'_i u'_j} を**レイノルズ応力テンソル(Reynolds stress tensor)**と呼ぶ。「応力」という名前は粘性応力のように運動量を輸送する役割を担うからであって、実際の分子応力ではない — 巨視的な渦が運ぶ平均的な運動量交換である。

レイノルズ応力は対称テンソルなので9成分のうち独立成分は6個だ(u1u1,u2u2,u3u3,u1u2,u1u3,u2u3\overline{u'_1 u'_1}, \overline{u'_2 u'_2}, \overline{u'_3 u'_3}, \overline{u'_1 u'_2}, \overline{u'_1 u'_3}, \overline{u'_2 u'_3})。

未知数を数えてみよう。

元のナビエ–ストークスRANS
方程式3(運動量)+ 1(連続)= 4そのまま 4
未知数u1,u2,u3,pu_1, u_2, u_3, p → 4uˉ1,uˉ2,uˉ3,pˉ\bar{u}_1, \bar{u}_2, \bar{u}_3, \bar{p} + レイノルズ応力 6 = 10

もとは4本の方程式で4個の未知数を解けたのに、平均を一度取った瞬間、同じ4本の方程式に対し未知数だけ10個に増えた。これを**閉じこめ問題(closure problem)**と呼ぶ — 方程式系が閉じていない、という意味だ。

第6章ではレイノルズ応力6個を平均速度場 uˉi\bar{u}_i だけの関数としてモデリングし、系を強引に閉じる複数の方法(mixing length, k-ε, k-ω)を扱う。RANSが産業CFDの主力なのは、このモデリングが上手く効くからであって、RANSそのものが正確な方程式だからではない。

Pythonで確かめる

レイノルズ分解そのものは1次元合成信号一つでただちに確かめられる。平均を引いた変動の平均はゼロに近く、変動の二乗平均は正(= レイノルズ応力成分に対応)になる。

import numpy as np

rng = np.random.default_rng(0)

# 1次元合成乱流信号: 平均 1.0 + 決定論的振動 + ガウシアンノイズ
t = np.linspace(0, 10, 1000)
u = 1.0 + 0.3 * np.sin(t) + 0.1 * rng.standard_normal(1000)

# レイノルズ分解: 平均と変動に分ける
u_mean = np.mean(u)
u_prime = u - u_mean

# 検証
mean_of_prime = np.mean(u_prime)         # 定義上ゼロ(浮動小数点誤差の範囲)
reynolds_stress = np.mean(u_prime ** 2)  # 分散 = 1成分レイノルズ応力 u'u'

print(f"平均速度           u_bar    = {u_mean:.6f}")
print(f"変動分の平均       <u'>     = {mean_of_prime:.2e}")
print(f"レイノルズ応力成分 <u'u'>   = {reynolds_stress:.6f}")

出力では <u'>101710^{-17} 程度の浮動小数点ノイズで実質ゼロ、<u'u'> は 0.05 前後で明確に正の値となる。もしこの信号が実際の3次元流れの一成分だったなら、この値こそレイノルズ応力テンソルの一つの対角成分である。

次章へ

閉じこめ問題は1894年から今日に至るまで未解決の問題である。代わりに工学は「正確な解の代わりに十分使える近似モデル」という迂回路を選んだ。第6章: 乱流粘性モデルでは、mixing length・k-ε・k-ω の三つの代表モデルを順に見て、各モデルがどのような仮定で6個のレイノルズ応力を平均速度場の関数として表現するかを追う。