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