xref: /petsc/src/sys/objects/pname.c (revision 317d6ea6c5d3d9f4d5642b94974c11b359ba35b4)
1e5c89e4eSSatish Balay #define PETSC_DLL
2e5c89e4eSSatish Balay 
3d382aafbSBarry Smith #include "petscsys.h"        /*I    "petscsys.h"   I*/
4e5c89e4eSSatish Balay 
5e5c89e4eSSatish Balay #undef __FUNCT__
6e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectSetName"
7e5c89e4eSSatish Balay /*@C
8e5c89e4eSSatish Balay    PetscObjectSetName - Sets a string name associated with a PETSc object.
9e5c89e4eSSatish Balay 
10e5c89e4eSSatish Balay    Not Collective
11e5c89e4eSSatish Balay 
12e5c89e4eSSatish Balay    Input Parameters:
13e5c89e4eSSatish Balay +  obj - the Petsc variable
14e5c89e4eSSatish Balay          Thus must be cast with a (PetscObject), for example,
15e5c89e4eSSatish Balay          PetscObjectSetName((PetscObject)mat,name);
16e5c89e4eSSatish Balay -  name - the name to give obj
17e5c89e4eSSatish Balay 
18e5c89e4eSSatish Balay    Level: advanced
19e5c89e4eSSatish Balay 
20e5c89e4eSSatish Balay    Concepts: object name^setting
21e5c89e4eSSatish Balay 
22e5c89e4eSSatish Balay .seealso: PetscObjectGetName()
23e5c89e4eSSatish Balay @*/
248738c821SJed Brown PetscErrorCode PETSCSYS_DLLEXPORT PetscObjectSetName(PetscObject obj,const char name[])
25e5c89e4eSSatish Balay {
26e5c89e4eSSatish Balay   PetscErrorCode ierr;
27e5c89e4eSSatish Balay 
28e5c89e4eSSatish Balay   PetscFunctionBegin;
293cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
30503cfb0cSBarry Smith   ierr = PetscFree(obj->name);CHKERRQ(ierr);
31e5c89e4eSSatish Balay   ierr = PetscStrallocpy(name,&obj->name);CHKERRQ(ierr);
32e5c89e4eSSatish Balay   PetscFunctionReturn(0);
33e5c89e4eSSatish Balay }
34e5c89e4eSSatish Balay 
35e5c89e4eSSatish Balay #undef __FUNCT__
36*317d6ea6SBarry Smith #define __FUNCT__ "PetscObjectPrintClassNamePrefixType"
37*317d6ea6SBarry Smith /*@C
38*317d6ea6SBarry Smith       PetscObjectPrintTypeNamePrefix - used in the XXXView() methods to display information about the class, name, prefix and type of an object
39*317d6ea6SBarry Smith 
40*317d6ea6SBarry Smith    Input Parameters:
41*317d6ea6SBarry Smith +     obj - the PETSc object
42*317d6ea6SBarry Smith .     viewer - ASCII viewer where the information is printed
43*317d6ea6SBarry Smith -     string - for example "Matrix Object"
44*317d6ea6SBarry Smith 
45*317d6ea6SBarry Smith    Level: developer
46*317d6ea6SBarry Smith 
47*317d6ea6SBarry Smith .seealso: PetscObjectSetName(), PetscObjectName()
48*317d6ea6SBarry Smith 
49*317d6ea6SBarry Smith @*/
50*317d6ea6SBarry Smith PetscErrorCode PetscObjectPrintClassNamePrefixType(PetscObject obj,PetscViewer viewer,const char string[])
51*317d6ea6SBarry Smith {
52*317d6ea6SBarry Smith   PetscErrorCode ierr;
53*317d6ea6SBarry Smith 
54*317d6ea6SBarry Smith   PetscFunctionBegin;
55*317d6ea6SBarry Smith   ierr = PetscViewerASCIIPrintf(viewer,"%s:",string);CHKERRQ(ierr);
56*317d6ea6SBarry Smith   if (obj->name) {
57*317d6ea6SBarry Smith     ierr = PetscViewerASCIIPrintf(viewer,"%s",obj->name);CHKERRQ(ierr);
58*317d6ea6SBarry Smith   }
59*317d6ea6SBarry Smith   if (obj->prefix) {
60*317d6ea6SBarry Smith     ierr = PetscViewerASCIIPrintf(viewer,"(%s)",obj->prefix);CHKERRQ(ierr);
61*317d6ea6SBarry Smith   }
62*317d6ea6SBarry Smith   ierr = PetscViewerASCIIPrintf(viewer,"\n");CHKERRQ(ierr);
63*317d6ea6SBarry Smith   if (obj->type_name) {
64*317d6ea6SBarry Smith     ierr = PetscViewerASCIIPrintf(viewer,"  type: %s\n",obj->type_name);CHKERRQ(ierr);
65*317d6ea6SBarry Smith   } else {
66*317d6ea6SBarry Smith     ierr = PetscViewerASCIIPrintf(viewer,"  type not yet set\n");CHKERRQ(ierr);
67*317d6ea6SBarry Smith   }
68*317d6ea6SBarry Smith   PetscFunctionReturn(0);
69*317d6ea6SBarry Smith }
70*317d6ea6SBarry Smith 
71*317d6ea6SBarry Smith #undef __FUNCT__
72e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectName"
73e5c89e4eSSatish Balay /*@C
74e5c89e4eSSatish Balay    PetscObjectName - Gives an object a name if it does not have one
75e5c89e4eSSatish Balay 
76e5c89e4eSSatish Balay    Not Collective
77e5c89e4eSSatish Balay 
78e5c89e4eSSatish Balay    Input Parameters:
79e5c89e4eSSatish Balay .  obj - the Petsc variable
80e5c89e4eSSatish Balay          Thus must be cast with a (PetscObject), for example,
81*317d6ea6SBarry Smith          PetscObjectName((PetscObject)mat,name);
82e5c89e4eSSatish Balay 
83*317d6ea6SBarry Smith    Level: developer
84e5c89e4eSSatish Balay 
85e5c89e4eSSatish Balay    Concepts: object name^setting default
86e5c89e4eSSatish Balay 
87*317d6ea6SBarry Smith    Notes: This is used in a small number of places when an object NEEDS a name, for example when it is saved to Matlab with that variable name.
88*317d6ea6SBarry Smith           Use PetscObjectSetName() to set the name of an object to what you want.
89*317d6ea6SBarry Smith 
90e5c89e4eSSatish Balay .seealso: PetscObjectGetName(), PetscObjectSetName()
91e5c89e4eSSatish Balay @*/
928738c821SJed Brown PetscErrorCode PETSCSYS_DLLEXPORT PetscObjectName(PetscObject obj)
93e5c89e4eSSatish Balay {
94e5c89e4eSSatish Balay   PetscErrorCode   ierr;
95480cf27aSJed Brown   PetscCommCounter *counter;
96480cf27aSJed Brown   PetscMPIInt      flg;
97e5c89e4eSSatish Balay   char             name[64];
98e5c89e4eSSatish Balay 
99e5c89e4eSSatish Balay   PetscFunctionBegin;
1003cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
101e5c89e4eSSatish Balay   if (!obj->name) {
102a2c4bf20SJed Brown     void *commp = 0;
103480cf27aSJed Brown     ierr = MPI_Attr_get(obj->comm,Petsc_Counter_keyval,(void*)&counter,&flg);CHKERRQ(ierr);
104e32f2f54SBarry Smith     if (!flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_CORRUPT,"Bad MPI communicator supplied; must be a PETSc communicator");
105a2c4bf20SJed Brown     ierr = PetscMemcpy(&commp,&obj->comm,PetscMin(sizeof(commp),sizeof(obj->comm)));CHKERRQ(ierr);
106a2c4bf20SJed Brown     ierr = PetscSNPrintf(name,64,"%s_%p_%D",obj->class_name,commp,counter->namecount++);CHKERRQ(ierr);
107e5c89e4eSSatish Balay     ierr = PetscStrallocpy(name,&obj->name);CHKERRQ(ierr);
108e5c89e4eSSatish Balay   }
109e5c89e4eSSatish Balay   PetscFunctionReturn(0);
110e5c89e4eSSatish Balay }
111e5c89e4eSSatish Balay 
112e5c89e4eSSatish Balay 
113e5c89e4eSSatish Balay 
114e5c89e4eSSatish Balay #undef __FUNCT__
115e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectChangeTypeName"
1168738c821SJed Brown PetscErrorCode PETSCSYS_DLLEXPORT PetscObjectChangeTypeName(PetscObject obj,const char type_name[])
117e5c89e4eSSatish Balay {
118e5c89e4eSSatish Balay   PetscErrorCode ierr;
119e5c89e4eSSatish Balay 
120e5c89e4eSSatish Balay   PetscFunctionBegin;
1213cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
122e5c89e4eSSatish Balay   ierr = PetscObjectTakeAccess(obj);CHKERRQ(ierr);
123503cfb0cSBarry Smith   ierr = PetscFree(obj->type_name);CHKERRQ(ierr);
124e5c89e4eSSatish Balay   ierr = PetscStrallocpy(type_name,&obj->type_name);CHKERRQ(ierr);
125e5c89e4eSSatish Balay   ierr = PetscObjectGrantAccess(obj);CHKERRQ(ierr);
126e5c89e4eSSatish Balay   PetscFunctionReturn(0);
127e5c89e4eSSatish Balay }
128e5c89e4eSSatish Balay 
129