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 8c5929fdfSBarry Smith PetscObjectSetOptions - Sets the options database used by the object 9c5929fdfSBarry Smith 1096a0c994SBarry Smith Collective on PetscObject 1196a0c994SBarry Smith 12c5929fdfSBarry Smith Input Parameters: 13c5929fdfSBarry Smith + obj - any PETSc object, for example a Vec, Mat or KSP. 14c5929fdfSBarry Smith - options - the options database, use NULL for default 15c5929fdfSBarry Smith 16*95452b02SPatrick Sanan Notes: 17*95452b02SPatrick Sanan if this is not called the object will use the default options database 18c5929fdfSBarry Smith 1996a0c994SBarry Smith Level: advanced 2096a0c994SBarry Smith 215cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(), 225cec412bSBarry Smith PetscObjectGetOptionsPrefix() 23c5929fdfSBarry Smith 2496a0c994SBarry 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 335cec412bSBarry Smith /*@C 34e5c89e4eSSatish Balay PetscObjectSetOptionsPrefix - Sets the prefix used for searching for all 35e5c89e4eSSatish Balay options of PetscObjectType in the database. 36e5c89e4eSSatish Balay 3796a0c994SBarry Smith Collective on Object 3896a0c994SBarry Smith 39e5c89e4eSSatish Balay Input Parameters: 40e5c89e4eSSatish Balay . obj - any PETSc object, for example a Vec, Mat or KSP. 41e5c89e4eSSatish Balay . prefix - the prefix string to prepend to option requests of the object. 42e5c89e4eSSatish Balay 43e5c89e4eSSatish Balay Notes: 44e5c89e4eSSatish Balay A hyphen (-) must NOT be given at the beginning of the prefix name. 45e5c89e4eSSatish Balay The first character of all runtime options is AUTOMATICALLY the 46e5c89e4eSSatish Balay hyphen. 47e5c89e4eSSatish Balay 48e5c89e4eSSatish Balay Concepts: prefix^setting 49e5c89e4eSSatish Balay 50edc382c3SSatish Balay Level: advanced 51edc382c3SSatish Balay 525cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(), 535cec412bSBarry Smith PetscObjectGetOptionsPrefix(), TSSetOptionsPrefix(), SNESSetOptionsPrefix(), KSPSetOptionsPrefix() 545cec412bSBarry Smith 555cec412bSBarry Smith @*/ 567087cfbeSBarry Smith PetscErrorCode PetscObjectSetOptionsPrefix(PetscObject obj,const char prefix[]) 57e5c89e4eSSatish Balay { 58e5c89e4eSSatish Balay PetscErrorCode ierr; 59e5c89e4eSSatish Balay 60e5c89e4eSSatish Balay PetscFunctionBegin; 613cfa8680SLisandro Dalcin PetscValidHeader(obj,1); 62e5c89e4eSSatish Balay if (!prefix) { 63503cfb0cSBarry Smith ierr = PetscFree(obj->prefix);CHKERRQ(ierr); 64e5c89e4eSSatish Balay } else { 65e32f2f54SBarry Smith if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen"); 664ed52fbaSBarry Smith if (prefix != obj->prefix) { 67503cfb0cSBarry Smith ierr = PetscFree(obj->prefix);CHKERRQ(ierr); 68e5c89e4eSSatish Balay ierr = PetscStrallocpy(prefix,&obj->prefix);CHKERRQ(ierr); 69e5c89e4eSSatish Balay } 704ed52fbaSBarry Smith } 71e5c89e4eSSatish Balay PetscFunctionReturn(0); 72e5c89e4eSSatish Balay } 73e5c89e4eSSatish Balay 745cec412bSBarry Smith /*@C 75e5c89e4eSSatish Balay PetscObjectAppendOptionsPrefix - Sets the prefix used for searching for all 76e5c89e4eSSatish Balay options of PetscObjectType in the database. 77e5c89e4eSSatish Balay 78e5c89e4eSSatish Balay Input Parameters: 79e5c89e4eSSatish Balay . obj - any PETSc object, for example a Vec, Mat or KSP. 80e5c89e4eSSatish Balay . prefix - the prefix string to prepend to option requests of the object. 81e5c89e4eSSatish Balay 82e5c89e4eSSatish Balay Notes: 83e5c89e4eSSatish Balay A hyphen (-) must NOT be given at the beginning of the prefix name. 84e5c89e4eSSatish Balay The first character of all runtime options is AUTOMATICALLY the 85e5c89e4eSSatish Balay hyphen. 86e5c89e4eSSatish Balay 87e5c89e4eSSatish Balay Concepts: prefix^setting 88e5c89e4eSSatish Balay 89edc382c3SSatish Balay Level: advanced 90edc382c3SSatish Balay 915cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectPrependOptionsPrefix(), 925cec412bSBarry Smith PetscObjectGetOptionsPrefix(), TSAppendOptionsPrefix(), SNESAppendOptionsPrefix(), KSPAppendOptionsPrefix() 935cec412bSBarry Smith 945cec412bSBarry Smith @*/ 957087cfbeSBarry Smith PetscErrorCode PetscObjectAppendOptionsPrefix(PetscObject obj,const char prefix[]) 96e5c89e4eSSatish Balay { 97e5c89e4eSSatish Balay char *buf = obj->prefix; 98e5c89e4eSSatish Balay PetscErrorCode ierr; 99e5c89e4eSSatish Balay size_t len1,len2; 100e5c89e4eSSatish Balay 101e5c89e4eSSatish Balay PetscFunctionBegin; 1023cfa8680SLisandro Dalcin PetscValidHeader(obj,1); 103a297a907SKarl Rupp if (!prefix) PetscFunctionReturn(0); 104e5c89e4eSSatish Balay if (!buf) { 105e5c89e4eSSatish Balay ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr); 106e5c89e4eSSatish Balay PetscFunctionReturn(0); 107e5c89e4eSSatish Balay } 108e32f2f54SBarry Smith if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen"); 109e5c89e4eSSatish Balay 110e5c89e4eSSatish Balay ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr); 111e5c89e4eSSatish Balay ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr); 112854ce69bSBarry Smith ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr); 113e5c89e4eSSatish Balay ierr = PetscStrcpy(obj->prefix,buf);CHKERRQ(ierr); 114e5c89e4eSSatish Balay ierr = PetscStrcat(obj->prefix,prefix);CHKERRQ(ierr); 115e5c89e4eSSatish Balay ierr = PetscFree(buf);CHKERRQ(ierr); 116e5c89e4eSSatish Balay PetscFunctionReturn(0); 117e5c89e4eSSatish Balay } 118e5c89e4eSSatish Balay 1195cec412bSBarry Smith /*@C 120e5c89e4eSSatish Balay PetscObjectGetOptionsPrefix - Gets the prefix of the PetscObject. 121e5c89e4eSSatish Balay 122e5c89e4eSSatish Balay Input Parameters: 123e5c89e4eSSatish Balay . obj - any PETSc object, for example a Vec, Mat or KSP. 124e5c89e4eSSatish Balay 125e5c89e4eSSatish Balay Output Parameters: 126e5c89e4eSSatish Balay . prefix - pointer to the prefix string used is returned 127e5c89e4eSSatish Balay 128e5c89e4eSSatish Balay Concepts: prefix^getting 129e5c89e4eSSatish Balay 130edc382c3SSatish Balay Level: advanced 131edc382c3SSatish Balay 1325cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(), 1335cec412bSBarry Smith TSGetOptionsPrefix(), SNESGetOptionsPrefix(), KSPGetOptionsPrefix() 1345cec412bSBarry Smith 1355cec412bSBarry Smith @*/ 1367087cfbeSBarry Smith PetscErrorCode PetscObjectGetOptionsPrefix(PetscObject obj,const char *prefix[]) 137e5c89e4eSSatish Balay { 138e5c89e4eSSatish Balay PetscFunctionBegin; 1393cfa8680SLisandro Dalcin PetscValidHeader(obj,1); 1403cfa8680SLisandro Dalcin PetscValidPointer(prefix,2); 141e5c89e4eSSatish Balay *prefix = obj->prefix; 142e5c89e4eSSatish Balay PetscFunctionReturn(0); 143e5c89e4eSSatish Balay } 144e5c89e4eSSatish Balay 1455cec412bSBarry Smith /*@C 146e5c89e4eSSatish Balay PetscObjectPrependOptionsPrefix - Sets the prefix used for searching for all 147e5c89e4eSSatish Balay options of PetscObjectType in the database. 148e5c89e4eSSatish Balay 149e5c89e4eSSatish Balay Input Parameters: 150e5c89e4eSSatish Balay . obj - any PETSc object, for example a Vec, Mat or KSP. 151e5c89e4eSSatish Balay . prefix - the prefix string to prepend to option requests of the object. 152e5c89e4eSSatish Balay 153e5c89e4eSSatish Balay Notes: 154e5c89e4eSSatish Balay A hyphen (-) must NOT be given at the beginning of the prefix name. 155e5c89e4eSSatish Balay The first character of all runtime options is AUTOMATICALLY the 156e5c89e4eSSatish Balay hyphen. 157e5c89e4eSSatish Balay 158e5c89e4eSSatish Balay Concepts: prefix^setting 159e5c89e4eSSatish Balay 160edc382c3SSatish Balay Level: advanced 161edc382c3SSatish Balay 1625cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), 1635cec412bSBarry Smith PetscObjectGetOptionsPrefix(), TSPrependOptionsPrefix(), SNESPrependOptionsPrefix(), KSPPrependOptionsPrefix() 1645cec412bSBarry Smith 1655cec412bSBarry Smith @*/ 1667087cfbeSBarry Smith PetscErrorCode PetscObjectPrependOptionsPrefix(PetscObject obj,const char prefix[]) 167e5c89e4eSSatish Balay { 1685c7534e4SLisandro Dalcin char *buf; 169e5c89e4eSSatish Balay size_t len1,len2; 1705c7534e4SLisandro Dalcin PetscErrorCode ierr; 171e5c89e4eSSatish Balay 172e5c89e4eSSatish Balay PetscFunctionBegin; 1733cfa8680SLisandro Dalcin PetscValidHeader(obj,1); 1745c7534e4SLisandro Dalcin buf = obj->prefix; 175a297a907SKarl Rupp if (!prefix) PetscFunctionReturn(0); 176e5c89e4eSSatish Balay if (!buf) { 177e5c89e4eSSatish Balay ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr); 178e5c89e4eSSatish Balay PetscFunctionReturn(0); 179e5c89e4eSSatish Balay } 180e32f2f54SBarry Smith if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen"); 181e5c89e4eSSatish Balay 182e5c89e4eSSatish Balay ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr); 183e5c89e4eSSatish Balay ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr); 184854ce69bSBarry Smith ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr); 185e5c89e4eSSatish Balay ierr = PetscStrcpy(obj->prefix,prefix);CHKERRQ(ierr); 186e5c89e4eSSatish Balay ierr = PetscStrcat(obj->prefix,buf);CHKERRQ(ierr); 187e5c89e4eSSatish Balay ierr = PetscFree(buf);CHKERRQ(ierr); 188e5c89e4eSSatish Balay PetscFunctionReturn(0); 189e5c89e4eSSatish Balay } 190e5c89e4eSSatish Balay 191