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: 68*a2b725a8SWilliam Gropp + obj - any PETSc object, for example a Vec, Mat or KSP. 69*a2b725a8SWilliam 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 76e5c89e4eSSatish Balay Concepts: prefix^setting 77e5c89e4eSSatish Balay 78edc382c3SSatish Balay Level: advanced 79edc382c3SSatish Balay 805cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(), 815cec412bSBarry Smith PetscObjectGetOptionsPrefix(), TSSetOptionsPrefix(), SNESSetOptionsPrefix(), KSPSetOptionsPrefix() 825cec412bSBarry Smith 835cec412bSBarry Smith @*/ 847087cfbeSBarry Smith PetscErrorCode PetscObjectSetOptionsPrefix(PetscObject obj,const char prefix[]) 85e5c89e4eSSatish Balay { 86e5c89e4eSSatish Balay PetscErrorCode ierr; 87e5c89e4eSSatish Balay 88e5c89e4eSSatish Balay PetscFunctionBegin; 893cfa8680SLisandro Dalcin PetscValidHeader(obj,1); 90e5c89e4eSSatish Balay if (!prefix) { 91503cfb0cSBarry Smith ierr = PetscFree(obj->prefix);CHKERRQ(ierr); 92e5c89e4eSSatish Balay } else { 93e32f2f54SBarry Smith if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen"); 944ed52fbaSBarry Smith if (prefix != obj->prefix) { 95503cfb0cSBarry Smith ierr = PetscFree(obj->prefix);CHKERRQ(ierr); 96e5c89e4eSSatish Balay ierr = PetscStrallocpy(prefix,&obj->prefix);CHKERRQ(ierr); 97e5c89e4eSSatish Balay } 984ed52fbaSBarry Smith } 99e5c89e4eSSatish Balay PetscFunctionReturn(0); 100e5c89e4eSSatish Balay } 101e5c89e4eSSatish Balay 1025cec412bSBarry Smith /*@C 103e5c89e4eSSatish Balay PetscObjectAppendOptionsPrefix - Sets the prefix used for searching for all 104e5c89e4eSSatish Balay options of PetscObjectType in the database. 105e5c89e4eSSatish Balay 106e5c89e4eSSatish Balay Input Parameters: 107*a2b725a8SWilliam Gropp + obj - any PETSc object, for example a Vec, Mat or KSP. 108*a2b725a8SWilliam Gropp - prefix - the prefix string to prepend to option requests of the object. 109e5c89e4eSSatish Balay 110e5c89e4eSSatish Balay Notes: 111e5c89e4eSSatish Balay A hyphen (-) must NOT be given at the beginning of the prefix name. 112e5c89e4eSSatish Balay The first character of all runtime options is AUTOMATICALLY the 113e5c89e4eSSatish Balay hyphen. 114e5c89e4eSSatish Balay 115e5c89e4eSSatish Balay Concepts: prefix^setting 116e5c89e4eSSatish Balay 117edc382c3SSatish Balay Level: advanced 118edc382c3SSatish Balay 1195cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectPrependOptionsPrefix(), 1205cec412bSBarry Smith PetscObjectGetOptionsPrefix(), TSAppendOptionsPrefix(), SNESAppendOptionsPrefix(), KSPAppendOptionsPrefix() 1215cec412bSBarry Smith 1225cec412bSBarry Smith @*/ 1237087cfbeSBarry Smith PetscErrorCode PetscObjectAppendOptionsPrefix(PetscObject obj,const char prefix[]) 124e5c89e4eSSatish Balay { 125e5c89e4eSSatish Balay char *buf = obj->prefix; 126e5c89e4eSSatish Balay PetscErrorCode ierr; 127e5c89e4eSSatish Balay size_t len1,len2; 128e5c89e4eSSatish Balay 129e5c89e4eSSatish Balay PetscFunctionBegin; 1303cfa8680SLisandro Dalcin PetscValidHeader(obj,1); 131a297a907SKarl Rupp if (!prefix) PetscFunctionReturn(0); 132e5c89e4eSSatish Balay if (!buf) { 133e5c89e4eSSatish Balay ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr); 134e5c89e4eSSatish Balay PetscFunctionReturn(0); 135e5c89e4eSSatish Balay } 136e32f2f54SBarry Smith if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen"); 137e5c89e4eSSatish Balay 138e5c89e4eSSatish Balay ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr); 139e5c89e4eSSatish Balay ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr); 140854ce69bSBarry Smith ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr); 141e5c89e4eSSatish Balay ierr = PetscStrcpy(obj->prefix,buf);CHKERRQ(ierr); 142e5c89e4eSSatish Balay ierr = PetscStrcat(obj->prefix,prefix);CHKERRQ(ierr); 143e5c89e4eSSatish Balay ierr = PetscFree(buf);CHKERRQ(ierr); 144e5c89e4eSSatish Balay PetscFunctionReturn(0); 145e5c89e4eSSatish Balay } 146e5c89e4eSSatish Balay 1475cec412bSBarry Smith /*@C 148e5c89e4eSSatish Balay PetscObjectGetOptionsPrefix - Gets the prefix of the PetscObject. 149e5c89e4eSSatish Balay 150e5c89e4eSSatish Balay Input Parameters: 151e5c89e4eSSatish Balay . obj - any PETSc object, for example a Vec, Mat or KSP. 152e5c89e4eSSatish Balay 153e5c89e4eSSatish Balay Output Parameters: 154e5c89e4eSSatish Balay . prefix - pointer to the prefix string used is returned 155e5c89e4eSSatish Balay 156e5c89e4eSSatish Balay Concepts: prefix^getting 157e5c89e4eSSatish Balay 158edc382c3SSatish Balay Level: advanced 159edc382c3SSatish Balay 1605cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(), 1615cec412bSBarry Smith TSGetOptionsPrefix(), SNESGetOptionsPrefix(), KSPGetOptionsPrefix() 1625cec412bSBarry Smith 1635cec412bSBarry Smith @*/ 1647087cfbeSBarry Smith PetscErrorCode PetscObjectGetOptionsPrefix(PetscObject obj,const char *prefix[]) 165e5c89e4eSSatish Balay { 166e5c89e4eSSatish Balay PetscFunctionBegin; 1673cfa8680SLisandro Dalcin PetscValidHeader(obj,1); 1683cfa8680SLisandro Dalcin PetscValidPointer(prefix,2); 169e5c89e4eSSatish Balay *prefix = obj->prefix; 170e5c89e4eSSatish Balay PetscFunctionReturn(0); 171e5c89e4eSSatish Balay } 172e5c89e4eSSatish Balay 1735cec412bSBarry Smith /*@C 174e5c89e4eSSatish Balay PetscObjectPrependOptionsPrefix - Sets the prefix used for searching for all 175e5c89e4eSSatish Balay options of PetscObjectType in the database. 176e5c89e4eSSatish Balay 177e5c89e4eSSatish Balay Input Parameters: 178*a2b725a8SWilliam Gropp + obj - any PETSc object, for example a Vec, Mat or KSP. 179*a2b725a8SWilliam Gropp - prefix - the prefix string to prepend to option requests of the object. 180e5c89e4eSSatish Balay 181e5c89e4eSSatish Balay Notes: 182e5c89e4eSSatish Balay A hyphen (-) must NOT be given at the beginning of the prefix name. 183e5c89e4eSSatish Balay The first character of all runtime options is AUTOMATICALLY the 184e5c89e4eSSatish Balay hyphen. 185e5c89e4eSSatish Balay 186e5c89e4eSSatish Balay Concepts: prefix^setting 187e5c89e4eSSatish Balay 188edc382c3SSatish Balay Level: advanced 189edc382c3SSatish Balay 1905cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), 1915cec412bSBarry Smith PetscObjectGetOptionsPrefix(), TSPrependOptionsPrefix(), SNESPrependOptionsPrefix(), KSPPrependOptionsPrefix() 1925cec412bSBarry Smith 1935cec412bSBarry Smith @*/ 1947087cfbeSBarry Smith PetscErrorCode PetscObjectPrependOptionsPrefix(PetscObject obj,const char prefix[]) 195e5c89e4eSSatish Balay { 1965c7534e4SLisandro Dalcin char *buf; 197e5c89e4eSSatish Balay size_t len1,len2; 1985c7534e4SLisandro Dalcin PetscErrorCode ierr; 199e5c89e4eSSatish Balay 200e5c89e4eSSatish Balay PetscFunctionBegin; 2013cfa8680SLisandro Dalcin PetscValidHeader(obj,1); 2025c7534e4SLisandro Dalcin buf = obj->prefix; 203a297a907SKarl Rupp if (!prefix) PetscFunctionReturn(0); 204e5c89e4eSSatish Balay if (!buf) { 205e5c89e4eSSatish Balay ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr); 206e5c89e4eSSatish Balay PetscFunctionReturn(0); 207e5c89e4eSSatish Balay } 208e32f2f54SBarry Smith if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen"); 209e5c89e4eSSatish Balay 210e5c89e4eSSatish Balay ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr); 211e5c89e4eSSatish Balay ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr); 212854ce69bSBarry Smith ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr); 213e5c89e4eSSatish Balay ierr = PetscStrcpy(obj->prefix,prefix);CHKERRQ(ierr); 214e5c89e4eSSatish Balay ierr = PetscStrcat(obj->prefix,buf);CHKERRQ(ierr); 215e5c89e4eSSatish Balay ierr = PetscFree(buf);CHKERRQ(ierr); 216e5c89e4eSSatish Balay PetscFunctionReturn(0); 217e5c89e4eSSatish Balay } 218e5c89e4eSSatish Balay 219