Tells KSP to symmetrically diagonally scale the system before solving. This actually CHANGES the matrix (and right-hand side).


#include "petscksp.h" 
#include "petscmat.h" 
PetscErrorCode KSPSetDiagonalScale(KSP ksp, PetscBool scale)

Logically Collective

Input Parameters#

Options Database Keys#

  • -ksp_diagonal_scale - perform a diagonal scaling before the solve

  • -ksp_diagonal_scale_fix - scale the matrix back AFTER the solve


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





Index of all KSP routines
Table of Contents for all manual pages
Index of all manual pages