Actual source code: petscoptions.h

  1: /*
  2:    Routines to determine options set in the options database.
  3: */
  4: #ifndef PETSCOPTIONS_H
  5: #define PETSCOPTIONS_H

  7: #include <petscsys.h>
  8: #include <petscviewertypes.h>

 10: /* SUBMANSEC = Sys */

 12: typedef enum {
 13:   PETSC_OPT_CODE,
 14:   PETSC_OPT_COMMAND_LINE,
 15:   PETSC_OPT_FILE,
 16:   PETSC_OPT_ENVIRONMENT,
 17:   NUM_PETSC_OPT_SOURCE
 18: } PetscOptionSource;

 20: #define PETSC_MAX_OPTION_NAME 512
 21: typedef struct _n_PetscOptions *PetscOptions;
 22: PETSC_EXTERN PetscErrorCode     PetscOptionsCreate(PetscOptions *);
 23: PETSC_EXTERN PetscErrorCode     PetscOptionsPush(PetscOptions);
 24: PETSC_EXTERN PetscErrorCode     PetscOptionsPop(void);
 25: PETSC_EXTERN PetscErrorCode     PetscOptionsDestroy(PetscOptions *);
 26: PETSC_EXTERN PetscErrorCode     PetscOptionsCreateDefault(void);
 27: PETSC_EXTERN PetscErrorCode     PetscOptionsDestroyDefault(void);

 29: PETSC_EXTERN PetscErrorCode PetscOptionsHasHelp(PetscOptions, PetscBool *);
 30: PETSC_EXTERN PetscErrorCode PetscOptionsHasName(PetscOptions, const char[], const char[], PetscBool *);
 31: PETSC_EXTERN PetscErrorCode PetscOptionsGetBool(PetscOptions, const char[], const char[], PetscBool *, PetscBool *);
 32: PETSC_EXTERN PetscErrorCode PetscOptionsGetInt(PetscOptions, const char[], const char[], PetscInt *, PetscBool *);
 33: PETSC_EXTERN PetscErrorCode PetscOptionsGetEnum(PetscOptions, const char[], const char[], const char *const *, PetscEnum *, PetscBool *);
 34: PETSC_EXTERN PetscErrorCode PetscOptionsGetEList(PetscOptions, const char[], const char[], const char *const *, PetscInt, PetscInt *, PetscBool *);
 35: PETSC_EXTERN PetscErrorCode PetscOptionsGetReal(PetscOptions, const char[], const char[], PetscReal *, PetscBool *);
 36: PETSC_EXTERN PetscErrorCode PetscOptionsGetScalar(PetscOptions, const char[], const char[], PetscScalar *, PetscBool *);
 37: PETSC_EXTERN PetscErrorCode PetscOptionsGetString(PetscOptions, const char[], const char[], char[], size_t, PetscBool *);

 39: PETSC_EXTERN PetscErrorCode PetscOptionsGetBoolArray(PetscOptions, const char[], const char[], PetscBool[], PetscInt *, PetscBool *);
 40: PETSC_EXTERN PetscErrorCode PetscOptionsGetEnumArray(PetscOptions, const char[], const char[], const char *const *, PetscEnum *, PetscInt *, PetscBool *);
 41: PETSC_EXTERN PetscErrorCode PetscOptionsGetIntArray(PetscOptions, const char[], const char[], PetscInt[], PetscInt *, PetscBool *);
 42: PETSC_EXTERN PetscErrorCode PetscOptionsGetRealArray(PetscOptions, const char[], const char[], PetscReal[], PetscInt *, PetscBool *);
 43: PETSC_EXTERN PetscErrorCode PetscOptionsGetScalarArray(PetscOptions, const char[], const char[], PetscScalar[], PetscInt *, PetscBool *);
 44: PETSC_EXTERN PetscErrorCode PetscOptionsGetStringArray(PetscOptions, const char[], const char[], char *[], PetscInt *, PetscBool *);

 46: PETSC_EXTERN PetscErrorCode PetscOptionsValidKey(const char[], PetscBool *);
 47: PETSC_EXTERN PetscErrorCode PetscOptionsSetAlias(PetscOptions, const char[], const char[]);
 48: PETSC_EXTERN PetscErrorCode PetscOptionsSetValue(PetscOptions, const char[], const char[]);
 49: PETSC_EXTERN PetscErrorCode PetscOptionsClearValue(PetscOptions, const char[]);
 50: PETSC_EXTERN PetscErrorCode PetscOptionsFindPair(PetscOptions, const char[], const char[], const char *[], PetscBool *);

 52: PETSC_EXTERN PetscErrorCode PetscOptionsGetAll(PetscOptions, char *[]);
 53: PETSC_EXTERN PetscErrorCode PetscOptionsAllUsed(PetscOptions, PetscInt *);
 54: PETSC_EXTERN PetscErrorCode PetscOptionsUsed(PetscOptions, const char[], PetscBool *);
 55: PETSC_EXTERN PetscErrorCode PetscOptionsLeft(PetscOptions);
 56: PETSC_EXTERN PetscErrorCode PetscOptionsLeftGet(PetscOptions, PetscInt *, char ***, char ***);
 57: PETSC_EXTERN PetscErrorCode PetscOptionsLeftRestore(PetscOptions, PetscInt *, char ***, char ***);
 58: PETSC_EXTERN PetscErrorCode PetscOptionsView(PetscOptions, PetscViewer);

 60: PETSC_EXTERN PetscErrorCode PetscOptionsReject(PetscOptions, const char[], const char[], const char[]);
 61: PETSC_EXTERN PetscErrorCode PetscOptionsInsert(PetscOptions, int *, char ***, const char[]);
 62: PETSC_EXTERN PetscErrorCode PetscOptionsInsertFile(MPI_Comm, PetscOptions, const char[], PetscBool);
 63: PETSC_EXTERN PetscErrorCode PetscOptionsInsertFileYAML(MPI_Comm, PetscOptions, const char[], PetscBool);
 64: PETSC_EXTERN PetscErrorCode PetscOptionsInsertString(PetscOptions, const char[]);
 65: PETSC_EXTERN PetscErrorCode PetscOptionsInsertStringYAML(PetscOptions, const char[]);
 66: PETSC_EXTERN PetscErrorCode PetscOptionsInsertArgs(PetscOptions, int, char **);
 67: PETSC_EXTERN PetscErrorCode PetscOptionsClear(PetscOptions);
 68: PETSC_EXTERN PetscErrorCode PetscOptionsPrefixPush(PetscOptions, const char[]);
 69: PETSC_EXTERN PetscErrorCode PetscOptionsPrefixPop(PetscOptions);

 71: PETSC_EXTERN PetscErrorCode PetscOptionsGetenv(MPI_Comm, const char[], char[], size_t, PetscBool *);
 72: PETSC_EXTERN PetscErrorCode PetscOptionsStringToBool(const char[], PetscBool *);
 73: PETSC_EXTERN PetscErrorCode PetscOptionsStringToInt(const char[], PetscInt *);
 74: PETSC_EXTERN PetscErrorCode PetscOptionsStringToReal(const char[], PetscReal *);
 75: PETSC_EXTERN PetscErrorCode PetscOptionsStringToScalar(const char[], PetscScalar *);

 77: PETSC_EXTERN PetscErrorCode PetscOptionsMonitorSet(PetscErrorCode (*)(const char[], const char[], PetscOptionSource, void *), void *, PetscErrorCode (*)(void **));
 78: PETSC_EXTERN PetscErrorCode PetscOptionsMonitorDefault(const char[], const char[], PetscOptionSource, void *);

 80: PETSC_EXTERN PetscErrorCode PetscObjectSetOptions(PetscObject, PetscOptions);
 81: PETSC_EXTERN PetscErrorCode PetscObjectGetOptions(PetscObject, PetscOptions *);

 83: PETSC_EXTERN PetscBool PetscOptionsPublish;

 85: /*
 86:     See manual page for PetscOptionsBegin()

 88:     PetscOptionsItem and PetscOptionsItems are a single option (such as ksp_type) and a collection of such single
 89:   options being handled with a PetscOptionsBegin/End()

 91: */
 92: typedef enum {
 93:   OPTION_INT,
 94:   OPTION_BOOL,
 95:   OPTION_REAL,
 96:   OPTION_FLIST,
 97:   OPTION_STRING,
 98:   OPTION_REAL_ARRAY,
 99:   OPTION_SCALAR_ARRAY,
100:   OPTION_HEAD,
101:   OPTION_INT_ARRAY,
102:   OPTION_ELIST,
103:   OPTION_BOOL_ARRAY,
104:   OPTION_STRING_ARRAY
105: } PetscOptionType;

107: typedef struct _n_PetscOptionItem *PetscOptionItem;
108: struct _n_PetscOptionItem {
109:   char              *option;
110:   char              *text;
111:   void              *data;  /* used to hold the default value and then any value it is changed to by GUI */
112:   PetscFunctionList  flist; /* used for available values for PetscOptionsList() */
113:   const char *const *list;  /* used for available values for PetscOptionsEList() */
114:   char               nlist; /* number of entries in list */
115:   char              *man;
116:   size_t             arraylength; /* number of entries in data in the case that it is an array (of PetscInt etc) */
117:   PetscBool          set;         /* the user has changed this value in the GUI */
118:   PetscOptionType    type;
119:   PetscOptionItem    next;
120:   char              *pman;
121:   void              *edata;
122: };

124: typedef struct _p_PetscOptionItems {
125:   PetscInt        count;
126:   PetscOptionItem next;
127:   char           *prefix, *pprefix;
128:   char           *title;
129:   MPI_Comm        comm;
130:   PetscBool       printhelp, changedmethod, alreadyprinted;
131:   PetscObject     object;
132:   PetscOptions    options;
133: } PetscOptionItems;

135: #if defined(PETSC_CLANG_STATIC_ANALYZER)
136: extern PetscOptionItems *PetscOptionsObject; /* declare this so that the PetscOptions stubs work */
137: PetscErrorCode           PetscOptionsBegin(MPI_Comm, const char *, const char *, const char *);
138: PetscErrorCode           PetscObjectOptionsBegin(PetscObject);
139: PetscErrorCode           PetscOptionsEnd(void);
140: #else
141:   /*MC
142:     PetscOptionsBegin - Begins a set of queries on the options database that are related and should be
143:      displayed on the same window of a GUI that allows the user to set the options interactively. Often one should
144:      use `PetscObjectOptionsBegin()` rather than this call.

146:    Synopsis:
147: #include <petscoptions.h>
148:     PetscErrorCode PetscOptionsBegin(MPI_Comm comm,const char prefix[],const char title[],const char mansec[])

150:     Collective

152:   Input Parameters:
153: +   comm - communicator that shares GUI
154: .   prefix - options prefix for all options displayed on window (optional)
155: .   title - short descriptive text, for example "Krylov Solver Options"
156: -   mansec - section of manual pages for options, for example `KSP` (optional)

158:   Level: intermediate

160:   Notes:
161:     This is a macro that handles its own error checking, it does not return an error code.

163:     The set of queries needs to be ended by a call to `PetscOptionsEnd()`.

165:     One can add subheadings with `PetscOptionsHeadBegin()`.

167:   Developer Notes:
168:       `PetscOptionsPublish` is set in `PetscOptionsCheckInitial_Private()` with `-saws_options`. When `PetscOptionsPublish` is set the
169:       loop between `PetscOptionsBegin()` and `PetscOptionsEnd()` is run THREE times with `PetscOptionsPublishCount` of values -1,0,1.
170:       Otherwise the loop is run ONCE with a `PetscOptionsPublishCount` of 1.
171: +      \-1 - `PetscOptionsInt()` etc. just call `PetscOptionsGetInt()` etc.
172: .      0  - The GUI objects are created in `PetscOptionsInt()` etc. and displayed in `PetscOptionsEnd()` and the options
173:                database updated with user changes; `PetscOptionsGetInt()` etc. are also called.
174: -      1 - `PetscOptionsInt()` etc. again call `PetscOptionsGetInt()` etc. (possibly getting new values), in addition the help message and
175:               default values are printed if -help was given.
176:       When `PetscOptionsObject.changedmethod` is set this causes `PetscOptionsPublishCount` to be reset to -2 (so in the next loop iteration it is -1)
177:       and the whole process is repeated. This is to handle when, for example, the `KSPType` is changed thus changing the list of
178:       options available so they need to be redisplayed so the user can change the. Changing `PetscOptionsObjects.changedmethod` is never
179:       currently set.

181: .seealso: `PetscOptionsGetReal()`, `PetscOptionsHasName()`, `PetscOptionsGetString()`, `PetscOptionsGetInt()`,
182:           `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()`
183:           `PetscOptionsInt()`, `PetscOptionsString()`, `PetscOptionsReal()`, `PetscOptionsBool()`,
184:           `PetscOptionsName()`, `PetscOptionsEnd()`, `PetscOptionsHeadBegin()`,
185:           `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`,
186:           `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`,
187:           `PetscOptionsFList()`, `PetscOptionsEList()`, `PetscObjectOptionsBegin()`
188: M*/
189:   #define PetscOptionsBegin(comm, prefix, mess, sec) \
190:     do { \
191:       PetscOptionItems  PetscOptionsObjectBase; \
192:       PetscOptionItems *PetscOptionsObject = &PetscOptionsObjectBase; \
193:       PetscCall(PetscMemzero(PetscOptionsObject, sizeof(*PetscOptionsObject))); \
194:       for (PetscOptionsObject->count = (PetscOptionsPublish ? -1 : 1); PetscOptionsObject->count < 2; PetscOptionsObject->count++) { \
195:         PetscCall(PetscOptionsBegin_Private(PetscOptionsObject, comm, prefix, mess, sec))

197:   /*MC
198:     PetscObjectOptionsBegin - Begins a set of queries on the options database that are related and should be
199:      displayed on the same window of a GUI that allows the user to set the options interactively.

201:    Synopsis:
202: #include <petscoptions.h>
203:     PetscErrorCode PetscObjectOptionsBegin(PetscObject obj)

205:     Collective

207:   Input Parameter:
208: .   obj - object to set options for

210:   Level: intermediate

212:   Notes:
213:     This is a macro that handles its own error checking, it does not return an error code.

215:     Needs to be ended by a call the `PetscOptionsEnd()`

217:     Can add subheadings with `PetscOptionsHeadBegin()`

219: .seealso: `PetscOptionsGetReal()`, `PetscOptionsHasName()`, `PetscOptionsGetString()`, `PetscOptionsGetInt()`,
220:           `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()`
221:           `PetscOptionsInt()`, `PetscOptionsString()`, `PetscOptionsReal()`, `PetscOptionsBool()`,
222:           `PetscOptionsName()`, `PetscOptionsBegin()`, `PetscOptionsEnd()`, `PetscOptionsHeadBegin()`,
223:           `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`,
224:           `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`,
225:           `PetscOptionsFList()`, `PetscOptionsEList()`
226: M*/
227:   #define PetscObjectOptionsBegin(obj) \
228:     do { \
229:       PetscOptionItems  PetscOptionsObjectBase; \
230:       PetscOptionItems *PetscOptionsObject = &PetscOptionsObjectBase; \
231:       PetscOptionsObject->options          = ((PetscObject)obj)->options; \
232:       for (PetscOptionsObject->count = (PetscOptionsPublish ? -1 : 1); PetscOptionsObject->count < 2; PetscOptionsObject->count++) { \
233:         PetscCall(PetscObjectOptionsBegin_Private(obj, PetscOptionsObject))

235:   /*MC
236:     PetscOptionsEnd - Ends a set of queries on the options database that are related and should be
237:      displayed on the same window of a GUI that allows the user to set the options interactively.

239:    Synopsis:
240: #include <petscoptions.h>
241:      PetscErrorCode PetscOptionsEnd(void)

243:     Collective on the comm used in `PetscOptionsBegin()` or obj used in `PetscObjectOptionsBegin()`

245:   Level: intermediate

247:   Notes:
248:     Needs to be preceded by a call to `PetscOptionsBegin()` or `PetscObjectOptionsBegin()`

250:     This is a macro that handles its own error checking, it does not return an error code.

252: .seealso: `PetscOptionsGetReal()`, `PetscOptionsHasName()`, `PetscOptionsGetString()`, `PetscOptionsGetInt()`,
253:           `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()`
254:           `PetscOptionsInt()`, `PetscOptionsString()`, `PetscOptionsReal()`, `PetscOptionsBool()`,
255:           `PetscOptionsName()`, `PetscOptionsBegin()`, `PetscOptionsHeadBegin()`,
256:           `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`,
257:           `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`,
258:           `PetscOptionsFList()`, `PetscOptionsEList()`, `PetscObjectOptionsBegin()`
259: M*/
260:   #define PetscOptionsEnd() \
261:     PetscCall(PetscOptionsEnd_Private(PetscOptionsObject)); \
262:     } \
263:     } \
264:     while (0)
265: #endif /* PETSC_CLANG_STATIC_ANALYZER */

267: PETSC_EXTERN PetscErrorCode PetscOptionsBegin_Private(PetscOptionItems *, MPI_Comm, const char[], const char[], const char[]);
268: PETSC_EXTERN PetscErrorCode PetscObjectOptionsBegin_Private(PetscObject, PetscOptionItems *);
269: PETSC_EXTERN PetscErrorCode PetscOptionsEnd_Private(PetscOptionItems *);
270: PETSC_EXTERN PetscErrorCode PetscOptionsHeadBegin(PetscOptionItems *, const char[]);

272: #if defined(PETSC_CLANG_STATIC_ANALYZER)
273: template <typename... T>
274: void PetscOptionsHeadBegin(T...);
275: void PetscOptionsHeadEnd(void);
276: template <typename... T>
277: PetscErrorCode PetscOptionsEnum(T...);
278: template <typename... T>
279: PetscErrorCode PetscOptionsInt(T...);
280: template <typename... T>
281: PetscErrorCode PetscOptionsBoundedInt(T...);
282: template <typename... T>
283: PetscErrorCode PetscOptionsRangeInt(T...);
284: template <typename... T>
285: PetscErrorCode PetscOptionsReal(T...);
286: template <typename... T>
287: PetscErrorCode PetscOptionsScalar(T...);
288: template <typename... T>
289: PetscErrorCode PetscOptionsName(T...);
290: template <typename... T>
291: PetscErrorCode PetscOptionsString(T...);
292: template <typename... T>
293: PetscErrorCode PetscOptionsBool(T...);
294: template <typename... T>
295: PetscErrorCode PetscOptionsBoolGroupBegin(T...);
296: template <typename... T>
297: PetscErrorCode PetscOptionsBoolGroup(T...);
298: template <typename... T>
299: PetscErrorCode PetscOptionsBoolGroupEnd(T...);
300: template <typename... T>
301: PetscErrorCode PetscOptionsFList(T...);
302: template <typename... T>
303: PetscErrorCode PetscOptionsEList(T...);
304: template <typename... T>
305: PetscErrorCode PetscOptionsRealArray(T...);
306: template <typename... T>
307: PetscErrorCode PetscOptionsScalarArray(T...);
308: template <typename... T>
309: PetscErrorCode PetscOptionsIntArray(T...);
310: template <typename... T>
311: PetscErrorCode PetscOptionsStringArray(T...);
312: template <typename... T>
313: PetscErrorCode PetscOptionsBoolArray(T...);
314: template <typename... T>
315: PetscErrorCode PetscOptionsEnumArray(T...);
316: template <typename... T>
317: PetscErrorCode PetscOptionsDeprecated(T...);
318: template <typename... T>
319: PetscErrorCode PetscOptionsDeprecatedNoObject(T...);
320: #else
321:   /*MC
322:      PetscOptionsHeadBegin - Puts a heading before listing any more published options. Used, for example,
323:             in `KSPSetFromOptions_GMRES()`.

325:    Logically Collective on the communicator passed in `PetscOptionsBegin()`

327:    Input Parameter:
328: .   head - the heading text

330:    Level: developer

332:    Notes:
333:     Handles errors directly, hence does not return an error code

335:     Must be between a `PetscOptionsBegin()` and a `PetscOptionsEnd()`, and `PetscOptionsObject` created in `PetscOptionsBegin()` should be the first argument

337:     Must be followed by a call to `PetscOptionsHeadEnd()` in the same function.

339: .seealso: `PetscOptionsGetInt()`, `PetscOptionsGetReal()`,
340:           `PetscOptionsHasName()`, `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()`,
341:           `PetscOptionsName()`, `PetscOptionsBegin()`, `PetscOptionsEnd()`, `PetscOptionsHeadBegin()`,
342:           `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`,
343:           `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`,
344:           `PetscOptionsFList()`, `PetscOptionsEList()`
345: @*/
346:   #define PetscOptionsHeadBegin(PetscOptionsObject, head) \
347:     do { \
348:       if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) PetscCall((*PetscHelpPrintf)(PetscOptionsObject->comm, "  %s\n", head)); \
349:     } while (0)

351:   #define PetscOptionsHead(...) PETSC_DEPRECATED_MACRO("GCC warning \"Use PetscOptionsHeadBegin() (since version 3.18)\"") PetscOptionsHeadBegin(__VA_ARGS__)

353:   /*MC
354:      PetscOptionsHeadEnd - Ends a section of options begun with `PetscOptionsHeadBegin()`
355:             See, for example, `KSPSetFromOptions_GMRES()`.

357:    Synopsis:
358: #include <petscoptions.h>
359:      PetscErrorCode PetscOptionsHeadEnd(void)

361:     Collective on the comm used in `PetscOptionsBegin()` or obj used in `PetscObjectOptionsBegin()`

363:   Level: intermediate

365:    Notes:
366:     Must be between a `PetscOptionsBegin()` or `PetscObjectOptionsBegin()` and a `PetscOptionsEnd()`

368:     Must be preceded by a call to `PetscOptionsHeadBegin()` in the same function.

370:     This needs to be used only if the code below `PetscOptionsHeadEnd()` can be run ONLY once.
371:     See, for example, `PCSetFromOptions_Composite()`. This is a `return(0)` in it for early exit
372:     from the function.

374:           This is only for use with the PETSc options GUI

376: .seealso: `PetscOptionsGetInt()`, `PetscOptionsGetReal()`,
377:           `PetscOptionsHasName()`, `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()`,
378:           `PetscOptionsName()`, `PetscOptionsBegin()`, `PetscOptionsEnd()`, `PetscOptionsHeadBegin()`,
379:           `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`,
380:           `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`,
381:           `PetscOptionsFList()`, `PetscOptionsEList()`, `PetscOptionsEnum()`
382: M*/
383:   #define PetscOptionsHeadEnd() \
384:     do { \
385:       if (PetscOptionsObject->count != 1) PetscFunctionReturn(PETSC_SUCCESS); \
386:     } while (0)

388:   #define PetscOptionsTail(...) PETSC_DEPRECATED_MACRO("GCC warning \"Use PetscOptionsHeadEnd() (since version 3.18)\"") PetscOptionsHeadEnd(__VA_ARGS__)

390:   #define PetscOptionsEnum(a, b, c, d, e, f, g)        PetscOptionsEnum_Private(PetscOptionsObject, a, b, c, d, e, f, g)
391:   #define PetscOptionsInt(a, b, c, d, e, f)            PetscOptionsInt_Private(PetscOptionsObject, a, b, c, d, e, f, PETSC_MIN_INT, PETSC_MAX_INT)
392:   #define PetscOptionsBoundedInt(a, b, c, d, e, f, g)  PetscOptionsInt_Private(PetscOptionsObject, a, b, c, d, e, f, g, PETSC_MAX_INT)
393:   #define PetscOptionsRangeInt(a, b, c, d, e, f, g, h) PetscOptionsInt_Private(PetscOptionsObject, a, b, c, d, e, f, g, h)
394:   #define PetscOptionsReal(a, b, c, d, e, f)           PetscOptionsReal_Private(PetscOptionsObject, a, b, c, d, e, f)
395:   #define PetscOptionsScalar(a, b, c, d, e, f)         PetscOptionsScalar_Private(PetscOptionsObject, a, b, c, d, e, f)
396:   #define PetscOptionsName(a, b, c, d)                 PetscOptionsName_Private(PetscOptionsObject, a, b, c, d)
397:   #define PetscOptionsString(a, b, c, d, e, f, g)      PetscOptionsString_Private(PetscOptionsObject, a, b, c, d, e, f, g)
398:   #define PetscOptionsBool(a, b, c, d, e, f)           PetscOptionsBool_Private(PetscOptionsObject, a, b, c, d, e, f)
399:   #define PetscOptionsBoolGroupBegin(a, b, c, d)       PetscOptionsBoolGroupBegin_Private(PetscOptionsObject, a, b, c, d)
400:   #define PetscOptionsBoolGroup(a, b, c, d)            PetscOptionsBoolGroup_Private(PetscOptionsObject, a, b, c, d)
401:   #define PetscOptionsBoolGroupEnd(a, b, c, d)         PetscOptionsBoolGroupEnd_Private(PetscOptionsObject, a, b, c, d)
402:   #define PetscOptionsFList(a, b, c, d, e, f, g, h)    PetscOptionsFList_Private(PetscOptionsObject, a, b, c, d, e, f, g, h)
403:   #define PetscOptionsEList(a, b, c, d, e, f, g, h)    PetscOptionsEList_Private(PetscOptionsObject, a, b, c, d, e, f, g, h)
404:   #define PetscOptionsRealArray(a, b, c, d, e, f)      PetscOptionsRealArray_Private(PetscOptionsObject, a, b, c, d, e, f)
405:   #define PetscOptionsScalarArray(a, b, c, d, e, f)    PetscOptionsScalarArray_Private(PetscOptionsObject, a, b, c, d, e, f)
406:   #define PetscOptionsIntArray(a, b, c, d, e, f)       PetscOptionsIntArray_Private(PetscOptionsObject, a, b, c, d, e, f)
407:   #define PetscOptionsStringArray(a, b, c, d, e, f)    PetscOptionsStringArray_Private(PetscOptionsObject, a, b, c, d, e, f)
408:   #define PetscOptionsBoolArray(a, b, c, d, e, f)      PetscOptionsBoolArray_Private(PetscOptionsObject, a, b, c, d, e, f)
409:   #define PetscOptionsEnumArray(a, b, c, d, e, f, g)   PetscOptionsEnumArray_Private(PetscOptionsObject, a, b, c, d, e, f, g)
410:   #define PetscOptionsDeprecated(a, b, c, d)           PetscOptionsDeprecated_Private(PetscOptionsObject, a, b, c, d)
411:   #define PetscOptionsDeprecatedNoObject(a, b, c, d)   PetscOptionsDeprecated_Private(NULL, a, b, c, d)
412: #endif /* PETSC_CLANG_STATIC_ANALYZER */

414: PETSC_EXTERN PetscErrorCode PetscOptionsEnum_Private(PetscOptionItems *, const char[], const char[], const char[], const char *const *, PetscEnum, PetscEnum *, PetscBool *);
415: PETSC_EXTERN PetscErrorCode PetscOptionsInt_Private(PetscOptionItems *, const char[], const char[], const char[], PetscInt, PetscInt *, PetscBool *, PetscInt, PetscInt);
416: PETSC_EXTERN PetscErrorCode PetscOptionsReal_Private(PetscOptionItems *, const char[], const char[], const char[], PetscReal, PetscReal *, PetscBool *);
417: PETSC_EXTERN PetscErrorCode PetscOptionsScalar_Private(PetscOptionItems *, const char[], const char[], const char[], PetscScalar, PetscScalar *, PetscBool *);
418: PETSC_EXTERN PetscErrorCode PetscOptionsName_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool *);
419: PETSC_EXTERN PetscErrorCode PetscOptionsString_Private(PetscOptionItems *, const char[], const char[], const char[], const char[], char *, size_t, PetscBool *);
420: PETSC_EXTERN PetscErrorCode PetscOptionsBool_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool, PetscBool *, PetscBool *);
421: PETSC_EXTERN PetscErrorCode PetscOptionsBoolGroupBegin_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool *);
422: PETSC_EXTERN PetscErrorCode PetscOptionsBoolGroup_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool *);
423: PETSC_EXTERN PetscErrorCode PetscOptionsBoolGroupEnd_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool *);
424: PETSC_EXTERN PetscErrorCode PetscOptionsFList_Private(PetscOptionItems *, const char[], const char[], const char[], PetscFunctionList, const char[], char[], size_t, PetscBool *);
425: PETSC_EXTERN PetscErrorCode PetscOptionsEList_Private(PetscOptionItems *, const char[], const char[], const char[], const char *const *, PetscInt, const char[], PetscInt *, PetscBool *);
426: PETSC_EXTERN PetscErrorCode PetscOptionsRealArray_Private(PetscOptionItems *, const char[], const char[], const char[], PetscReal[], PetscInt *, PetscBool *);
427: PETSC_EXTERN PetscErrorCode PetscOptionsScalarArray_Private(PetscOptionItems *, const char[], const char[], const char[], PetscScalar[], PetscInt *, PetscBool *);
428: PETSC_EXTERN PetscErrorCode PetscOptionsIntArray_Private(PetscOptionItems *, const char[], const char[], const char[], PetscInt[], PetscInt *, PetscBool *);
429: PETSC_EXTERN PetscErrorCode PetscOptionsStringArray_Private(PetscOptionItems *, const char[], const char[], const char[], char *[], PetscInt *, PetscBool *);
430: PETSC_EXTERN PetscErrorCode PetscOptionsBoolArray_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool[], PetscInt *, PetscBool *);
431: PETSC_EXTERN PetscErrorCode PetscOptionsEnumArray_Private(PetscOptionItems *, const char[], const char[], const char[], const char *const *, PetscEnum[], PetscInt *, PetscBool *);
432: PETSC_EXTERN PetscErrorCode PetscOptionsDeprecated_Private(PetscOptionItems *, const char[], const char[], const char[], const char[]);

434: PETSC_EXTERN PetscErrorCode PetscOptionsSAWsDestroy(void);

436: PETSC_EXTERN PetscErrorCode PetscObjectAddOptionsHandler(PetscObject, PetscErrorCode (*)(PetscObject, PetscOptionItems *, void *), PetscErrorCode (*)(PetscObject, void *), void *);
437: PETSC_EXTERN PetscErrorCode PetscObjectProcessOptionsHandlers(PetscObject, PetscOptionItems *);
438: PETSC_EXTERN PetscErrorCode PetscObjectDestroyOptionsHandlers(PetscObject);

440: PETSC_EXTERN PetscErrorCode PetscOptionsLeftError(void);
441: #endif