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