xref: /petsc/src/sys/classes/viewer/impls/ams/amsopen.c (revision b8a862ca22fb0c82e0537b78700fb20188f4d5c1)
15c6c1daeSBarry Smith 
207475bc1SBarry Smith #include <petsc-private/viewerimpl.h>   /*I  "petscsys.h"  */
3e04113cfSBarry Smith #include <petscviewersaws.h>
45c6c1daeSBarry Smith 
55c6c1daeSBarry Smith #undef __FUNCT__
6e04113cfSBarry Smith #define __FUNCT__ "PetscViewerSAWsOpen"
75c6c1daeSBarry Smith /*@C
8e04113cfSBarry Smith     PetscViewerSAWsOpen - Opens an SAWs memory snooper PetscViewer.
95c6c1daeSBarry Smith 
105c6c1daeSBarry Smith     Collective on MPI_Comm
115c6c1daeSBarry Smith 
125c6c1daeSBarry Smith     Input Parameters:
13ec957eceSBarry Smith .   comm - the MPI communicator
145c6c1daeSBarry Smith 
155c6c1daeSBarry Smith     Output Parameter:
165c6c1daeSBarry Smith .   lab - the PetscViewer
175c6c1daeSBarry Smith 
185c6c1daeSBarry Smith     Options Database Keys:
19e04113cfSBarry Smith +   -ams_port <port number> - port number where you are running SAWs client
20f05ece33SBarry Smith .   -xxx_view ams - publish the object xxx
21e04113cfSBarry 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
22f05ece33SBarry Smith                     the user unblocks the the problem with an external tool that access the object with the AMS
235c6c1daeSBarry Smith 
245c6c1daeSBarry Smith     Level: advanced
255c6c1daeSBarry Smith 
265c6c1daeSBarry Smith     Fortran Note:
275c6c1daeSBarry Smith     This routine is not supported in Fortran.
285c6c1daeSBarry Smith 
295c6c1daeSBarry Smith 
305c6c1daeSBarry Smith     Notes:
31e04113cfSBarry Smith     Unlike other viewers that only access the object being viewed on the call to XXXView(object,viewer) the SAWs viewer allows
32e04113cfSBarry 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
33e04113cfSBarry Smith     PetscObjectSAWsViewOff().
3438dc1537SBarry Smith 
35e04113cfSBarry Smith     Information about the SAWs is available via http://www.mcs.anl.gov/SAWs.
365c6c1daeSBarry Smith 
375c6c1daeSBarry Smith    Concepts: AMS
38f05ece33SBarry Smith    Concepts: Argonne Memory Snooper
395c6c1daeSBarry Smith    Concepts: Asynchronous Memory Snooper
405c6c1daeSBarry Smith 
41e04113cfSBarry Smith .seealso: PetscViewerDestroy(), PetscViewerStringSPrintf(), PETSC_VIEWER_SAWS_(), PetscObjectSAWsBlock(),
42e04113cfSBarry Smith           PetscObjectSAWsViewOff(), PetscObjectSAWsTakeAccess(), PetscObjectSAWsGrantAccess()
435c6c1daeSBarry Smith 
445c6c1daeSBarry Smith @*/
45e04113cfSBarry Smith PetscErrorCode PetscViewerSAWsOpen(MPI_Comm comm,PetscViewer *lab)
465c6c1daeSBarry Smith {
475c6c1daeSBarry Smith   PetscErrorCode ierr;
485c6c1daeSBarry Smith 
495c6c1daeSBarry Smith   PetscFunctionBegin;
505c6c1daeSBarry Smith   ierr = PetscViewerCreate(comm,lab);CHKERRQ(ierr);
51e04113cfSBarry Smith   ierr = PetscViewerSetType(*lab,PETSCVIEWERSAWS);CHKERRQ(ierr);
525c6c1daeSBarry Smith   PetscFunctionReturn(0);
535c6c1daeSBarry Smith }
54bfb97211SBarry Smith 
55bfb97211SBarry Smith #undef __FUNCT__
56e04113cfSBarry Smith #define __FUNCT__ "PetscObjectViewSAWs"
57bfb97211SBarry Smith /*@C
58e04113cfSBarry Smith    PetscObjectViewSAWs - View the base portion of any object with an SAWs viewer
59bfb97211SBarry Smith 
60bfb97211SBarry Smith    Collective on PetscObject
61bfb97211SBarry Smith 
62bfb97211SBarry Smith    Input Parameters:
63bfb97211SBarry Smith +  obj - the Petsc variable
64bfb97211SBarry Smith          Thus must be cast with a (PetscObject), for example,
65bfb97211SBarry Smith          PetscObjectSetName((PetscObject)mat,name);
66e04113cfSBarry Smith -  viewer - the SAWs viewer
67bfb97211SBarry Smith 
68bfb97211SBarry Smith    Level: advanced
69bfb97211SBarry Smith 
70bfb97211SBarry Smith    Concepts: publishing object
71bfb97211SBarry Smith 
72e04113cfSBarry Smith .seealso: PetscObjectSetName(), PetscObjectSAWsViewOff()
73bfb97211SBarry Smith 
74bfb97211SBarry Smith @*/
75e04113cfSBarry Smith PetscErrorCode  PetscObjectViewSAWs(PetscObject obj,PetscViewer viewer)
76bfb97211SBarry Smith {
77bfb97211SBarry Smith   PetscErrorCode ierr;
782657e9d9SBarry Smith   char           dir[1024];
79bfb97211SBarry Smith 
80bfb97211SBarry Smith   PetscFunctionBegin;
81bfb97211SBarry Smith   PetscValidHeader(obj,1);
82ec957eceSBarry Smith   if (obj->amsmem) PetscFunctionReturn(0);
832657e9d9SBarry Smith   obj->amsmem = PETSC_TRUE;
84bfb97211SBarry Smith   ierr = PetscObjectName(obj);CHKERRQ(ierr);
85bfb97211SBarry Smith 
862657e9d9SBarry Smith   ierr = PetscSNPrintf(dir,1024,"/PETSc/Objects/%s/Class",obj->name);CHKERRQ(ierr);
872657e9d9SBarry Smith   PetscStackCallSAWs(SAWs_Register,(dir,&obj->class_name,1,SAWs_READ,SAWs_STRING));
882657e9d9SBarry Smith   ierr = PetscSNPrintf(dir,1024,"/PETSc/Objects/%s/Type",obj->name);CHKERRQ(ierr);
892657e9d9SBarry Smith   PetscStackCallSAWs(SAWs_Register,(dir,&obj->type_name,1,SAWs_READ,SAWs_STRING));
90*b8a862caSBarry Smith   ierr = PetscSNPrintf(dir,1024,"/PETSc/Objects/%s/_Id",obj->name);CHKERRQ(ierr);
912657e9d9SBarry Smith   PetscStackCallSAWs(SAWs_Register,(dir,&obj->id,1,SAWs_READ,SAWs_INT));
92*b8a862caSBarry Smith   ierr = PetscSNPrintf(dir,1024,"/PETSc/Objects/%s/_ParentID",obj->name);CHKERRQ(ierr);
932657e9d9SBarry Smith   PetscStackCallSAWs(SAWs_Register,(dir,&obj->parentid,1,SAWs_READ,SAWs_INT));
94*b8a862caSBarry Smith   ierr = PetscSNPrintf(dir,1024,"/PETSc/Objects/%s/_Publish_Block",obj->name);CHKERRQ(ierr);
952657e9d9SBarry Smith   PetscStackCallSAWs(SAWs_Register,(dir,&obj->amspublishblock,1,SAWs_READ,SAWs_BOOLEAN));
962657e9d9SBarry Smith   ierr = PetscSNPrintf(dir,1024,"/PETSc/Objects/%s/Block",obj->name);CHKERRQ(ierr);
972657e9d9SBarry Smith   PetscStackCallSAWs(SAWs_Register,(dir,&obj->amsblock,1,SAWs_WRITE,SAWs_BOOLEAN));
98bfb97211SBarry Smith   PetscFunctionReturn(0);
99bfb97211SBarry Smith }
100