接触ペア競合(重複定義)
接触ペア競合とは
先生、接触ペアを複数定義したら「conflict」っていうエラーが出たんですけど…
理論と物理
接触定義の物理的意味と競合の本質
接触ペアの「競合」や「重複定義」って、具体的にどういう状態を指すんですか? 単に同じ場所に二つ定義しちゃったってことですか?
それも一つのケースですが、より本質的には「一つの自由度に対して、複数の異なる接触拘束条件が同時に適用されようとしている状態」です。例えば、ボルトで締結された2枚の板の接触面で、面と面の接触ペアと、ボルトのシャンクと穴の接触ペアが同じ領域をカバーしている場合などです。ソルバーはどちらの接触条件を優先すべきか判断できず、剛性マトリクスが特異になったり、収束しなくなります。
自由度って言われても…。例えば、X方向の変位に対して、二つの異なる接触条件が「離れるな」と「くっつけ」と矛盾した指令を出すような感じですか?
まさにその通りです。定量的に説明しましょう。接触条件はペナルティ法だと、仮想的なバネでモデル化されます。競合があると、一つの節点に二本のバネが並列に接続されるようなものです。剛性マトリクスの対角項が異常に大きくなり、条件数が悪化します。具体的には、接触剛性
過大な接触反力って、具体的にどれくらい「過大」なんですか? 材料の降伏応力を超えるようなことが起こるんですか?
起こり得ます。例えば、S45C(降伏応力 ~ 350 MPa)の部品同士の接触で、競合により局所的に計算上1 GPaを超える接触圧力が算出されることがあります。これは明らかに物理的に不自然で、結果が信用できないことを示す「警告サイン」です。Ansys Mechanicalでは、`Contact Tool` で確認できる接触圧力の最大値が異常に高い場合、競合を疑うべきです。
数値解法と実装
ソルバーが競合を検出・処理する仕組み
ソフトはどうやって競合を検出しているんですか? 定義したペアの幾何学的な重なりをチェックしているだけ?
幾何学的チェックは前処理段階での初歩的な検出です。本質的な検出は、ソルバーが剛性マトリクスを組み立てる段階、あるいは反復解法の収束判定段階で行われます。Abaqus/Standardのソルバーは、反復計算中に特定の節点に対する接触拘束力の向きと大きさをモニターし、矛盾があれば警告メッセージ(例えば「*CONTACT PAIR OVERCONSTRAINT」)を出力します。MSC Nastranでは、`PARAM,BAILOUT,-1` を設定すると、過拘束の詳細なレポートを出力できます。
警告が出たら、ソルバーはその後どう処理を続けるんですか? 自動でどちらかを無視したりするんですか?
一般的な商用ソルバーは「自動では」無視しません。安全側に倒すため、ユーザーに問題の特定と修正を促します。ただし、一部のケースでは優先順位を設定できます。例えば、Abaqusでは接触プロパティで「Adjust=」設定を用いて初期過ぎ込みを調整することで、意図せぬ接触の活性化を防ぎ、競合を回避できる場合があります。また、Ansysでは「Contact Tool」内で接触ペアの「Scoping Method」を「Manual」から「Automatic」に変えると、ソフトが重複を自動的に排除しようと試みますが、モデルによっては意図しない接触が削除されるリスクがあります。
ペナルティ法とラグランジュ乗数法で、競合に対する挙動は違うんですか?
大きく異なります。ペナルティ法は「バネ」なので、競合があっても計算は強行的に進み、前述したように異常な反力として現れます。一方、ラグランジュ乗数法や増分ラグランジュ法は、拘束条件を厳密に(またはほぼ厳密に)満たそうとするため、競合があると剛性マトリクスが特異(行列式がゼロ)になり、求解そのものが失敗します。COMSOLで「完全ラグランジュ乗数法」を選択している場合、競合エラーは「特異マトリクス」や「ピボット不足」という形で早期に検出される傾向があります。
実践ガイド
競合を未然に防ぎ、発生したら対処するワークフロー
大きなアセンブリモデルで、どこに競合があるか探すのが大変です。効率的なチェック方法はありますか?
まずは前処理段階での「接触マネージャー」の活用です。Ansys Mechanicalなら、`Connections` ブランチを右クリックして「Create Automatic Connections」ではなく、「Create Manual Connections」を基本とし、接触領域を明確に定義した上で、接触ペアの一覧表をエクスポートしてExcelなどで重複がないか確認します。特に、エッジ対エッジ、エッジ対面の接触は重複定義が起こりやすいので要注意です。
ボルト接合部のように、面接触とボルト締結(梁またはソリッド要素)が共存する部分は、どう設計すべきですか?
これは典型的な競合の発生箇所です。実務では以下のいずれかの方針を取ります。
「サーフェストリム」って具体的にどうやるんですか? AbaqusとAnsysで違いは?
Abaqus/CAEでは、接触面を定義する「Surface」を作成する際、「Edit Surface」ツールで「Trim edge」を指定し、ボルト穴のエッジを選択することで、穴の内側の面を接触定義から除外できます。Ansys Mechanicalでは、Geometryセルで「Slice」や「Face Split」コマンドを使って物理的に面を分割し、接触スコープで分割された面のみを選択する方法が確実です。あるいは、「Contact Tool」で「Contact」オブジェクトを右クリックし、「Scoping」を編集して、不要な幾何学的フェースを手動で除外します。
ソフトウェア比較
各ソフトウェアのエラーメッセージと対策ツールの違い
Ansys、Abaqus、COMSOLで、競合エラーの出方や対処のしやすさに違いはありますか?
大きく異なります。
無料・低価格のソフト(CalculiX、Code_Aster)だと、競合への耐性はどうなんでしょう?
オープンソースソルバーは、エラーチェックとユーザーへの親切なガイダンスという点では商用ソフトに劣ります。CalculiX (CCX) は、接触定義が重複していると、多くの場合、警告なく計算が進み、異常な応力や収束不良として結果に現れます。後処理で接触反力(*CFORCE)を出力し、物理的にあり得ない値(例えば、全体荷重の100倍など)がないかチェックする必要があります。Code_Asterはドキュメントが詳細で、`DEFI_CONTACT` コマンドで `ALARME='OUI'` を設定すると過拘束に関する警告を出してくれますが、やはり商用ソフトのようなグラフィカルな問題特定は困難です。
トラブルシューティング
具体的なエラーケースとその対策手順
「面と面」の接触と「自己接触」を同じ面に定義してしまった場合、どちらが優先されるんですか?
優先順位はソフトウェアや設定によりますが、一般的に「明示的に定義された面と面の接触」が優先され、「自己接触」はそれ以外の領域で働こうとします。しかし、これが競合を引き起こす典型的なパターンです。対策は明確です:**自己接触は、他のいかなる接触ペアにも属さない面に対してのみ定義する**。例えば、ゴムシールの変形解析では、他の部品と接触する面は「面と面の接触」で定義し、それ以外の、自分自身と接触する可能性がある面にのみ「自己接触」を適用します。
メッシュ依存性はありますか? 粗いメッシュでは競合が起こらなかったのに、メッシュを細かくしたらエラーが出るようになりました。
よくある現象です。粗いメッシュでは、接触を定義する「ノード」の位置が離れており、意図せぬ重複が起こりにくいのです。メッシュを細かくすると、例えばエッジ上の節点が、隣接する2つの面の接触定義両方に含まれてしまう(エッジは2つの面に共有されている)ことで競合が発生します。これを防ぐには、接触面を定義する際に「幾何学的な面」ではなく、「メッシュのフェース」や「ノードコンポーネント」を基に定義する方法があります。Ansysでは「Scoping Method」を「Geometry」から「Mesh」に切り替えることで、この種の競合を回避できる場合があります。
どうしても競合箇所が特定できない、または修正が難しい場合の最終手段はありますか?
最終手段は以下の2つです。
関連トピック
なった
詳しく
報告