1e5c89e4eSSatish Balay #define PETSC_DLL 2e5c89e4eSSatish Balay /* 3e5c89e4eSSatish Balay Provides utility routines for manulating any type of PETSc object. 4e5c89e4eSSatish Balay */ 5d382aafbSBarry Smith #include "petscsys.h" /*I "petscsys.h" I*/ 6e5c89e4eSSatish Balay 7e5c89e4eSSatish Balay #undef __FUNCT__ 8e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectSetOptionsPrefix" 9e5c89e4eSSatish Balay /* 10e5c89e4eSSatish Balay PetscObjectSetOptionsPrefix - Sets the prefix used for searching for all 11e5c89e4eSSatish Balay options of PetscObjectType in the database. 12e5c89e4eSSatish Balay 13e5c89e4eSSatish Balay Input Parameters: 14e5c89e4eSSatish Balay . obj - any PETSc object, for example a Vec, Mat or KSP. 15e5c89e4eSSatish Balay . prefix - the prefix string to prepend to option requests of the object. 16e5c89e4eSSatish Balay 17e5c89e4eSSatish Balay Notes: 18e5c89e4eSSatish Balay A hyphen (-) must NOT be given at the beginning of the prefix name. 19e5c89e4eSSatish Balay The first character of all runtime options is AUTOMATICALLY the 20e5c89e4eSSatish Balay hyphen. 21e5c89e4eSSatish Balay 22e5c89e4eSSatish Balay Concepts: prefix^setting 23e5c89e4eSSatish Balay 24e5c89e4eSSatish Balay */ 25e5c89e4eSSatish Balay PetscErrorCode PETSC_DLLEXPORT PetscObjectSetOptionsPrefix(PetscObject obj,const char prefix[]) 26e5c89e4eSSatish Balay { 27e5c89e4eSSatish Balay PetscErrorCode ierr; 28e5c89e4eSSatish Balay 29e5c89e4eSSatish Balay PetscFunctionBegin; 303cfa8680SLisandro Dalcin PetscValidHeader(obj,1); 31e5c89e4eSSatish Balay if (!prefix) { 32503cfb0cSBarry Smith ierr = PetscFree(obj->prefix);CHKERRQ(ierr); 33e5c89e4eSSatish Balay obj->prefix = PETSC_NULL; 34e5c89e4eSSatish Balay } else { 35*e32f2f54SBarry Smith if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen"); 36503cfb0cSBarry Smith ierr = PetscFree(obj->prefix);CHKERRQ(ierr); 37e5c89e4eSSatish Balay ierr = PetscStrallocpy(prefix,&obj->prefix);CHKERRQ(ierr); 38e5c89e4eSSatish Balay } 39e5c89e4eSSatish Balay PetscFunctionReturn(0); 40e5c89e4eSSatish Balay } 41e5c89e4eSSatish Balay 42e5c89e4eSSatish Balay #undef __FUNCT__ 43e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectAppendOptionsPrefix" 44e5c89e4eSSatish Balay /* 45e5c89e4eSSatish Balay PetscObjectAppendOptionsPrefix - Sets the prefix used for searching for all 46e5c89e4eSSatish Balay options of PetscObjectType in the database. 47e5c89e4eSSatish Balay 48e5c89e4eSSatish Balay Input Parameters: 49e5c89e4eSSatish Balay . obj - any PETSc object, for example a Vec, Mat or KSP. 50e5c89e4eSSatish Balay . prefix - the prefix string to prepend to option requests of the object. 51e5c89e4eSSatish Balay 52e5c89e4eSSatish Balay Notes: 53e5c89e4eSSatish Balay A hyphen (-) must NOT be given at the beginning of the prefix name. 54e5c89e4eSSatish Balay The first character of all runtime options is AUTOMATICALLY the 55e5c89e4eSSatish Balay hyphen. 56e5c89e4eSSatish Balay 57e5c89e4eSSatish Balay Concepts: prefix^setting 58e5c89e4eSSatish Balay 59e5c89e4eSSatish Balay */ 60e5c89e4eSSatish Balay PetscErrorCode PETSC_DLLEXPORT PetscObjectAppendOptionsPrefix(PetscObject obj,const char prefix[]) 61e5c89e4eSSatish Balay { 62e5c89e4eSSatish Balay char *buf = obj->prefix; 63e5c89e4eSSatish Balay PetscErrorCode ierr; 64e5c89e4eSSatish Balay size_t len1,len2; 65e5c89e4eSSatish Balay 66e5c89e4eSSatish Balay PetscFunctionBegin; 673cfa8680SLisandro Dalcin PetscValidHeader(obj,1); 68e5c89e4eSSatish Balay if (!prefix) {PetscFunctionReturn(0);} 69e5c89e4eSSatish Balay if (!buf) { 70e5c89e4eSSatish Balay ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr); 71e5c89e4eSSatish Balay PetscFunctionReturn(0); 72e5c89e4eSSatish Balay } 73*e32f2f54SBarry Smith if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen"); 74e5c89e4eSSatish Balay 75e5c89e4eSSatish Balay ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr); 76e5c89e4eSSatish Balay ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr); 77e5c89e4eSSatish Balay ierr = PetscMalloc((1+len1+len2)*sizeof(char),&obj->prefix);CHKERRQ(ierr); 78e5c89e4eSSatish Balay ierr = PetscStrcpy(obj->prefix,buf);CHKERRQ(ierr); 79e5c89e4eSSatish Balay ierr = PetscStrcat(obj->prefix,prefix);CHKERRQ(ierr); 80e5c89e4eSSatish Balay ierr = PetscFree(buf);CHKERRQ(ierr); 81e5c89e4eSSatish Balay PetscFunctionReturn(0); 82e5c89e4eSSatish Balay } 83e5c89e4eSSatish Balay 84e5c89e4eSSatish Balay #undef __FUNCT__ 85e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectGetOptionsPrefix" 86e5c89e4eSSatish Balay /* 87e5c89e4eSSatish Balay PetscObjectGetOptionsPrefix - Gets the prefix of the PetscObject. 88e5c89e4eSSatish Balay 89e5c89e4eSSatish Balay Input Parameters: 90e5c89e4eSSatish Balay . obj - any PETSc object, for example a Vec, Mat or KSP. 91e5c89e4eSSatish Balay 92e5c89e4eSSatish Balay Output Parameters: 93e5c89e4eSSatish Balay . prefix - pointer to the prefix string used is returned 94e5c89e4eSSatish Balay 95e5c89e4eSSatish Balay Concepts: prefix^getting 96e5c89e4eSSatish Balay 97e5c89e4eSSatish Balay */ 98e5c89e4eSSatish Balay PetscErrorCode PETSC_DLLEXPORT PetscObjectGetOptionsPrefix(PetscObject obj,const char *prefix[]) 99e5c89e4eSSatish Balay { 100e5c89e4eSSatish Balay PetscFunctionBegin; 1013cfa8680SLisandro Dalcin PetscValidHeader(obj,1); 1023cfa8680SLisandro Dalcin PetscValidPointer(prefix,2); 103e5c89e4eSSatish Balay *prefix = obj->prefix; 104e5c89e4eSSatish Balay PetscFunctionReturn(0); 105e5c89e4eSSatish Balay } 106e5c89e4eSSatish Balay 107e5c89e4eSSatish Balay #undef __FUNCT__ 108e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectPrependOptionsPrefix" 109e5c89e4eSSatish Balay /* 110e5c89e4eSSatish Balay PetscObjectPrependOptionsPrefix - Sets the prefix used for searching for all 111e5c89e4eSSatish Balay options of PetscObjectType in the database. 112e5c89e4eSSatish Balay 113e5c89e4eSSatish Balay Input Parameters: 114e5c89e4eSSatish Balay . obj - any PETSc object, for example a Vec, Mat or KSP. 115e5c89e4eSSatish Balay . prefix - the prefix string to prepend to option requests of the object. 116e5c89e4eSSatish Balay 117e5c89e4eSSatish Balay Notes: 118e5c89e4eSSatish Balay A hyphen (-) must NOT be given at the beginning of the prefix name. 119e5c89e4eSSatish Balay The first character of all runtime options is AUTOMATICALLY the 120e5c89e4eSSatish Balay hyphen. 121e5c89e4eSSatish Balay 122e5c89e4eSSatish Balay Concepts: prefix^setting 123e5c89e4eSSatish Balay 124e5c89e4eSSatish Balay */ 125e5c89e4eSSatish Balay PetscErrorCode PETSC_DLLEXPORT PetscObjectPrependOptionsPrefix(PetscObject obj,const char prefix[]) 126e5c89e4eSSatish Balay { 1275c7534e4SLisandro Dalcin char *buf; 128e5c89e4eSSatish Balay size_t len1,len2; 1295c7534e4SLisandro Dalcin PetscErrorCode ierr; 130e5c89e4eSSatish Balay 131e5c89e4eSSatish Balay PetscFunctionBegin; 1323cfa8680SLisandro Dalcin PetscValidHeader(obj,1); 1335c7534e4SLisandro Dalcin buf = obj->prefix; 134e5c89e4eSSatish Balay if (!prefix) {PetscFunctionReturn(0);} 135e5c89e4eSSatish Balay if (!buf) { 136e5c89e4eSSatish Balay ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr); 137e5c89e4eSSatish Balay PetscFunctionReturn(0); 138e5c89e4eSSatish Balay } 139*e32f2f54SBarry Smith if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen"); 140e5c89e4eSSatish Balay 141e5c89e4eSSatish Balay ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr); 142e5c89e4eSSatish Balay ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr); 143e5c89e4eSSatish Balay ierr = PetscMalloc((1+len1+len2)*sizeof(char),&obj->prefix);CHKERRQ(ierr); 144e5c89e4eSSatish Balay ierr = PetscStrcpy(obj->prefix,prefix);CHKERRQ(ierr); 145e5c89e4eSSatish Balay ierr = PetscStrcat(obj->prefix,buf);CHKERRQ(ierr); 146e5c89e4eSSatish Balay ierr = PetscFree(buf);CHKERRQ(ierr); 147e5c89e4eSSatish Balay PetscFunctionReturn(0); 148e5c89e4eSSatish Balay } 149e5c89e4eSSatish Balay 150