過剰反復(収束遅延)
過剰反復とは
先生、解析は完了するんですけど、1増分あたりの反復回数がすごく多くて計算が終わりません。
理論と物理
過剰反復の根本原因
「過剰反復」や「収束遅延」って、具体的にどういう状態を指すんですか?単に計算が遅いだけ?
いい質問だ。単なる遅さではない。例えば、非線形解析で、収束判定値(例えば残差ノルム)が目標値の1e-3に到達するのに、デフォルトの最大反復回数(Abaqus/Standardではデフォルト16回)を大幅に超え、50回、100回と反復を繰り返す状態だ。物理的には、ソルバーが解の平衡点を「探し回っている」状態で、計算コストが膨大になる。
なぜ平衡点を探し回ってしまうんですか?支配方程式が急激に変化するから?
主な原因は3つある。第一に「材料非線形性の急激な変化」。例えば、降伏応力200MPaの鋼材で、ある要素が199MPaから201MPaに達する瞬間、剛性マトリクスが劇的に変化する。第二に「接触条件の不連続変化」。第三が「不安定な物理現象そのもの」だ。座屈やスナップスルーが起きる領域では、解がそもそもユニークでないか、不安定だ。
支配方程式で言うと、非線形ソルバーが解く
その通り。ニュートン・ラフソン法の収束性はこの接線剛性の精度に大きく依存する。材料が塑性域に入る、接触がオン/オフするたびに
数値解法と実装
ソルバーの挙動と設定
では、過剰反復が起きている時、ソルバー内部では具体的にどんな計算が繰り返されているんですか?
例えばAbaqus/StandardのFull Newton法では、1インクリメント内で以下のループが回る:1) 接線剛性マトリクスの形成と分解(コスト大)、2) 残差力の計算、3) 変位増分の求解、4) 収束判定。過剰反復とは、このループが、例えば収束判定の「残差力が平均力の0.5%以下」という条件を満たせずに延々と回り続ける状態だ。特に1)のマトリクス分解(LDL^Tなど)が各反復で行われると、計算時間が反復回数に比例して爆発する。
「マトリクス分解を各反復で行う」のを避ける方法はあるんですか?
ある。それが「修正ニュートン法」だ。Abaqusでは`STEP`オプションで`ITERATION=MODIFIED`を指定できる。これは最初の反復でだけ接線剛性を計算・分解し、その後は同じマトリクスを使いまわして残差力だけを更新する。収束は遅くなる(反復回数は増える)が、1反復あたりのコストが劇的に下がるため、総合時間が短くなる場合がある。ただし、強非線形問題では発散しやすいというトレードオフがある。
線形ソルバーの選択も影響しますか?直接法と反復法で違いは?
大いにある。Ansys Mechanicalではデフォルトの直接法ソルバー(Sparse)は剛性マトリクスの悪条件に比較的強いが、大規模モデルではメモリを大量消費する。反復法ソルバー(PCGなど)はメモリ効率が良いが、条件数が悪化すると収束そのものに反復がかかり、非線形反復と合わせて「二重の反復地獄」に陥る。メッシュ品質が悪い(アスペクト比>10)と、反復法ソルバーの収束が極端に悪化し、全体の反復回数が増える典型例だ。
実践ガイド
ワークフローとチェックリスト
解析を走らせて過剰反復が起きていると疑った時、最初にチェックすべきことは何ですか?
まずはログファイル(Abaqusの.msg, Ansysの.out)を開き、どのインクリメント(またはタイムステップ)で反復回数が跳ね上がっているかを特定せよ。次に、そのインクリメントの「力の残差」と「変位修正量」の履歴をプロットする。Ansysでは`SOLVE`コマンド前後に`OUTPR,ITER`を設定する。残差が特定のモード(例えば局部座屈モード)で振動しているか、一定値で下がらなくなっているかを見る。
特定のインクリメントで問題が起きていると分かったら、次は?
そのインクリメントの開始時のモデル状態を可視化する。Abaqusなら`restart`から、Ansysなら`RESUME`でそのステップを読み込み、応力、塑性ひずみ、接触状態を確認する。例えば、ある一つの接触ペアで接触圧力が10MPaから0、また10MPaに…と振動していないか。または、一つの要素で塑性ひずみが0.2を超えた瞬間から問題が始まっていないか。これが「物理的原因」の特定作業だ。
原因が物理的なものだと分かったら、解析設定でどう対処すればいいですか?
まずは「インクリメントサイズを小さくする」が基本だ。Abaqusで`INITIAL=1E-4, MINIMUM=1E-8`のように極小値を設定し、ソルバーにゆっくり問題を解かせる。次に「収束判定を緩和する」。デフォルトの残差基準0.5%を1%や2%に緩める(結果の精度とトレードオフ)。Ansysでは`CNVTOL`コマンドで調整可能。そして「不安定な現象にはアーク長法を導入する」。Abaqusの`STATIC, RIKS`やAnsysの`ARCLEN`命令だ。これらは解経路を追跡するのに有効だが、設定が難しい。
モデル自体に原因がある場合のチェックリストは?
以下の5点を確認せよ:1) メッシュ:アスペクト比は10以下か、特に塑性域や接触面で。2) 材料データ:塑性曲線に不連続な折れ点がないか(実験データをそのまま入力していないか)。3) 接触:初期接触状態は適切か、ペナルティ剛性は適切か(デフォルトの100倍など大きくしすぎていないか)。4) 拘束:剛体モードが残っていないか。5) 単位系:力[N]と長さ[mm]の混在で、剛性が実質1e6倍されていないか。これらは全て剛性マトリクスの条件数を悪化させる。
ソフトウェア比較
各ソルバーの特徴と対策
過剰反復への対処法は、Abaqus、Ansys、COMSOLで大きく違うんですか?
基本的な考え方は同じだが、設定方法とデフォルトの挙動が異なる。Abaqus/Standardはデフォルトの収束判定が比較的厳格で、最大反復回数も16回と少なめに設定されている。そのため「収束しない」とエラーで止まりやすい。一方、Ansys Mechanicalのデフォルトは最大反復回数が多く(場合による)、「過剰反復」状態で計算が続き、気づいたら膨大な時間が経っていた、ということが起きる。
Abaqusで過剰反復を抑制する具体的なオプションは?
いくつかある。まず、`*CONTROLS`パラメータで、剛性マトリクスの更新頻度や収束判定を調整できる。例えば、`ANALYSIS=DISCONTINUOUS`は接触や摩擦で剛性が不連続に変化する場合に有効だ。また、`*VISCO`を使って擬似的な減衰を導入し、振動的な収束遅延を抑える方法もある。Explicitソルバーへの切り替え(`DYNAMIC, EXPLICIT`)は、接触が極めて複雑な問題では最終手段として有効だが、計算時間は別の問題になる。
Ansysでは「Nonlinear Adaptive Region」という機能を聞いたことがあります。あれは過剰反解に効きますか?
非常に有効な機能の一つだ。これは、反復中に収束が遅いと判定された領域(例えばひずみ集中部)のメッシュを、そのインクリメント内で自動的に細かくリメッシュする。R19以降で本格導入された。局所的な変形集中が原因で剛性が悪化している場合、その部分だけ解像度を上げることで、接線剛性の精度が向上し、全体の反復回数を減らせる。ただし、リメッシュによる計算オーバーヘッドとのバランスを見る必要がある。
COMSOLはマルチフィジックスが売りですが、その分収束問題は複雑ではないですか?
その通りだ。COMSOLはカップリングされた物理場ごとに異なるスケールの方程式を解く。例えば熱応力解析では、温度場の変化(オーダー10^2 K)と変位場(オーダー10^-3 m)が結合する。デフォルトのスケーリングが不適切だと、ヤコビアンマトリクスの条件数が極端に悪化し、過剰反復の主要原因となる。COMSOLでは「変位スケーリング」や「手動スケーリングファクター」を設定し、すべての自由度が同程度の大きさになるよう調整するのが重要な対策だ。
トラブルシューティング
よくあるエラーと対策
「残差は減っているが、非常にゆっくりで、いつまで経っても収束判定に達しない」という場合、どう切り抜けますか?
これは「収束率が線形」になっている状態で、ニュートン法が本来持つ二次収束性を失っている。まず、接線剛性の更新が機能していない可能性が高い。Abaqusで`STEP`の`EXTRAPOLATION`を`OFF`にしてみよ。初期予測が外れすぎているかもしれない。次に、`CONTROLS`で`LINE SEARCH`を`ON`またはその係数を調整する(デフォルト0.25を0.5などに増やす)。線探索は変位増分
逆に「残差が一定値(例えば1e5)で振動している」場合は?
これは不安定な物理現象か、接触の「チャタリング」が起きている証拠だ。まず、振動している自由度を特定する。Ansysの`PRNSOL`やAbaqusのフィールド出力で反復ごとの変位を出力する。もし局部座屈のようなモードで振動しているなら、アーク長法(`ARCLEN`)の導入を真剣に検討する。接触のチャタリングの場合は、Ansysの`CNCHECK`コマンドで接触状態を詳細に確認し、ペナルティ剛性を下げる(デフォルト値の0.1倍など)、または「ボルツマン増分」を使った滑らかな接触モデルに変更する。
「最初の数ステップは順調だったが、途中から急に反復回数が増え始めた」というパターンです。何が起きている?
材料の降伏や損傷の開始、あるいは接触面の全面滑りへの移行など、「状態変化の閾値」を越えた瞬間である可能性が高い。例えば、あるインクリメントでモデル全体の1%の要素が塑性域に入り、その次のインクリメントで10%に広がる。この劇的な状態変化にソルバーが追いつけない。対策は二段階ある。第一に、その閾値直前のステップから、インクリメントサイズを1/10や1/100に手動で小さくする。第二に、材料モデル自体を見直す。例えば、降伏後の塑性硬化曲線の傾き(硬化係数)が小さすぎて数値的に特異(ill-conditioned)になっていないか。JIS G 3131 SPHCのような材料でも、降伏後のデータポイントは少なくとも0.2% Proof Stressの数倍のひずみまで定義すべきだ。
これらを試してもダメな場合、最終的な「逃げ道」はあるんですか?
現実的な「逃げ道」は3つある。1) **ソルバーの切り替え**: Abaqus/StandardからAbaqus/Explicitへ(動的問題の場合)。またはAnsys MechanicalからAnsys LS-DYNAへ。2) **物理モデルの簡略化**: 収束の悪い非線形性(例えば摩擦係数0.2の摩擦)を一旦無くし(摩擦なしで実行)、現象のメカニズムを理解してから再度挑戦する。3) **人工的な安定化**: Ansysの`STABILIZE`コマンドやAbaqusの`*VISCO`を用いて、仮想的な減衰力を追加し、数値的収束を強制する。これはあくまで「収束させるため」の手法であり、結果の物理的正当性は別途検証が必要だ。エンジニアとして、ここで諦めるか、更に基礎からモデルを見直すかの判断が問われる。
関連トピック
なった
詳しく
報告