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 23ffc43655SBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(), 24ffc43655SBarry Smith PetscObjectGetOptionsPrefix(), PetscObjectSetOptions() 25ffc43655SBarry Smith 26ffc43655SBarry Smith @*/ 27ffc43655SBarry Smith PetscErrorCode PetscObjectGetOptions(PetscObject obj,PetscOptions *options) 28ffc43655SBarry Smith { 29ffc43655SBarry Smith PetscFunctionBegin; 30ffc43655SBarry Smith PetscValidHeader(obj,1); 31ffc43655SBarry Smith *options = obj->options; 32ffc43655SBarry Smith PetscFunctionReturn(0); 33ffc43655SBarry Smith } 34ffc43655SBarry Smith 35ffc43655SBarry Smith /*@C 3616413a6aSBarry Smith PetscObjectSetOptions - Sets the options database used by the object. Call immediately after creating the object. 37c5929fdfSBarry Smith 3896a0c994SBarry Smith Collective on PetscObject 3996a0c994SBarry Smith 40c5929fdfSBarry Smith Input Parameters: 41c5929fdfSBarry Smith + obj - any PETSc object, for example a Vec, Mat or KSP. 42c5929fdfSBarry Smith - options - the options database, use NULL for default 43c5929fdfSBarry Smith 4495452b02SPatrick Sanan Notes: 4595452b02SPatrick Sanan if this is not called the object will use the default options database 46c5929fdfSBarry Smith 4796a0c994SBarry Smith Level: advanced 4896a0c994SBarry Smith 495cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(), 50ffc43655SBarry Smith PetscObjectGetOptionsPrefix(), PetscObjectGetOptions() 51c5929fdfSBarry Smith 5296a0c994SBarry Smith @*/ 53c5929fdfSBarry Smith PetscErrorCode PetscObjectSetOptions(PetscObject obj,PetscOptions options) 54c5929fdfSBarry Smith { 55c5929fdfSBarry Smith PetscFunctionBegin; 56c5929fdfSBarry Smith PetscValidHeader(obj,1); 57c5929fdfSBarry Smith obj->options = options; 58c5929fdfSBarry Smith PetscFunctionReturn(0); 59c5929fdfSBarry Smith } 60c5929fdfSBarry Smith 615cec412bSBarry Smith /*@C 62e5c89e4eSSatish Balay PetscObjectSetOptionsPrefix - Sets the prefix used for searching for all 63e5c89e4eSSatish Balay options of PetscObjectType in the database. 64e5c89e4eSSatish Balay 6596a0c994SBarry Smith Collective on Object 6696a0c994SBarry Smith 67e5c89e4eSSatish Balay Input Parameters: 68a2b725a8SWilliam Gropp + obj - any PETSc object, for example a Vec, Mat or KSP. 69a2b725a8SWilliam Gropp - prefix - the prefix string to prepend to option requests of the object. 70e5c89e4eSSatish Balay 71e5c89e4eSSatish Balay Notes: 72e5c89e4eSSatish Balay A hyphen (-) must NOT be given at the beginning of the prefix name. 73e5c89e4eSSatish Balay The first character of all runtime options is AUTOMATICALLY the 74e5c89e4eSSatish Balay hyphen. 75e5c89e4eSSatish Balay 76edc382c3SSatish Balay Level: advanced 77edc382c3SSatish Balay 785cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(), 795cec412bSBarry Smith PetscObjectGetOptionsPrefix(), TSSetOptionsPrefix(), SNESSetOptionsPrefix(), KSPSetOptionsPrefix() 805cec412bSBarry Smith 815cec412bSBarry Smith @*/ 827087cfbeSBarry Smith PetscErrorCode PetscObjectSetOptionsPrefix(PetscObject obj,const char prefix[]) 83e5c89e4eSSatish Balay { 84e5c89e4eSSatish Balay PetscErrorCode ierr; 85e5c89e4eSSatish Balay 86e5c89e4eSSatish Balay PetscFunctionBegin; 873cfa8680SLisandro Dalcin PetscValidHeader(obj,1); 88e5c89e4eSSatish Balay if (!prefix) { 89503cfb0cSBarry Smith ierr = PetscFree(obj->prefix);CHKERRQ(ierr); 90e5c89e4eSSatish Balay } else { 91e32f2f54SBarry Smith if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen"); 924ed52fbaSBarry Smith if (prefix != obj->prefix) { 93503cfb0cSBarry Smith ierr = PetscFree(obj->prefix);CHKERRQ(ierr); 94e5c89e4eSSatish Balay ierr = PetscStrallocpy(prefix,&obj->prefix);CHKERRQ(ierr); 95e5c89e4eSSatish Balay } 964ed52fbaSBarry Smith } 97e5c89e4eSSatish Balay PetscFunctionReturn(0); 98e5c89e4eSSatish Balay } 99e5c89e4eSSatish Balay 1005cec412bSBarry Smith /*@C 101e5c89e4eSSatish Balay PetscObjectAppendOptionsPrefix - Sets the prefix used for searching for all 102e5c89e4eSSatish Balay options of PetscObjectType in the database. 103e5c89e4eSSatish Balay 104e5c89e4eSSatish Balay Input Parameters: 105a2b725a8SWilliam Gropp + obj - any PETSc object, for example a Vec, Mat or KSP. 106a2b725a8SWilliam Gropp - prefix - the prefix string to prepend to option requests of the object. 107e5c89e4eSSatish Balay 108e5c89e4eSSatish Balay Notes: 109e5c89e4eSSatish Balay A hyphen (-) must NOT be given at the beginning of the prefix name. 110e5c89e4eSSatish Balay The first character of all runtime options is AUTOMATICALLY the 111e5c89e4eSSatish Balay hyphen. 112e5c89e4eSSatish Balay 113edc382c3SSatish Balay Level: advanced 114edc382c3SSatish Balay 1155cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectPrependOptionsPrefix(), 1165cec412bSBarry Smith PetscObjectGetOptionsPrefix(), TSAppendOptionsPrefix(), SNESAppendOptionsPrefix(), KSPAppendOptionsPrefix() 1175cec412bSBarry Smith 1185cec412bSBarry Smith @*/ 1197087cfbeSBarry Smith PetscErrorCode PetscObjectAppendOptionsPrefix(PetscObject obj,const char prefix[]) 120e5c89e4eSSatish Balay { 121e5c89e4eSSatish Balay char *buf = obj->prefix; 122e5c89e4eSSatish Balay PetscErrorCode ierr; 123e5c89e4eSSatish Balay size_t len1,len2; 124e5c89e4eSSatish Balay 125e5c89e4eSSatish Balay PetscFunctionBegin; 1263cfa8680SLisandro Dalcin PetscValidHeader(obj,1); 127a297a907SKarl Rupp if (!prefix) PetscFunctionReturn(0); 128e5c89e4eSSatish Balay if (!buf) { 129e5c89e4eSSatish Balay ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr); 130e5c89e4eSSatish Balay PetscFunctionReturn(0); 131e5c89e4eSSatish Balay } 132e32f2f54SBarry Smith if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen"); 133e5c89e4eSSatish Balay 134e5c89e4eSSatish Balay ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr); 135e5c89e4eSSatish Balay ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr); 136854ce69bSBarry Smith ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr); 137e5c89e4eSSatish Balay ierr = PetscStrcpy(obj->prefix,buf);CHKERRQ(ierr); 138e5c89e4eSSatish Balay ierr = PetscStrcat(obj->prefix,prefix);CHKERRQ(ierr); 139e5c89e4eSSatish Balay ierr = PetscFree(buf);CHKERRQ(ierr); 140e5c89e4eSSatish Balay PetscFunctionReturn(0); 141e5c89e4eSSatish Balay } 142e5c89e4eSSatish Balay 1435cec412bSBarry Smith /*@C 144e5c89e4eSSatish Balay PetscObjectGetOptionsPrefix - Gets the prefix of the PetscObject. 145e5c89e4eSSatish Balay 146e5c89e4eSSatish Balay Input Parameters: 147e5c89e4eSSatish Balay . obj - any PETSc object, for example a Vec, Mat or KSP. 148e5c89e4eSSatish Balay 149e5c89e4eSSatish Balay Output Parameters: 150e5c89e4eSSatish Balay . prefix - pointer to the prefix string used is returned 151e5c89e4eSSatish Balay 152edc382c3SSatish Balay Level: advanced 153edc382c3SSatish Balay 1545cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(), 1555cec412bSBarry Smith TSGetOptionsPrefix(), SNESGetOptionsPrefix(), KSPGetOptionsPrefix() 1565cec412bSBarry Smith 1575cec412bSBarry Smith @*/ 1587087cfbeSBarry Smith PetscErrorCode PetscObjectGetOptionsPrefix(PetscObject obj,const char *prefix[]) 159e5c89e4eSSatish Balay { 160e5c89e4eSSatish Balay PetscFunctionBegin; 1613cfa8680SLisandro Dalcin PetscValidHeader(obj,1); 1623cfa8680SLisandro Dalcin PetscValidPointer(prefix,2); 163e5c89e4eSSatish Balay *prefix = obj->prefix; 164e5c89e4eSSatish Balay PetscFunctionReturn(0); 165e5c89e4eSSatish Balay } 166e5c89e4eSSatish Balay 1675cec412bSBarry Smith /*@C 168e5c89e4eSSatish Balay PetscObjectPrependOptionsPrefix - Sets the prefix used for searching for all 169e5c89e4eSSatish Balay options of PetscObjectType in the database. 170e5c89e4eSSatish Balay 171e5c89e4eSSatish Balay Input Parameters: 172a2b725a8SWilliam Gropp + obj - any PETSc object, for example a Vec, Mat or KSP. 173a2b725a8SWilliam Gropp - prefix - the prefix string to prepend to option requests of the object. 174e5c89e4eSSatish Balay 175e5c89e4eSSatish Balay Notes: 176e5c89e4eSSatish Balay A hyphen (-) must NOT be given at the beginning of the prefix name. 177e5c89e4eSSatish Balay The first character of all runtime options is AUTOMATICALLY the 178e5c89e4eSSatish Balay hyphen. 179e5c89e4eSSatish Balay 180edc382c3SSatish Balay Level: advanced 181edc382c3SSatish Balay 1825cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), 183*77591d71SPierre Jolivet PetscObjectGetOptionsPrefix() 1845cec412bSBarry Smith 1855cec412bSBarry Smith @*/ 1867087cfbeSBarry Smith PetscErrorCode PetscObjectPrependOptionsPrefix(PetscObject obj,const char prefix[]) 187e5c89e4eSSatish Balay { 1885c7534e4SLisandro Dalcin char *buf; 189e5c89e4eSSatish Balay size_t len1,len2; 1905c7534e4SLisandro Dalcin PetscErrorCode ierr; 191e5c89e4eSSatish Balay 192e5c89e4eSSatish Balay PetscFunctionBegin; 1933cfa8680SLisandro Dalcin PetscValidHeader(obj,1); 1945c7534e4SLisandro Dalcin buf = obj->prefix; 195a297a907SKarl Rupp if (!prefix) PetscFunctionReturn(0); 196e5c89e4eSSatish Balay if (!buf) { 197e5c89e4eSSatish Balay ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr); 198e5c89e4eSSatish Balay PetscFunctionReturn(0); 199e5c89e4eSSatish Balay } 200e32f2f54SBarry Smith if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen"); 201e5c89e4eSSatish Balay 202e5c89e4eSSatish Balay ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr); 203e5c89e4eSSatish Balay ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr); 204854ce69bSBarry Smith ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr); 205e5c89e4eSSatish Balay ierr = PetscStrcpy(obj->prefix,prefix);CHKERRQ(ierr); 206e5c89e4eSSatish Balay ierr = PetscStrcat(obj->prefix,buf);CHKERRQ(ierr); 207e5c89e4eSSatish Balay ierr = PetscFree(buf);CHKERRQ(ierr); 208e5c89e4eSSatish Balay PetscFunctionReturn(0); 209e5c89e4eSSatish Balay } 210e5c89e4eSSatish Balay 211