xref: /petsc/src/sys/classes/viewer/impls/ams/amsopen.c (revision bfb97211bafa0793361a0cffd52721c803a3f356)
15c6c1daeSBarry Smith 
207475bc1SBarry Smith #include <petsc-private/viewerimpl.h>   /*I  "petscsys.h"  */
338dc1537SBarry Smith #include <petscviewerams.h>
45c6c1daeSBarry Smith 
55c6c1daeSBarry Smith #undef __FUNCT__
65c6c1daeSBarry Smith #define __FUNCT__ "PetscViewerAMSOpen"
75c6c1daeSBarry Smith /*@C
85c6c1daeSBarry Smith     PetscViewerAMSOpen - Opens an AMS memory snooper PetscViewer.
95c6c1daeSBarry Smith 
105c6c1daeSBarry Smith     Collective on MPI_Comm
115c6c1daeSBarry Smith 
125c6c1daeSBarry Smith     Input Parameters:
135c6c1daeSBarry Smith +   comm - the MPI communicator
145c6c1daeSBarry Smith -   name - name of AMS communicator being created
155c6c1daeSBarry Smith 
165c6c1daeSBarry Smith     Output Parameter:
175c6c1daeSBarry Smith .   lab - the PetscViewer
185c6c1daeSBarry Smith 
195c6c1daeSBarry Smith     Options Database Keys:
205c6c1daeSBarry Smith +   -ams_port <port number> - port number where you are running AMS client
215c6c1daeSBarry Smith .   -ams_publish_objects - publish all PETSc objects to be visible to the AMS memory snooper,
225c6c1daeSBarry Smith                            use PetscObjectAMSPublish() to publish individual objects
235c6c1daeSBarry Smith -   -ams_java - open JAVA AMS client
245c6c1daeSBarry Smith 
255c6c1daeSBarry Smith     Level: advanced
265c6c1daeSBarry Smith 
275c6c1daeSBarry Smith     Fortran Note:
285c6c1daeSBarry Smith     This routine is not supported in Fortran.
295c6c1daeSBarry Smith 
305c6c1daeSBarry Smith     See the matlab/petsc directory in the AMS installation for one example of external
315c6c1daeSBarry Smith     tools that can monitor PETSc objects that have been published.
325c6c1daeSBarry Smith 
335c6c1daeSBarry Smith     Notes:
345c6c1daeSBarry Smith     This PetscViewer can be destroyed with PetscViewerDestroy().
355c6c1daeSBarry Smith 
3638dc1537SBarry Smith     This viewer is currently different than other viewers in that you cannot pass this viewer to XXXView() to view the XXX object.
3738dc1537SBarry Smith     PETSC_VIEWER_AMS_() is used by PetscObjectAMSPublish() to connect to that particular AMS communicator.
3838dc1537SBarry Smith 
395c6c1daeSBarry Smith     Information about the AMS is available via http://www.mcs.anl.gov/ams.
405c6c1daeSBarry Smith 
415c6c1daeSBarry Smith    Concepts: AMS
425c6c1daeSBarry Smith    Concepts: ALICE Memory Snooper
435c6c1daeSBarry Smith    Concepts: Asynchronous Memory Snooper
445c6c1daeSBarry Smith 
4538dc1537SBarry Smith .seealso: PetscObjectAMSPublish(), PetscViewerDestroy(), PetscViewerStringSPrintf(), PETSC_VIEWER_AMS_(),
4638dc1537SBarry Smith           PetscObjectAMSPublish(), PetscObjectAMSUnPublish(), PetscObjectAMSTakeAccess(), PetscObjectAMSGrantAccess()
475c6c1daeSBarry Smith 
485c6c1daeSBarry Smith @*/
495c6c1daeSBarry Smith PetscErrorCode PetscViewerAMSOpen(MPI_Comm comm,const char name[],PetscViewer *lab)
505c6c1daeSBarry Smith {
515c6c1daeSBarry Smith   PetscErrorCode ierr;
525c6c1daeSBarry Smith 
535c6c1daeSBarry Smith   PetscFunctionBegin;
545c6c1daeSBarry Smith   ierr = PetscViewerCreate(comm,lab);CHKERRQ(ierr);
555c6c1daeSBarry Smith   ierr = PetscViewerSetType(*lab,PETSCVIEWERAMS);CHKERRQ(ierr);
565c6c1daeSBarry Smith   ierr = PetscViewerAMSSetCommName(*lab,name);CHKERRQ(ierr);
575c6c1daeSBarry Smith   PetscFunctionReturn(0);
585c6c1daeSBarry Smith }
59*bfb97211SBarry Smith 
60*bfb97211SBarry Smith #undef __FUNCT__
61*bfb97211SBarry Smith #define __FUNCT__ "PetscObjectViewAMS"
62*bfb97211SBarry Smith /*@C
63*bfb97211SBarry Smith    PetscObjectViewAMS - View the base portion of any object with an AMS viewer
64*bfb97211SBarry Smith 
65*bfb97211SBarry Smith    Collective on PetscObject
66*bfb97211SBarry Smith 
67*bfb97211SBarry Smith    Input Parameters:
68*bfb97211SBarry Smith +  obj - the Petsc variable
69*bfb97211SBarry Smith          Thus must be cast with a (PetscObject), for example,
70*bfb97211SBarry Smith          PetscObjectSetName((PetscObject)mat,name);
71*bfb97211SBarry Smith -  viewer - the AMS viewer
72*bfb97211SBarry Smith 
73*bfb97211SBarry Smith    Level: advanced
74*bfb97211SBarry Smith 
75*bfb97211SBarry Smith    Concepts: publishing object
76*bfb97211SBarry Smith 
77*bfb97211SBarry Smith .seealso: PetscObjectSetName(), PetscObjectAMSUnPublish()
78*bfb97211SBarry Smith 
79*bfb97211SBarry Smith @*/
80*bfb97211SBarry Smith PetscErrorCode  PetscObjectViewAMS(PetscObject obj,PetscViewer viewer)
81*bfb97211SBarry Smith {
82*bfb97211SBarry Smith   PetscErrorCode ierr;
83*bfb97211SBarry Smith   AMS_Memory     amem;
84*bfb97211SBarry Smith   AMS_Comm       acomm;
85*bfb97211SBarry Smith 
86*bfb97211SBarry Smith   PetscFunctionBegin;
87*bfb97211SBarry Smith   PetscValidHeader(obj,1);
88*bfb97211SBarry Smith   if (obj->classid == PETSC_VIEWER_CLASSID) PetscFunctionReturn(0);
89*bfb97211SBarry Smith   if (obj->amsmem != -1) PetscFunctionReturn(0);
90*bfb97211SBarry Smith   ierr = PetscObjectName(obj);CHKERRQ(ierr);
91*bfb97211SBarry Smith 
92*bfb97211SBarry Smith   ierr = PetscViewerAMSGetAMSComm(viewer,&acomm);CHKERRQ(ierr);
93*bfb97211SBarry Smith   ierr        = AMS_Memory_create(acomm,obj->name,&amem);CHKERRQ(ierr);
94*bfb97211SBarry Smith   obj->amsmem = (int)amem;
95*bfb97211SBarry Smith 
96*bfb97211SBarry Smith   ierr = AMS_Memory_take_access(amem);CHKERRQ(ierr);
97*bfb97211SBarry Smith   ierr = AMS_Memory_add_field(amem,"Class",&obj->class_name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr);
98*bfb97211SBarry Smith   ierr = AMS_Memory_add_field(amem,"Type",&obj->type_name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr);
99*bfb97211SBarry Smith   ierr = AMS_Memory_add_field(amem,"Id",&obj->id,1,AMS_INT,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr);
100*bfb97211SBarry Smith   ierr = AMS_Memory_add_field(amem,"ParentId",&obj->parentid,1,AMS_INT,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr);
101*bfb97211SBarry Smith   ierr = AMS_Memory_add_field(amem,"Name",&obj->name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr);
102*bfb97211SBarry Smith   ierr = AMS_Memory_add_field(amem,"Block",&obj->amspublishblock,1,AMS_BOOLEAN,AMS_WRITE,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr);
103*bfb97211SBarry Smith   ierr = AMS_Memory_publish(amem);CHKERRQ(ierr);
104*bfb97211SBarry Smith   ierr = AMS_Memory_grant_access(amem);CHKERRQ(ierr);
105*bfb97211SBarry Smith   PetscFunctionReturn(0);
106*bfb97211SBarry Smith }
107