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