track_contact_positionでマスター面をまたぐとすべり状態が固着状態に戻される。

接触探索の射影ルーチンが候補面の採否より前に接触状態を書き換えるため、有限すべりでスレーブ節点がマスター面をまたぐたびに、すべり状態が固着状態に戻される。

project_Point2Element は候補ごとに接触状態 cstate を直接受け取り、冒頭で initstate = cstate%state と退避したうえで、採否判定より前に無条件で状態を潰す。

initstate = cstate%state          ! 呼び出し時の状態
...
cstate%state = CONTACTFREE        ! 採否が決まる前に無条件
...
  if( isin ) then
    if( initstate== CONTACTFREE ) then
      cstate%state = CONTACTSTICK
    else
      cstate%state = initstate

隣接要素に移り先が見つかった場合に必ず発生するので頻度は高い。実際、 contact_slag_iter/2beam_fslid_iter(FSLID、μ=0.2、3.0の滑り)で外れた瞬間の状態を出力したところ、12回すべてが CONTACTSLIP であった。

なお、状態判定だけ修正すると、収束性は悪化する可能性がある。これは現在の状態が正しい意味ではなく、滑り状態の試行摩擦力方向が安定するまではNewton法の摩擦力方向の剛性(下記でのqq^T)を削ったほうが収束がよいという数値計算上の工夫があって、同様の計算が固着切り替えで意図せず効いているため。

image

// 状態が定まるまで剛性を正定値寄りにしておく一種の修正Newton法なので、これはこれで導入を検討してもよいかと思います。