xref: /petsc/src/sys/ams/pams.c (revision 42eaa7f3b58bc3af4b9ef28b03ccaa8b4c1282ac)
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__ "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 PETSCSYS_DLLEXPORT 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_(obj->comm),&acomm);CHKERRQ(ierr);
43   ierr      = AMS_Memory_create(acomm,obj->name,&amem);CHKERRQ(ierr);
44   obj->amem = (int)amem;
45 
46   ierr = AMS_Memory_take_access(amem);CHKERRQ(ierr);
47   ierr = AMS_Memory_add_field(amem,"Class",&obj->class_name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr);
48   ierr = AMS_Memory_add_field(amem,"Type",&obj->type_name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr);
49   ierr = AMS_Memory_add_field(amem,"Id",&obj->id,1,AMS_INT,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr);
50   ierr = AMS_Memory_add_field(amem,"ParentId",&obj->parentid,1,AMS_INT,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr);
51   ierr = AMS_Memory_add_field(amem,"Name",&obj->name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr);
52   if (obj->bops->publish) {
53     ierr = (*obj->bops->publish)(obj);CHKERRQ(ierr);
54   }
55   ierr = AMS_Memory_publish(amem);CHKERRQ(ierr);
56   ierr = AMS_Memory_grant_access(amem);CHKERRQ(ierr);
57   PetscFunctionReturn(0);
58 }
59 
60 #undef __FUNCT__
61 #define __FUNCT__ "PetscObjectUnPublish"
62 PetscErrorCode PetscObjectUnPublish(PetscObject obj)
63 {
64   AMS_Comm       acomm;
65   PetscErrorCode ierr;
66 
67   PetscFunctionBegin;
68   if (obj->classid == PETSC_VIEWER_CLASSID) PetscFunctionReturn(0);
69   if (obj->amem == -1) PetscFunctionReturn(0);
70   ierr      = PetscViewerAMSGetAMSComm(PETSC_VIEWER_AMS_(obj->comm),&acomm);CHKERRQ(ierr);
71   ierr      = AMS_Memory_destroy(obj->amem);CHKERRQ(ierr);
72   obj->amem = -1;
73   PetscFunctionReturn(0);
74 }
75 
76