点-面接触の標準 Lagrange 法で、Lagrange 乗数の行番号をスレーブ節点の出現ごとに持つ形に戻す

概要

点-面接触の標準 Lagrange 法 (!CONTACT_ALGO, TYPE=SLAGRANGE) で、同じ節点が 2 つ以上の !CONTACT のスレーブになる入力 (例: INTERACTION=TIED の面と FSLID の面が稜線を共有する組立品) が、剛性の組立で ###ERROR### : cannot find connectivity (Lagrange1) を出して止まる。
原因は 8da748d9 で Lagrange 乗数の行番号を節点あたり 1 本の表 hecLagMAT%lag_node_table から引くようにしたことで、行数の予約・疎行列プロファイルの構築・乗数のコピーは接触ごと・スレーブ出現ごとの通し番号で数えるため、同じ節点が 2 つの接触に現れると表が後勝ちで上書きされ、組立だけが別の行を指す。
この表は面-面接触のために入れたもので、面-面接触が 15cac00e で使わなくなった後は点-面の組立 4 箇所だけが読んでいた。

行番号を接触状態に持たせ、行数を決める予約ループが書いて、プロファイルと乗数のコピーと組立が読む形にした。節点表は読み手がいなくなるので削除した。
解けるようになるのは #901 の 3 つの症状のうち cannot find connectivity の件だけで、同じ節点が複数の接触対のスレーブになる入力の他の扱い (FSLID 同士の共有で標準入力から y/n を読む対話、結合拘束同士の共有で後に書いた !CONTACT 側を解放する処理、拘束が従属になる場合) は現行のままにする。

変更内容

コミットハッシュと英文メッセージ 一行要約
ae7cf569 contact: key the Lagrange row of a NODE-SURF pair to the slave occurrence 行番号を接触状態に持たせ、予約が書いてプロファイルと乗数コピーと組立が読む形にする
0a0d0227 contact: drop the node-keyed Lagrange row table 読み手がいなくなった節点キーの行番号表を削除する
0f8ef61c tests: add a contact case whose slave node belongs to a tied and a sliding pair 結合拘束とすべり接触が稜線を共有するテストを直接解法用に足す

Refs #901

Merge request reports

Loading
Loading