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
11c3339decSBarry 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
21420bcc1bSBarry Smith .seealso: [](ch_snes), `SNESMonitorSet()`, `SNES`, `SNESMonitorSAWs()`, `SNESMonitorSAWsDestroy()`
22c67b8539SHong Zhang @*/
SNESMonitorSAWsCreate(SNES snes,void ** ctx)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;
323ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
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
45420bcc1bSBarry Smith .seealso: [](ch_snes), `SNESMonitorSAWsCreate()`
46c67b8539SHong Zhang @*/
SNESMonitorSAWsDestroy(PetscCtxRt ctx)47*2a8381b2SBarry Smith PetscErrorCode SNESMonitorSAWsDestroy(PetscCtxRt ctx)
48d71ae5a4SJacob Faibussowitsch {
49c67b8539SHong Zhang PetscFunctionBegin;
50*2a8381b2SBarry Smith PetscCall(PetscFree(*(void **)ctx));
513ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
52c67b8539SHong Zhang }
53c67b8539SHong Zhang
54c67b8539SHong Zhang /*@C
55f6dfbefdSBarry Smith SNESMonitorSAWs - monitor solution process of `SNES` using SAWs
56c67b8539SHong Zhang
57c3339decSBarry 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
67420bcc1bSBarry Smith .seealso: [](ch_snes), `PetscViewerSAWsOpen()`, `SNESMonitorSAWsDestroy()`, `SNESMonitorSAWsCreate()`
68c67b8539SHong Zhang @*/
SNESMonitorSAWs(SNES snes,PetscInt n,PetscReal rnorm,PetscCtx ctx)69*2a8381b2SBarry Smith PetscErrorCode SNESMonitorSAWs(SNES snes, PetscInt n, PetscReal rnorm, PetscCtx 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 }
823ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
83c67b8539SHong Zhang }
84