Skip to main content
`Ctrl`+`K`

# KSPMonitorSet

Sets an ADDITIONAL function to be called at every iteration to monitor, i.e. display in some way, perhaps by printing in the terminal, the residual norm computed in a `KSPSolve()`

## Synopsis

    #include "petscksp.h"
    #include "petscmat.h"
    PetscErrorCode KSPMonitorSet(KSP ksp, PetscErrorCode (*monitor)(KSP ksp, PetscInt it, PetscReal rnorm, void *ctx), void *ctx, PetscErrorCode (*monitordestroy)(void **ctx))

Logically Collective

## Input Parameters

- ksp - iterative solver obtained from `KSPCreate()`

- monitor - pointer to function (if this is `NULL`, it turns off monitoring

- ctx - [optional] context for private data for the monitor routine (use `NULL` if no context is needed)

- monitordestroy - [optional] routine that frees monitor context (may be `NULL`)

## Calling sequence of `monitor`

- ksp - iterative solver obtained from `KSPCreate()`

- it - iteration number

- rnorm - (estimated) 2-norm of (preconditioned) residual

- ctx - optional monitoring context, as set by `KSPMonitorSet()`

## Calling sequence of `monitordestroy`

- ctx - optional monitoring context, as set by `KSPMonitorSet()`

## Options Database Keys

- -ksp_monitor - sets `KSPMonitorResidual()`

- -ksp_monitor draw - sets `KSPMonitorResidualDraw()` and plots residual

- -ksp_monitor draw::draw_lg - sets `KSPMonitorResidualDrawLG()` and plots residual

- -ksp_monitor_pause_final - Pauses any graphics when the solve finishes (only works for internal monitors)

- -ksp_monitor_true_residual - sets `KSPMonitorTrueResidual()`

- -ksp_monitor_true_residual draw::draw_lg - sets `KSPMonitorTrueResidualDrawLG()` and plots residual

- -ksp_monitor_max - sets `KSPMonitorTrueResidualMax()`

- -ksp_monitor_singular_value - sets `KSPMonitorSingularValue()`

- -ksp_monitor_cancel - cancels all monitors that have been hardwired into a code by calls to `KSPMonitorSet()`, but does not cancel those set via the options database.

## Notes

The options database option `-ksp_monitor` and related options are the easiest way to turn on `KSP` iteration monitoring

The default is to do no monitoring. To print the residual, or preconditioned residual if `KSPSetNormType`(ksp,`KSP_NORM_PRECONDITIONED`) was called, use `KSPMonitorResidual()` as the monitoring routine, with a `PETSCVIEWERASCII` as the context.

Several different monitoring routines may be set by calling `KSPMonitorSet()` multiple times; all will be called in the order in which they were set.

## Fortran Note

Only a single monitor function can be set for each `KSP` object

## See Also

KSP: Linear System Solvers, `KSPMonitorResidual()`, `KSPMonitorCancel()`, `KSP`

## Level

beginner

## Location

src/ksp/ksp/interface/itfunc.c

## Examples

src/ksp/ksp/tutorials/ex9.c
src/ksp/ksp/tutorials/ex2f.F90
src/ksp/ksp/tutorials/ex42.c
src/ts/tutorials/ex47.c
src/snes/tutorials/ex30.c

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