打ち切り誤差 — CAE用語解説
理論と物理
打ち切り誤差の基本概念
「打ち切り誤差」という言葉をよく聞きますが、具体的に何を「打ち切る」ことで生じる誤差なんですか?
無限に続く数学的操作を、有限のステップで止めることです。例えば、関数のテイラー展開を考えます。sin(x)をx=0の周りで展開すると、
なるほど。では、CAEの世界では、どのような「無限の操作」が打ち切られることが多いのでしょうか?
主に3つあります。1つ目は先ほどのような関数近似(形状関数など)。2つ目は反復解法の収束判定。例えば共役勾配法で残差ノルムが1e-6以下になったら計算を止める場合、真の解との差は1e-6より大きい可能性があります。3つ目は時間積分。過渡解析では、次の時間ステップの状態を現在の状態の級数展開で予測しますが、これを有限次で打ち切ります。
打ち切り誤差と「離散化誤差」はどう違うんですか? どちらも近似によって生じる誤差ですよね。
良い着眼点です。離散化誤差は、連続体(微分方程式)を離散的な点(メッシュ)で表現すること全体から生じる誤差の総称です。一方、打ち切り誤差は、その離散化プロセスの中の「特定の数学的近似操作」に起因する誤差成分の一つです。例えば、有限差分法で一次微分を中心差分で近似するとき、
数値解法と実装
ソルバーにおける打ち切り誤差の発生箇所
実際のCAEソルバー内部では、打ち切り誤差はどのステップでコントロールされているんですか?
大きく分けて二段階です。第一段階は要素定式化。二次要素を使えば一次要素より高次項まで考慮するので、形状関数の打ち切り誤差は小さくなります。第二段階は連立一次方程式の求解。Ansys Mechanicalのデフォルトの直接法ソルバー(スパース直接ソルバー)では打ち切り誤差はほぼ無視できますが、反復法ソルバー(PCG法)では「収束基準」が打ち切り誤差の発生源です。残差が1e-8なら1e-4より厳しいので、打ち切り誤差は小さくなります。
過渡解析の時間積分、例えばニューマーク法やルンゲクッタ法では、どうやって打ち切り誤差を制御しているのでしょうか?
時間積分スキーム自体が持つ「次数」と、「時間ステップ幅」で制御します。例えば、陽的オイラー法は1次精度、4次のルンゲクッタ法は4次精度です。同じ時間ステップ幅Δt=0.001秒でも、後者の打ち切り誤差ははるかに小さい。実務では、自動時間ステップ制御が使われます。Abaqus/Explicitの動的解析では、あるステップの打ち切り誤差を推定し、許容誤差(デフォルトで5e-3程度)を超えるとステップ幅を小さくする、ということを繰り返します。
非線形解析の平衡反復(Newton-Raphson法)でも、収束判定が打ち切り誤差に関係しますか?
その通りです。非線形方程式を反復で解く際、力の残差や変位の修正量が収束基準(例:力の残差1e-2、修正量1e-5)を下回った時点で反復を打ち切ります。これが打ち切り誤差です。MarcやAbaqus/Standardでは、この基準を厳しくしすぎると計算コストが爆発し、緩すぎると物理的に不正確な解に収束するリスクがあります。接触問題では、デフォルトの1e-2では不十分で、1e-3まで厳しくするケースも多いです。
実践ガイド
打ち切り誤差を考慮した解析設定
実際の解析設定で、打ち切り誤差を意識して調整すべきパラメータは何ですか? チェックリストのようなものはありますか?
はい、以下の4点を確認します。
収束基準を厳しくすると計算時間が増えます。どこまで厳しくするかの判断基準は?
「感度解析」が一つの方法です。例えば、力の残差基準を1e-2, 1e-3, 1e-4と変えて、注目する最大応力や変位がどの程度変化するか調べます。変化が1%以内に収まるレベルが、その解析にとっての「実用上十分な」基準です。ある自動車部品の疲労解析では、残差1e-2と1e-3で応力が5%も変わったため、1e-3を採用しました。コストと精度のトレードオフです。
メッシュを細かくしても結果が変わらない「メッシュ収束」を確認したのに、ソルバー収束基準を変えると結果が変わることはありますか?
よくある落とし穴です。あります。メッシュ収束は「離散化誤差」の低減を確認したに過ぎません。非線形解析では、粗いメッシュでもソルバー収束基準を極端に厳しく(1e-8など)すると、その粗いメッシュが表現できる「不正確な解」に高精度で収束してしまいます。逆に、非常に細かいメッシュでも、収束基準が緩い(1e-1)と、打ち切り誤差が大きく、正しい解から遠ざかる可能性があります。両方の誤差源を別々に評価する必要があります。
ソフトウェア比較
各ソフトウェアにおける打ち切り誤差の扱い
Ansys、Abaqus、COMSOLといった主要ソフトでは、打ち切り誤差に関連する設定の呼び方やデフォルト値に違いはありますか?
大きな違いがあります。
CFDソフトウェア(Fluent, Star-CCM+)では、どのような打ち切り誤差が支配的ですか?
FluentやStar-CCM+などのCFDでは、「離散化スキーム」の選択が打ち切り誤差の大きさを決めます。例えば、移流項の1次風上差分は強い数値拡散(打ち切り誤差が大きい)を生み、2次風上差分やQUICKスキームはより高精度です。また、圧力-速度連成の反復解法(SIMPLE, PISO)の収束基準(連続性、運動量、エネルギーの残差)も打ち切り誤差源です。Fluentのデフォルト収束基準は1e-3ですが、熱伝達や化学反応を伴う場合は1e-6まで下げることもあります。
無償・オープンソースのCAEソフト(CalculiX, OpenFOAM)では、これらの設定はどうなっていますか?
ユーザーがより深く設定する必要があります。CalculiX(AbaqusライクなFEM)では、入力ファイル(.inp)の*CONTROLSパラメータで「cnorm」や「cnormm」を直接設定します。デフォルト値は明示的でない場合が多く、マニュアルを読む必要があります。OpenFOAMでは、`fvSolution`ファイル内の各方程式のソルバー設定(`tolerance`と`relTol`)と、`PIMPLE`や`SIMPLE`辞書内の収束基準(`residualControl`)がそれにあたります。商用ソフトより「ブラックボックス度」が低い分、打ち切り誤差の制御に対する理解が求められます。
トラブルシューティング
打ち切り誤差に起因する解析トラブル
収束判定をデフォルトのまま使っていて、実際に問題が起きた事例はありますか?
よくあります。ある例は、ゴム材料の大変形解析(Abaqus使用)です。デフォルトの収束基準(0.5%)では反復が早く終了し、見かけ上収束したように見えても、局部の接触圧力が実際より20%以上低く計算されていました。収束基準を0.1%に厳しくしたところ、反復回数は増えましたが、実験データとよく一致する結果が得られました。打ち切り誤差が大きすぎて、物理的に不正確な「だましの解」に落ち着いていたのです。
逆に、収束基準を厳しすぎる(1e-8など)設定にした場合のデメリットやリスクは何ですか?
主に二つ。第一に、計算時間の無駄です。メッシュの離散化誤差が1%ある状況で、ソルバー打ち切り誤差を1e-8まで下げても全体精度は向上しません。第二に、数値ノイズによる「収束失敗」のリスクです。特に接触問題では、微細な振動が生じ、厳しい収束基準を永遠に満たせず、解析が停止することがあります。Ansysでは、このような場合に「バイリニア減衰」などの収束補助機能を使いますが、根本的には基準の見直しが必要です。
結果の妥当性を確認する際、打ち切り誤差が原因で結果が怪しい場合、最初に疑うべきポイントは?
まず、ソルバーの出力ログを確認し、「最終的な残差ノルム」や「収束履歴」を見ます。収束基準ぎりぎりで止まっていないか。次に、パラメータスタディとして、収束基準を一段階厳しく(例:1e-3 → 1e-4)して再計算します。もし結果が大きく変わるなら、元の設定の打ち切り誤差が無視できない証拠です。また、メッシュを少し変えて(同じサイズで再生成)計算し、結果がぶれるか見るのも有効です。打ち切り誤差が支配的だと、メッシュのわずかな違いで結果が不安定になる傾向があります。
関連トピック
なった
詳しく
報告