xref: /petsc/src/sys/classes/viewer/impls/ams/amsopen.c (revision aec76313382a76d73a95f2051cbe4b1eab55c1c7)
15c6c1daeSBarry Smith 
2af0996ceSBarry Smith #include <petsc/private/viewerimpl.h> /*I  "petscsys.h"  */
3e04113cfSBarry Smith #include <petscviewersaws.h>
45c6c1daeSBarry Smith 
55c6c1daeSBarry Smith /*@C
6811af0c4SBarry Smith   PetscViewerSAWsOpen - Opens an SAWs `PetscViewer`.
75c6c1daeSBarry Smith 
8cf53795eSBarry Smith   Collective; No Fortran Support
95c6c1daeSBarry Smith 
1020f4b53cSBarry Smith   Input Parameter:
11ec957eceSBarry Smith . comm - the MPI communicator
125c6c1daeSBarry Smith 
135c6c1daeSBarry Smith   Output Parameter:
14811af0c4SBarry 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
193f423023SBarry 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 
243f423023SBarry Smith   Notes:
25c410d8ccSBarry Smith   Unlike other viewers that only access the object being viewed on the call to `XXXView`(object,viewer) the SAWs viewer allows
26e04113cfSBarry 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
27811af0c4SBarry Smith   `PetscObjectSAWsViewOff()`.
2838dc1537SBarry Smith 
29a8d69d7bSBarry Smith   Information about the SAWs is available via https://bitbucket.org/saws/saws
305c6c1daeSBarry Smith 
31d1f92df0SBarry Smith .seealso: [](sec_viewers), `PetscViewerDestroy()`, `PetscViewerStringSPrintf()`, `PETSC_VIEWER_SAWS_()`, `PetscObjectSAWsBlock()`,
32db781477SPatrick Sanan           `PetscObjectSAWsViewOff()`, `PetscObjectSAWsTakeAccess()`, `PetscObjectSAWsGrantAccess()`
335c6c1daeSBarry Smith @*/
34d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscViewerSAWsOpen(MPI_Comm comm, PetscViewer *lab)
35d71ae5a4SJacob Faibussowitsch {
365c6c1daeSBarry Smith   PetscFunctionBegin;
379566063dSJacob Faibussowitsch   PetscCall(PetscViewerCreate(comm, lab));
389566063dSJacob Faibussowitsch   PetscCall(PetscViewerSetType(*lab, PETSCVIEWERSAWS));
393ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
405c6c1daeSBarry Smith }
41bfb97211SBarry Smith 
42bfb97211SBarry Smith /*@C
43e04113cfSBarry Smith   PetscObjectViewSAWs - View the base portion of any object with an SAWs viewer
44bfb97211SBarry Smith 
45c3339decSBarry Smith   Collective
46bfb97211SBarry Smith 
47bfb97211SBarry Smith   Input Parameters:
48811af0c4SBarry Smith + obj    - the `PetscObject` variable. Thus must be cast with a (`PetscObject`), for example, `PetscObjectSetName`((`PetscObject`)mat,name);
49e04113cfSBarry Smith - viewer - the SAWs viewer
50bfb97211SBarry Smith 
51bfb97211SBarry Smith   Level: advanced
52bfb97211SBarry Smith 
53811af0c4SBarry Smith   Note:
54d45a07a7SBarry Smith   The object must have already been named before calling this routine since naming an
55d45a07a7SBarry Smith   object can be collective.
56d45a07a7SBarry Smith 
57*aec76313SJacob Faibussowitsch   Developer Notes:
58c410d8ccSBarry Smith   Currently this is called only on MPI rank 0 of `PETSC_COMM_WORLD`
59bfb97211SBarry Smith 
60d1f92df0SBarry Smith .seealso: [](sec_viewers), `PetscViewer`, `PetscObject`, `PetscObjectSetName()`, `PetscObjectSAWsViewOff()`
61bfb97211SBarry Smith @*/
62d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscObjectViewSAWs(PetscObject obj, PetscViewer viewer)
63d71ae5a4SJacob Faibussowitsch {
642657e9d9SBarry Smith   char        dir[1024];
65d45a07a7SBarry Smith   PetscMPIInt rank;
66bfb97211SBarry Smith 
67bfb97211SBarry Smith   PetscFunctionBegin;
68bfb97211SBarry Smith   PetscValidHeader(obj, 1);
693ba16761SJacob Faibussowitsch   if (obj->amsmem) PetscFunctionReturn(PETSC_SUCCESS);
709566063dSJacob Faibussowitsch   PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
71c5853193SPierre Jolivet   PetscCheck(rank == 0, PETSC_COMM_SELF, PETSC_ERR_PLIB, "Should only be being called on rank zero");
725f80ce2aSJacob Faibussowitsch   PetscCheck(obj->name, PETSC_COMM_SELF, PETSC_ERR_PLIB, "Object must already have been named");
73bfb97211SBarry Smith 
7456f85f32SBarry Smith   obj->amsmem = PETSC_TRUE;
759566063dSJacob Faibussowitsch   PetscCall(PetscSNPrintf(dir, 1024, "/PETSc/Objects/%s/Class", obj->name));
76792fecdfSBarry Smith   PetscCallSAWs(SAWs_Register, (dir, &obj->class_name, 1, SAWs_READ, SAWs_STRING));
779566063dSJacob Faibussowitsch   PetscCall(PetscSNPrintf(dir, 1024, "/PETSc/Objects/%s/Type", obj->name));
78792fecdfSBarry Smith   PetscCallSAWs(SAWs_Register, (dir, &obj->type_name, 1, SAWs_READ, SAWs_STRING));
799566063dSJacob Faibussowitsch   PetscCall(PetscSNPrintf(dir, 1024, "/PETSc/Objects/%s/__Id", obj->name));
80792fecdfSBarry Smith   PetscCallSAWs(SAWs_Register, (dir, &obj->id, 1, SAWs_READ, SAWs_INT));
813ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
82bfb97211SBarry Smith }
83