接触カウンタログに収束判定のカウンタをすべて出す
概要
接触反復の収束判定 fstr_is_contact_conv は free2contact_new と contact2beyond も 0 であることを求めるが、Contact change 行はこの 2 つを出しておらず、!CONTACT, MORTAR=YES, EXPANSION=NEIGHBOR の解析では行の数がすべて 0 のまま Contact failed to Converge になることがあった。
行を #900 (closed) の形に改め、free2contact_new は Free2Cont に足し、contact2beyond は MoveBynd の列に出した。
面-面接触のカウンタは、1 回のスキャンで 1 スレーブ面につき 1 回だけ数える (これまでは積分点ごと)。
収束判定と行列の作り直しの判定はカウンタの和が 0 かどうかしか見ないので、判定は変わらない。
EXPANSION=NONE (既定) の面-面の新規接触も free2contact_new に数える。
これまでのように n_statechange に入れると、ActiveNodes に積分点の数が積み上がるためである。
ActiveNodes には、面-面で接触中のスレーブ面に属する節点の数を、節点を所有する rank で数えて足した (可視化の CONTACT_STATE と同じ判定)。
面-面接触の探索が積分点ごとに出していた Warning: contact moved beyond neighbor elements は削除した。
1 回の解析で数千行になり、行数は収束の有無と対応しない。
探索で付け直せた移動は MoveBynd に数え、付け直せずに外れた積分点はこれまでどおりどのカウンタにも入らない。
点-面接触は隣接の外への移動も MoveNeibr に数えていて、この警告でしか見分けられないので、点-面の警告は残した (MoveBynd は面-面だけの列になる)。
explicit 動解析のスキャンは 2 つのカウンタを 0 にしていなかったので、陰解法と同じ場所で 0 にした。
出力だけの変更で、解は変わらない。
変更内容
| コミット | 要約 |
|---|---|
| e937b4ec contact: rework the contact change summary | Contact change 行に 2 つのカウンタを出し、面-面を面単位で数え、固定幅の書式にする |
| 3e973fc4 contact: drop the per-point warning for a mortar projection beyond the neighbor set | 面-面の積分点ごとの隣接外移動の警告を削除する |
Close #900 (closed)