非関連塑性の行列非対称性をソルバへ伝搬し直接法の分解モードを正しくする

Close #841 (closed)(登録したissue番号に更新)

解決策

非関連 MC/DP 材料の存在を判定する fstr_is_material_symmetric を追加し、 hecMAT%symmetric と既存の対称性判定へ伝搬する(実装3ファイル・+42/−3行、 新しい API 引数・データ構造なし)。

  • fstr_mat_con_contact.f90: 判定関数を新設(MC: PLCONST3=φ ≠ PLCONST4=ψ、 DP: PLCONST3=η(φ) ≠ PLCONST5=η̄(ψ)。ψ 省略時はパーサが psi=phi を同一値・同一演算で 格納するため、厳密比較で関連流れ=対称と判定され既定挙動は完全不変)。 fstr_is_matrixStruct_symmetric の判定条件に AND で合成し、接触経路 (SLag/ELIM/動解析)へは既存の is_sym 伝達で自動反映
  • fstr_solve_NonLinear.f90: 静解析ドライバ共通の fstr_init_Newton で hecMAT%symmetric を設定(フラグ供給源のなかった非接触経路と、d591ea1f の既知の 残課題だった ELIM 接触非アクティブ相をカバー。MPC 消去時は既存のコピーで hecMATmpc へ伝搬)。ALagrange init のハードコード .true. 2箇所を材料述語に置換 (ALag の接触項は従来どおり対称扱いを維持し、材料非対称のみ反映)
  • fstr_dynamic_nlimplicit.f90: 動解析ドライバ init でも hecMAT%symmetric を設定
  • 反復法は解法メソッド由来の既存の上書き(hecmw_solver_Iterative.f90)が solve 毎に走るため影響なし

検証

  • 非関連 DP モデル(4x4x4 立方体・三軸圧縮・ψ=10°/φ=30°): 修正前は MUMPS SYM=2 / PARDISO mtype=-2 のまま線形相対残差 worst 1.36E+03 / 1.61E+02・警告40回で Newton が NaN 発散し解析破綻 → 修正後は SYM=0 / mtype=11 で全線形解が 1e-15〜16 水準・警告0回・全 substep 完走。MUMPS 2プロセスも同水準
  • 無影響確認: ψ 省略の DP(関連流れ)・von Mises・弾性のみ・摩擦なし接触 (SLagrange+ELIM+MUMPS)の4ケースで修正前後の結果ファイルが bitwise 一致 (1スレッド実行で比較)
  • 回帰: ctest -L serial 99/99・hybrid solver 3/3 PASS、tests/test.sh の with_mumps 53件・with_mkl 14件・analysis/interaction 55件 全 success
  • 回帰テストを新設(tests/with_mumps/plastic_dp_nonassoc_mumps、 tests/with_mkl/plastic_dp_nonassoc_mkl)。参照結果は分解モードに依存しない BiCGSTAB(許容1e-10)で生成しており、修正前のコードではこのテストは収束破綻で fail する(検出能力を確認済み)。修正後は全登録エントリ(serial/mpi/openmp/hybrid) で PASS
  • ClusterMKL は手元環境の MKL BLACS/OpenMPI 不整合で実行検証できていないため、 CI での確認を期待する(読み取る分岐は MKL 直列版と同一パターンであることは コードで確認済み)

挙動が変わり得る点

  • 判定は定義された材料に対する保守的なもので、要素に未割当の非関連材料定義でも 非対称モードになる(結果は正しく、分解コストのみ増。摩擦判定 fcoeff≠0 が接触の アクティブ状態を見ないのと同じ設計)
  • 未対応直接法(Iarray(99)==4)のガードが本判定を参照するため、非関連材料との 組み合わせは明示エラーで停止するようになる(従来は誤って対称扱いのまま実行)

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

  • n_dof=4 述語の既知の誤分類(d591ea1f 時の既知の限界)は従来のまま
  • user material・粘塑性など他の非対称源は対象外

Merge request reports

Loading
Loading