17d0a6c19SBarry Smith 2e5c89e4eSSatish Balay /* 3e5c89e4eSSatish Balay Provides utility routines for manulating any type of PETSc object. 4e5c89e4eSSatish Balay */ 5af0996ceSBarry Smith #include <petsc/private/petscimpl.h> /*I "petscsys.h" I*/ 6e5c89e4eSSatish Balay 7e5c89e4eSSatish Balay #undef __FUNCT__ 8c5929fdfSBarry Smith #define __FUNCT__ "PetscObjectSetOptions" 9c5929fdfSBarry Smith /*@C 10c5929fdfSBarry Smith PetscObjectSetOptions - Sets the options database used by the object 11c5929fdfSBarry Smith 12*96a0c994SBarry Smith Collective on PetscObject 13*96a0c994SBarry Smith 14c5929fdfSBarry Smith Input Parameters: 15c5929fdfSBarry Smith + obj - any PETSc object, for example a Vec, Mat or KSP. 16c5929fdfSBarry Smith - options - the options database, use NULL for default 17c5929fdfSBarry Smith 18c5929fdfSBarry Smith Notes: if this is not called the object will use the default options database 19c5929fdfSBarry Smith 20*96a0c994SBarry Smith Level: advanced 21*96a0c994SBarry Smith 22c5929fdfSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy() 23c5929fdfSBarry Smith 24*96a0c994SBarry Smith @*/ 25c5929fdfSBarry Smith PetscErrorCode PetscObjectSetOptions(PetscObject obj,PetscOptions options) 26c5929fdfSBarry Smith { 27c5929fdfSBarry Smith PetscFunctionBegin; 28c5929fdfSBarry Smith PetscValidHeader(obj,1); 29c5929fdfSBarry Smith obj->options = options; 30c5929fdfSBarry Smith PetscFunctionReturn(0); 31c5929fdfSBarry Smith } 32c5929fdfSBarry Smith 33c5929fdfSBarry Smith #undef __FUNCT__ 34e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectSetOptionsPrefix" 35e5c89e4eSSatish Balay /* 36e5c89e4eSSatish Balay PetscObjectSetOptionsPrefix - Sets the prefix used for searching for all 37e5c89e4eSSatish Balay options of PetscObjectType in the database. 38e5c89e4eSSatish Balay 39*96a0c994SBarry Smith Collective on Object 40*96a0c994SBarry Smith 41e5c89e4eSSatish Balay Input Parameters: 42e5c89e4eSSatish Balay . obj - any PETSc object, for example a Vec, Mat or KSP. 43e5c89e4eSSatish Balay . prefix - the prefix string to prepend to option requests of the object. 44e5c89e4eSSatish Balay 45e5c89e4eSSatish Balay Notes: 46e5c89e4eSSatish Balay A hyphen (-) must NOT be given at the beginning of the prefix name. 47e5c89e4eSSatish Balay The first character of all runtime options is AUTOMATICALLY the 48e5c89e4eSSatish Balay hyphen. 49e5c89e4eSSatish Balay 50e5c89e4eSSatish Balay Concepts: prefix^setting 51e5c89e4eSSatish Balay 52e5c89e4eSSatish Balay */ 537087cfbeSBarry Smith PetscErrorCode PetscObjectSetOptionsPrefix(PetscObject obj,const char prefix[]) 54e5c89e4eSSatish Balay { 55e5c89e4eSSatish Balay PetscErrorCode ierr; 56e5c89e4eSSatish Balay 57e5c89e4eSSatish Balay PetscFunctionBegin; 583cfa8680SLisandro Dalcin PetscValidHeader(obj,1); 59e5c89e4eSSatish Balay if (!prefix) { 60503cfb0cSBarry Smith ierr = PetscFree(obj->prefix);CHKERRQ(ierr); 61e5c89e4eSSatish Balay } else { 62e32f2f54SBarry Smith if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen"); 63503cfb0cSBarry Smith ierr = PetscFree(obj->prefix);CHKERRQ(ierr); 64e5c89e4eSSatish Balay ierr = PetscStrallocpy(prefix,&obj->prefix);CHKERRQ(ierr); 65e5c89e4eSSatish Balay } 66e5c89e4eSSatish Balay PetscFunctionReturn(0); 67e5c89e4eSSatish Balay } 68e5c89e4eSSatish Balay 69e5c89e4eSSatish Balay #undef __FUNCT__ 70e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectAppendOptionsPrefix" 71e5c89e4eSSatish Balay /* 72e5c89e4eSSatish Balay PetscObjectAppendOptionsPrefix - Sets the prefix used for searching for all 73e5c89e4eSSatish Balay options of PetscObjectType in the database. 74e5c89e4eSSatish Balay 75e5c89e4eSSatish Balay Input Parameters: 76e5c89e4eSSatish Balay . obj - any PETSc object, for example a Vec, Mat or KSP. 77e5c89e4eSSatish Balay . prefix - the prefix string to prepend to option requests of the object. 78e5c89e4eSSatish Balay 79e5c89e4eSSatish Balay Notes: 80e5c89e4eSSatish Balay A hyphen (-) must NOT be given at the beginning of the prefix name. 81e5c89e4eSSatish Balay The first character of all runtime options is AUTOMATICALLY the 82e5c89e4eSSatish Balay hyphen. 83e5c89e4eSSatish Balay 84e5c89e4eSSatish Balay Concepts: prefix^setting 85e5c89e4eSSatish Balay 86e5c89e4eSSatish Balay */ 877087cfbeSBarry Smith PetscErrorCode PetscObjectAppendOptionsPrefix(PetscObject obj,const char prefix[]) 88e5c89e4eSSatish Balay { 89e5c89e4eSSatish Balay char *buf = obj->prefix; 90e5c89e4eSSatish Balay PetscErrorCode ierr; 91e5c89e4eSSatish Balay size_t len1,len2; 92e5c89e4eSSatish Balay 93e5c89e4eSSatish Balay PetscFunctionBegin; 943cfa8680SLisandro Dalcin PetscValidHeader(obj,1); 95a297a907SKarl Rupp if (!prefix) PetscFunctionReturn(0); 96e5c89e4eSSatish Balay if (!buf) { 97e5c89e4eSSatish Balay ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr); 98e5c89e4eSSatish Balay PetscFunctionReturn(0); 99e5c89e4eSSatish Balay } 100e32f2f54SBarry Smith if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen"); 101e5c89e4eSSatish Balay 102e5c89e4eSSatish Balay ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr); 103e5c89e4eSSatish Balay ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr); 104854ce69bSBarry Smith ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr); 105e5c89e4eSSatish Balay ierr = PetscStrcpy(obj->prefix,buf);CHKERRQ(ierr); 106e5c89e4eSSatish Balay ierr = PetscStrcat(obj->prefix,prefix);CHKERRQ(ierr); 107e5c89e4eSSatish Balay ierr = PetscFree(buf);CHKERRQ(ierr); 108e5c89e4eSSatish Balay PetscFunctionReturn(0); 109e5c89e4eSSatish Balay } 110e5c89e4eSSatish Balay 111e5c89e4eSSatish Balay #undef __FUNCT__ 112e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectGetOptionsPrefix" 113e5c89e4eSSatish Balay /* 114e5c89e4eSSatish Balay PetscObjectGetOptionsPrefix - Gets the prefix of the PetscObject. 115e5c89e4eSSatish Balay 116e5c89e4eSSatish Balay Input Parameters: 117e5c89e4eSSatish Balay . obj - any PETSc object, for example a Vec, Mat or KSP. 118e5c89e4eSSatish Balay 119e5c89e4eSSatish Balay Output Parameters: 120e5c89e4eSSatish Balay . prefix - pointer to the prefix string used is returned 121e5c89e4eSSatish Balay 122e5c89e4eSSatish Balay Concepts: prefix^getting 123e5c89e4eSSatish Balay 124e5c89e4eSSatish Balay */ 1257087cfbeSBarry Smith PetscErrorCode PetscObjectGetOptionsPrefix(PetscObject obj,const char *prefix[]) 126e5c89e4eSSatish Balay { 127e5c89e4eSSatish Balay PetscFunctionBegin; 1283cfa8680SLisandro Dalcin PetscValidHeader(obj,1); 1293cfa8680SLisandro Dalcin PetscValidPointer(prefix,2); 130e5c89e4eSSatish Balay *prefix = obj->prefix; 131e5c89e4eSSatish Balay PetscFunctionReturn(0); 132e5c89e4eSSatish Balay } 133e5c89e4eSSatish Balay 134e5c89e4eSSatish Balay #undef __FUNCT__ 135e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectPrependOptionsPrefix" 136e5c89e4eSSatish Balay /* 137e5c89e4eSSatish Balay PetscObjectPrependOptionsPrefix - Sets the prefix used for searching for all 138e5c89e4eSSatish Balay options of PetscObjectType in the database. 139e5c89e4eSSatish Balay 140e5c89e4eSSatish Balay Input Parameters: 141e5c89e4eSSatish Balay . obj - any PETSc object, for example a Vec, Mat or KSP. 142e5c89e4eSSatish Balay . prefix - the prefix string to prepend to option requests of the object. 143e5c89e4eSSatish Balay 144e5c89e4eSSatish Balay Notes: 145e5c89e4eSSatish Balay A hyphen (-) must NOT be given at the beginning of the prefix name. 146e5c89e4eSSatish Balay The first character of all runtime options is AUTOMATICALLY the 147e5c89e4eSSatish Balay hyphen. 148e5c89e4eSSatish Balay 149e5c89e4eSSatish Balay Concepts: prefix^setting 150e5c89e4eSSatish Balay 151e5c89e4eSSatish Balay */ 1527087cfbeSBarry Smith PetscErrorCode PetscObjectPrependOptionsPrefix(PetscObject obj,const char prefix[]) 153e5c89e4eSSatish Balay { 1545c7534e4SLisandro Dalcin char *buf; 155e5c89e4eSSatish Balay size_t len1,len2; 1565c7534e4SLisandro Dalcin PetscErrorCode ierr; 157e5c89e4eSSatish Balay 158e5c89e4eSSatish Balay PetscFunctionBegin; 1593cfa8680SLisandro Dalcin PetscValidHeader(obj,1); 1605c7534e4SLisandro Dalcin buf = obj->prefix; 161a297a907SKarl Rupp if (!prefix) PetscFunctionReturn(0); 162e5c89e4eSSatish Balay if (!buf) { 163e5c89e4eSSatish Balay ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr); 164e5c89e4eSSatish Balay PetscFunctionReturn(0); 165e5c89e4eSSatish Balay } 166e32f2f54SBarry Smith if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen"); 167e5c89e4eSSatish Balay 168e5c89e4eSSatish Balay ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr); 169e5c89e4eSSatish Balay ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr); 170854ce69bSBarry Smith ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr); 171e5c89e4eSSatish Balay ierr = PetscStrcpy(obj->prefix,prefix);CHKERRQ(ierr); 172e5c89e4eSSatish Balay ierr = PetscStrcat(obj->prefix,buf);CHKERRQ(ierr); 173e5c89e4eSSatish Balay ierr = PetscFree(buf);CHKERRQ(ierr); 174e5c89e4eSSatish Balay PetscFunctionReturn(0); 175e5c89e4eSSatish Balay } 176e5c89e4eSSatish Balay 177