Actual source code: snessaws.c

  1: #include <petsc/private/snesimpl.h>
  2: #include <petscviewersaws.h>

  4: typedef struct {
  5:   PetscViewer viewer;
  6: } SNESMonitor_SAWs;

  8: /*@C
  9:    SNESMonitorSAWsCreate - create an SAWs monitor context for `SNES`

 11:    Collective

 13:    Input Parameter:
 14: .  snes - `SNES` to monitor

 16:    Output Parameter:
 17: .  ctx - context for monitor

 19:    Level: developer

 21: .seealso: `SNESSetMonitor()`, `SNES`, `SNESMonitorSAWs()`, `SNESMonitorSAWsDestroy()`
 22: @*/
 23: PetscErrorCode SNESMonitorSAWsCreate(SNES snes, void **ctx)
 24: {
 25:   SNESMonitor_SAWs *mon;

 27:   PetscNew(&mon);
 28:   mon->viewer = PETSC_VIEWER_SAWS_(PetscObjectComm((PetscObject)snes));
 30:   *ctx = (void *)mon;
 31:   return 0;
 32: }

 34: /*@C
 35:    SNESMonitorSAWsDestroy - destroy a monitor context created with `SNESMonitorSAWsCreate()`

 37:    Collective

 39:    Input Parameter:
 40: .  ctx - monitor context

 42:    Level: developer

 44: .seealso: `SNESMonitorSAWsCreate()`
 45: @*/
 46: PetscErrorCode SNESMonitorSAWsDestroy(void **ctx)
 47: {
 48:   PetscFree(*ctx);
 49:   return 0;
 50: }

 52: /*@C
 53:    SNESMonitorSAWs - monitor solution process of `SNES` using SAWs

 55:    Collective

 57:    Input Parameters:
 58: +  snes   - iterative context
 59: .  n     - iteration number
 60: .  rnorm - 2-norm (preconditioned) residual value (may be estimated).
 61: -  ctx -  `PetscViewer` of type `PETSCVIEWERSAWS`

 63:    Level: advanced

 65: .seealso: `PetscViewerSAWsOpen()`, `SNESMonitorSAWsDestroy()`, `SNESMonitorSAWsCreate()`
 66: @*/
 67: PetscErrorCode SNESMonitorSAWs(SNES snes, PetscInt n, PetscReal rnorm, void *ctx)
 68: {
 69:   PetscMPIInt rank;


 73:   MPI_Comm_rank(PETSC_COMM_WORLD, &rank);
 74:   if (rank == 0) {
 75:     SAWs_Register, ("/PETSc/snes_monitor_saws/its", &snes->iter, 1, SAWs_READ, SAWs_INT);
 76:     SAWs_Register, ("/PETSc/snes_monitor_saws/rnorm", &snes->norm, 1, SAWs_READ, SAWs_DOUBLE);
 77:     PetscSAWsBlock();
 78:   }
 79:   return 0;
 80: }