xref: /petsc/src/sys/ams/pams.c (revision c457296d466dd3de681344323ebedaf97eb226ba)
1b3506946SBarry Smith 
2b3506946SBarry Smith #include "petscsys.h"        /*I    "petscsys.h"   I*/
3b3506946SBarry Smith 
4b3506946SBarry Smith /*
5b3506946SBarry Smith      If true then every PETSc object will be published with the AMS
6b3506946SBarry Smith */
7b3506946SBarry Smith PetscTruth PetscAMSPublishAll;
8b3506946SBarry Smith 
9b3506946SBarry Smith #undef __FUNCT__
10*c457296dSBarry Smith #define __FUNCT__ "PetscObjectPublish"
11*c457296dSBarry Smith /*@C
12*c457296dSBarry Smith    PetscObjectPublish - Publish an object
13*c457296dSBarry Smith 
14*c457296dSBarry Smith    Collective on PetscObject
15*c457296dSBarry Smith 
16*c457296dSBarry Smith    Input Parameters:
17*c457296dSBarry Smith .  obj - the Petsc variable
18*c457296dSBarry Smith          Thus must be cast with a (PetscObject), for example,
19*c457296dSBarry Smith          PetscObjectSetName((PetscObject)mat,name);
20*c457296dSBarry Smith 
21*c457296dSBarry Smith    Level: advanced
22*c457296dSBarry Smith 
23*c457296dSBarry Smith    Concepts: publishing object
24*c457296dSBarry Smith 
25*c457296dSBarry Smith .seealso: PetscObjectSetName()
26*c457296dSBarry Smith 
27*c457296dSBarry Smith @*/
28*c457296dSBarry Smith PetscErrorCode PETSCSYS_DLLEXPORT PetscObjectPublish(PetscObject obj)
29b3506946SBarry Smith {
30*c457296dSBarry Smith   PetscErrorCode ierr;
31b3506946SBarry Smith   AMS_Memory     amem;
32b3506946SBarry Smith   AMS_Comm       acomm;
33b3506946SBarry Smith 
34b3506946SBarry Smith   PetscFunctionBegin;
35*c457296dSBarry Smith   PetscValidHeader(obj,1);
36d8501e9cSBarry Smith   if (obj->amem != -1) PetscFunctionReturn(0);
37b3506946SBarry Smith   ierr = PetscObjectName(obj);CHKERRQ(ierr);
38b3506946SBarry Smith 
39b3506946SBarry Smith   ierr      = PetscViewerAMSGetAMSComm(PETSC_VIEWER_AMS_(obj->comm),&acomm);CHKERRQ(ierr);
40b3506946SBarry Smith   ierr      = AMS_Memory_create(acomm,obj->name,&amem);CHKERRQ(ierr);
41b3506946SBarry Smith   obj->amem = (int)amem;
42b3506946SBarry Smith 
43b3506946SBarry Smith   ierr = AMS_Memory_take_access(amem);CHKERRQ(ierr);
44b3506946SBarry Smith   ierr = AMS_Memory_add_field(amem,"Class",&obj->class_name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr);
45b3506946SBarry Smith   ierr = AMS_Memory_add_field(amem,"Type",&obj->type_name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr);
46b3506946SBarry Smith   ierr = AMS_Memory_add_field(amem,"Id",&obj->id,1,AMS_INT,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr);
47b3506946SBarry Smith   ierr = AMS_Memory_add_field(amem,"ParentId",&obj->parentid,1,AMS_INT,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr);
48b3506946SBarry Smith   ierr = AMS_Memory_add_field(amem,"Name",&obj->name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr);
49b3506946SBarry Smith   ierr = AMS_Memory_publish(amem);CHKERRQ(ierr);
50b3506946SBarry Smith   ierr = AMS_Memory_grant_access(amem);CHKERRQ(ierr);
51*c457296dSBarry Smith 
52*c457296dSBarry Smith   if (obj->bops->publish) {
53*c457296dSBarry Smith     ierr = (*obj->bops->publish)(obj);CHKERRQ(ierr);
54*c457296dSBarry Smith   }
55b3506946SBarry Smith   PetscFunctionReturn(0);
56b3506946SBarry Smith }
57b3506946SBarry Smith 
5892e62aa6SBarry Smith #undef __FUNCT__
59*c457296dSBarry Smith #define __FUNCT__ "PetscObjectUnPublish"
60*c457296dSBarry Smith PetscErrorCode PetscObjectUnPublish(PetscObject obj)
6192e62aa6SBarry Smith {
6292e62aa6SBarry Smith   AMS_Comm       acomm;
6392e62aa6SBarry Smith   PetscErrorCode ierr;
6492e62aa6SBarry Smith 
6592e62aa6SBarry Smith   PetscFunctionBegin;
6669590be7SBarry Smith   if (obj->amem == -1) PetscFunctionReturn(0);
6792e62aa6SBarry Smith   ierr      = PetscViewerAMSGetAMSComm(PETSC_VIEWER_AMS_(obj->comm),&acomm);CHKERRQ(ierr);
6892e62aa6SBarry Smith   ierr      = AMS_Memory_destroy(obj->amem);CHKERRQ(ierr);
69d8501e9cSBarry Smith   obj->amem = -1;
7092e62aa6SBarry Smith   PetscFunctionReturn(0);
7192e62aa6SBarry Smith }
7292e62aa6SBarry Smith 
73