xref: /petsc/src/sys/objects/pname.c (revision 1999dac5bdbe8f2c4e4a62a7ec50aad97f0bebe7)
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 PETSCSYS_DLLEXPORT PetscObjectSetName(PetscObject obj,const char name[])
25 {
26   PetscErrorCode ierr;
27 
28   PetscFunctionBegin;
29   PetscValidHeader(obj,1);
30   ierr = PetscFree(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 PETSCSYS_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_COMM_SELF,PETSC_ERR_ARG_CORRUPT,"Bad MPI communicator supplied; must be a PETSc communicator");
65     ierr = PetscSNPrintf(name,64,"%s_%D_%d",obj->class_name,counter->namecount++,PetscAbs((int)obj->comm));CHKERRQ(ierr);
66     ierr = PetscStrallocpy(name,&obj->name);CHKERRQ(ierr);
67   }
68   PetscFunctionReturn(0);
69 }
70 
71 
72 
73 #undef __FUNCT__
74 #define __FUNCT__ "PetscObjectChangeTypeName"
75 PetscErrorCode PETSCSYS_DLLEXPORT PetscObjectChangeTypeName(PetscObject obj,const char type_name[])
76 {
77   PetscErrorCode ierr;
78 
79   PetscFunctionBegin;
80   PetscValidHeader(obj,1);
81   ierr = PetscObjectTakeAccess(obj);CHKERRQ(ierr);
82   ierr = PetscFree(obj->type_name);CHKERRQ(ierr);
83   ierr = PetscStrallocpy(type_name,&obj->type_name);CHKERRQ(ierr);
84   ierr = PetscObjectGrantAccess(obj);CHKERRQ(ierr);
85   PetscFunctionReturn(0);
86 }
87 
88