xref: /petsc/src/snes/interface/saws/snessaws.c (revision c3339decea92175325d9368fa13196bcd0e0e58b)
1af0996ceSBarry Smith #include <petsc/private/snesimpl.h> /*I "petscsnes.h" I*/
2c67b8539SHong Zhang #include <petscviewersaws.h>
3c67b8539SHong Zhang 
4c67b8539SHong Zhang typedef struct {
5c67b8539SHong Zhang   PetscViewer viewer;
6c67b8539SHong Zhang } SNESMonitor_SAWs;
7c67b8539SHong Zhang 
8c67b8539SHong Zhang /*@C
9f6dfbefdSBarry Smith    SNESMonitorSAWsCreate - create an SAWs monitor context for `SNES`
10c67b8539SHong Zhang 
11*c3339decSBarry Smith    Collective
12c67b8539SHong Zhang 
134165533cSJose E. Roman    Input Parameter:
14f6dfbefdSBarry Smith .  snes - `SNES` to monitor
15c67b8539SHong Zhang 
164165533cSJose E. Roman    Output Parameter:
17c67b8539SHong Zhang .  ctx - context for monitor
18c67b8539SHong Zhang 
19c67b8539SHong Zhang    Level: developer
20c67b8539SHong Zhang 
21f6dfbefdSBarry Smith .seealso: `SNESSetMonitor()`, `SNES`, `SNESMonitorSAWs()`, `SNESMonitorSAWsDestroy()`
22c67b8539SHong Zhang @*/
23d71ae5a4SJacob Faibussowitsch PetscErrorCode SNESMonitorSAWsCreate(SNES snes, void **ctx)
24d71ae5a4SJacob Faibussowitsch {
25c67b8539SHong Zhang   SNESMonitor_SAWs *mon;
26c67b8539SHong Zhang 
27c67b8539SHong Zhang   PetscFunctionBegin;
284dfa11a4SJacob Faibussowitsch   PetscCall(PetscNew(&mon));
29c67b8539SHong Zhang   mon->viewer = PETSC_VIEWER_SAWS_(PetscObjectComm((PetscObject)snes));
3028b400f6SJacob Faibussowitsch   PetscCheck(mon->viewer, PetscObjectComm((PetscObject)snes), PETSC_ERR_PLIB, "Cannot create SAWs default viewer");
31c67b8539SHong Zhang   *ctx = (void *)mon;
32c67b8539SHong Zhang   PetscFunctionReturn(0);
33c67b8539SHong Zhang }
34c67b8539SHong Zhang 
35c67b8539SHong Zhang /*@C
36f6dfbefdSBarry Smith    SNESMonitorSAWsDestroy - destroy a monitor context created with `SNESMonitorSAWsCreate()`
37c67b8539SHong Zhang 
38c67b8539SHong Zhang    Collective
39c67b8539SHong Zhang 
404165533cSJose E. Roman    Input Parameter:
41c67b8539SHong Zhang .  ctx - monitor context
42c67b8539SHong Zhang 
43c67b8539SHong Zhang    Level: developer
44c67b8539SHong Zhang 
45db781477SPatrick Sanan .seealso: `SNESMonitorSAWsCreate()`
46c67b8539SHong Zhang @*/
47d71ae5a4SJacob Faibussowitsch PetscErrorCode SNESMonitorSAWsDestroy(void **ctx)
48d71ae5a4SJacob Faibussowitsch {
49c67b8539SHong Zhang   PetscFunctionBegin;
509566063dSJacob Faibussowitsch   PetscCall(PetscFree(*ctx));
51c67b8539SHong Zhang   PetscFunctionReturn(0);
52c67b8539SHong Zhang }
53c67b8539SHong Zhang 
54c67b8539SHong Zhang /*@C
55f6dfbefdSBarry Smith    SNESMonitorSAWs - monitor solution process of `SNES` using SAWs
56c67b8539SHong Zhang 
57*c3339decSBarry Smith    Collective
58c67b8539SHong Zhang 
59c67b8539SHong Zhang    Input Parameters:
60c67b8539SHong Zhang +  snes   - iterative context
61c67b8539SHong Zhang .  n     - iteration number
62c67b8539SHong Zhang .  rnorm - 2-norm (preconditioned) residual value (may be estimated).
63f6dfbefdSBarry Smith -  ctx -  `PetscViewer` of type `PETSCVIEWERSAWS`
64c67b8539SHong Zhang 
65c67b8539SHong Zhang    Level: advanced
66c67b8539SHong Zhang 
67f6dfbefdSBarry Smith .seealso: `PetscViewerSAWsOpen()`, `SNESMonitorSAWsDestroy()`, `SNESMonitorSAWsCreate()`
68c67b8539SHong Zhang @*/
69d71ae5a4SJacob Faibussowitsch PetscErrorCode SNESMonitorSAWs(SNES snes, PetscInt n, PetscReal rnorm, void *ctx)
70d71ae5a4SJacob Faibussowitsch {
71c67b8539SHong Zhang   PetscMPIInt rank;
72c67b8539SHong Zhang 
73c67b8539SHong Zhang   PetscFunctionBegin;
74c67b8539SHong Zhang   PetscValidHeaderSpecific(snes, SNES_CLASSID, 1);
75c67b8539SHong Zhang 
769566063dSJacob Faibussowitsch   PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
77dd400576SPatrick Sanan   if (rank == 0) {
78792fecdfSBarry Smith     PetscCallSAWs(SAWs_Register, ("/PETSc/snes_monitor_saws/its", &snes->iter, 1, SAWs_READ, SAWs_INT));
79792fecdfSBarry Smith     PetscCallSAWs(SAWs_Register, ("/PETSc/snes_monitor_saws/rnorm", &snes->norm, 1, SAWs_READ, SAWs_DOUBLE));
809566063dSJacob Faibussowitsch     PetscCall(PetscSAWsBlock());
81c67b8539SHong Zhang   }
82c67b8539SHong Zhang   PetscFunctionReturn(0);
83c67b8539SHong Zhang }
84