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 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/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