層流と乱流

流体の流れは大きく層流(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’}$ が乱流の本質的効果

次のステップとして、以下の記事も参考にしてください。