3次元の応力状態を解析するのは一般に複雑ですが、多くの実際の問題では2次元に簡略化できます。その代表的な2つのケースが平面応力と平面ひずみです。
本記事の内容
- 3次元の一般化フックの法則
- 平面応力状態(薄板の問題)
- 平面ひずみ状態(厚い構造の問題)
- 両者の構成方程式の比較
- Pythonでの可視化
前提知識
3次元の一般化フックの法則
等方性弾性体の3次元応力-ひずみ関係:
$$ \varepsilon_x = \frac{1}{E}[\sigma_x – \nu(\sigma_y + \sigma_z)] $$
$$ \varepsilon_y = \frac{1}{E}[\sigma_y – \nu(\sigma_x + \sigma_z)] $$
$$ \varepsilon_z = \frac{1}{E}[\sigma_z – \nu(\sigma_x + \sigma_y)] $$
$$ \gamma_{xy} = \frac{\tau_{xy}}{G}, \quad \gamma_{yz} = \frac{\tau_{yz}}{G}, \quad \gamma_{zx} = \frac{\tau_{zx}}{G} $$
ここで $G = E/[2(1+\nu)]$ です。
平面応力(Plane Stress)
定義と適用条件
$z$ 方向の応力がすべてゼロ:
$$ \sigma_z = 0, \quad \tau_{xz} = 0, \quad \tau_{yz} = 0 $$
適用: 薄板の面内荷重問題。板厚が他の寸法に比べて十分薄い場合。
構成方程式
$\sigma_z = 0$ を一般化フックの法則に代入すると:
$$ \varepsilon_x = \frac{1}{E}(\sigma_x – \nu\sigma_y), \quad \varepsilon_y = \frac{1}{E}(\sigma_y – \nu\sigma_x) $$
$$ \varepsilon_z = -\frac{\nu}{E}(\sigma_x + \sigma_y) \neq 0 $$
注意:$\sigma_z = 0$ でも $\varepsilon_z \neq 0$ です(ポアソン効果)。
逆関係(応力をひずみで表す):
$$ \boxed{\begin{pmatrix} \sigma_x \\ \sigma_y \\ \tau_{xy} \end{pmatrix} = \frac{E}{1-\nu^2} \begin{pmatrix} 1 & \nu & 0 \\ \nu & 1 & 0 \\ 0 & 0 & \frac{1-\nu}{2} \end{pmatrix} \begin{pmatrix} \varepsilon_x \\ \varepsilon_y \\ \gamma_{xy} \end{pmatrix}} $$
平面ひずみ(Plane Strain)
定義と適用条件
$z$ 方向のひずみがすべてゼロ:
$$ \varepsilon_z = 0, \quad \gamma_{xz} = 0, \quad \gamma_{yz} = 0 $$
適用: 長い構造の断面問題(ダム、トンネル、長い堰堤など)。$z$ 方向に十分長く、断面形状が一定の場合。
構成方程式
$\varepsilon_z = 0$ の条件から:
$$ 0 = \frac{1}{E}[\sigma_z – \nu(\sigma_x + \sigma_y)] $$
$$ \sigma_z = \nu(\sigma_x + \sigma_y) \neq 0 $$
これを代入すると:
$$ \boxed{\begin{pmatrix} \sigma_x \\ \sigma_y \\ \tau_{xy} \end{pmatrix} = \frac{E}{(1+\nu)(1-2\nu)} \begin{pmatrix} 1-\nu & \nu & 0 \\ \nu & 1-\nu & 0 \\ 0 & 0 & \frac{1-2\nu}{2} \end{pmatrix} \begin{pmatrix} \varepsilon_x \\ \varepsilon_y \\ \gamma_{xy} \end{pmatrix}} $$
比較表
| 平面応力 | 平面ひずみ | |
|---|---|---|
| 条件 | $\sigma_z = 0$ | $\varepsilon_z = 0$ |
| 適用 | 薄板 | 長い構造の断面 |
| $\varepsilon_z$ | $\neq 0$(自由に変形) | $= 0$(拘束) |
| $\sigma_z$ | $= 0$ | $= \nu(\sigma_x + \sigma_y) \neq 0$ |
Pythonでの可視化
import numpy as np
import matplotlib.pyplot as plt
E = 200e9 # ヤング率 [Pa](鋼)
nu = 0.3 # ポアソン比
# 一軸引張 σx を変化させたときの応答比較
sigma_x_range = np.linspace(0, 300, 100) # [MPa]
sigma_y = 0 # σy = 0
fig, axes = plt.subplots(1, 2, figsize=(14, 6))
# (1) εz の比較
ez_stress = -nu / E * sigma_x_range * 1e6 # 平面応力
ez_strain = np.zeros_like(sigma_x_range) # 平面ひずみ
axes[0].plot(sigma_x_range, ez_stress * 1e3, 'b-', lw=2, label='Plane stress')
axes[0].plot(sigma_x_range, ez_strain * 1e3, 'r--', lw=2, label='Plane strain')
axes[0].set_xlabel('$\\sigma_x$ [MPa]', fontsize=12)
axes[0].set_ylabel('$\\varepsilon_z$ [×10⁻³]', fontsize=12)
axes[0].set_title('Out-of-plane strain $\\varepsilon_z$', fontsize=13)
axes[0].legend(fontsize=11); axes[0].grid(True, alpha=0.3)
# (2) σz の比較
sz_stress = np.zeros_like(sigma_x_range)
sz_strain = nu * sigma_x_range # 平面ひずみ
axes[1].plot(sigma_x_range, sz_stress, 'b-', lw=2, label='Plane stress')
axes[1].plot(sigma_x_range, sz_strain, 'r--', lw=2, label='Plane strain')
axes[1].set_xlabel('$\\sigma_x$ [MPa]', fontsize=12)
axes[1].set_ylabel('$\\sigma_z$ [MPa]', fontsize=12)
axes[1].set_title('Out-of-plane stress $\\sigma_z$', fontsize=13)
axes[1].legend(fontsize=11); axes[1].grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
まとめ
- 平面応力: $\sigma_z = 0$(薄板)。$\varepsilon_z$ は自由に変形
- 平面ひずみ: $\varepsilon_z = 0$(長い構造体)。$\sigma_z$ が発生
- 構成方程式の剛性マトリクスが異なる
- 適用を間違えると大きな誤差が生じるため、問題の幾何学に応じて正しく選択する
次のステップとして、以下の記事も参考にしてください。