xref: /petsc/src/sys/objects/pname.c (revision a2c4bf2057bf6c4f707c287b8650091be2b4bd79)
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     void *commp = 0;
64     ierr = MPI_Attr_get(obj->comm,Petsc_Counter_keyval,(void*)&counter,&flg);CHKERRQ(ierr);
65     if (!flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_CORRUPT,"Bad MPI communicator supplied; must be a PETSc communicator");
66     ierr = PetscMemcpy(&commp,&obj->comm,PetscMin(sizeof(commp),sizeof(obj->comm)));CHKERRQ(ierr);
67     ierr = PetscSNPrintf(name,64,"%s_%p_%D",obj->class_name,commp,counter->namecount++);CHKERRQ(ierr);
68     ierr = PetscStrallocpy(name,&obj->name);CHKERRQ(ierr);
69   }
70   PetscFunctionReturn(0);
71 }
72 
73 
74 
75 #undef __FUNCT__
76 #define __FUNCT__ "PetscObjectChangeTypeName"
77 PetscErrorCode PETSCSYS_DLLEXPORT PetscObjectChangeTypeName(PetscObject obj,const char type_name[])
78 {
79   PetscErrorCode ierr;
80 
81   PetscFunctionBegin;
82   PetscValidHeader(obj,1);
83   ierr = PetscObjectTakeAccess(obj);CHKERRQ(ierr);
84   ierr = PetscFree(obj->type_name);CHKERRQ(ierr);
85   ierr = PetscStrallocpy(type_name,&obj->type_name);CHKERRQ(ierr);
86   ierr = PetscObjectGrantAccess(obj);CHKERRQ(ierr);
87   PetscFunctionReturn(0);
88 }
89 
90