熱伝導とフーリエの法則

フーリエの法則は、温度勾配に比例して熱が流れることを表す基本法則です。この法則とエネルギー保存則を組み合わせることで、温度場を支配する熱伝導方程式が得られます。

本記事の内容

  • フーリエの法則 $\bm{q} = -k\nabla T$
  • 熱伝導方程式の導出
  • 1次元定常熱伝導の解析解
  • 熱抵抗の概念
  • Pythonでの可視化

前提知識

フーリエの法則

熱流束ベクトル $\bm{q}$ [W/m²] は温度勾配に比例し、高温から低温へ向かいます:

$$ \boxed{\bm{q} = -k\nabla T} $$

$k$ は熱伝導率 [W/(m·K)]。マイナス符号は熱が温度の高い方から低い方へ流れることを表します。

熱伝導方程式

微小体積要素のエネルギー保存を考えます。流入熱量 − 流出熱量 + 発熱 = 蓄熱:

$$ \rho c \frac{\partial T}{\partial t} = \nabla \cdot (k\nabla T) + \dot{q} $$

$k$ が一定で発熱がない場合:

$$ \boxed{\frac{\partial T}{\partial t} = \alpha \nabla^2 T} $$

$\alpha = k/(\rho c)$ は熱拡散率 [m²/s] です。

1次元定常熱伝導

平板

厚さ $L$ の平板の両面が温度 $T_1$, $T_2$ に保たれている場合:

$$ \frac{d^2T}{dx^2} = 0 \implies T(x) = T_1 + (T_2 – T_1)\frac{x}{L} $$

熱流束:$q = k(T_1 – T_2)/L$

円筒壁

内径 $r_1$、外径 $r_2$ の円筒壁(内面 $T_1$、外面 $T_2$):

$$ T(r) = T_1 + (T_2 – T_1)\frac{\ln(r/r_1)}{\ln(r_2/r_1)} $$

単位長さあたりの熱流量:$\dot{Q}/L = 2\pi k(T_1 – T_2)/\ln(r_2/r_1)$

熱抵抗

電気回路のオームの法則との類似:$\dot{Q} = \Delta T / R_{th}$

形状 熱抵抗 $R_{th}$
平板 $L/(kA)$
円筒 $\ln(r_2/r_1)/(2\pi kL)$
対流 $1/(hA)$

直列・並列合成が可能です。

Pythonでの可視化

import numpy as np
import matplotlib.pyplot as plt

fig, axes = plt.subplots(1, 3, figsize=(16, 5))

# (1) 平板の定常温度分布
L = 0.1; T1, T2 = 100, 20
x = np.linspace(0, L, 100)
T_flat = T1 + (T2 - T1) * x / L

axes[0].plot(x*100, T_flat, 'b-', lw=2.5)
axes[0].set_xlabel('Position $x$ [cm]'); axes[0].set_ylabel('Temperature [°C]')
axes[0].set_title('Steady-state: flat plate', fontsize=13)
axes[0].grid(True, alpha=0.3)

# (2) 円筒壁の温度分布
r1, r2 = 0.02, 0.05
r = np.linspace(r1, r2, 100)
T_cyl = T1 + (T2 - T1) * np.log(r/r1) / np.log(r2/r1)

axes[1].plot(r*100, T_cyl, 'r-', lw=2.5)
axes[1].set_xlabel('Radius $r$ [cm]'); axes[1].set_ylabel('Temperature [°C]')
axes[1].set_title('Steady-state: cylindrical wall', fontsize=13)
axes[1].grid(True, alpha=0.3)

# (3) 1次元非定常熱伝導(陽解法シミュレーション)
Nx = 50; dx = L / Nx
alpha = 1e-5  # 熱拡散率
dt = 0.4 * dx**2 / alpha  # CFL条件
T = np.ones(Nx+1) * T2
T[0] = T1; T[-1] = T2

times = [0, 10, 50, 200, 1000]
for step in range(max(times)+1):
    if step in times:
        axes[2].plot(np.linspace(0, L*100, Nx+1), T, lw=1.5, label=f't={step*dt:.1f}s')
    T_new = T.copy()
    for i in range(1, Nx):
        T_new[i] = T[i] + alpha * dt / dx**2 * (T[i+1] - 2*T[i] + T[i-1])
    T_new[0] = T1; T_new[-1] = T2
    T = T_new

axes[2].set_xlabel('Position [cm]'); axes[2].set_ylabel('Temperature [°C]')
axes[2].set_title('Transient heat conduction', fontsize=13)
axes[2].legend(fontsize=9); axes[2].grid(True, alpha=0.3)

plt.tight_layout()
plt.show()

まとめ

  • フーリエの法則: $\bm{q} = -k\nabla T$
  • 熱伝導方程式: $\partial T/\partial t = \alpha\nabla^2 T$
  • 平板: 線形温度分布、$R_{th} = L/(kA)$
  • 円筒: 対数的温度分布

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