不定値行列エラー
不定値行列
先生、不定値行列って特異行列とは違うんですか?
理論と物理
不定値行列の物理的意味
「不定値行列」というエラーが出ました。行列が不定値になるって、物理的にはどういう状態を表しているんですか?
良い質問だ。物理的には、構造が「不安定」な状態を表している。具体的には、剛性マトリクス
固有値が負になる? 剛性は正の値じゃないんですか?
線形の微小変形理論では剛性は常に正だ。しかし、幾何学的非線形解析(大変形、座屈後解析)では、変形後の構成で剛性を評価する。変形によって部材が圧縮され、復元力が逆転するようなモードが生じると、その方向の「見かけの剛性」は負になる。これが負の固有値に対応する。支配方程式は
線形静解析でこのエラーが出るのはなぜですか? 非線形は扱っていないはずなのに。
それこそが最も一般的な原因だ。線形解析で不定値エラーが出る場合、モデル自体に「拘束不足」がある。例えば、3次元モデルでZ方向の並進を拘束し忘れたり、回転自由度がフリーのままだと、剛体モードが存在する。この状態では、その方向の剛性はゼロ、つまり固有値がゼロになる。ソルバーは正定値行列を期待しているので、ゼロでもエラーとして検出する。Abaqusのマニュアルでは「NUMERICAL SINGULARITY」と併記されることが多い。
数値解法と実装
ソルバーはどのように検出するか
ソルバーは、計算中にどうやって行列が不定値だと判断するんですか? 全固有値を計算するのは重いのでは?
その通りで、全固有値計算はしない。直接法ソルバー(例えばスパース直接ソルバー)では、行列をLU分解またはコレスキー分解する過程で判別する。コレスキー分解
「ピボット」が負になるとは?
分解の途中で計算される対角項の値だ。具体的な小さなモデルで示そう。2自由度のばね質量系で、剛性マトリクスが
非線形解析の増分計算では、各ステップでこのチェックが行われるんですか?
はい。Abaqus/Standardのような暗黙的ソルバーでは、各Newton-Raphson反復のたびに接線剛性マトリクスを構成し、それを分解して解を求める。座屈後解析などで負のピボットが検出されると、「負の固有値が○個検出されました」というメッセージとともに、増分ステップを小さくして(例えば0.25倍)、再度試行するアルゴリズムが働く。これが収束しないと解析が停止する。
実践ガイド
エラー発生時のチェックリスト
実際にエラーが出た時、最初に何を確認すべきですか?
体系的に確認するんだ。まずは「拘束条件」。3D固体要素なら、XYZの並進と回転、計6自由度のうち、必要十分な拘束があるか。シェル要素なら面内回転(ドリル回転)の扱いに注意だ。Ansysでは、シェル要素のドリル剛性を追加するKEYOPT(3)設定がある。
拘束は足りているように見えるのですが。他には?
次に「材料設定」だ。特に線形解析で、材料のヤング率やポアソン比に極端に小さい値や負の値を入力していないか。例えば、ヤング率を1e-20などとすると、数値的にゼロとみなされ、実質的な剛体モードが生じる。また、異方性材料の定数を誤って入力すると、物理的に不安定な材料特性(例えば、せん断剛性が負)を定義してしまうことがある。
接触条件が原因になることはありますか?
非常に多い。初期接触状態で「開いている」接触面があると、その部分は構造的に接続されていない。例えば、ボルト締結部でボルトシャンクと穴に隙間があるモデルでは、締結前は部材がぶら下がった状態になり得る。Ansysの接触設定で「Adjust to Touch」や「Rigid Body Motion」のオプションを確認し、初期過渡期に微少な剛性を追加する「Stabilization」機能を使うことがある。
メッシュの品質も関係しますか?
間接的に関係する。極端にアスペクト比の悪い要素(例えばアスペクト比1000:1)や、内角が1度以下のくさび形要素では、数値積分(ガウス積分)の精度が著しく落ち、要素剛性マトリクスの計算誤差で、非常に小さい、あるいは負の固有値が生じることがある。特に2次要素では中間節点の位置が歪だと、ヤコビアンが負になる「要素反転」が起き、即座に不定値エラーの原因となる。
ソフトウェア比較
各ソフトウェアのエラーメッセージと対策
このエラーは、Abaqus、Ansys、COMSOLで同じように表示されるんですか?
表現はソフトごとに異なるが、本質は同じだ。
・Ansys Mechanical: 「Solver pivot warning or error.」が典型的だ。ソルバー出力(.outファイル)に「*** WARNING *** CP = 68.469 TIME=... There are 1 small equation solver pivot terms.」と表示される。
・COMSOL: 「行列が特異または条件が非常に悪いです。」「負のピボット値が見つかりました。」というメッセージが出る。
ソフトウェアごとに推奨されるデバッグ方法は違いますか?
基本方針は同じだが、ツールが異なる。
Ansysでは、Solution Informationの「Solver Output」を開き、ピボット警告が出たサブステップと自由度を特定する。モデルを単純化する「Solver Pivot Debugging」機能もあり、問題のある要素群をハイライト表示できる場合がある。
COMSOLは「デバッグ」研究ステップを使用できる。これにより、問題の行列をファイルに出力し、どこにゼロまたは負の対角項があるかを詳細に調査できる。
非線形解析で意図的に負の剛性を通りたい時(座屈後解析など)は、ソフトごとに特別な設定が必要ですか?
必要だ。いずれもデフォルトの線形ソルバー設定では、負のピボットで停止する。
・Ansys: 分析設定で「Large Deflection」をOnにし、「Solver Controls」の「Nonlinear Controls」で「Stabilization」を有効にする。あるいは、弧長法(Arc-Length Method)を有効にすることが根本的な解決策だ。
・COMSOL: 「定常ソルバー」ではなく、「パラメトリック」ソルバーまたは「変動式」ソルバーを使用し、「定数ノルム」オプション(弧長法に相当)を有効にする必要がある。
トラブルシューティング
具体例とその解決策
具体的な例で教えてください。例えば、シンプルな片持ち梁の線解析でこのエラーが出ました。拘束は完全だと思っていました。
シンプルなモデルほど盲点がある。使用した要素は? もし2次要素(例えばAbaqusのC3D20)で、固定端の面を完全固定(ENCASRE)した場合、中間節点も完全に拘束されているか確認したか? 中間節点が拘束されていないと、その節点だけが剛体モードを持つ可能性がある。AnsysのSOLID186要素でも同様だ。対策は、拘束を「面」で与えるのではなく、固定端の「全節点」に対して直接自由度拘束を適用することだ。
複数の部品をボルトで結合したアセンブリモデルでエラーが出ます。接触と拘束は設定済みです。
その場合、初期接触状態が「開いている」ことが多い。ボルト締結モデルでは、ボルトの軸方向(シャンク部)と穴面との間に、メッシュのわずかな不一致や幾何公差による隙間が数値的に存在する。線形解析の接触設定が「Bonded」の場合、この隙間は無視され、部品間が接続されていない状態で剛性マトリクスが組まれる。対策は二つ:1) 幾何学的に干渉量(例えば0.001mm)を与えて確実に接触させる。2) 線形解析ではなく、初期に微少な接触圧が生じるように「No Separation」などの非線形接触で初期ステップを計算する。
エラーメッセージに「自由度2356」のように番号が出てきました。これだけではどこかわかりません。
その自由度番号を「節点番号」と「自由度の種類」に変換する必要がある。多くの場合、自由度番号は
どうしても原因がわからない時、応急処置的な方法はありますか? 例えば、微少なばねを追加するとか。
それは最後の手段で、根本解決ではないが、デバッグのヒントを得るためには有効だ。具体的には、疑わしい方向に微少な剛性を追加する。Ansysなら「Spring Foundation」を追加。Abaqusなら「*CONNECTOR」要素でバネを定義する。剛性は構造全体の剛性に対して十分に小さい値(例えば主剛性の1e-6倍)に設定する。これを追加してエラーが消えるなら、その方向に剛性が不足していた(拘束不足だった)という証拠になる。ただし、このばねが結果に与える影響を評価せずに最終結果として使ってはならない。
関連トピック
なった
詳しく
報告