流体の流れは大きく層流(laminar flow)と乱流(turbulent flow)に分類されます。層流では流体粒子が秩序正しく流れ、乱流では不規則な変動が支配的になります。両者を分けるのがレイノルズ数です。
本記事の内容
- 層流と乱流の特徴
- 臨界レイノルズ数
- レイノルズ分解(平均 + 変動)
- レイノルズ応力の概念
- Pythonでの可視化
前提知識
層流と乱流の特徴
層流(Laminar flow)
- 流体は平行な層状に流れる
- 速度は滑らかで予測可能
- 粘性力が支配的($Re$ が小さい)
- 管内流:放物線速度分布
乱流(Turbulent flow)
- 不規則な速度変動を含む
- 混合が促進される(熱・物質輸送が増大)
- 慣性力が支配的($Re$ が大きい)
- 管内流:中心付近でフラットな速度分布
臨界レイノルズ数
円管内流れの場合:
| 状態 | $Re_D = \rho U D / \mu$ |
|---|---|
| 層流 | $Re_D < 2,300$ |
| 遷移領域 | $2,300 < Re_D < 4,000$ |
| 乱流 | $Re_D > 4,000$ |
平板境界層:$Re_x = \rho U x / \mu \approx 5 \times 10^5$ で遷移。
レイノルズ分解
乱流の速度を時間平均成分と変動成分に分解します:
$$ \boxed{u(x,t) = \bar{u}(x) + u'(x,t)} $$
ここで時間平均 $\bar{u} = \frac{1}{T}\int_0^T u \, dt$、変動の平均 $\overline{u’} = 0$ です。
レイノルズ平均NS方程式(RANS)
NS方程式にレイノルズ分解を代入し時間平均をとると:
$$ \rho\left(\frac{\partial \bar{u}_i}{\partial t} + \bar{u}_j\frac{\partial \bar{u}_i}{\partial x_j}\right) = -\frac{\partial \bar{p}}{\partial x_i} + \mu\frac{\partial^2 \bar{u}_i}{\partial x_j^2} – \rho\frac{\partial \overline{u_i’u_j’}}{\partial x_j} $$
最後の項 $-\rho\overline{u_i’u_j’}$ がレイノルズ応力です。未知数が増え、これを閉じるために乱流モデルが必要となります。
Pythonでの可視化
import numpy as np
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 3, figsize=(16, 5))
# (1) 層流 vs 乱流の速度分布(管内流れ)
R = 1.0
y = np.linspace(0, R, 200)
u_laminar = 2 * (1 - (y/R)**2) # 放物線分布
u_turbulent = (1 - y/R)**(1/7) # 1/7乗則
axes[0].plot(u_laminar, y/R, 'b-', lw=2.5, label='Laminar (parabolic)')
axes[0].plot(u_turbulent, y/R, 'r-', lw=2.5, label='Turbulent (1/7 power)')
axes[0].set_xlabel('$u / U_{center}$', fontsize=12)
axes[0].set_ylabel('$y / R$', fontsize=12)
axes[0].set_title('Velocity profiles in pipe', fontsize=13)
axes[0].legend(); axes[0].grid(True, alpha=0.3)
# (2) 乱流速度の時系列(模擬)
np.random.seed(42)
t = np.linspace(0, 10, 2000)
u_mean = 5.0
u_turb = u_mean + 0.8 * np.random.randn(len(t))
u_lam = np.ones_like(t) * u_mean
axes[1].plot(t, u_lam, 'b-', lw=1.5, label='Laminar', alpha=0.8)
axes[1].plot(t, u_turb, 'r-', lw=0.5, label='Turbulent', alpha=0.7)
axes[1].axhline(u_mean, color='k', ls='--', lw=1, label='$\\bar{u}$')
axes[1].set_xlabel('Time', fontsize=12); axes[1].set_ylabel('Velocity', fontsize=12)
axes[1].set_title('Velocity time series', fontsize=13)
axes[1].legend(); axes[1].grid(True, alpha=0.3)
# (3) 摩擦係数 vs Re(ムーディー線図の概念)
Re = np.logspace(2, 7, 500)
f_laminar = 64 / Re
f_turbulent = 0.316 * Re**(-0.25) # ブラジウスの式
axes[2].loglog(Re, f_laminar, 'b-', lw=2, label='Laminar: $f=64/Re$')
Re_turb = Re[Re > 4000]
f_turb = 0.316 * Re_turb**(-0.25)
axes[2].loglog(Re_turb, f_turb, 'r-', lw=2, label='Turbulent (Blasius)')
axes[2].axvline(2300, color='gray', ls='--', alpha=0.5, label='$Re_{cr}$=2300')
axes[2].set_xlabel('$Re$', fontsize=12); axes[2].set_ylabel('Friction factor $f$', fontsize=12)
axes[2].set_title('Friction factor', fontsize=13)
axes[2].legend(fontsize=10); axes[2].grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
まとめ
- 層流: 秩序正しい流れ、粘性支配、$Re < Re_{cr}$
- 乱流: 不規則な変動、慣性支配、$Re > Re_{cr}$
- レイノルズ分解: $u = \bar{u} + u’$ で平均流と変動を分離
- レイノルズ応力 $-\rho\overline{u_i’u_j’}$ が乱流の本質的効果
次のステップとして、以下の記事も参考にしてください。