接触カウンタログの表示方式
接触反復ごとに出る Contact change: 行を、次の形にしたいと考えています。
Contact change: Free2Cont= 5479 Cont2Free= 0 InnerSlid= 0 MoveNeibr= 0 MoveBynd= 0 ActiveNodes= 484
Contact change: Free2Cont= 5 Cont2Free= 0 InnerSlid= 0 MoveNeibr= 0 MoveBynd= 0 ActiveNodes= 484| 列 | 中身 |
|---|---|
Free2Cont |
新しく接触に入った数。点-面は節点 (n_statechange(FREE,CONT))、面-面は新しく master に付いた積分点を 1 つ以上含むスレーブ面の数 (free2contact_new を含む) |
Cont2Free |
接触から離れた節点数 (n_statechange(CONT,FREE)、点-面) |
InnerSlid |
同じ master 要素の中で投影点が動いた節点数 (contact2diffLpos、旧 InElemSlid、点-面) |
MoveNeibr |
隣接する master 要素へ移った数 (contact2neighbor、旧 ElemMoved)。点-面は節点、面-面はそうした積分点を含むスレーブ面の数 |
MoveBynd |
隣接要素の外へ移り、探索で付け直した数 (contact2beyond、新規)。点-面は節点、面-面はそうした積分点を含むスレーブ面の数 |
ActiveNodes |
接触中の節点数。点-面の節点数に、面-面で接触中のスレーブ面に属する節点数 (可視化の CONTACT_STATE と同じ数え方) を足したもの |
- 列の順は、状態変化の起こりやすい順 (接触の出入り → 要素内の移動 → 隣接への移動 → 隣接外への移動) にしています。
- 数値は
i7の固定幅で右寄せにし、grep "Contact change"で並べたときに列が揃うようにします。 NEAR_DISTやDAMP_GACTで近接状態を使うときにだけ出る 2 行目 (near state change:) も、同じ固定幅にそろえます (出す条件は変えません)。
near state change: Free2Near= 12 Near2Free= 3 Near2Cont= 7 Cont2Near= 0- 隣接要素の外へ移動するたびに出ている
Warning: contact moved beyond neighbor elements(fstr_contact_search.f90:878) は、MoveByndに数えるので出さないようにします。
きっかけは、収束判定 fstr_is_contact_conv (fstr_contact.f90:415-416) に入るカウンタのうち free2contact_new と contact2beyond がいまの行に出ておらず、接触状態が変わっていないように見えたまま Contact failed to Converge になり、ログから原因が読めなかったケースがあったことです。
面-面接触の実機モデルで、全反復が Free2Cont=0, Cont2Free=0, ElemMoved=0, InElemSlid=0 のまま MAXCONTITER を使い切って止まり、2 カウンタを印字して初めて free2contact_new が 4〜5 で張り付いている (少数の積分点が 2 つの master 要素の間を往復している) と分かりました。
同じ理由で ActiveNodes も面-面の接触を数えておらず、面-面だけの解析では 0 のままです。
なお explicit 動解析のスキャン (fstr_scan_contact_state_exp) はこの 2 カウンタを初期化していないので、印字に合わせて初期化も入れます。
この後,関連するMRを提出予定です.
Edited by Toru Ando