xref: /petsc/src/sys/ams/pams.c (revision 2205254efee3a00a594e5e2a3a70f74dcb40bc03)
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