Reduce contact log verbosity and add summary output

Close #753 (closed)

概要

接触解析実行時、接触状態変化(オン・オフ・要素間移動等)がスレーブノードごとに標準出力へ書き出されるため、大規模モデルでは出力行数が膨大になり実用上問題となっていた(issue #753 (closed))。

本MRでは以下の2点を行う:

  1. 既存のノード単位詳細ログを、モジュールレベルのコンパイル時定数 CONTACT_LOG_LEVEL で制御し、デフォルト(0)では出力しないようにする。
  2. 接触スキャンのたびに、変化件数と現在の接触ノード数のサマリを1行で出力する。

制御ファイルのキーワード追加・入出力フォーマットの変更はないため、ドキュメント側の更新は不要と判断している。

変更内容

fistr1/src/analysis/interaction/fstr_contact_search.f90

  • モジュール m_fstr_contact_search 先頭にコンパイル時定数を追加:
    integer(kind=kint), parameter :: CONTACT_LOG_LEVEL = 0
    bucket_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=47
  • Free2Cont: フリー→接触に遷移したノード数(free2contact)
  • Cont2Free: 接触→フリーに遷移したノード数(contact2free)
  • ElemMoved: 接触マスター要素を跨いで移動したノード数(contact2neighbor)
  • InElemSlid: 同一マスター面内で局所座標が変化したノード数(contact2diffLpos)
  • ActiveNodes: 現在の接触中ノード数(contactNode_current)

Merge request reports

Loading
Loading