:orphan: # MatSOR Computes relaxation (SOR, Gauss-Seidel) sweeps. ## Synopsis ``` #include "petscmat.h" PetscErrorCode MatSOR(Mat mat, Vec b, PetscReal omega, MatSORType flag, PetscReal shift, PetscInt its, PetscInt lits, Vec x) ``` Neighbor-wise Collective ## Input Parameters - ***mat -*** the matrix - ***b -*** the right hand side - ***omega -*** the relaxation factor - ***flag -*** flag indicating the type of SOR (see below) - ***shift -*** diagonal shift - ***its -*** the number of iterations - ***lits -*** the number of local iterations ## Output Parameter - ***x -*** the solution (can contain an initial guess, use option `SOR_ZERO_INITIAL_GUESS` to indicate no guess) ## SOR Flags - ***`SOR_FORWARD_SWEEP` -*** forward SOR - ***`SOR_BACKWARD_SWEEP` -*** backward SOR - ***`SOR_SYMMETRIC_SWEEP` -*** SSOR (symmetric SOR) - ***`SOR_LOCAL_FORWARD_SWEEP` -*** local forward SOR - ***`SOR_LOCAL_BACKWARD_SWEEP` -*** local forward SOR - ***`SOR_LOCAL_SYMMETRIC_SWEEP` -*** local SSOR - ***`SOR_EISENSTAT` -*** SOR with Eisenstat trick - ***`SOR_APPLY_UPPER`, `SOR_APPLY_LOWER` -*** applies upper/lower triangular part of matrix to vector (with omega) - ***`SOR_ZERO_INITIAL_GUESS` -*** zero initial guess ## Notes `SOR_LOCAL_FORWARD_SWEEP`, `SOR_LOCAL_BACKWARD_SWEEP`, and `SOR_LOCAL_SYMMETRIC_SWEEP` perform separate independent smoothings on each processor. Application programmers will not generally use `MatSOR()` directly, but instead will employ the `KSP`/`PC` interface. For `MATBAIJ`, `MATSBAIJ`, and `MATAIJ` matrices with Inodes this does a block SOR smoothing, otherwise it does a pointwise smoothing Most users should employ the `KSP` interface for linear solvers instead of working directly with matrix algebra routines such as this. See, e.g., `KSPCreate()`. Vectors `x` and `b` CANNOT be the same The flags are implemented as bitwise inclusive or operations. For example, use (`SOR_ZERO_INITIAL_GUESS` | `SOR_SYMMETRIC_SWEEP`) to specify a zero initial guess for SSOR. ## Developer Note We should add block SOR support for `MATAIJ` matrices with block size set to great than one and no inodes ## See Also [](ch_matrices), `Mat`, `MatMult()`, `KSP`, `PC`, `MatGetFactor()` ## Level developer ## Location src/mat/interface/matrix.c ## Examples src/tao/pde_constrained/tutorials/hyperbolic.c
src/tao/pde_constrained/tutorials/parabolic.c
## Implementations MatSOR_MPIAIJ in src/mat/impls/aij/mpi/mpiaij.c
MatSOR_SeqAIJ in src/mat/impls/aij/seq/aij.c
MatSOR_SeqAIJSELL in src/mat/impls/aij/seq/aijsell/aijsell.c
MatSOR_MPIBAIJ in src/mat/impls/baij/mpi/mpibaij.c
MatSOR_SeqBAIJ in src/mat/impls/baij/seq/baij.c
MatSOR_BlockMat in src/mat/impls/blockmat/seq/blockmat.c
MatSOR_ConstantDiagonal in src/mat/impls/cdiagonal/cdiagonal.c
MatSOR_SeqDense in src/mat/impls/dense/seq/dense.c
MatSOR_SeqKAIJ in src/mat/impls/kaij/kaij.c
MatSOR_MPISBAIJ in src/mat/impls/sbaij/mpi/mpisbaij.c
MatSOR_SeqSBAIJ in src/mat/impls/sbaij/seq/relax.h
MatSOR_MPISELL in src/mat/impls/sell/mpi/mpisell.c
MatSOR_SeqSELL in src/mat/impls/sell/seq/sell.c
--- [Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/mat/interface/matrix.c) [Index of all Mat routines](index.md) [Table of Contents for all manual pages](/manualpages/index.md) [Index of all manual pages](/manualpages/singleindex.md)