1 2 /* 3 Provides utility routines for manulating any type of PETSc object. 4 */ 5 #include <petsc/private/petscimpl.h> /*I "petscsys.h" I*/ 6 7 /*@C 8 PetscObjectGetOptions - Gets the options database used by the object. Call immediately after creating the object. 9 10 Collective on PetscObject 11 12 Input Parameter: 13 . obj - any PETSc object, for example a Vec, Mat or KSP. 14 15 Output Parameter: 16 . options - the options database 17 18 Notes: 19 if this is not called the object will use the default options database 20 21 Level: advanced 22 23 .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(), 24 PetscObjectGetOptionsPrefix(), PetscObjectSetOptions() 25 26 @*/ 27 PetscErrorCode PetscObjectGetOptions(PetscObject obj,PetscOptions *options) 28 { 29 PetscFunctionBegin; 30 PetscValidHeader(obj,1); 31 *options = obj->options; 32 PetscFunctionReturn(0); 33 } 34 35 /*@C 36 PetscObjectSetOptions - Sets the options database used by the object. Call immediately after creating the object. 37 38 Collective on PetscObject 39 40 Input Parameters: 41 + obj - any PETSc object, for example a Vec, Mat or KSP. 42 - options - the options database, use NULL for default 43 44 Notes: 45 if this is not called the object will use the default options database 46 47 Level: advanced 48 49 .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(), 50 PetscObjectGetOptionsPrefix(), PetscObjectGetOptions() 51 52 @*/ 53 PetscErrorCode PetscObjectSetOptions(PetscObject obj,PetscOptions options) 54 { 55 PetscFunctionBegin; 56 PetscValidHeader(obj,1); 57 obj->options = options; 58 PetscFunctionReturn(0); 59 } 60 61 /*@C 62 PetscObjectSetOptionsPrefix - Sets the prefix used for searching for all 63 options of PetscObjectType in the database. 64 65 Collective on Object 66 67 Input Parameters: 68 + obj - any PETSc object, for example a Vec, Mat or KSP. 69 - prefix - the prefix string to prepend to option requests of the object. 70 71 Notes: 72 A hyphen (-) must NOT be given at the beginning of the prefix name. 73 The first character of all runtime options is AUTOMATICALLY the 74 hyphen. 75 76 Level: advanced 77 78 .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(), 79 PetscObjectGetOptionsPrefix(), TSSetOptionsPrefix(), SNESSetOptionsPrefix(), KSPSetOptionsPrefix() 80 81 @*/ 82 PetscErrorCode PetscObjectSetOptionsPrefix(PetscObject obj,const char prefix[]) 83 { 84 PetscErrorCode ierr; 85 86 PetscFunctionBegin; 87 PetscValidHeader(obj,1); 88 if (!prefix) { 89 ierr = PetscFree(obj->prefix);CHKERRQ(ierr); 90 } else { 91 if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen"); 92 if (prefix != obj->prefix) { 93 ierr = PetscFree(obj->prefix);CHKERRQ(ierr); 94 ierr = PetscStrallocpy(prefix,&obj->prefix);CHKERRQ(ierr); 95 } 96 } 97 PetscFunctionReturn(0); 98 } 99 100 /*@C 101 PetscObjectAppendOptionsPrefix - Sets the prefix used for searching for all 102 options of PetscObjectType in the database. 103 104 Input Parameters: 105 + obj - any PETSc object, for example a Vec, Mat or KSP. 106 - prefix - the prefix string to prepend to option requests of the object. 107 108 Notes: 109 A hyphen (-) must NOT be given at the beginning of the prefix name. 110 The first character of all runtime options is AUTOMATICALLY the 111 hyphen. 112 113 Level: advanced 114 115 .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectPrependOptionsPrefix(), 116 PetscObjectGetOptionsPrefix(), TSAppendOptionsPrefix(), SNESAppendOptionsPrefix(), KSPAppendOptionsPrefix() 117 118 @*/ 119 PetscErrorCode PetscObjectAppendOptionsPrefix(PetscObject obj,const char prefix[]) 120 { 121 char *buf = obj->prefix; 122 PetscErrorCode ierr; 123 size_t len1,len2; 124 125 PetscFunctionBegin; 126 PetscValidHeader(obj,1); 127 if (!prefix) PetscFunctionReturn(0); 128 if (!buf) { 129 ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr); 130 PetscFunctionReturn(0); 131 } 132 if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen"); 133 134 ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr); 135 ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr); 136 ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr); 137 ierr = PetscStrcpy(obj->prefix,buf);CHKERRQ(ierr); 138 ierr = PetscStrcat(obj->prefix,prefix);CHKERRQ(ierr); 139 ierr = PetscFree(buf);CHKERRQ(ierr); 140 PetscFunctionReturn(0); 141 } 142 143 /*@C 144 PetscObjectGetOptionsPrefix - Gets the prefix of the PetscObject. 145 146 Input Parameters: 147 . obj - any PETSc object, for example a Vec, Mat or KSP. 148 149 Output Parameters: 150 . prefix - pointer to the prefix string used is returned 151 152 Level: advanced 153 154 .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(), 155 TSGetOptionsPrefix(), SNESGetOptionsPrefix(), KSPGetOptionsPrefix() 156 157 @*/ 158 PetscErrorCode PetscObjectGetOptionsPrefix(PetscObject obj,const char *prefix[]) 159 { 160 PetscFunctionBegin; 161 PetscValidHeader(obj,1); 162 PetscValidPointer(prefix,2); 163 *prefix = obj->prefix; 164 PetscFunctionReturn(0); 165 } 166 167 /*@C 168 PetscObjectPrependOptionsPrefix - Sets the prefix used for searching for all 169 options of PetscObjectType in the database. 170 171 Input Parameters: 172 + obj - any PETSc object, for example a Vec, Mat or KSP. 173 - prefix - the prefix string to prepend to option requests of the object. 174 175 Notes: 176 A hyphen (-) must NOT be given at the beginning of the prefix name. 177 The first character of all runtime options is AUTOMATICALLY the 178 hyphen. 179 180 Level: advanced 181 182 .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), 183 PetscObjectGetOptionsPrefix() 184 185 @*/ 186 PetscErrorCode PetscObjectPrependOptionsPrefix(PetscObject obj,const char prefix[]) 187 { 188 char *buf; 189 size_t len1,len2; 190 PetscErrorCode ierr; 191 192 PetscFunctionBegin; 193 PetscValidHeader(obj,1); 194 buf = obj->prefix; 195 if (!prefix) PetscFunctionReturn(0); 196 if (!buf) { 197 ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr); 198 PetscFunctionReturn(0); 199 } 200 if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen"); 201 202 ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr); 203 ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr); 204 ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr); 205 ierr = PetscStrcpy(obj->prefix,prefix);CHKERRQ(ierr); 206 ierr = PetscStrcat(obj->prefix,buf);CHKERRQ(ierr); 207 ierr = PetscFree(buf);CHKERRQ(ierr); 208 PetscFunctionReturn(0); 209 } 210 211