xref: /petsc/src/sys/ams/pams.c (revision 9daa610aaa9553e57b65cfe5b2ba26e5d35411e9)
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 PetscTruth PetscAMSPublishAll;
8 
9 #undef __FUNCT__
10 #define __FUNCT__ "PetscObjectPublish"
11 /*@C
12    PetscObjectPublish - 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    Level: advanced
22 
23    Concepts: publishing object
24 
25 .seealso: PetscObjectSetName()
26 
27 @*/
28 PetscErrorCode PETSCSYS_DLLEXPORT PetscObjectPublish(PetscObject obj)
29 {
30   PetscErrorCode ierr;
31   AMS_Memory     amem;
32   AMS_Comm       acomm;
33 
34   PetscFunctionBegin;
35   PetscValidHeader(obj,1);
36   if (obj->amem != -1) PetscFunctionReturn(0);
37   ierr = PetscObjectName(obj);CHKERRQ(ierr);
38 
39   ierr      = PetscViewerAMSGetAMSComm(PETSC_VIEWER_AMS_(obj->comm),&acomm);CHKERRQ(ierr);
40   ierr      = AMS_Memory_create(acomm,obj->name,&amem);CHKERRQ(ierr);
41   obj->amem = (int)amem;
42 
43   ierr = AMS_Memory_take_access(amem);CHKERRQ(ierr);
44   ierr = AMS_Memory_add_field(amem,"Class",&obj->class_name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr);
45   ierr = AMS_Memory_add_field(amem,"Type",&obj->type_name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr);
46   ierr = AMS_Memory_add_field(amem,"Id",&obj->id,1,AMS_INT,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr);
47   ierr = AMS_Memory_add_field(amem,"ParentId",&obj->parentid,1,AMS_INT,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr);
48   ierr = AMS_Memory_add_field(amem,"Name",&obj->name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr);
49   ierr = AMS_Memory_publish(amem);CHKERRQ(ierr);
50   ierr = AMS_Memory_grant_access(amem);CHKERRQ(ierr);
51 
52   if (obj->bops->publish) {
53     ierr = (*obj->bops->publish)(obj);CHKERRQ(ierr);
54   }
55   PetscFunctionReturn(0);
56 }
57 
58 #undef __FUNCT__
59 #define __FUNCT__ "PetscObjectUnPublish"
60 PetscErrorCode PetscObjectUnPublish(PetscObject obj)
61 {
62   AMS_Comm       acomm;
63   PetscErrorCode ierr;
64 
65   PetscFunctionBegin;
66   if (obj->amem == -1) PetscFunctionReturn(0);
67   ierr      = PetscViewerAMSGetAMSComm(PETSC_VIEWER_AMS_(obj->comm),&acomm);CHKERRQ(ierr);
68   ierr      = AMS_Memory_destroy(obj->amem);CHKERRQ(ierr);
69   obj->amem = -1;
70   PetscFunctionReturn(0);
71 }
72 
73