xref: /petsc/src/snes/interface/saws/snessaws.c (revision 2c71b3e237ead271e4f3aa1505f92bf476e3413d)
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
9c67b8539SHong Zhang    SNESMonitorSAWsCreate - create an SAWs monitor context
10c67b8539SHong Zhang 
11c67b8539SHong Zhang    Collective
12c67b8539SHong Zhang 
134165533cSJose E. Roman    Input Parameter:
14c67b8539SHong Zhang .  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 
21c67b8539SHong Zhang .seealso: SNESMonitorSAWs(), SNESMonitorSAWsDestroy()
22c67b8539SHong Zhang @*/
23c67b8539SHong Zhang PetscErrorCode SNESMonitorSAWsCreate(SNES snes,void **ctx)
24c67b8539SHong Zhang {
25c67b8539SHong Zhang   PetscErrorCode  ierr;
26c67b8539SHong Zhang   SNESMonitor_SAWs *mon;
27c67b8539SHong Zhang 
28c67b8539SHong Zhang   PetscFunctionBegin;
29b00a9115SJed Brown   ierr      = PetscNewLog(snes,&mon);CHKERRQ(ierr);
30c67b8539SHong Zhang   mon->viewer = PETSC_VIEWER_SAWS_(PetscObjectComm((PetscObject)snes));
31*2c71b3e2SJacob Faibussowitsch   PetscCheckFalse(!mon->viewer,PetscObjectComm((PetscObject)snes),PETSC_ERR_PLIB,"Cannot create SAWs default viewer");
32c67b8539SHong Zhang   *ctx = (void*)mon;
33c67b8539SHong Zhang   PetscFunctionReturn(0);
34c67b8539SHong Zhang }
35c67b8539SHong Zhang 
36c67b8539SHong Zhang /*@C
37c67b8539SHong Zhang    SNESMonitorSAWsDestroy - destroy a monitor context created with SNESMonitorSAWsCreate()
38c67b8539SHong Zhang 
39c67b8539SHong Zhang    Collective
40c67b8539SHong Zhang 
414165533cSJose E. Roman    Input Parameter:
42c67b8539SHong Zhang .  ctx - monitor context
43c67b8539SHong Zhang 
44c67b8539SHong Zhang    Level: developer
45c67b8539SHong Zhang 
46c67b8539SHong Zhang .seealso: SNESMonitorSAWsCreate()
47c67b8539SHong Zhang @*/
48c67b8539SHong Zhang PetscErrorCode SNESMonitorSAWsDestroy(void **ctx)
49c67b8539SHong Zhang {
50c67b8539SHong Zhang   PetscErrorCode  ierr;
51c67b8539SHong Zhang 
52c67b8539SHong Zhang   PetscFunctionBegin;
53c67b8539SHong Zhang   ierr = PetscFree(*ctx);CHKERRQ(ierr);
54c67b8539SHong Zhang   PetscFunctionReturn(0);
55c67b8539SHong Zhang }
56c67b8539SHong Zhang 
57c67b8539SHong Zhang /*@C
58c67b8539SHong Zhang    SNESMonitorSAWs - monitor solution using SAWs
59c67b8539SHong Zhang 
60c67b8539SHong Zhang    Logically Collective on SNES
61c67b8539SHong Zhang 
62c67b8539SHong Zhang    Input Parameters:
63c67b8539SHong Zhang +  snes   - iterative context
64c67b8539SHong Zhang .  n     - iteration number
65c67b8539SHong Zhang .  rnorm - 2-norm (preconditioned) residual value (may be estimated).
66c67b8539SHong Zhang -  ctx -  PetscViewer of type SAWs
67c67b8539SHong Zhang 
68c67b8539SHong Zhang    Level: advanced
69c67b8539SHong Zhang 
70c67b8539SHong Zhang .seealso: PetscViewerSAWsOpen()
71c67b8539SHong Zhang @*/
72c67b8539SHong Zhang PetscErrorCode SNESMonitorSAWs(SNES snes,PetscInt n,PetscReal rnorm,void *ctx)
73c67b8539SHong Zhang {
74c67b8539SHong Zhang   PetscErrorCode   ierr;
75c67b8539SHong Zhang   PetscMPIInt      rank;
76c67b8539SHong Zhang 
77c67b8539SHong Zhang   PetscFunctionBegin;
78c67b8539SHong Zhang   PetscValidHeaderSpecific(snes,SNES_CLASSID,1);
79c67b8539SHong Zhang 
80ffc4695bSBarry Smith   ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRMPI(ierr);
81dd400576SPatrick Sanan   if (rank == 0) {
82c67b8539SHong Zhang     PetscStackCallSAWs(SAWs_Register,("/PETSc/snes_monitor_saws/its",&snes->iter,1,SAWs_READ,SAWs_INT));
83c67b8539SHong Zhang     PetscStackCallSAWs(SAWs_Register,("/PETSc/snes_monitor_saws/rnorm",&snes->norm,1,SAWs_READ,SAWs_DOUBLE));
84c67b8539SHong Zhang     ierr = PetscSAWsBlock();CHKERRQ(ierr);
85c67b8539SHong Zhang   }
86c67b8539SHong Zhang   PetscFunctionReturn(0);
87c67b8539SHong Zhang }
88