1 2 #include <petsc-private/viewerimpl.h> /*I "petscsys.h" */ 3 #include <petscviewerams.h> 4 5 #undef __FUNCT__ 6 #define __FUNCT__ "PetscViewerAMSOpen" 7 /*@C 8 PetscViewerAMSOpen - Opens an AMS memory snooper PetscViewer. 9 10 Collective on MPI_Comm 11 12 Input Parameters: 13 + comm - the MPI communicator 14 - name - name of AMS communicator being created 15 16 Output Parameter: 17 . lab - the PetscViewer 18 19 Options Database Keys: 20 + -ams_port <port number> - port number where you are running AMS client 21 . -ams_publish_objects - publish all PETSc objects to be visible to the AMS memory snooper, 22 use PetscObjectAMSPublish() to publish individual objects 23 - -ams_java - open JAVA AMS client 24 25 Level: advanced 26 27 Fortran Note: 28 This routine is not supported in Fortran. 29 30 See the matlab/petsc directory in the AMS installation for one example of external 31 tools that can monitor PETSc objects that have been published. 32 33 Notes: 34 This PetscViewer can be destroyed with PetscViewerDestroy(). 35 36 This viewer is currently different than other viewers in that you cannot pass this viewer to XXXView() to view the XXX object. 37 PETSC_VIEWER_AMS_() is used by PetscObjectAMSPublish() to connect to that particular AMS communicator. 38 39 Information about the AMS is available via http://www.mcs.anl.gov/ams. 40 41 Concepts: AMS 42 Concepts: ALICE Memory Snooper 43 Concepts: Asynchronous Memory Snooper 44 45 .seealso: PetscObjectAMSPublish(), PetscViewerDestroy(), PetscViewerStringSPrintf(), PETSC_VIEWER_AMS_(), 46 PetscObjectAMSPublish(), PetscObjectAMSUnPublish(), PetscObjectAMSTakeAccess(), PetscObjectAMSGrantAccess() 47 48 @*/ 49 PetscErrorCode PetscViewerAMSOpen(MPI_Comm comm,const char name[],PetscViewer *lab) 50 { 51 PetscErrorCode ierr; 52 53 PetscFunctionBegin; 54 ierr = PetscViewerCreate(comm,lab);CHKERRQ(ierr); 55 ierr = PetscViewerSetType(*lab,PETSCVIEWERAMS);CHKERRQ(ierr); 56 ierr = PetscViewerAMSSetCommName(*lab,name);CHKERRQ(ierr); 57 PetscFunctionReturn(0); 58 } 59 60 #undef __FUNCT__ 61 #define __FUNCT__ "PetscObjectViewAMS" 62 /*@C 63 PetscObjectViewAMS - View the base portion of any object with an AMS viewer 64 65 Collective on PetscObject 66 67 Input Parameters: 68 + obj - the Petsc variable 69 Thus must be cast with a (PetscObject), for example, 70 PetscObjectSetName((PetscObject)mat,name); 71 - viewer - the AMS viewer 72 73 Level: advanced 74 75 Concepts: publishing object 76 77 .seealso: PetscObjectSetName(), PetscObjectAMSUnPublish() 78 79 @*/ 80 PetscErrorCode PetscObjectViewAMS(PetscObject obj,PetscViewer viewer) 81 { 82 PetscErrorCode ierr; 83 AMS_Memory amem; 84 AMS_Comm acomm; 85 86 PetscFunctionBegin; 87 PetscValidHeader(obj,1); 88 if (obj->classid == PETSC_VIEWER_CLASSID) PetscFunctionReturn(0); 89 if (obj->amsmem != -1) PetscFunctionReturn(0); 90 ierr = PetscObjectName(obj);CHKERRQ(ierr); 91 92 ierr = PetscViewerAMSGetAMSComm(viewer,&acomm);CHKERRQ(ierr); 93 ierr = AMS_Memory_create(acomm,obj->name,&amem);CHKERRQ(ierr); 94 obj->amsmem = (int)amem; 95 96 ierr = AMS_Memory_take_access(amem);CHKERRQ(ierr); 97 ierr = AMS_Memory_add_field(amem,"Class",&obj->class_name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 98 ierr = AMS_Memory_add_field(amem,"Type",&obj->type_name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 99 ierr = AMS_Memory_add_field(amem,"Id",&obj->id,1,AMS_INT,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 100 ierr = AMS_Memory_add_field(amem,"ParentId",&obj->parentid,1,AMS_INT,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 101 ierr = AMS_Memory_add_field(amem,"Name",&obj->name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 102 ierr = AMS_Memory_add_field(amem,"Block",&obj->amspublishblock,1,AMS_BOOLEAN,AMS_WRITE,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 103 ierr = AMS_Memory_publish(amem);CHKERRQ(ierr); 104 ierr = AMS_Memory_grant_access(amem);CHKERRQ(ierr); 105 PetscFunctionReturn(0); 106 } 107