xref: /petsc/src/sys/objects/pname.c (revision a2c4bf2057bf6c4f707c287b8650091be2b4bd79)
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__
36e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectName"
37e5c89e4eSSatish Balay /*@C
38e5c89e4eSSatish Balay    PetscObjectName - Gives an object a name if it does not have one
39e5c89e4eSSatish Balay 
40e5c89e4eSSatish Balay    Not Collective
41e5c89e4eSSatish Balay 
42e5c89e4eSSatish Balay    Input Parameters:
43e5c89e4eSSatish Balay .  obj - the Petsc variable
44e5c89e4eSSatish Balay          Thus must be cast with a (PetscObject), for example,
45e5c89e4eSSatish Balay          PetscObjectSetName((PetscObject)mat,name);
46e5c89e4eSSatish Balay 
47e5c89e4eSSatish Balay    Level: advanced
48e5c89e4eSSatish Balay 
49e5c89e4eSSatish Balay    Concepts: object name^setting default
50e5c89e4eSSatish Balay 
51e5c89e4eSSatish Balay .seealso: PetscObjectGetName(), PetscObjectSetName()
52e5c89e4eSSatish Balay @*/
538738c821SJed Brown PetscErrorCode PETSCSYS_DLLEXPORT PetscObjectName(PetscObject obj)
54e5c89e4eSSatish Balay {
55e5c89e4eSSatish Balay   PetscErrorCode   ierr;
56480cf27aSJed Brown   PetscCommCounter *counter;
57480cf27aSJed Brown   PetscMPIInt      flg;
58e5c89e4eSSatish Balay   char             name[64];
59e5c89e4eSSatish Balay 
60e5c89e4eSSatish Balay   PetscFunctionBegin;
613cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
62e5c89e4eSSatish Balay   if (!obj->name) {
63*a2c4bf20SJed Brown     void *commp = 0;
64480cf27aSJed Brown     ierr = MPI_Attr_get(obj->comm,Petsc_Counter_keyval,(void*)&counter,&flg);CHKERRQ(ierr);
65e32f2f54SBarry Smith     if (!flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_CORRUPT,"Bad MPI communicator supplied; must be a PETSc communicator");
66*a2c4bf20SJed Brown     ierr = PetscMemcpy(&commp,&obj->comm,PetscMin(sizeof(commp),sizeof(obj->comm)));CHKERRQ(ierr);
67*a2c4bf20SJed Brown     ierr = PetscSNPrintf(name,64,"%s_%p_%D",obj->class_name,commp,counter->namecount++);CHKERRQ(ierr);
68e5c89e4eSSatish Balay     ierr = PetscStrallocpy(name,&obj->name);CHKERRQ(ierr);
69e5c89e4eSSatish Balay   }
70e5c89e4eSSatish Balay   PetscFunctionReturn(0);
71e5c89e4eSSatish Balay }
72e5c89e4eSSatish Balay 
73e5c89e4eSSatish Balay 
74e5c89e4eSSatish Balay 
75e5c89e4eSSatish Balay #undef __FUNCT__
76e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectChangeTypeName"
778738c821SJed Brown PetscErrorCode PETSCSYS_DLLEXPORT PetscObjectChangeTypeName(PetscObject obj,const char type_name[])
78e5c89e4eSSatish Balay {
79e5c89e4eSSatish Balay   PetscErrorCode ierr;
80e5c89e4eSSatish Balay 
81e5c89e4eSSatish Balay   PetscFunctionBegin;
823cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
83e5c89e4eSSatish Balay   ierr = PetscObjectTakeAccess(obj);CHKERRQ(ierr);
84503cfb0cSBarry Smith   ierr = PetscFree(obj->type_name);CHKERRQ(ierr);
85e5c89e4eSSatish Balay   ierr = PetscStrallocpy(type_name,&obj->type_name);CHKERRQ(ierr);
86e5c89e4eSSatish Balay   ierr = PetscObjectGrantAccess(obj);CHKERRQ(ierr);
87e5c89e4eSSatish Balay   PetscFunctionReturn(0);
88e5c89e4eSSatish Balay }
89e5c89e4eSSatish Balay 
90