Loading
Reduce contact log verbosity and add summary output
Close #753 (closed)
概要
接触解析実行時、接触状態変化(オン・オフ・要素間移動等)がスレーブノードごとに標準出力へ書き出されるため、大規模モデルでは出力行数が膨大になり実用上問題となっていた(issue #753 (closed))。
本MRでは以下の2点を行う:
- 既存のノード単位詳細ログを、モジュールレベルのコンパイル時定数
CONTACT_LOG_LEVELで制御し、デフォルト(0)では出力しないようにする。 - 接触スキャンのたびに、変化件数と現在の接触ノード数のサマリを1行で出力する。
制御ファイルのキーワード追加・入出力フォーマットの変更はないため、ドキュメント側の更新は不要と判断している。
変更内容
fistr1/src/analysis/interaction/fstr_contact_search.f90
- モジュール
m_fstr_contact_search先頭にコンパイル時定数を追加:integer(kind=kint), parameter :: CONTACT_LOG_LEVEL = 0bucket_search.f90のDEBUGフラグと同じパターン。 scan_contact_state/scan_embed_state/track_contact_position/remove_duplication_tiedcontact内のノード単位write(*,...)をすべてif (CONTACT_LOG_LEVEL >= 1)で囲む。デバッグ時はCONTACT_LOG_LEVEL = 1以上に変更して再ビルドすれば従来通りのログが得られる。
fistr1/src/analysis/interaction/fstr_contact.f90
fstr_scan_contact_stateおよびfstr_scan_contact_state_expの末尾にサマリ出力を追加。- カウンタは
hecmw_allreduce_I1で全ランク集約し、ランク0が毎回1行を出力する。collective呼び出しはローカル条件分岐の外に置き、全ランクで必ず実行されるようにしている。 - 接触状態変化のないステップも含めて出力する(履歴として残るようにするため)。
サマリ出力の形式:
Contact change: Free2Cont=3, Cont2Free=1, ElemMoved=0, InElemSlid=0, ActiveNodes=47Free2Cont: フリー→接触に遷移したノード数(free2contact)Cont2Free: 接触→フリーに遷移したノード数(contact2free)ElemMoved: 接触マスター要素を跨いで移動したノード数(contact2neighbor)InElemSlid: 同一マスター面内で局所座標が変化したノード数(contact2diffLpos)ActiveNodes: 現在の接触中ノード数(contactNode_current)