xref: /petsc/src/sys/objects/pname.c (revision 9ddcd10caeba5234543deec5618b8ba341890e1d)
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__
36317d6ea6SBarry Smith #define __FUNCT__ "PetscObjectPrintClassNamePrefixType"
37317d6ea6SBarry Smith /*@C
38317d6ea6SBarry Smith       PetscObjectPrintTypeNamePrefix - used in the XXXView() methods to display information about the class, name, prefix and type of an object
39317d6ea6SBarry Smith 
40317d6ea6SBarry Smith    Input Parameters:
41317d6ea6SBarry Smith +     obj - the PETSc object
42317d6ea6SBarry Smith .     viewer - ASCII viewer where the information is printed
43317d6ea6SBarry Smith -     string - for example "Matrix Object"
44317d6ea6SBarry Smith 
45317d6ea6SBarry Smith    Level: developer
46317d6ea6SBarry Smith 
47317d6ea6SBarry Smith .seealso: PetscObjectSetName(), PetscObjectName()
48317d6ea6SBarry Smith 
49317d6ea6SBarry Smith @*/
50317d6ea6SBarry Smith PetscErrorCode PetscObjectPrintClassNamePrefixType(PetscObject obj,PetscViewer viewer,const char string[])
51317d6ea6SBarry Smith {
52317d6ea6SBarry Smith   PetscErrorCode ierr;
53317d6ea6SBarry Smith 
54317d6ea6SBarry Smith   PetscFunctionBegin;
55317d6ea6SBarry Smith   ierr = PetscViewerASCIIPrintf(viewer,"%s:",string);CHKERRQ(ierr);
56317d6ea6SBarry Smith   if (obj->name) {
57317d6ea6SBarry Smith     ierr = PetscViewerASCIIPrintf(viewer,"%s",obj->name);CHKERRQ(ierr);
58317d6ea6SBarry Smith   }
59317d6ea6SBarry Smith   if (obj->prefix) {
60317d6ea6SBarry Smith     ierr = PetscViewerASCIIPrintf(viewer,"(%s)",obj->prefix);CHKERRQ(ierr);
61317d6ea6SBarry Smith   }
62317d6ea6SBarry Smith   ierr = PetscViewerASCIIPrintf(viewer,"\n");CHKERRQ(ierr);
63317d6ea6SBarry Smith   if (obj->type_name) {
64317d6ea6SBarry Smith     ierr = PetscViewerASCIIPrintf(viewer,"  type: %s\n",obj->type_name);CHKERRQ(ierr);
65317d6ea6SBarry Smith   } else {
66317d6ea6SBarry Smith     ierr = PetscViewerASCIIPrintf(viewer,"  type not yet set\n");CHKERRQ(ierr);
67317d6ea6SBarry Smith   }
68317d6ea6SBarry Smith   PetscFunctionReturn(0);
69317d6ea6SBarry Smith }
70317d6ea6SBarry Smith 
71317d6ea6SBarry 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,
81317d6ea6SBarry Smith          PetscObjectName((PetscObject)mat,name);
82e5c89e4eSSatish Balay 
83317d6ea6SBarry Smith    Level: developer
84e5c89e4eSSatish Balay 
85e5c89e4eSSatish Balay    Concepts: object name^setting default
86e5c89e4eSSatish Balay 
87317d6ea6SBarry 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*9ddcd10cSBarry Smith           Use PetscObjectSetName() to set the name of an object to what you want. The AMS viewer requires that no two published objects
89*9ddcd10cSBarry Smith           share the same name.
90*9ddcd10cSBarry Smith 
91*9ddcd10cSBarry Smith    Developer Note: this needs to generate the exact same string on all ranks that share the object. The current algorithm may not always work.
92*9ddcd10cSBarry Smith 
93*9ddcd10cSBarry Smith 
94317d6ea6SBarry Smith 
95e5c89e4eSSatish Balay .seealso: PetscObjectGetName(), PetscObjectSetName()
96e5c89e4eSSatish Balay @*/
978738c821SJed Brown PetscErrorCode PETSCSYS_DLLEXPORT PetscObjectName(PetscObject obj)
98e5c89e4eSSatish Balay {
99e5c89e4eSSatish Balay   PetscErrorCode   ierr;
100480cf27aSJed Brown   PetscCommCounter *counter;
101480cf27aSJed Brown   PetscMPIInt      flg;
102e5c89e4eSSatish Balay   char             name[64];
103e5c89e4eSSatish Balay 
104e5c89e4eSSatish Balay   PetscFunctionBegin;
1053cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
106e5c89e4eSSatish Balay   if (!obj->name) {
107a2c4bf20SJed Brown     void *commp = 0;
108480cf27aSJed Brown     ierr = MPI_Attr_get(obj->comm,Petsc_Counter_keyval,(void*)&counter,&flg);CHKERRQ(ierr);
109e32f2f54SBarry Smith     if (!flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_CORRUPT,"Bad MPI communicator supplied; must be a PETSc communicator");
110a2c4bf20SJed Brown     ierr = PetscMemcpy(&commp,&obj->comm,PetscMin(sizeof(commp),sizeof(obj->comm)));CHKERRQ(ierr);
111a2c4bf20SJed Brown     ierr = PetscSNPrintf(name,64,"%s_%p_%D",obj->class_name,commp,counter->namecount++);CHKERRQ(ierr);
112e5c89e4eSSatish Balay     ierr = PetscStrallocpy(name,&obj->name);CHKERRQ(ierr);
113e5c89e4eSSatish Balay   }
114e5c89e4eSSatish Balay   PetscFunctionReturn(0);
115e5c89e4eSSatish Balay }
116e5c89e4eSSatish Balay 
117e5c89e4eSSatish Balay 
118e5c89e4eSSatish Balay 
119e5c89e4eSSatish Balay #undef __FUNCT__
120e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectChangeTypeName"
1218738c821SJed Brown PetscErrorCode PETSCSYS_DLLEXPORT PetscObjectChangeTypeName(PetscObject obj,const char type_name[])
122e5c89e4eSSatish Balay {
123e5c89e4eSSatish Balay   PetscErrorCode ierr;
124e5c89e4eSSatish Balay 
125e5c89e4eSSatish Balay   PetscFunctionBegin;
1263cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
127e5c89e4eSSatish Balay   ierr = PetscObjectTakeAccess(obj);CHKERRQ(ierr);
128503cfb0cSBarry Smith   ierr = PetscFree(obj->type_name);CHKERRQ(ierr);
129e5c89e4eSSatish Balay   ierr = PetscStrallocpy(type_name,&obj->type_name);CHKERRQ(ierr);
130e5c89e4eSSatish Balay   ierr = PetscObjectGrantAccess(obj);CHKERRQ(ierr);
131e5c89e4eSSatish Balay   PetscFunctionReturn(0);
132e5c89e4eSSatish Balay }
133e5c89e4eSSatish Balay 
134