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
KSP
contextscale -
PETSC_TRUE
orPETSC_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