xref: /petsc/src/ksp/pc/impls/factor/factor.c (revision 5e8efad83d01ce26f954f35fd18b1c0d811c1bc4)
1*5e8efad8SHong Zhang 
2*5e8efad8SHong Zhang #include "src/ksp/pc/pcimpl.h"                /*I "petscpc.h" I*/
3*5e8efad8SHong Zhang 
4*5e8efad8SHong Zhang #undef __FUNCT__
5*5e8efad8SHong Zhang #define __FUNCT__ "PCFactorSetShiftNonzero"
6*5e8efad8SHong Zhang /*@
7*5e8efad8SHong Zhang    PCFactorSetShiftNonzero - adds this quantity to the diagonal of the matrix during
8*5e8efad8SHong Zhang      numerical factorization, thus the matrix has nonzero pivots
9*5e8efad8SHong Zhang 
10*5e8efad8SHong Zhang    Collective on PC
11*5e8efad8SHong Zhang 
12*5e8efad8SHong Zhang    Input Parameters:
13*5e8efad8SHong Zhang +  shift - amount of shift
14*5e8efad8SHong Zhang -  info -
15*5e8efad8SHong Zhang 
16*5e8efad8SHong Zhang    Options Database Key:
17*5e8efad8SHong Zhang .  -pc_factor_shiftnonzero <shift> - Sets shift amount or PETSC_DECIDE for the default
18*5e8efad8SHong Zhang 
19*5e8efad8SHong Zhang    Note: If 0.0 is given, then no shift is used. If a diagonal element is classified as a zero
20*5e8efad8SHong Zhang          pivot, then the shift is doubled until this is alleviated.
21*5e8efad8SHong Zhang 
22*5e8efad8SHong Zhang    Level: intermediate
23*5e8efad8SHong Zhang 
24*5e8efad8SHong Zhang .keywords: PC, set, factorization, direct, fill
25*5e8efad8SHong Zhang 
26*5e8efad8SHong Zhang .seealso: PCFactorSetFill(), PCFactorSetShiftPd()
27*5e8efad8SHong Zhang @*/
28*5e8efad8SHong Zhang PetscErrorCode PCFactorSetShiftNonzero(PetscReal shift,MatFactorInfo *info)
29*5e8efad8SHong Zhang {
30*5e8efad8SHong Zhang   PetscFunctionBegin;
31*5e8efad8SHong Zhang   if (shift == (PetscReal) PETSC_DECIDE) {
32*5e8efad8SHong Zhang     info->damping = 1.e-12;
33*5e8efad8SHong Zhang   } else {
34*5e8efad8SHong Zhang     info->damping = shift;
35*5e8efad8SHong Zhang   }
36*5e8efad8SHong Zhang   PetscFunctionReturn(0);
37*5e8efad8SHong Zhang }
38