KSPSetDiagonalScale#
Tells KSP to symmetrically diagonally scale the system before solving. This actually CHANGES the matrix (and right-hand side).
Synopsis#
#include "petscksp.h"
#include "petscmat.h"
PetscErrorCode KSPSetDiagonalScale(KSP ksp, PetscBool scale)
Logically Collective
Input Parameters#
ksp - the
KSPcontextscale -
PETSC_TRUEorPETSC_FALSE
Options Database Keys#
-ksp_diagonal_scale - perform a diagonal scaling before the solve
-ksp_diagonal_scale_fix - scale the matrix back AFTER the solve
Notes#
Scales the matrix by \(D^{-1/2} A D^{-1/2} [D^{1/2} x ] = D^{-1/2} b \) where \(D_{ii}\) is \(1/abs(A_{ii}) \) unless \(A_{ii}\) is zero and then it is 1.
BE CAREFUL with this routine: it actually scales the matrix and right
hand side that define the system. After the system is solved the matrix
and right-hand side remain scaled unless you use KSPSetDiagonalScaleFix()
This should NOT be used within the SNES solves if you are using a line
search.
If you use this with the PCType PCEISENSTAT preconditioner than you can
use the PCEisenstatSetNoDiagonalScaling() option, or -pc_eisenstat_no_diagonal_scaling
to save some unneeded, redundant flops.
See Also#
KSP: Linear System Solvers, KSPGetDiagonalScale(), KSPSetDiagonalScaleFix(), KSP
Level#
advanced
Location#
src/ksp/ksp/interface/itfunc.c
Index of all KSP routines
Table of Contents for all manual pages
Index of all manual pages