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