Unify the matrix-vector product and SSOR preconditioner across blocking sizes, and give SSOR a relaxation parameter

Closes #615 (closed), #616 (closed), #617 (closed)

概要

行列ベクトル積(hecmw_solver_las_XX)とSSOR前処理(hecmw_precond_SSOR_XX)は自由度ごとに実装が複製され、構造が揃っていなかった。これを全自由度で揃え、SSOR前処理に緩和パラメータOMEGAを導入した。

  • 行列ベクトル積を22・44・nnの形に揃えた。1自由度にOpenMP並列化とJAD分岐が入る。
  • SSOR前処理を33の形に揃えた。あわせて、6自由度の逐次時の異常終了(GMRESR・GMRESREN)、6自由度の再セットアップ判定の欠如、4自由度のclearの不備を解消した。
  • SSORの下三角の確保サイズを、33の max(indexL(N), 上三角の内部列数) に全自由度で揃えた(上三角側にだけ非対称な成分がある場合までの対処)。
  • SSORの前処理行列を M = 1/(2-ω) (D/ω + L) (D/ω)^-1 (D/ω + U) とした。setupでDに 1/ω を掛けてLU分解し、applyで前進代入の右辺ZPに (2-ω) を掛ける。ω = 1 で従来と一致する。
  • OMEGAは未使用だった !SOLVER 3行目第3項(SIGMA)で指定する。0 < ω < 2 の範囲外は1.0とする。SSORはSIGMA_DIAGを読まない。

変更内容

コミット 要約
2339bfc0 Give every blocking size of the matrix-vector product the same structure 行列ベクトル積の構成を全自由度で統一
0e420b03 Give every blocking size of the SSOR preconditioner the same shape SSOR前処理の構成を全自由度で統一
97e91f8a Give the SSOR preconditioner a relaxation parameter, on the SIGMA card SSORに緩和パラメータOMEGAを導入
bcdf805c tests: add a CG case with a non-default SSOR relaxation parameter OMEGAを指定するテストを追加
1f20d88d Spell sigma_diag correctly in fstr_ctrl_get_SOLVER 仮引数名の誤字修正
898a415d Fix profiling name and delete unused clause SSORのclearの不要な分岐を削除、計測名を修正
ed7b91d9 Fix profiling of las_{22, nn} 行列ベクトル積の計測名を修正

Merge request reports

Loading
Loading