接触自由度消去経路で行列の対称フラグを伝搬し直接法の分解モードを正しくする

Close #836 (closed)

解決策

fistr1 が計算済みの対称性判定 is_sym を、SLagrange 自由度消去経路で実際に解かれる系の symmetric フラグへ伝搬する(2ファイル・+8行、新しいフラグ・API引数なし)。

  • solve_LINEQ_contact_elim.f90: solve_eliminate で消去後系に hecTKT%symmetric = (SymType == 1) を設定。接触非アクティブ時に解かれる系は 接触寄与を含まない剛性行列で対称のため、非アクティブ分岐は変更しない
  • hecmw_mpc_prepost.f90: hecmw_mpc_trans_rhs の MPCMETHOD=3 分岐で、既存の Iarray/Rarray コピーに並べて hecMATmpc%symmetric をコピー (消去変換 T^t A T は対称性を保存するためコピーが正しい伝搬)

検証

  • 摩擦0.2の接触モデル(197節点): MUMPS SYM=2→0 / PARDISO mtype=-2→11 となり、 線形相対残差 worst 9.89E-02 → 4.59E-15(MKL 4.87E-15)、 Relative residual exceeded 警告 3回 → 0回、Newton 8反復 → 7反復
  • 無影響確認: 摩擦なし(fcoeff=0)+MUMPS/MKL、摩擦+BiCGSTAB の3ケースで 修正前後の結果ファイルが bitwise 一致(1スレッド実行で比較)
  • 回帰: tests/with_mumps(17件)・tests/with_mkl(14件)・tests/analysis/interaction(55件) 全PASS、ctest -L serial 94/94 PASS。摩擦0.2のELIM+直接法の既存テスト contact_slag_mpc_elim_mumps / contact_slag_mpc_elim_mkl も参照一致
  • MPI: MUMPS 2プロセスで正常終了・残差 4.59E-15。ClusterMKL は手元環境の MKL BLACS/OpenMPI 不整合で実行検証できていないため、CI での確認を期待する (読み取る分岐は MKL 直列版と同一パターンであることはコードで確認済み)

既知の限界(本MRの範囲外)

  • is_sym は n_dof=4(変位+圧力)でも無条件 false となるが、摩擦と合成された 1ビットでしか伝わらないため、n_dof=4 の接触非アクティブ時の系は従来どおり symmetric=.true. のまま(既存挙動から変化なし)
  • 非接触解析の経路には対称性情報の供給源が上流に存在せず、対象外

Merge request reports

Loading
Loading