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 SORSOR_BACKWARD_SWEEP- backward SORSOR_SYMMETRIC_SWEEP- SSOR (symmetric SOR)SOR_LOCAL_FORWARD_SWEEP- local forward SORSOR_LOCAL_BACKWARD_SWEEP- local forward SORSOR_LOCAL_SYMMETRIC_SWEEP- local SSORSOR_EISENSTAT- SOR with Eisenstat trickSOR_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/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
Index of all Mat routines
Table of Contents for all manual pages
Index of all manual pages