petsc-3.12.4 2020-02-04
Report Typos and Errors

# KSPSetDiagonalScale

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

### Synopsis

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

Logically Collective on ksp

### Input Parameter

| ksp | - the KSP context
| scale | - PETSC_TRUE or PETSC_FALSE

### Options Database Key

| -ksp_diagonal_scale | -
| -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 Eisenstat preconditioner than you can use the PCEisenstatSetNoDiagonalScaling() option, or -pc_eisenstat_no_diagonal_scaling to save some unneeded, redundant flops.

### See Also

KSPGetDiagonalScale(), KSPSetDiagonalScaleFix(), KSP

### Level

intermediate

### Location

src/ksp/ksp/interface/itfunc.c
Index of all KSP routines
Table of Contents for all manual pages
Index of all manual pages