xref: /petsc/include/petscoptions.h (revision 66af8762ec03dbef0e079729eb2a1734a35ed7ff)
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