みなさん、こんにちは。工学物理ブロガーのNovaです。
突然ですが、「飛行機の翼にヒビが入ったら、即座に墜落する」 — これ、本当だと思いますか?
実は、違うんです。航空機の構造部品には、小さなき裂があっても「すぐには壊れない」ように設計されています。でも、繰り返し荷重がかかり続けると、そのき裂はじわじわと成長し、ある日突然、パキッと破壊に至る。
この「き裂がどれだけのペースで伸びるか」を予測する方程式、それが Paris則 です。
今回は、ブラウザでサクッと動く Paris則 き裂進展 シミュレーター を題材に、数式の意味から実装、現場での落とし穴まで、コードを交えてガッツリ解説していきます。
ざっくり本質 — 「疲労」って何?
一言でまとめると:
「き裂は、応力が大きいほど、材料が脆いほど、速く伸びる。その伸び方をシンプルなべき乗則で近似したのがParis則」
イメージしてみてください。紙を1回折ると、折り目に「き裂」が入りますよね。でも、そのままでは破れません。でも、同じ場所を何度も折り曲げると、じわじわと切れ目が広がって、最後はパタッと千切れる。
これが 疲労破壊 です。
Paris則は、この「き裂が1回の荷重でどれだけ伸びるか」を、応力拡大係数(ΔK) という指標を使ってモデル化したもの。材料によって決まる定数Cとmで、進展速度が決まります。
数式で理解する
Paris則の核心は、たった1行の式です。
\frac{da}{dN} = C (\Delta K)^m
各項の意味
| 記号 | 意味 | 単位 |
|---|---|---|
| $da/dN$ | 1サイクルあたりのき裂進展量 | m/cycle |
| $C$ | 材料定数(進展しやすさ) | 材料依存 |
| $m$ | 材料定数(べき指数、通常2〜4) | 無次元 |
| $\Delta K$ | 応力拡大係数範囲 | MPa√m |
そして、$\Delta K$ は次の式で計算されます:
\Delta K = \Delta \sigma \sqrt{\pi a}
ここで:
- $\Delta \sigma$ = 応力範囲(最大応力 - 最小応力)[MPa]
- $a$ = き裂長さ [m]
さらに、臨界き裂長さ $a_c$ は、材料の破壊靭性値 $K_{IC}$ から:
a_c = \left( \frac{K_{IC}}{\Delta \sigma \sqrt{\pi}} \right)^2
つまり、応力範囲が大きいほど、臨界き裂長さは短くなる — これは直感的にも理解できますね。強い力がかかれば、小さなき裂でも壊れる。
コードで実装する ★最重要★
では、このParis則を実際に動くコードに落とし込みましょう。
今回のシミュレーターのコアロジックを、JavaScript で再現します。
/**
* Paris則によるき裂進展シミュレーション
* @param {number} a0 - 初期き裂長さ [m]
* @param {number} deltaSigma - 応力範囲 [MPa]
* @param {number} KIC - 破壊靭性値 [MPa√m]
* @param {number} C - Paris則定数 C [m/cycle] (ΔKの単位はMPa√m)
* @param {number} m - Paris則指数 (無次元)
* @param {number} dN - 1ステップのサイクル数 [cycle]
* @returns {object} { a: き裂履歴, N: サイクル履歴, Nf: 残余寿命 }
*/
function parisSimulation(a0, deltaSigma, KIC, C, m, dN = 100) {
// 臨界き裂長さを計算
const ac = Math.pow(KIC / (deltaSigma * Math.sqrt(Math.PI)), 2);
// 履歴保存用
const aHistory = [a0];
const NHistory = [0];
let a = a0;
let N = 0;
// 最大ステップ数(無限ループ防止)
const maxSteps = 100000;
for (let i = 0; i < maxSteps; i++) {
// 応力拡大係数範囲 ΔK を計算
const deltaK = deltaSigma * Math.sqrt(Math.PI * a);
// Paris則: da/dN = C * (ΔK)^m
const daPerCycle = C * Math.pow(deltaK, m);
// 1ステップ分進展
const da = daPerCycle * dN;
a += da;
N += dN;
// 履歴を保存
aHistory.push(a);
NHistory.push(N);
// 臨界き裂長さに達したら終了
if (a >= ac) {
break;
}
}
return {
a: aHistory,
N: NHistory,
Nf: N, // 残余寿命(サイクル数)
ac: ac, // 臨界き裂長さ
finalA: a // 最終き裂長さ
};
}
// 使用例:アルミ合金(C=1e-11, m=3)
const result = parisSimulation(
0.001, // a0: 1mm
100, // Δσ: 100 MPa
30, // K_IC: 30 MPa√m
1e-11, // C
3, // m
100 // dN: 100 cycles/step
);
console.log(`臨界き裂長さ: ${(result.ac * 1000).toFixed(2)} mm`);
console.log(`残余寿命: ${result.Nf.toLocaleString()} cycles`);
console.log(`最終き裂長さ: ${(result.finalA * 1000).toFixed(2)} mm`);
このコードのポイント:
-
$\Delta K$ の計算:
deltaSigma * Math.sqrt(Math.PI * a)— まさに数式そのもの -
進展量の積分:離散的に
dNサイクルずつ進め、その間は進展速度が一定と近似 -
終了条件:き裂長さが臨界値
acに達したらストップ
実際のシミュレーターでは、このループをスライダーを動かすたびにリアルタイム再計算しています。つまり、パラメータ変更 → 即座にグラフ描画 という体験を実現しているんですね。
数値例で確かめる
実際に数値を入れて、手計算とコードの出力を比較してみましょう。
条件
- 初期き裂長さ $a_0 = 1.0 \times 10^{-3}$ m (1 mm)
- 応力範囲 $\Delta \sigma = 100$ MPa
- 破壊靭性 $K_{IC} = 30$ MPa√m
- Paris定数 $C = 1.0 \times 10^{-11}$ m/cycle, $m = 3$
ステップ1: 臨界き裂長さを計算
a_c = \left( \frac{30}{100 \times \sqrt{\pi}} \right)^2
a_c = \left( \frac{30}{177.245} \right)^2 \approx (0.1693)^2 \approx 0.02866 \text{ m} \approx 28.7 \text{ mm}
ステップ2: 初期状態のΔKと進展速度
\Delta K_0 = 100 \times \sqrt{\pi \times 0.001} = 100 \times 0.05605 = 5.605 \text{ MPa√m}
\frac{da}{dN}\bigg|_0 = 1 \times 10^{-11} \times (5.605)^3 = 1 \times 10^{-11} \times 176.1 = 1.761 \times 10^{-9} \text{ m/cycle}
つまり、最初は1サイクルあたり約1.76ナノメートルしか進まない。とてもゆっくりです。
ステップ3: コードの出力と比較
先ほどのコードを実行すると:
臨界き裂長さ: 28.66 mm
残余寿命: 4,203,200 cycles
最終き裂長さ: 28.66 mm
約420万サイクル で破壊に至る。これは、例えば「1日1回の荷重サイクル」なら、約11,500年 もちます。でも、航空機のエンジン部品のように「1秒に数百回」のサイクルがかかるなら、数時間で寿命が尽きる計算になります。
この「サイクルの頻度が寿命を決める」という感覚、めちゃくちゃ重要です。
シミュレーターで遊ぶ
実際の Paris則 き裂進展 シミュレーター で、3つの実験をしてみましょう。
実験1: m値を変えてみる(材料の「脆さ感度」)
- 条件: 初期き裂1mm, Δσ=100MPa, K_IC=30, C=1e-11
- m=2 → 残余寿命: 約1,300万サイクル
- m=3 → 残余寿命: 約420万サイクル
- m=4 → 残余寿命: 約130万サイクル
何が起きているか?
mが大きいほど、ΔKが大きくなったときの進展速度の増加率が急激になります。つまり、き裂が少し伸びると加速度的に進む。m=4の材料は、「ヒビが入ったら一気に伸びる」危険な材料と言えます。
実験2: 応力範囲を変えてみる(負荷の影響)
- 条件: 初期き裂1mm, m=3, C=1e-11, K_IC=30
- Δσ=50 MPa → 残余寿命: 約3,300万サイクル
- Δσ=100 MPa → 残余寿命: 約420万サイクル
- Δσ=200 MPa → 残余寿命: 約52万サイクル
応力が2倍になると、寿命は約1/8 になります。これはParis則が $\Delta K^m$ に比例し、$\Delta K$ が $\Delta \sigma$ に比例するから。m=3なら「2倍の応力 → 8分の1の寿命」という、非線形な影響が現れます。
実験3: 初期き裂の大きさを変えてみる(検査の重要性)
- 条件: Δσ=100MPa, m=3, C=1e-11, K_IC=30
- a0=0.5 mm → 残余寿命: 約1,200万サイクル
- a0=1.0 mm → 残余寿命: 約420万サイクル
- a0=2.0 mm → 残余寿命: 約150万サイクル
初期き裂が2倍になると、寿命は約1/3。つまり、非破壊検査で小さなき裂を見つけることが、どれだけ寿命延伸に効くかが体感できます。
現場でハマるポイント
1. Paris則は「万能の法則」ではない
実はParis則が有効なのは、き裂進展の第II領域(安定進展領域) だけ。き裂発生直後の微小き裂領域や、破壊直前の急速進展領域では使えません。
例えば、初期き裂を0.01mmに設定すると、実際の寿命は計算値より大幅に長くなる可能性があります。それは、微小き裂の進展がParis則より遅いから。
2. Cとmの値は「環境依存」
「鋼材のmは3」と言っても、それは大気中・室温・乾燥状態の話。例えば:
- 湿気の多い環境 → Cが大きくなる(進展が速くなる)
- 高温環境 → mが変化する
- 荷重のR比(最小応力/最大応力) → これも影響する
実務では、実際の使用環境に合った試験データからC, mを選ぶ必要があります。
3. 「臨界き裂長さ」の解釈に注意
シミュレーターでは $K_{IC}$ から $a_c$ を計算しますが、実務では「計算上の $a_c$」と「実際に許容できる長さ」は異なります。
例えば、圧力容器では 「リーク・ビフォア・ブレーク」 の考え方から、計算値よりはるかに小さいサイズを管理限界値に設定します。「き裂が貫通して漏れが検知できる前に、不安定破壊が起きないように」という安全思想です。
まとめ
- Paris則は「き裂の伸び方」をシンプルなべき乗則で表す — $da/dN = C (\Delta K)^m$
- 応力が2倍になると寿命は約1/8(m=3の場合)— 非線形な影響を必ず考慮する
- 初期き裂の検出精度が寿命予測の鍵 — 小さなき裂を見つければ、寿命は大きく伸びる
そして何より、理論と実装の間には「離散化誤差」や「適用限界」があることを忘れないでください。
今回のシミュレーターは、無料でブラウザ上ですぐ動きます。スライダーを動かすだけで、き裂進展の様子がリアルタイムに変化する — これは「体感」するのに最適なツールです。
▶ Paris則 き裂進展 シミュレーター — ブラウザで即動作、登録不要
NovaSolverでは1,600以上の工学シミュレーターを無料公開中 👉 一覧はこちら
さあ、あなたも「ヒビの科学」を体感してみませんか?