xref: /petsc/src/sys/objects/pname.c (revision 0700a8246d308f50502909ba325e6169d3ee27eb)
1 #define PETSC_DLL
2 
3 #include "petscsys.h"        /*I    "petscsys.h"   I*/
4 
5 #undef __FUNCT__
6 #define __FUNCT__ "PetscObjectSetName"
7 /*@C
8    PetscObjectSetName - Sets a string name associated with a PETSc object.
9 
10    Not Collective
11 
12    Input Parameters:
13 +  obj - the Petsc variable
14          Thus must be cast with a (PetscObject), for example,
15          PetscObjectSetName((PetscObject)mat,name);
16 -  name - the name to give obj
17 
18    Level: advanced
19 
20    Concepts: object name^setting
21 
22 .seealso: PetscObjectGetName()
23 @*/
24 PetscErrorCode PETSC_DLLEXPORT PetscObjectSetName(PetscObject obj,const char name[])
25 {
26   PetscErrorCode ierr;
27 
28   PetscFunctionBegin;
29   PetscValidHeader(obj,1);
30   ierr = PetscStrfree(obj->name);CHKERRQ(ierr);
31   ierr = PetscStrallocpy(name,&obj->name);CHKERRQ(ierr);
32   PetscFunctionReturn(0);
33 }
34 
35 #undef __FUNCT__
36 #define __FUNCT__ "PetscObjectName"
37 /*@C
38    PetscObjectName - Gives an object a name if it does not have one
39 
40    Not Collective
41 
42    Input Parameters:
43 .  obj - the Petsc variable
44          Thus must be cast with a (PetscObject), for example,
45          PetscObjectSetName((PetscObject)mat,name);
46 
47    Level: advanced
48 
49    Concepts: object name^setting default
50 
51 .seealso: PetscObjectGetName(), PetscObjectSetName()
52 @*/
53 PetscErrorCode PETSC_DLLEXPORT PetscObjectName(PetscObject obj)
54 {
55   PetscErrorCode   ierr;
56   PetscCommCounter *counter;
57   PetscMPIInt      flg;
58   char             name[64];
59 
60   PetscFunctionBegin;
61   PetscValidHeader(obj,1);
62   if (!obj->name) {
63     ierr = MPI_Attr_get(obj->comm,Petsc_Counter_keyval,(void*)&counter,&flg);CHKERRQ(ierr);
64     if (!flg) SETERRQ(PETSC_ERR_ARG_CORRUPT,"Bad MPI communicator supplied; must be a PETSc communicator");
65     ierr = PetscSNPrintf(name,64,"%s_%D",obj->class_name,counter->namecount++);CHKERRQ(ierr);
66     ierr = PetscStrallocpy(name,&obj->name);CHKERRQ(ierr);
67   }
68   PetscFunctionReturn(0);
69 }
70 
71 #undef __FUNCT__
72 #define __FUNCT__ "PetscObjectPublish"
73 /*@C
74    PetscObjectPublish - Publish an object
75 
76    Collective on PetscObject
77 
78    Input Parameters:
79 .  obj - the Petsc variable
80          Thus must be cast with a (PetscObject), for example,
81          PetscObjectSetName((PetscObject)mat,name);
82 
83    Level: advanced
84 
85    Concepts: publishing object
86 
87    Notes: Not currently used
88 
89 .seealso: PetscObjectSetName()
90 
91 @*/
92 PetscErrorCode PETSC_DLLEXPORT PetscObjectPublish(PetscObject obj)
93 {
94   PetscErrorCode ierr;
95 
96   PetscFunctionBegin;
97   PetscValidHeader(obj,1);
98   if (obj->bops->publish) {
99     ierr = (*obj->bops->publish)(obj);CHKERRQ(ierr);
100   }
101   PetscFunctionReturn(0);
102 }
103 
104 #undef __FUNCT__
105 #define __FUNCT__ "PetscObjectChangeTypeName"
106 PetscErrorCode PETSC_DLLEXPORT PetscObjectChangeTypeName(PetscObject obj,const char type_name[])
107 {
108   PetscErrorCode ierr;
109 
110   PetscFunctionBegin;
111   PetscValidHeader(obj,1);
112   ierr = PetscObjectTakeAccess(obj);CHKERRQ(ierr);
113   ierr = PetscStrfree(obj->type_name);CHKERRQ(ierr);
114   ierr = PetscStrallocpy(type_name,&obj->type_name);CHKERRQ(ierr);
115   ierr = PetscObjectGrantAccess(obj);CHKERRQ(ierr);
116   PetscFunctionReturn(0);
117 }
118 
119