1 /* 2 Routines to determine options set in the options database. 3 */ 4 #pragma once 5 6 #include <petscsys.h> 7 #include <petscviewertypes.h> 8 9 /* SUBMANSEC = Sys */ 10 11 typedef enum { 12 PETSC_OPT_CODE, 13 PETSC_OPT_COMMAND_LINE, 14 PETSC_OPT_FILE, 15 PETSC_OPT_ENVIRONMENT, 16 NUM_PETSC_OPT_SOURCE 17 } PetscOptionSource; 18 19 #define PETSC_MAX_OPTION_NAME 512 20 typedef struct _n_PetscOptions *PetscOptions; 21 PETSC_EXTERN PetscErrorCode PetscOptionsCreate(PetscOptions *); 22 PETSC_EXTERN PetscErrorCode PetscOptionsPush(PetscOptions); 23 PETSC_EXTERN PetscErrorCode PetscOptionsPop(void); 24 PETSC_EXTERN PetscErrorCode PetscOptionsDestroy(PetscOptions *); 25 PETSC_EXTERN PetscErrorCode PetscOptionsCreateDefault(void); 26 PETSC_EXTERN PetscErrorCode PetscOptionsDestroyDefault(void); 27 28 PETSC_EXTERN PetscErrorCode PetscOptionsHasHelp(PetscOptions, PetscBool *); 29 PETSC_EXTERN PetscErrorCode PetscOptionsHasName(PetscOptions, const char[], const char[], PetscBool *); 30 PETSC_EXTERN PetscErrorCode PetscOptionsGetBool(PetscOptions, const char[], const char[], PetscBool *, PetscBool *); 31 PETSC_EXTERN PetscErrorCode PetscOptionsGetInt(PetscOptions, const char[], const char[], PetscInt *, PetscBool *); 32 PETSC_EXTERN PetscErrorCode PetscOptionsGetEnum(PetscOptions, const char[], const char[], const char *const *, PetscEnum *, PetscBool *); 33 PETSC_EXTERN PetscErrorCode PetscOptionsGetEList(PetscOptions, const char[], const char[], const char *const *, PetscInt, PetscInt *, PetscBool *); 34 PETSC_EXTERN PetscErrorCode PetscOptionsGetReal(PetscOptions, const char[], const char[], PetscReal *, PetscBool *); 35 PETSC_EXTERN PetscErrorCode PetscOptionsGetScalar(PetscOptions, const char[], const char[], PetscScalar *, PetscBool *); 36 PETSC_EXTERN PetscErrorCode PetscOptionsGetString(PetscOptions, const char[], const char[], char[], size_t, PetscBool *); 37 38 PETSC_EXTERN PetscErrorCode PetscOptionsGetBoolArray(PetscOptions, const char[], const char[], PetscBool[], PetscInt *, PetscBool *); 39 PETSC_EXTERN PetscErrorCode PetscOptionsGetEnumArray(PetscOptions, const char[], const char[], const char *const *, PetscEnum *, PetscInt *, PetscBool *); 40 PETSC_EXTERN PetscErrorCode PetscOptionsGetIntArray(PetscOptions, const char[], const char[], PetscInt[], PetscInt *, PetscBool *); 41 PETSC_EXTERN PetscErrorCode PetscOptionsGetRealArray(PetscOptions, const char[], const char[], PetscReal[], PetscInt *, PetscBool *); 42 PETSC_EXTERN PetscErrorCode PetscOptionsGetScalarArray(PetscOptions, const char[], const char[], PetscScalar[], PetscInt *, PetscBool *); 43 PETSC_EXTERN PetscErrorCode PetscOptionsGetStringArray(PetscOptions, const char[], const char[], char *[], PetscInt *, PetscBool *); 44 45 PETSC_EXTERN PetscErrorCode PetscOptionsValidKey(const char[], PetscBool *); 46 PETSC_EXTERN PetscErrorCode PetscOptionsSetAlias(PetscOptions, const char[], const char[]); 47 PETSC_EXTERN PetscErrorCode PetscOptionsSetValue(PetscOptions, const char[], const char[]); 48 PETSC_EXTERN PetscErrorCode PetscOptionsClearValue(PetscOptions, const char[]); 49 PETSC_EXTERN PetscErrorCode PetscOptionsFindPair(PetscOptions, const char[], const char[], const char *[], PetscBool *); 50 51 PETSC_EXTERN PetscErrorCode PetscOptionsGetAll(PetscOptions, char *[]); 52 PETSC_EXTERN PetscErrorCode PetscOptionsAllUsed(PetscOptions, PetscInt *); 53 PETSC_EXTERN PetscErrorCode PetscOptionsUsed(PetscOptions, const char[], PetscBool *); 54 PETSC_EXTERN PetscErrorCode PetscOptionsLeft(PetscOptions); 55 PETSC_EXTERN PetscErrorCode PetscOptionsLeftGet(PetscOptions, PetscInt *, char ***, char ***); 56 PETSC_EXTERN PetscErrorCode PetscOptionsLeftRestore(PetscOptions, PetscInt *, char ***, char ***); 57 PETSC_EXTERN PetscErrorCode PetscOptionsView(PetscOptions, PetscViewer); 58 59 PETSC_EXTERN PetscErrorCode PetscOptionsReject(PetscOptions, const char[], const char[], const char[]); 60 PETSC_EXTERN PetscErrorCode PetscOptionsInsert(PetscOptions, int *, char ***, const char[]); 61 PETSC_EXTERN PetscErrorCode PetscOptionsInsertFile(MPI_Comm, PetscOptions, const char[], PetscBool); 62 PETSC_EXTERN PetscErrorCode PetscOptionsInsertFileYAML(MPI_Comm, PetscOptions, const char[], PetscBool); 63 PETSC_EXTERN PetscErrorCode PetscOptionsInsertString(PetscOptions, const char[]); 64 PETSC_EXTERN PetscErrorCode PetscOptionsInsertStringYAML(PetscOptions, const char[]); 65 PETSC_EXTERN PetscErrorCode PetscOptionsInsertArgs(PetscOptions, int, char **); 66 PETSC_EXTERN PetscErrorCode PetscOptionsClear(PetscOptions); 67 PETSC_EXTERN PetscErrorCode PetscOptionsPrefixPush(PetscOptions, const char[]); 68 PETSC_EXTERN PetscErrorCode PetscOptionsPrefixPop(PetscOptions); 69 70 PETSC_EXTERN PetscErrorCode PetscOptionsGetenv(MPI_Comm, const char[], char[], size_t, PetscBool *); 71 PETSC_EXTERN PetscErrorCode PetscOptionsStringToBool(const char[], PetscBool *); 72 PETSC_EXTERN PetscErrorCode PetscOptionsStringToInt(const char[], PetscInt *); 73 PETSC_EXTERN PetscErrorCode PetscOptionsStringToReal(const char[], PetscReal *); 74 PETSC_EXTERN PetscErrorCode PetscOptionsStringToScalar(const char[], PetscScalar *); 75 76 PETSC_EXTERN PetscErrorCode PetscOptionsMonitorSet(PetscErrorCode (*)(const char[], const char[], PetscOptionSource, void *), void *, PetscErrorCode (*)(void **)); 77 PETSC_EXTERN PetscErrorCode PetscOptionsMonitorDefault(const char[], const char[], PetscOptionSource, void *); 78 79 PETSC_EXTERN PetscErrorCode PetscObjectSetOptions(PetscObject, PetscOptions); 80 PETSC_EXTERN PetscErrorCode PetscObjectGetOptions(PetscObject, PetscOptions *); 81 82 PETSC_EXTERN PetscBool PetscOptionsPublish; 83 84 /* 85 See manual page for PetscOptionsBegin() 86 87 PetscOptionsItem and PetscOptionsItems are a single option (such as ksp_type) and a collection of such single 88 options being handled with a PetscOptionsBegin/End() 89 90 */ 91 typedef enum { 92 OPTION_INT, 93 OPTION_BOOL, 94 OPTION_REAL, 95 OPTION_FLIST, 96 OPTION_STRING, 97 OPTION_REAL_ARRAY, 98 OPTION_SCALAR_ARRAY, 99 OPTION_HEAD, 100 OPTION_INT_ARRAY, 101 OPTION_ELIST, 102 OPTION_BOOL_ARRAY, 103 OPTION_STRING_ARRAY 104 } PetscOptionType; 105 106 typedef struct _n_PetscOptionItem *PetscOptionItem; 107 struct _n_PetscOptionItem { 108 char *option; 109 char *text; 110 void *data; /* used to hold the default value and then any value it is changed to by GUI */ 111 PetscFunctionList flist; /* used for available values for PetscOptionsList() */ 112 const char *const *list; /* used for available values for PetscOptionsEList() */ 113 char nlist; /* number of entries in list */ 114 char *man; 115 size_t arraylength; /* number of entries in data in the case that it is an array (of PetscInt etc) */ 116 PetscBool set; /* the user has changed this value in the GUI */ 117 PetscOptionType type; 118 PetscOptionItem next; 119 char *pman; 120 void *edata; 121 }; 122 123 typedef struct _p_PetscOptionItems { 124 PetscInt count; 125 PetscOptionItem next; 126 char *prefix, *pprefix; 127 char *title; 128 MPI_Comm comm; 129 PetscBool printhelp, changedmethod, alreadyprinted; 130 PetscObject object; 131 PetscOptions options; 132 } PetscOptionItems; 133 134 #if defined(PETSC_CLANG_STATIC_ANALYZER) 135 extern PetscOptionItems *PetscOptionsObject; /* declare this so that the PetscOptions stubs work */ 136 PetscErrorCode PetscOptionsBegin(MPI_Comm, const char *, const char *, const char *); 137 PetscErrorCode PetscObjectOptionsBegin(PetscObject); 138 PetscErrorCode PetscOptionsEnd(void); 139 #else 140 /*MC 141 PetscOptionsBegin - Begins a set of queries on the options database that are related and should be 142 displayed on the same window of a GUI that allows the user to set the options interactively. Often one should 143 use `PetscObjectOptionsBegin()` rather than this call. 144 145 Synopsis: 146 #include <petscoptions.h> 147 PetscErrorCode PetscOptionsBegin(MPI_Comm comm,const char prefix[],const char title[],const char mansec[]) 148 149 Collective 150 151 Input Parameters: 152 + comm - communicator that shares GUI 153 . prefix - options prefix for all options displayed on window (optional) 154 . title - short descriptive text, for example "Krylov Solver Options" 155 - mansec - section of manual pages for options, for example `KSP` (optional) 156 157 Level: intermediate 158 159 Notes: 160 This is a macro that handles its own error checking, it does not return an error code. 161 162 The set of queries needs to be ended by a call to `PetscOptionsEnd()`. 163 164 One can add subheadings with `PetscOptionsHeadBegin()`. 165 166 Developer Notes: 167 `PetscOptionsPublish` is set in `PetscOptionsCheckInitial_Private()` with `-saws_options`. When `PetscOptionsPublish` is set the 168 loop between `PetscOptionsBegin()` and `PetscOptionsEnd()` is run THREE times with `PetscOptionsPublishCount` of values -1,0,1. 169 Otherwise the loop is run ONCE with a `PetscOptionsPublishCount` of 1. 170 + \-1 - `PetscOptionsInt()` etc. just call `PetscOptionsGetInt()` etc. 171 . 0 - The GUI objects are created in `PetscOptionsInt()` etc. and displayed in `PetscOptionsEnd()` and the options 172 database updated with user changes; `PetscOptionsGetInt()` etc. are also called. 173 - 1 - `PetscOptionsInt()` etc. again call `PetscOptionsGetInt()` etc. (possibly getting new values), in addition the help message and 174 default values are printed if -help was given. 175 When `PetscOptionsObject.changedmethod` is set this causes `PetscOptionsPublishCount` to be reset to -2 (so in the next loop iteration it is -1) 176 and the whole process is repeated. This is to handle when, for example, the `KSPType` is changed thus changing the list of 177 options available so they need to be redisplayed so the user can change the. Changing `PetscOptionsObjects.changedmethod` is never 178 currently set. 179 180 Fortran Note: 181 Returns ierr error code per PETSc Fortran API 182 183 .seealso: `PetscOptionsGetReal()`, `PetscOptionsHasName()`, `PetscOptionsGetString()`, `PetscOptionsGetInt()`, 184 `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()` 185 `PetscOptionsInt()`, `PetscOptionsString()`, `PetscOptionsReal()`, `PetscOptionsBool()`, 186 `PetscOptionsName()`, `PetscOptionsEnd()`, `PetscOptionsHeadBegin()`, 187 `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`, 188 `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`, 189 `PetscOptionsFList()`, `PetscOptionsEList()`, `PetscObjectOptionsBegin()` 190 M*/ 191 #define PetscOptionsBegin(comm, prefix, mess, sec) \ 192 do { \ 193 PetscOptionItems PetscOptionsObjectBase; \ 194 PetscOptionItems *PetscOptionsObject = &PetscOptionsObjectBase; \ 195 PetscCall(PetscMemzero(PetscOptionsObject, sizeof(*PetscOptionsObject))); \ 196 for (PetscOptionsObject->count = (PetscOptionsPublish ? -1 : 1); PetscOptionsObject->count < 2; PetscOptionsObject->count++) { \ 197 PetscCall(PetscOptionsBegin_Private(PetscOptionsObject, comm, prefix, mess, sec)) 198 199 /*MC 200 PetscObjectOptionsBegin - Begins a set of queries on the options database that are related and should be 201 displayed on the same window of a GUI that allows the user to set the options interactively. 202 203 Synopsis: 204 #include <petscoptions.h> 205 PetscErrorCode PetscObjectOptionsBegin(PetscObject obj) 206 207 Collective 208 209 Input Parameter: 210 . obj - object to set options for 211 212 Level: intermediate 213 214 Notes: 215 This is a macro that handles its own error checking, it does not return an error code. 216 217 Needs to be ended by a call the `PetscOptionsEnd()` 218 219 Can add subheadings with `PetscOptionsHeadBegin()` 220 221 .seealso: `PetscOptionsGetReal()`, `PetscOptionsHasName()`, `PetscOptionsGetString()`, `PetscOptionsGetInt()`, 222 `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()` 223 `PetscOptionsInt()`, `PetscOptionsString()`, `PetscOptionsReal()`, `PetscOptionsBool()`, 224 `PetscOptionsName()`, `PetscOptionsBegin()`, `PetscOptionsEnd()`, `PetscOptionsHeadBegin()`, 225 `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`, 226 `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`, 227 `PetscOptionsFList()`, `PetscOptionsEList()` 228 M*/ 229 #define PetscObjectOptionsBegin(obj) \ 230 do { \ 231 PetscOptionItems PetscOptionsObjectBase; \ 232 PetscOptionItems *PetscOptionsObject = &PetscOptionsObjectBase; \ 233 PetscOptionsObject->options = ((PetscObject)obj)->options; \ 234 for (PetscOptionsObject->count = (PetscOptionsPublish ? -1 : 1); PetscOptionsObject->count < 2; PetscOptionsObject->count++) { \ 235 PetscCall(PetscObjectOptionsBegin_Private(obj, PetscOptionsObject)) 236 237 /*MC 238 PetscOptionsEnd - Ends a set of queries on the options database that are related and should be 239 displayed on the same window of a GUI that allows the user to set the options interactively. 240 241 Synopsis: 242 #include <petscoptions.h> 243 PetscErrorCode PetscOptionsEnd(void) 244 245 Collective on the comm used in `PetscOptionsBegin()` or obj used in `PetscObjectOptionsBegin()` 246 247 Level: intermediate 248 249 Notes: 250 Needs to be preceded by a call to `PetscOptionsBegin()` or `PetscObjectOptionsBegin()` 251 252 This is a macro that handles its own error checking, it does not return an error code. 253 254 Fortran Note: 255 Returns ierr error code per PETSc Fortran API 256 257 .seealso: `PetscOptionsGetReal()`, `PetscOptionsHasName()`, `PetscOptionsGetString()`, `PetscOptionsGetInt()`, 258 `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()` 259 `PetscOptionsInt()`, `PetscOptionsString()`, `PetscOptionsReal()`, `PetscOptionsBool()`, 260 `PetscOptionsName()`, `PetscOptionsBegin()`, `PetscOptionsHeadBegin()`, 261 `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`, 262 `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`, 263 `PetscOptionsFList()`, `PetscOptionsEList()`, `PetscObjectOptionsBegin()` 264 M*/ 265 #define PetscOptionsEnd() \ 266 PetscCall(PetscOptionsEnd_Private(PetscOptionsObject)); \ 267 } \ 268 } \ 269 while (0) 270 #endif /* PETSC_CLANG_STATIC_ANALYZER */ 271 272 PETSC_EXTERN PetscErrorCode PetscOptionsBegin_Private(PetscOptionItems *, MPI_Comm, const char[], const char[], const char[]); 273 PETSC_EXTERN PetscErrorCode PetscObjectOptionsBegin_Private(PetscObject, PetscOptionItems *); 274 PETSC_EXTERN PetscErrorCode PetscOptionsEnd_Private(PetscOptionItems *); 275 PETSC_EXTERN PetscErrorCode PetscOptionsHeadBegin(PetscOptionItems *, const char[]); 276 277 #if defined(PETSC_CLANG_STATIC_ANALYZER) 278 template <typename... T> 279 void PetscOptionsHeadBegin(T...); 280 void PetscOptionsHeadEnd(void); 281 template <typename... T> 282 PetscErrorCode PetscOptionsEnum(T...); 283 template <typename... T> 284 PetscErrorCode PetscOptionsInt(T...); 285 template <typename... T> 286 PetscErrorCode PetscOptionsBoundedInt(T...); 287 template <typename... T> 288 PetscErrorCode PetscOptionsRangeInt(T...); 289 template <typename... T> 290 PetscErrorCode PetscOptionsReal(T...); 291 template <typename... T> 292 PetscErrorCode PetscOptionsScalar(T...); 293 template <typename... T> 294 PetscErrorCode PetscOptionsName(T...); 295 template <typename... T> 296 PetscErrorCode PetscOptionsString(T...); 297 template <typename... T> 298 PetscErrorCode PetscOptionsBool(T...); 299 template <typename... T> 300 PetscErrorCode PetscOptionsBoolGroupBegin(T...); 301 template <typename... T> 302 PetscErrorCode PetscOptionsBoolGroup(T...); 303 template <typename... T> 304 PetscErrorCode PetscOptionsBoolGroupEnd(T...); 305 template <typename... T> 306 PetscErrorCode PetscOptionsFList(T...); 307 template <typename... T> 308 PetscErrorCode PetscOptionsEList(T...); 309 template <typename... T> 310 PetscErrorCode PetscOptionsRealArray(T...); 311 template <typename... T> 312 PetscErrorCode PetscOptionsScalarArray(T...); 313 template <typename... T> 314 PetscErrorCode PetscOptionsIntArray(T...); 315 template <typename... T> 316 PetscErrorCode PetscOptionsStringArray(T...); 317 template <typename... T> 318 PetscErrorCode PetscOptionsBoolArray(T...); 319 template <typename... T> 320 PetscErrorCode PetscOptionsEnumArray(T...); 321 template <typename... T> 322 PetscErrorCode PetscOptionsDeprecated(T...); 323 template <typename... T> 324 PetscErrorCode PetscOptionsDeprecatedNoObject(T...); 325 #else 326 /*MC 327 PetscOptionsHeadBegin - Puts a heading before listing any more published options. Used, for example, 328 in `KSPSetFromOptions_GMRES()`. 329 330 Logically Collective on the communicator passed in `PetscOptionsBegin()` 331 332 Input Parameter: 333 . head - the heading text 334 335 Level: developer 336 337 Notes: 338 Handles errors directly, hence does not return an error code 339 340 Must be between a `PetscOptionsBegin()` and a `PetscOptionsEnd()`, and `PetscOptionsObject` created in `PetscOptionsBegin()` should be the first argument 341 342 Must be followed by a call to `PetscOptionsHeadEnd()` in the same function. 343 344 .seealso: `PetscOptionsGetInt()`, `PetscOptionsGetReal()`, 345 `PetscOptionsHasName()`, `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()`, 346 `PetscOptionsName()`, `PetscOptionsBegin()`, `PetscOptionsEnd()`, `PetscOptionsHeadBegin()`, 347 `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`, 348 `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`, 349 `PetscOptionsFList()`, `PetscOptionsEList()` 350 @*/ 351 #define PetscOptionsHeadBegin(PetscOptionsObject, head) \ 352 do { \ 353 if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) PetscCall((*PetscHelpPrintf)(PetscOptionsObject->comm, " %s\n", head)); \ 354 } while (0) 355 356 #define PetscOptionsHead(...) PETSC_DEPRECATED_MACRO(3, 18, 0, "PetscOptionsHeadBegin()", ) PetscOptionsHeadBegin(__VA_ARGS__) 357 358 /*MC 359 PetscOptionsHeadEnd - Ends a section of options begun with `PetscOptionsHeadBegin()` 360 See, for example, `KSPSetFromOptions_GMRES()`. 361 362 Synopsis: 363 #include <petscoptions.h> 364 PetscErrorCode PetscOptionsHeadEnd(void) 365 366 Collective on the comm used in `PetscOptionsBegin()` or obj used in `PetscObjectOptionsBegin()` 367 368 Level: intermediate 369 370 Notes: 371 Must be between a `PetscOptionsBegin()` or `PetscObjectOptionsBegin()` and a `PetscOptionsEnd()` 372 373 Must be preceded by a call to `PetscOptionsHeadBegin()` in the same function. 374 375 This needs to be used only if the code below `PetscOptionsHeadEnd()` can be run ONLY once. 376 See, for example, `PCSetFromOptions_Composite()`. This is a `return(0)` in it for early exit 377 from the function. 378 379 This is only for use with the PETSc options GUI 380 381 .seealso: `PetscOptionsGetInt()`, `PetscOptionsGetReal()`, 382 `PetscOptionsHasName()`, `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()`, 383 `PetscOptionsName()`, `PetscOptionsBegin()`, `PetscOptionsEnd()`, `PetscOptionsHeadBegin()`, 384 `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`, 385 `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`, 386 `PetscOptionsFList()`, `PetscOptionsEList()`, `PetscOptionsEnum()` 387 M*/ 388 #define PetscOptionsHeadEnd() \ 389 do { \ 390 if (PetscOptionsObject->count != 1) PetscFunctionReturn(PETSC_SUCCESS); \ 391 } while (0) 392 393 #define PetscOptionsTail(...) PETSC_DEPRECATED_MACRO(3, 18, 0, "PetscOptionsHeadEnd()", ) PetscOptionsHeadEnd(__VA_ARGS__) 394 395 #define PetscOptionsEnum(a, b, c, d, e, f, g) PetscOptionsEnum_Private(PetscOptionsObject, a, b, c, d, e, f, g) 396 #define PetscOptionsInt(a, b, c, d, e, f) PetscOptionsInt_Private(PetscOptionsObject, a, b, c, d, e, f, PETSC_MIN_INT, PETSC_MAX_INT) 397 #define PetscOptionsBoundedInt(a, b, c, d, e, f, g) PetscOptionsInt_Private(PetscOptionsObject, a, b, c, d, e, f, g, PETSC_MAX_INT) 398 #define PetscOptionsRangeInt(a, b, c, d, e, f, g, h) PetscOptionsInt_Private(PetscOptionsObject, a, b, c, d, e, f, g, h) 399 #define PetscOptionsReal(a, b, c, d, e, f) PetscOptionsReal_Private(PetscOptionsObject, a, b, c, d, e, f) 400 #define PetscOptionsScalar(a, b, c, d, e, f) PetscOptionsScalar_Private(PetscOptionsObject, a, b, c, d, e, f) 401 #define PetscOptionsName(a, b, c, d) PetscOptionsName_Private(PetscOptionsObject, a, b, c, d) 402 #define PetscOptionsString(a, b, c, d, e, f, g) PetscOptionsString_Private(PetscOptionsObject, a, b, c, d, e, f, g) 403 #define PetscOptionsBool(a, b, c, d, e, f) PetscOptionsBool_Private(PetscOptionsObject, a, b, c, d, e, f) 404 #define PetscOptionsBoolGroupBegin(a, b, c, d) PetscOptionsBoolGroupBegin_Private(PetscOptionsObject, a, b, c, d) 405 #define PetscOptionsBoolGroup(a, b, c, d) PetscOptionsBoolGroup_Private(PetscOptionsObject, a, b, c, d) 406 #define PetscOptionsBoolGroupEnd(a, b, c, d) PetscOptionsBoolGroupEnd_Private(PetscOptionsObject, a, b, c, d) 407 #define PetscOptionsFList(a, b, c, d, e, f, g, h) PetscOptionsFList_Private(PetscOptionsObject, a, b, c, d, e, f, g, h) 408 #define PetscOptionsEList(a, b, c, d, e, f, g, h) PetscOptionsEList_Private(PetscOptionsObject, a, b, c, d, e, f, g, h) 409 #define PetscOptionsRealArray(a, b, c, d, e, f) PetscOptionsRealArray_Private(PetscOptionsObject, a, b, c, d, e, f) 410 #define PetscOptionsScalarArray(a, b, c, d, e, f) PetscOptionsScalarArray_Private(PetscOptionsObject, a, b, c, d, e, f) 411 #define PetscOptionsIntArray(a, b, c, d, e, f) PetscOptionsIntArray_Private(PetscOptionsObject, a, b, c, d, e, f) 412 #define PetscOptionsStringArray(a, b, c, d, e, f) PetscOptionsStringArray_Private(PetscOptionsObject, a, b, c, d, e, f) 413 #define PetscOptionsBoolArray(a, b, c, d, e, f) PetscOptionsBoolArray_Private(PetscOptionsObject, a, b, c, d, e, f) 414 #define PetscOptionsEnumArray(a, b, c, d, e, f, g) PetscOptionsEnumArray_Private(PetscOptionsObject, a, b, c, d, e, f, g) 415 #define PetscOptionsDeprecated(a, b, c, d) PetscOptionsDeprecated_Private(PetscOptionsObject, a, b, c, d) 416 #define PetscOptionsDeprecatedNoObject(a, b, c, d) PetscOptionsDeprecated_Private(NULL, a, b, c, d) 417 #endif /* PETSC_CLANG_STATIC_ANALYZER */ 418 419 PETSC_EXTERN PetscErrorCode PetscOptionsEnum_Private(PetscOptionItems *, const char[], const char[], const char[], const char *const *, PetscEnum, PetscEnum *, PetscBool *); 420 PETSC_EXTERN PetscErrorCode PetscOptionsInt_Private(PetscOptionItems *, const char[], const char[], const char[], PetscInt, PetscInt *, PetscBool *, PetscInt, PetscInt); 421 PETSC_EXTERN PetscErrorCode PetscOptionsReal_Private(PetscOptionItems *, const char[], const char[], const char[], PetscReal, PetscReal *, PetscBool *); 422 PETSC_EXTERN PetscErrorCode PetscOptionsScalar_Private(PetscOptionItems *, const char[], const char[], const char[], PetscScalar, PetscScalar *, PetscBool *); 423 PETSC_EXTERN PetscErrorCode PetscOptionsName_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool *); 424 PETSC_EXTERN PetscErrorCode PetscOptionsString_Private(PetscOptionItems *, const char[], const char[], const char[], const char[], char *, size_t, PetscBool *); 425 PETSC_EXTERN PetscErrorCode PetscOptionsBool_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool, PetscBool *, PetscBool *); 426 PETSC_EXTERN PetscErrorCode PetscOptionsBoolGroupBegin_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool *); 427 PETSC_EXTERN PetscErrorCode PetscOptionsBoolGroup_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool *); 428 PETSC_EXTERN PetscErrorCode PetscOptionsBoolGroupEnd_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool *); 429 PETSC_EXTERN PetscErrorCode PetscOptionsFList_Private(PetscOptionItems *, const char[], const char[], const char[], PetscFunctionList, const char[], char[], size_t, PetscBool *); 430 PETSC_EXTERN PetscErrorCode PetscOptionsEList_Private(PetscOptionItems *, const char[], const char[], const char[], const char *const *, PetscInt, const char[], PetscInt *, PetscBool *); 431 PETSC_EXTERN PetscErrorCode PetscOptionsRealArray_Private(PetscOptionItems *, const char[], const char[], const char[], PetscReal[], PetscInt *, PetscBool *); 432 PETSC_EXTERN PetscErrorCode PetscOptionsScalarArray_Private(PetscOptionItems *, const char[], const char[], const char[], PetscScalar[], PetscInt *, PetscBool *); 433 PETSC_EXTERN PetscErrorCode PetscOptionsIntArray_Private(PetscOptionItems *, const char[], const char[], const char[], PetscInt[], PetscInt *, PetscBool *); 434 PETSC_EXTERN PetscErrorCode PetscOptionsStringArray_Private(PetscOptionItems *, const char[], const char[], const char[], char *[], PetscInt *, PetscBool *); 435 PETSC_EXTERN PetscErrorCode PetscOptionsBoolArray_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool[], PetscInt *, PetscBool *); 436 PETSC_EXTERN PetscErrorCode PetscOptionsEnumArray_Private(PetscOptionItems *, const char[], const char[], const char[], const char *const *, PetscEnum[], PetscInt *, PetscBool *); 437 PETSC_EXTERN PetscErrorCode PetscOptionsDeprecated_Private(PetscOptionItems *, const char[], const char[], const char[], const char[]); 438 439 PETSC_EXTERN PetscErrorCode PetscOptionsSAWsDestroy(void); 440 441 PETSC_EXTERN PetscErrorCode PetscObjectAddOptionsHandler(PetscObject, PetscErrorCode (*)(PetscObject, PetscOptionItems *, void *), PetscErrorCode (*)(PetscObject, void *), void *); 442 PETSC_EXTERN PetscErrorCode PetscObjectProcessOptionsHandlers(PetscObject, PetscOptionItems *); 443 PETSC_EXTERN PetscErrorCode PetscObjectDestroyOptionsHandlers(PetscObject); 444 445 PETSC_EXTERN PetscErrorCode PetscOptionsLeftError(void); 446