xref: /petsc/src/sys/classes/viewer/impls/ams/amsopen.c (revision 811af0c4b09a35de4306c442f88bd09fdc09897d)
15c6c1daeSBarry Smith 
2af0996ceSBarry Smith #include <petsc/private/viewerimpl.h> /*I  "petscsys.h"  */
3e04113cfSBarry Smith #include <petscviewersaws.h>
45c6c1daeSBarry Smith 
55c6c1daeSBarry Smith /*@C
6*811af0c4SBarry Smith     PetscViewerSAWsOpen - Opens an SAWs `PetscViewer`.
75c6c1daeSBarry Smith 
8d083f849SBarry Smith     Collective
95c6c1daeSBarry Smith 
105c6c1daeSBarry Smith     Input Parameters:
11ec957eceSBarry Smith .   comm - the MPI communicator
125c6c1daeSBarry Smith 
135c6c1daeSBarry Smith     Output Parameter:
14*811af0c4SBarry Smith .   lab - the `PetscViewer`
155c6c1daeSBarry Smith 
165c6c1daeSBarry Smith     Options Database Keys:
17f7b25cf6SBarry Smith +   -saws_port <port number> - port number where you are running SAWs client
18f7b25cf6SBarry Smith .   -xxx_view saws - publish the object xxx
19e04113cfSBarry Smith -   -xxx_saws_block - blocks the program at the end of a critical point (for KSP and SNES it is the end of a solve) until
20f7b25cf6SBarry Smith                     the user unblocks the problem with an external tool that access the object with SAWS
215c6c1daeSBarry Smith 
225c6c1daeSBarry Smith     Level: advanced
235c6c1daeSBarry Smith 
245c6c1daeSBarry Smith     Fortran Note:
255c6c1daeSBarry Smith     This routine is not supported in Fortran.
265c6c1daeSBarry Smith 
27*811af0c4SBarry Smith     Note:
28e04113cfSBarry Smith     Unlike other viewers that only access the object being viewed on the call to XXXView(object,viewer) the SAWs viewer allows
29e04113cfSBarry Smith     one to view the object asynchronously as the program continues to run. One can remove SAWs access to the object with a call to
30*811af0c4SBarry Smith     `PetscObjectSAWsViewOff()`.
3138dc1537SBarry Smith 
32a8d69d7bSBarry Smith     Information about the SAWs is available via https://bitbucket.org/saws/saws
335c6c1daeSBarry Smith 
34db781477SPatrick Sanan .seealso: `PetscViewerDestroy()`, `PetscViewerStringSPrintf()`, `PETSC_VIEWER_SAWS_()`, `PetscObjectSAWsBlock()`,
35db781477SPatrick Sanan           `PetscObjectSAWsViewOff()`, `PetscObjectSAWsTakeAccess()`, `PetscObjectSAWsGrantAccess()`
365c6c1daeSBarry Smith @*/
379371c9d4SSatish Balay PetscErrorCode PetscViewerSAWsOpen(MPI_Comm comm, PetscViewer *lab) {
385c6c1daeSBarry Smith   PetscFunctionBegin;
399566063dSJacob Faibussowitsch   PetscCall(PetscViewerCreate(comm, lab));
409566063dSJacob Faibussowitsch   PetscCall(PetscViewerSetType(*lab, PETSCVIEWERSAWS));
415c6c1daeSBarry Smith   PetscFunctionReturn(0);
425c6c1daeSBarry Smith }
43bfb97211SBarry Smith 
44bfb97211SBarry Smith /*@C
45e04113cfSBarry Smith    PetscObjectViewSAWs - View the base portion of any object with an SAWs viewer
46bfb97211SBarry Smith 
47*811af0c4SBarry Smith    Collective on obj
48bfb97211SBarry Smith 
49bfb97211SBarry Smith    Input Parameters:
50*811af0c4SBarry Smith +  obj - the `PetscObject` variable. Thus must be cast with a (`PetscObject`), for example, `PetscObjectSetName`((`PetscObject`)mat,name);
51e04113cfSBarry Smith -  viewer - the SAWs viewer
52bfb97211SBarry Smith 
53bfb97211SBarry Smith    Level: advanced
54bfb97211SBarry Smith 
55*811af0c4SBarry Smith    Note:
56d45a07a7SBarry Smith    The object must have already been named before calling this routine since naming an
57d45a07a7SBarry Smith    object can be collective.
58d45a07a7SBarry Smith 
59*811af0c4SBarry Smith    Developer Note:
60*811af0c4SBarry Smith    Currently this is called only on rank zero of `PETSC_COMM_WORLD`
61bfb97211SBarry Smith 
62*811af0c4SBarry Smith .seealso: `PetscViewer`, `PetscObject`, `PetscObjectSetName()`, `PetscObjectSAWsViewOff()`
63bfb97211SBarry Smith @*/
649371c9d4SSatish Balay PetscErrorCode PetscObjectViewSAWs(PetscObject obj, PetscViewer viewer) {
652657e9d9SBarry Smith   char        dir[1024];
66d45a07a7SBarry Smith   PetscMPIInt rank;
67bfb97211SBarry Smith 
68bfb97211SBarry Smith   PetscFunctionBegin;
69bfb97211SBarry Smith   PetscValidHeader(obj, 1);
70ec957eceSBarry Smith   if (obj->amsmem) PetscFunctionReturn(0);
719566063dSJacob Faibussowitsch   PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
72c5853193SPierre Jolivet   PetscCheck(rank == 0, PETSC_COMM_SELF, PETSC_ERR_PLIB, "Should only be being called on rank zero");
735f80ce2aSJacob Faibussowitsch   PetscCheck(obj->name, PETSC_COMM_SELF, PETSC_ERR_PLIB, "Object must already have been named");
74bfb97211SBarry Smith 
7556f85f32SBarry Smith   obj->amsmem = PETSC_TRUE;
769566063dSJacob Faibussowitsch   PetscCall(PetscSNPrintf(dir, 1024, "/PETSc/Objects/%s/Class", obj->name));
77792fecdfSBarry Smith   PetscCallSAWs(SAWs_Register, (dir, &obj->class_name, 1, SAWs_READ, SAWs_STRING));
789566063dSJacob Faibussowitsch   PetscCall(PetscSNPrintf(dir, 1024, "/PETSc/Objects/%s/Type", obj->name));
79792fecdfSBarry Smith   PetscCallSAWs(SAWs_Register, (dir, &obj->type_name, 1, SAWs_READ, SAWs_STRING));
809566063dSJacob Faibussowitsch   PetscCall(PetscSNPrintf(dir, 1024, "/PETSc/Objects/%s/__Id", obj->name));
81792fecdfSBarry Smith   PetscCallSAWs(SAWs_Register, (dir, &obj->id, 1, SAWs_READ, SAWs_INT));
829566063dSJacob Faibussowitsch   PetscCall(PetscSNPrintf(dir, 1024, "/PETSc/Objects/%s/__ParentID", obj->name));
83792fecdfSBarry Smith   PetscCallSAWs(SAWs_Register, (dir, &obj->parentid, 1, SAWs_READ, SAWs_INT));
84bfb97211SBarry Smith   PetscFunctionReturn(0);
85bfb97211SBarry Smith }
86