Actual source code: richscale.c

  1: #include <../src/ksp/ksp/impls/rich/richardsonimpl.h>

  3: /*@
  4:   KSPRichardsonSetScale - Set the damping factor; if this routine is not called, the factor defaults to 1.0.

  6:   Logically Collective

  8:   Input Parameters:
  9: + ksp   - the iterative context
 10: - scale - the damping factor

 12:   Options Database Key:
 13: . -ksp_richardson_scale <scale> - Set the scale factor

 15:   Level: intermediate

 17: .seealso: [](ch_ksp), `KSPRICHARDSON`, `KSPRichardsonSetSelfScale()`
 18: @*/
 19: PetscErrorCode KSPRichardsonSetScale(KSP ksp, PetscReal scale)
 20: {
 21:   PetscFunctionBegin;
 24:   PetscTryMethod(ksp, "KSPRichardsonSetScale_C", (KSP, PetscReal), (ksp, scale));
 25:   PetscFunctionReturn(PETSC_SUCCESS);
 26: }

 28: /*@
 29:   KSPRichardsonSetSelfScale - Sets Richardson to automatically determine optimal scaling at each iteration to minimize the 2-norm of the
 30:   preconditioned residual

 32:   Logically Collective

 34:   Input Parameters:
 35: + ksp   - the iterative context
 36: - scale - `PETSC_TRUE` or the default of `PETSC_FALSE`

 38:   Options Database Key:
 39: . -ksp_richardson_self_scale - Use self-scaling

 41:   Level: intermediate

 43:   Note:
 44:   Requires two extra work vectors. Uses an extra `VecAXPY()` and `VecDotNorm2()` per iteration.

 46:   Developer Note:
 47:   Could also minimize the 2-norm of the true residual with one less work vector

 49: .seealso: [](ch_ksp), `KSPRICHARDSON`, `KSPRichardsonSetScale()`
 50: @*/
 51: PetscErrorCode KSPRichardsonSetSelfScale(KSP ksp, PetscBool scale)
 52: {
 53:   PetscFunctionBegin;
 56:   PetscTryMethod(ksp, "KSPRichardsonSetSelfScale_C", (KSP, PetscBool), (ksp, scale));
 57:   PetscFunctionReturn(PETSC_SUCCESS);
 58: }