Loading
接触自由度消去経路で行列の対称フラグを伝搬し直接法の分解モードを正しくする
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. のまま(既存挙動から変化なし)- 非接触解析の経路には対称性情報の供給源が上流に存在せず、対象外