petsc-3.14.5 2021-03-03
Report Typos and Errors

# 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 on Mat

### 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 Parameters

| 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_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.

### Notes

for BAIJ, SBAIJ, and AIJ matrices with Inodes this does a block SOR smoothing, otherwise it does a pointwise smoothing

### Notes for Advanced Users

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.

Most users should employ the simplified 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

Developer Note: We should add block SOR support for AIJ matrices with block size set to great than one and no inodes

### Level

developer

### Location

src/mat/interface/matrix.c

### Examples

src/tao/pde_constrained/tutorials/parabolic.c.html
src/tao/pde_constrained/tutorials/hyperbolic.c.html

### 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_SeqAIJ_Inode in src/mat/impls/aij/seq/inode.c
MatSOR_MPIBAIJ in src/mat/impls/baij/mpi/mpibaij.c
MatSOR_SeqBAIJ in src/mat/impls/baij/seq/baij.c
MatSOR_BlockMat_Symmetric in src/mat/impls/blockmat/seq/blockmat.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_ushort in src/mat/impls/sbaij/seq/relax.h
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