|-pc_sor_symmetric||- Activates symmetric version|
|-pc_sor_backward||- Activates backward version|
|-pc_sor_forward||- Activates forward version|
|-pc_sor_local_forward||- Activates local forward version|
|-pc_sor_local_symmetric||- Activates local symmetric version (default version)|
|-pc_sor_local_backward||- Activates local backward version|
|-pc_sor_omega <omega>||- Sets omega|
|-pc_sor_diagonal_shift <shift>||- shift the diagonal entries; useful if the matrix has zeros on the diagonal|
|-pc_sor_its <its>||- Sets number of iterations (default 1)|
|-pc_sor_lits <lits>||- Sets number of local iterations (default 1)|
Notes: Only implemented for the AIJ and SeqBAIJ matrix formats. Not a true parallel SOR, in parallel this implementation corresponds to block Jacobi with SOR on each block.
For AIJ matrix if a diagonal entry is zero (and the diagonal shift is zero) then by default the inverse of that zero will be used and hence the KSPSolve() will terminate with KSP_DIVERGED_NANORIF. If the option KSPSetErrorIfNotConverged() or -ksp_error_if_not_converged the code will terminate as soon as it detects the zero pivot.
For SeqBAIJ matrices this implements point-block SOR, but the omega, its, lits options are not supported.
For SeqBAIJ the diagonal blocks are inverted using dense LU with partial pivoting. If a zero pivot is detected the computation is stopped with an error
If used with KSPRICHARDSON and no monitors the convergence test is skipped to improve speed, thus it always iterates the maximum number of iterations you've selected for KSP. It is usually used in this mode as a smoother for multigrid.