接触ダンピング有効時の接触状態遷移の数え漏らしを修正

概要

接触ダンピング有効時に CONTACTNEAR と CONTACTSTICK の間の状態遷移が状態変化カウンタに 計上されず、行列構造が再構築されないまま次のニュートン反復に進んで異常終了する問題を修正する。 制御ファイルのキーワードとデータ行の仕様は変更していない。

Close #842 (closed)

原因は、カウンタ free2contact と contact2free が is_contact_free() だけを基準にしていた ことである。名前の contact は CONTACTNEAR が導入される前は STICK/SLIP を指していたが、 70bd6521 での機械的な置き換えによって NEAR を含むよう黙って広がり、NEAR と STICK の間の 遷移がどのカウンタにも現れなくなっていた。

カウンタを2本足す対症療法ではなく、接触状態を free / near / contact の3カテゴリに分け、 カテゴリ間の遷移を 3x3 の行列で数える形にした。対角以外をすべて数えるため、行列構造を変える 遷移の数え漏らしが構造的に起きない。あわせて contact の語が STICK/SLIP を指す本来の意味に 戻り、Lagrange未定乗数を持つ節点数である contactNode_current も NEAR 節点を数えなくなる。

引張力による剥離は、近接距離が設定されていれば CONTACTNEAR を経由するようにした。解放時点の distance は最後に投影したときの値であり、SSLID では STICK に入って以降更新されないため、 NEAR に落として次回スキャンの再投影に NEAR か FREE かの判断を任せている。また接触剛性と 残差の組み立ての要否を返す fstr_is_contact_active() に、ダンピングが有効な NEAR 節点を含めた。

ダンピングを使わない解析では近接距離が 0 のままなので状態遷移は変わらず、Contact change の ログ行も従来と同一である。近接状態の遷移が起きたときだけ2行目が出る。

変更内容

コミット 要約
9d30ff35 Count contact state changes by state category 状態を3カテゴリに分け、遷移を n_statechange(3,3) で数える
aadd497f Release stick contact to near state when a near distance is configured 引張力による剥離を CONTACTNEAR 経由にする
4af5a20c Treat damping-active near nodes as active contact 全節点が近接状態の段階でもダンピングを組み立てる。あわせて .dependf90 に依存関係を追記
e3bd4293 Add contact damping test covering near state transitions 接触ダンピングのテストを追加。従来コードでは4並列モードすべてで失敗する

本MRの範囲外

本MRで contactNode_current が NEAR 節点を数えなくなるため、カットバックとリスタートの 経路でこの値から接触の組立要否フラグを決めている4箇所が、接触状態スキャンの判断と 食い違うようになる。影響は次回スキャンでフラグが再計算されるまでの間に限られるが、 カットバック復元時とリスタート時にダンピングが効かない。設計判断とテストの追加を伴うため #843 (closed) として分けている。

キーワードリファレンスと機能リファレンスへの接触ダンピングの追記は frontistr_documents 側の MR で行う。本MRのマージ後にマージされる想定である。

Edited by inagaki

Merge request reports

Loading
Loading