接触探索が最近傍ではなく最初に判定を通ったマスタ面を採用している
接触探索は、バケットから得たマスタ候補を先頭から走査し、射影判定を最初に通った候補で exit しています(fstr_contact_search.f90 の scan_contact_state と scan_embed_state の CONTACTFREE 分岐)。候補をすべて評価して最も近いマスタ面を選ぶ、という処理にはなっていません。
候補の並び順は bucketDB_getCand が周囲 3×3×3 のバケットを k, j, i の順に走査して集めた順であり、スレーブ節点からの距離順ではありません。そのため、要素の辺や角の近くで複数のマスタ面が同時に判定を通る場合、どの面が選ばれるかがバケットの走査順という物理的に意味のない要因で決まります。選ばれる面が変われば法線が変わるため、接触力の向きも変わります。
実例として、#715 (closed) で BOX_EXP_RATE による候補の絞り込みを廃止したとき、tests/analysis/interaction/contact_smoothing/slag_nagata で節点 101 の接触相手が要素 60 から 59 に、節点 102 が要素 145 から 139 に変わりました。どちらも判定は通っており、走査順が変わった結果です。
候補をすべて評価して distance が最小のものを採用するようにすれば、選ばれるマスタ面が候補の並び順に依存しなくなります。ただし参照解が変わる可能性が高いため、影響を確認してから変更する必要があります。