Loading
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} | 行列ベクトル積の計測名を修正 |