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