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_GUESSto 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#
Level#
developer
Location#
Examples#
src/tao/pde_constrained/tutorials/parabolic.c
src/tao/pde_constrained/tutorials/hyperbolic.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
Index of all Mat routines
Table of Contents for all manual pages
Index of all manual pages