1 2 #include <petscsys.h> /*I "petscsys.h" I*/ 3 4 /* 5 If true then every PETSc object will be published with the AMS 6 */ 7 PetscBool PetscAMSPublishAll; 8 9 #undef __FUNCT__ 10 #define __FUNCT__ "PetscObjectAMSPublish" 11 /*@C 12 PetscObjectAMSPublish - Publish an object 13 14 Collective on PetscObject 15 16 Input Parameters: 17 . obj - the Petsc variable 18 Thus must be cast with a (PetscObject), for example, 19 PetscObjectSetName((PetscObject)mat,name); 20 21 Notes: PetscViewer objects are not published 22 23 Level: advanced 24 25 Concepts: publishing object 26 27 .seealso: PetscObjectSetName(), PetscObjectUnPublish() 28 29 @*/ 30 PetscErrorCode PetscObjectAMSPublish(PetscObject obj) 31 { 32 PetscErrorCode ierr; 33 AMS_Memory amem; 34 AMS_Comm acomm; 35 36 PetscFunctionBegin; 37 PetscValidHeader(obj,1); 38 if (obj->classid == PETSC_VIEWER_CLASSID) PetscFunctionReturn(0); 39 if (obj->amem != -1) PetscFunctionReturn(0); 40 ierr = PetscObjectName(obj);CHKERRQ(ierr); 41 42 ierr = PetscViewerAMSGetAMSComm(PETSC_VIEWER_AMS_(PETSC_COMM_WORLD),&acomm);CHKERRQ(ierr); 43 /* Really want to attach to correct communicator but then browser needs to access multiple communicators 44 ierr = PetscViewerAMSGetAMSComm(PETSC_VIEWER_AMS_(obj->comm),&acomm);CHKERRQ(ierr); */ 45 46 ierr = AMS_Memory_create(acomm,obj->name,&amem);CHKERRQ(ierr); 47 obj->amem = (int)amem; 48 49 ierr = AMS_Memory_take_access(amem);CHKERRQ(ierr); 50 ierr = AMS_Memory_add_field(amem,"Class",&obj->class_name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 51 ierr = AMS_Memory_add_field(amem,"Type",&obj->type_name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 52 ierr = AMS_Memory_add_field(amem,"Id",&obj->id,1,AMS_INT,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 53 ierr = AMS_Memory_add_field(amem,"ParentId",&obj->parentid,1,AMS_INT,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 54 ierr = AMS_Memory_add_field(amem,"Name",&obj->name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 55 if (obj->bops->publish) { 56 ierr = (*obj->bops->publish)(obj);CHKERRQ(ierr); 57 } 58 ierr = AMS_Memory_publish(amem);CHKERRQ(ierr); 59 ierr = AMS_Memory_grant_access(amem);CHKERRQ(ierr); 60 PetscFunctionReturn(0); 61 } 62 63 #undef __FUNCT__ 64 #define __FUNCT__ "PetscObjectUnPublish" 65 PetscErrorCode PetscObjectUnPublish(PetscObject obj) 66 { 67 AMS_Comm acomm; 68 PetscErrorCode ierr; 69 70 PetscFunctionBegin; 71 if (obj->classid == PETSC_VIEWER_CLASSID) PetscFunctionReturn(0); 72 if (obj->amem == -1) PetscFunctionReturn(0); 73 ierr = PetscViewerAMSGetAMSComm(PETSC_VIEWER_AMS_(obj->comm),&acomm);CHKERRQ(ierr); 74 ierr = AMS_Memory_destroy(obj->amem);CHKERRQ(ierr); 75 obj->amem = -1; 76 PetscFunctionReturn(0); 77 } 78 79