🌐 JP | 🇬🇧 EN | Last sync: 2025-11-16

第3章: クリープと応力緩和

時間依存変形挙動

3.1 クリープの基礎

クリープとは、高温下で一定応力を受けたときに生じる時間依存の塑性変形です。タービンや原子炉などの高温用途において極めて重要となります。

📐 クリープひずみ速度: $$\dot{\epsilon} = A\sigma^n \exp\left(-\frac{Q}{RT}\right)$$ ここで $A$ は定数、$n$ は応力指数、$Q$ は活性化エネルギーです。

💻 コード例1: クリープ曲線の生成

# 必要環境:
# - Python 3.9+
# - matplotlib>=3.7.0
# - numpy>=1.24.0, <2.0.0

import numpy as np
import matplotlib.pyplot as plt

def creep_curve(time, stress, temperature, Q=200000, A=1e-15, n=5):
    """クリープひずみ-時間曲線を生成する"""
    R = 8.314
    T = temperature + 273

    # 第1期クリープ(遷移クリープ)
    t1 = time[time <= 100]
    eps1 = 0.01 * np.sqrt(t1)

    # 第2期クリープ(定常状態)
    strain_rate_ss = A * stress**n * np.exp(-Q/(R*T))
    t2 = time[(time > 100) & (time <= 900)]
    eps2 = eps1[-1] + strain_rate_ss * (t2 - 100)

    # 第3期クリープ(加速クリープ)
    t3 = time[time > 900]
    eps3 = eps2[-1] + strain_rate_ss * (t3 - 900) * np.exp((t3-900)/100)

    strain = np.concatenate([eps1, eps2, eps3])
    return strain

time = np.linspace(0, 1000, 500)
strain = creep_curve(time, stress=100, temperature=600)

plt.figure(figsize=(10, 6))
plt.plot(time, strain*100, 'b-', linewidth=2)
plt.axvline(100, color='r', linestyle='--', alpha=0.5, label='第1期→第2期')
plt.axvline(900, color='g', linestyle='--', alpha=0.5, label='第2期→第3期')
plt.xlabel('時間 (hours)')
plt.ylabel('クリープひずみ (%)')
plt.title('クリープ曲線: 3つの段階')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()

3.2 ラーソン・ミラー パラメータ

ラーソン・ミラー パラメータを用いると、短時間のクリープデータから長時間の性能を外挿できます。

📐 ラーソン・ミラー パラメータ: $$P_{LM} = T(C + \log t_r)$$ ここで $T$ は温度 (K)、$t_r$ は破断時間 (hours)、$C$ ≈ 20 です。

💻 コード例2: ラーソン・ミラー解析

def larson_miller_parameter(temperature, rupture_time, C=20):
    """ラーソン・ミラー パラメータを計算する"""
    T = temperature + 273  # Kに変換
    P_LM = T * (C + np.log10(rupture_time))
    return P_LM

def predict_life(stress, P_LM, temperature, C=20):
    """P_LMから破断時間を予測する"""
    T = temperature + 273
    log_t = (P_LM / T) - C
    t_r = 10**log_t
    return t_r

# 例
T1, t1 = 650, 1000
P_LM = larson_miller_parameter(T1, t1)
t2_predicted = predict_life(stress=100, P_LM=P_LM, temperature=600)

print(f"ラーソン・ミラー パラメータ: {P_LM:.0f}")
print(f"600°Cでの予測寿命: {t2_predicted:.1f} hours")

3.3 応力緩和

応力緩和とは、一定ひずみ下で応力が減少する現象であり、クリープとは逆の関係にあります。

📐 応力緩和: $$\sigma(t) = \sigma_0 \exp\left(-\frac{t}{\tau}\right)$$ ここで $\tau$ は緩和時定数です。

💻 コード例3: 応力緩和のモデル化

def stress_relaxation(time, sigma_0, tau):
    """応力緩和をモデル化する"""
    return sigma_0 * np.exp(-time / tau)

time = np.linspace(0, 500, 200)
sigma = stress_relaxation(time, sigma_0=300, tau=100)

plt.figure(figsize=(10, 6))
plt.plot(time, sigma, 'b-', linewidth=2)
plt.xlabel('時間 (hours)')
plt.ylabel('応力 (MPa)')
plt.title('応力緩和曲線')
plt.grid(True, alpha=0.3)
plt.show()

3.4 クリープ試験規格

ASTM E139は、クリープ試験およびクリープ破断試験の手順を規定しています。

💻 コード例4: クリープ試験の解析

class CreepTest:
    """クリープ試験データの解析"""

    def minimum_creep_rate(self, time, strain):
        """最小(定常状態)クリープ速度を求める"""
        strain_rate = np.gradient(strain, time)
        min_idx = np.argmin(strain_rate[100:]) + 100
        return strain_rate[min_idx]

    def time_to_rupture(self, time, strain, failure_strain=0.20):
        """破断までの時間を推定する"""
        idx = np.argmin(np.abs(strain - failure_strain))
        return time[idx]

test = CreepTest()
time = np.linspace(0, 1000, 500)
strain = creep_curve(time, 100, 600)

mcr = test.minimum_creep_rate(time, strain)
ttr = test.time_to_rupture(time, strain)

print(f"最小クリープ速度: {mcr:.2e} /hour")
print(f"破断までの時間: {ttr:.1f} hours")

3.5 温度と応力の影響

クリープ速度は、温度に対しては指数関数的に、応力に対してはべき乗則に従って増加します。

💻 コード例5: パラメトリックスタディ

temperatures = [500, 550, 600, 650]
stresses = [50, 75, 100, 125]

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5))

# 温度の影響
for T in temperatures:
    strain = creep_curve(time, stress=100, temperature=T)
    ax1.plot(time, strain*100, linewidth=2, label=f'{T}°C')
ax1.set_xlabel('時間 (hours)')
ax1.set_ylabel('クリープひずみ (%)')
ax1.set_title('クリープに対する温度の影響')
ax1.legend()
ax1.grid(True, alpha=0.3)

# 応力の影響
for sigma in stresses:
    strain = creep_curve(time, stress=sigma, temperature=600)
    ax2.plot(time, strain*100, linewidth=2, label=f'{sigma} MPa')
ax2.set_xlabel('時間 (hours)')
ax2.set_ylabel('クリープひずみ (%)')
ax2.set_title('クリープに対する応力の影響')
ax2.legend()
ax2.grid(True, alpha=0.3)

plt.tight_layout()
plt.show()

3.6 クリープ損傷と寿命予測

クリープ損傷は時間とともに蓄積し、最終的に破壊に至ります。損傷モデルは残存寿命を予測します。

💻 コード例6: 損傷の蓄積

def monkman_grant(time_to_rupture, min_creep_rate, m=1, C=0.05):
    """モンクマン・グラント関係"""
    # MCR * t_r^m = C
    predicted_tr = (C / min_creep_rate)**(1/m)
    return predicted_tr

mcr = 1e-5
predicted_life = monkman_grant(None, mcr)
print(f"予測破断寿命: {predicted_life:.1f} hours")

3.7 応用と設計

クリープの考慮は、ガスタービン、原子炉、高温配管において極めて重要です。

💻 コード例7: 設計許容応力

def design_allowable_stress(temperature, design_life=100000):
    """設計寿命に対する許容応力を計算する"""
    # 簡略化したマスターカーブを使用
    T = temperature + 273
    sigma_allow = 500 * np.exp(-0.003 * temperature) * (design_life / 100000)**(-0.15)
    return sigma_allow

temps = np.linspace(400, 700, 50)
sigma_allow = [design_allowable_stress(T) for T in temps]

plt.figure(figsize=(10, 6))
plt.plot(temps, sigma_allow, 'b-', linewidth=2)
plt.xlabel('温度 (°C)')
plt.ylabel('許容応力 (MPa)')
plt.title('設計許容応力 vs 温度(10万時間寿命)')
plt.grid(True, alpha=0.3)
plt.show()

📝 章末演習

✏️ 演習問題
  1. 650°Cで5000時間後のクリープ破断に対するラーソン・ミラー パラメータを計算しなさい。
  2. 演習1で求めたP_LMを用いて、600°Cでの破断寿命を予測しなさい。
  3. クリープ曲線を解析し、最小クリープ速度と5%ひずみに達するまでの時間を求めなさい。
  4. アレニウス式を用いて、同一応力下での550°Cと650°Cのクリープ速度を比較しなさい。
  5. 600°Cで10年間の使用寿命に対する設計許容応力を求めなさい。

まとめ

免責事項