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 7c5929fdfSBarry Smith /*@C 8ffc43655SBarry Smith PetscObjectGetOptions - Gets the options database used by the object. Call immediately after creating the object. 9ffc43655SBarry Smith 10ffc43655SBarry Smith Collective on PetscObject 11ffc43655SBarry Smith 12ffc43655SBarry Smith Input Parameter: 13ffc43655SBarry Smith . obj - any PETSc object, for example a Vec, Mat or KSP. 14ffc43655SBarry Smith 15ffc43655SBarry Smith Output Parameter: 16ffc43655SBarry Smith . options - the options database 17ffc43655SBarry Smith 18ffc43655SBarry Smith Notes: 19ffc43655SBarry Smith if this is not called the object will use the default options database 20ffc43655SBarry Smith 21ffc43655SBarry Smith Level: advanced 22ffc43655SBarry Smith 23db781477SPatrick Sanan .seealso: `PetscOptionsCreate()`, `PetscOptionsDestroy()`, `PetscObjectSetOptionsPrefix()`, `PetscObjectAppendOptionsPrefix()`, `PetscObjectPrependOptionsPrefix()`, 24db781477SPatrick Sanan `PetscObjectGetOptionsPrefix()`, `PetscObjectSetOptions()` 25ffc43655SBarry Smith 26ffc43655SBarry Smith @*/ 27*9371c9d4SSatish Balay PetscErrorCode PetscObjectGetOptions(PetscObject obj, PetscOptions *options) { 28ffc43655SBarry Smith PetscFunctionBegin; 29ffc43655SBarry Smith PetscValidHeader(obj, 1); 30ffc43655SBarry Smith *options = obj->options; 31ffc43655SBarry Smith PetscFunctionReturn(0); 32ffc43655SBarry Smith } 33ffc43655SBarry Smith 34ffc43655SBarry Smith /*@C 3516413a6aSBarry Smith PetscObjectSetOptions - Sets the options database used by the object. Call immediately after creating the object. 36c5929fdfSBarry Smith 3796a0c994SBarry Smith Collective on PetscObject 3896a0c994SBarry Smith 39c5929fdfSBarry Smith Input Parameters: 40c5929fdfSBarry Smith + obj - any PETSc object, for example a Vec, Mat or KSP. 41c5929fdfSBarry Smith - options - the options database, use NULL for default 42c5929fdfSBarry Smith 4395452b02SPatrick Sanan Notes: 4495452b02SPatrick Sanan if this is not called the object will use the default options database 45c5929fdfSBarry Smith 4696a0c994SBarry Smith Level: advanced 4796a0c994SBarry Smith 48db781477SPatrick Sanan .seealso: `PetscOptionsCreate()`, `PetscOptionsDestroy()`, `PetscObjectSetOptionsPrefix()`, `PetscObjectAppendOptionsPrefix()`, `PetscObjectPrependOptionsPrefix()`, 49db781477SPatrick Sanan `PetscObjectGetOptionsPrefix()`, `PetscObjectGetOptions()` 50c5929fdfSBarry Smith 5196a0c994SBarry Smith @*/ 52*9371c9d4SSatish Balay PetscErrorCode PetscObjectSetOptions(PetscObject obj, PetscOptions options) { 53c5929fdfSBarry Smith PetscFunctionBegin; 54c5929fdfSBarry Smith PetscValidHeader(obj, 1); 55c5929fdfSBarry Smith obj->options = options; 56c5929fdfSBarry Smith PetscFunctionReturn(0); 57c5929fdfSBarry Smith } 58c5929fdfSBarry Smith 595cec412bSBarry Smith /*@C 60e5c89e4eSSatish Balay PetscObjectSetOptionsPrefix - Sets the prefix used for searching for all 61e5c89e4eSSatish Balay options of PetscObjectType in the database. 62e5c89e4eSSatish Balay 6396a0c994SBarry Smith Collective on Object 6496a0c994SBarry Smith 65e5c89e4eSSatish Balay Input Parameters: 66a2b725a8SWilliam Gropp + obj - any PETSc object, for example a Vec, Mat or KSP. 67a2b725a8SWilliam Gropp - prefix - the prefix string to prepend to option requests of the object. 68e5c89e4eSSatish Balay 69e5c89e4eSSatish Balay Notes: 70e5c89e4eSSatish Balay A hyphen (-) must NOT be given at the beginning of the prefix name. 71e5c89e4eSSatish Balay The first character of all runtime options is AUTOMATICALLY the 72e5c89e4eSSatish Balay hyphen. 73e5c89e4eSSatish Balay 74edc382c3SSatish Balay Level: advanced 75edc382c3SSatish Balay 76db781477SPatrick Sanan .seealso: `PetscOptionsCreate()`, `PetscOptionsDestroy()`, `PetscObjectAppendOptionsPrefix()`, `PetscObjectPrependOptionsPrefix()`, 77db781477SPatrick Sanan `PetscObjectGetOptionsPrefix()`, `TSSetOptionsPrefix()`, `SNESSetOptionsPrefix()`, `KSPSetOptionsPrefix()` 785cec412bSBarry Smith 795cec412bSBarry Smith @*/ 80*9371c9d4SSatish Balay PetscErrorCode PetscObjectSetOptionsPrefix(PetscObject obj, const char prefix[]) { 81e5c89e4eSSatish Balay PetscFunctionBegin; 823cfa8680SLisandro Dalcin PetscValidHeader(obj, 1); 835f80ce2aSJacob Faibussowitsch if (prefix) { 845f80ce2aSJacob Faibussowitsch PetscValidCharPointer(prefix, 2); 855f80ce2aSJacob Faibussowitsch PetscCheck(prefix[0] != '-', PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Options prefix should not begin with a hyphen"); 864ed52fbaSBarry Smith if (prefix != obj->prefix) { 879566063dSJacob Faibussowitsch PetscCall(PetscFree(obj->prefix)); 889566063dSJacob Faibussowitsch PetscCall(PetscStrallocpy(prefix, &obj->prefix)); 89e5c89e4eSSatish Balay } 909566063dSJacob Faibussowitsch } else PetscCall(PetscFree(obj->prefix)); 91e5c89e4eSSatish Balay PetscFunctionReturn(0); 92e5c89e4eSSatish Balay } 93e5c89e4eSSatish Balay 945cec412bSBarry Smith /*@C 9582b5ce2aSStefano Zampini PetscObjectAppendOptionsPrefix - Appends to the prefix used for searching for all 96e5c89e4eSSatish Balay options of PetscObjectType in the database. 97e5c89e4eSSatish Balay 98e5c89e4eSSatish Balay Input Parameters: 99a2b725a8SWilliam Gropp + obj - any PETSc object, for example a Vec, Mat or KSP. 100a2b725a8SWilliam Gropp - prefix - the prefix string to prepend to option requests of the object. 101e5c89e4eSSatish Balay 102e5c89e4eSSatish Balay Notes: 103e5c89e4eSSatish Balay A hyphen (-) must NOT be given at the beginning of the prefix name. 104e5c89e4eSSatish Balay The first character of all runtime options is AUTOMATICALLY the 105e5c89e4eSSatish Balay hyphen. 106e5c89e4eSSatish Balay 107edc382c3SSatish Balay Level: advanced 108edc382c3SSatish Balay 109db781477SPatrick Sanan .seealso: `PetscOptionsCreate()`, `PetscOptionsDestroy()`, `PetscObjectSetOptionsPrefix()`, `PetscObjectPrependOptionsPrefix()`, 110db781477SPatrick Sanan `PetscObjectGetOptionsPrefix()`, `TSAppendOptionsPrefix()`, `SNESAppendOptionsPrefix()`, `KSPAppendOptionsPrefix()` 1115cec412bSBarry Smith 1125cec412bSBarry Smith @*/ 113*9371c9d4SSatish Balay PetscErrorCode PetscObjectAppendOptionsPrefix(PetscObject obj, const char prefix[]) { 114e5c89e4eSSatish Balay char *buf = obj->prefix; 115e5c89e4eSSatish Balay size_t len1, len2; 116e5c89e4eSSatish Balay 117e5c89e4eSSatish Balay PetscFunctionBegin; 1183cfa8680SLisandro Dalcin PetscValidHeader(obj, 1); 119a297a907SKarl Rupp if (!prefix) PetscFunctionReturn(0); 120e5c89e4eSSatish Balay if (!buf) { 1219566063dSJacob Faibussowitsch PetscCall(PetscObjectSetOptionsPrefix(obj, prefix)); 122e5c89e4eSSatish Balay PetscFunctionReturn(0); 123e5c89e4eSSatish Balay } 124cc73adaaSBarry Smith PetscCheck(prefix[0] != '-', PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Options prefix should not begin with a hyphen"); 125e5c89e4eSSatish Balay 1269566063dSJacob Faibussowitsch PetscCall(PetscStrlen(prefix, &len1)); 1279566063dSJacob Faibussowitsch PetscCall(PetscStrlen(buf, &len2)); 1289566063dSJacob Faibussowitsch PetscCall(PetscMalloc1(1 + len1 + len2, &obj->prefix)); 1299566063dSJacob Faibussowitsch PetscCall(PetscStrcpy(obj->prefix, buf)); 1309566063dSJacob Faibussowitsch PetscCall(PetscStrcat(obj->prefix, prefix)); 1319566063dSJacob Faibussowitsch PetscCall(PetscFree(buf)); 132e5c89e4eSSatish Balay PetscFunctionReturn(0); 133e5c89e4eSSatish Balay } 134e5c89e4eSSatish Balay 1355cec412bSBarry Smith /*@C 136e5c89e4eSSatish Balay PetscObjectGetOptionsPrefix - Gets the prefix of the PetscObject. 137e5c89e4eSSatish Balay 138e5c89e4eSSatish Balay Input Parameters: 139e5c89e4eSSatish Balay . obj - any PETSc object, for example a Vec, Mat or KSP. 140e5c89e4eSSatish Balay 141e5c89e4eSSatish Balay Output Parameters: 142e5c89e4eSSatish Balay . prefix - pointer to the prefix string used is returned 143e5c89e4eSSatish Balay 144edc382c3SSatish Balay Level: advanced 145edc382c3SSatish Balay 146db781477SPatrick Sanan .seealso: `PetscOptionsCreate()`, `PetscOptionsDestroy()`, `PetscObjectSetOptionsPrefix()`, `PetscObjectAppendOptionsPrefix()`, `PetscObjectPrependOptionsPrefix()`, 147db781477SPatrick Sanan `TSGetOptionsPrefix()`, `SNESGetOptionsPrefix()`, `KSPGetOptionsPrefix()` 1485cec412bSBarry Smith 1495cec412bSBarry Smith @*/ 150*9371c9d4SSatish Balay PetscErrorCode PetscObjectGetOptionsPrefix(PetscObject obj, const char *prefix[]) { 151e5c89e4eSSatish Balay PetscFunctionBegin; 1523cfa8680SLisandro Dalcin PetscValidHeader(obj, 1); 1533cfa8680SLisandro Dalcin PetscValidPointer(prefix, 2); 154e5c89e4eSSatish Balay *prefix = obj->prefix; 155e5c89e4eSSatish Balay PetscFunctionReturn(0); 156e5c89e4eSSatish Balay } 157e5c89e4eSSatish Balay 1585cec412bSBarry Smith /*@C 159e5c89e4eSSatish Balay PetscObjectPrependOptionsPrefix - Sets the prefix used for searching for all 160e5c89e4eSSatish Balay options of PetscObjectType in the database. 161e5c89e4eSSatish Balay 162e5c89e4eSSatish Balay Input Parameters: 163a2b725a8SWilliam Gropp + obj - any PETSc object, for example a Vec, Mat or KSP. 164a2b725a8SWilliam Gropp - prefix - the prefix string to prepend to option requests of the object. 165e5c89e4eSSatish Balay 166e5c89e4eSSatish Balay Notes: 167e5c89e4eSSatish Balay A hyphen (-) must NOT be given at the beginning of the prefix name. 168e5c89e4eSSatish Balay The first character of all runtime options is AUTOMATICALLY the 169e5c89e4eSSatish Balay hyphen. 170e5c89e4eSSatish Balay 171edc382c3SSatish Balay Level: advanced 172edc382c3SSatish Balay 173db781477SPatrick Sanan .seealso: `PetscOptionsCreate()`, `PetscOptionsDestroy()`, `PetscObjectSetOptionsPrefix()`, `PetscObjectAppendOptionsPrefix()`, 174db781477SPatrick Sanan `PetscObjectGetOptionsPrefix()` 1755cec412bSBarry Smith 1765cec412bSBarry Smith @*/ 177*9371c9d4SSatish Balay PetscErrorCode PetscObjectPrependOptionsPrefix(PetscObject obj, const char prefix[]) { 1785c7534e4SLisandro Dalcin char *buf; 179e5c89e4eSSatish Balay size_t len1, len2; 180e5c89e4eSSatish Balay 181e5c89e4eSSatish Balay PetscFunctionBegin; 1823cfa8680SLisandro Dalcin PetscValidHeader(obj, 1); 1835c7534e4SLisandro Dalcin buf = obj->prefix; 184a297a907SKarl Rupp if (!prefix) PetscFunctionReturn(0); 185e5c89e4eSSatish Balay if (!buf) { 1869566063dSJacob Faibussowitsch PetscCall(PetscObjectSetOptionsPrefix(obj, prefix)); 187e5c89e4eSSatish Balay PetscFunctionReturn(0); 188e5c89e4eSSatish Balay } 189cc73adaaSBarry Smith PetscCheck(prefix[0] != '-', PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Options prefix should not begin with a hyphen"); 190e5c89e4eSSatish Balay 1919566063dSJacob Faibussowitsch PetscCall(PetscStrlen(prefix, &len1)); 1929566063dSJacob Faibussowitsch PetscCall(PetscStrlen(buf, &len2)); 1939566063dSJacob Faibussowitsch PetscCall(PetscMalloc1(1 + len1 + len2, &obj->prefix)); 1949566063dSJacob Faibussowitsch PetscCall(PetscStrcpy(obj->prefix, prefix)); 1959566063dSJacob Faibussowitsch PetscCall(PetscStrcat(obj->prefix, buf)); 1969566063dSJacob Faibussowitsch PetscCall(PetscFree(buf)); 197e5c89e4eSSatish Balay PetscFunctionReturn(0); 198e5c89e4eSSatish Balay } 199