xref: /petsc/include/petscoptions.h (revision 48a46eb9bd028bec07ec0f396b1a3abb43f14558)
1f26ada1bSBarry Smith /*
237f753daSBarry Smith    Routines to determine options set in the options database.
3f26ada1bSBarry Smith */
426bd1501SBarry Smith #if !defined(PETSCOPTIONS_H)
526bd1501SBarry Smith #define PETSCOPTIONS_H
6ac09b921SBarry Smith 
72c8e378dSBarry Smith #include <petscsys.h>
8c619b03eSJed Brown #include <petscviewertypes.h>
93a3b2205SBarry Smith 
10ac09b921SBarry Smith /* SUBMANSEC = Sys */
11ac09b921SBarry Smith 
12c5c1f447SLisandro Dalcin #define PETSC_MAX_OPTION_NAME 512
13c5929fdfSBarry Smith typedef struct _n_PetscOptions *PetscOptions;
14c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode     PetscOptionsCreate(PetscOptions *);
15b4205f0bSBarry Smith PETSC_EXTERN PetscErrorCode     PetscOptionsPush(PetscOptions);
16b4205f0bSBarry Smith PETSC_EXTERN PetscErrorCode     PetscOptionsPop(void);
17c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode     PetscOptionsDestroy(PetscOptions *);
182d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode     PetscOptionsCreateDefault(void);
192d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode     PetscOptionsDestroyDefault(void);
20c5929fdfSBarry Smith 
212d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsHasHelp(PetscOptions, PetscBool *);
22c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsHasName(PetscOptions, const char[], const char[], PetscBool *);
23c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsGetBool(PetscOptions, const char[], const char[], PetscBool *, PetscBool *);
242d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsGetInt(PetscOptions, const char[], const char[], PetscInt *, PetscBool *);
252d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsGetEnum(PetscOptions, const char[], const char[], const char *const *, PetscEnum *, PetscBool *);
262d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsGetEList(PetscOptions, const char[], const char[], const char *const *, PetscInt, PetscInt *, PetscBool *);
27c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsGetReal(PetscOptions, const char[], const char[], PetscReal *, PetscBool *);
28c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsGetScalar(PetscOptions, const char[], const char[], PetscScalar *, PetscBool *);
292d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsGetString(PetscOptions, const char[], const char[], char[], size_t, PetscBool *);
302d747510SLisandro Dalcin 
312d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsGetBoolArray(PetscOptions, const char[], const char[], PetscBool[], PetscInt *, PetscBool *);
322d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsGetEnumArray(PetscOptions, const char[], const char[], const char *const *, PetscEnum *, PetscInt *, PetscBool *);
33c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsGetIntArray(PetscOptions, const char[], const char[], PetscInt[], PetscInt *, PetscBool *);
34c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsGetRealArray(PetscOptions, const char[], const char[], PetscReal[], PetscInt *, PetscBool *);
35c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsGetScalarArray(PetscOptions, const char[], const char[], PetscScalar[], PetscInt *, PetscBool *);
36c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsGetStringArray(PetscOptions, const char[], const char[], char *[], PetscInt *, PetscBool *);
373a3b2205SBarry Smith 
382d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsValidKey(const char[], PetscBool *);
39c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsSetAlias(PetscOptions, const char[], const char[]);
40c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsSetValue(PetscOptions, const char[], const char[]);
41c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsClearValue(PetscOptions, const char[]);
422d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsFindPair(PetscOptions, const char[], const char[], const char *[], PetscBool *);
433a3b2205SBarry Smith 
442d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsGetAll(PetscOptions, char *[]);
45c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsAllUsed(PetscOptions, PetscInt *);
462d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsUsed(PetscOptions, const char[], PetscBool *);
47c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsLeft(PetscOptions);
481ab23d95SFande Kong PETSC_EXTERN PetscErrorCode PetscOptionsLeftGet(PetscOptions, PetscInt *, char ***, char ***);
495b191818SFande Kong PETSC_EXTERN PetscErrorCode PetscOptionsLeftRestore(PetscOptions, PetscInt *, char ***, char ***);
50c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsView(PetscOptions, PetscViewer);
514b0e389bSBarry Smith 
522d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsReject(PetscOptions, const char[], const char[], const char[]);
53c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsInsert(PetscOptions, int *, char ***, const char[]);
54c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsInsertFile(MPI_Comm, PetscOptions, const char[], PetscBool);
555c23ca1cSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsInsertFileYAML(MPI_Comm, PetscOptions, const char[], PetscBool);
56c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsInsertString(PetscOptions, const char[]);
57080f0011SToby Isaac PETSC_EXTERN PetscErrorCode PetscOptionsInsertStringYAML(PetscOptions, const char[]);
58d06005cbSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsInsertArgs(PetscOptions, int, char **);
59c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsClear(PetscOptions);
60c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsPrefixPush(PetscOptions, const char[]);
61c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsPrefixPop(PetscOptions);
625d0dffe5SBarry Smith 
63014dd563SJed Brown PETSC_EXTERN PetscErrorCode PetscOptionsGetenv(MPI_Comm, const char[], char[], size_t, PetscBool *);
642d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsStringToBool(const char[], PetscBool *);
65014dd563SJed Brown PETSC_EXTERN PetscErrorCode PetscOptionsStringToInt(const char[], PetscInt *);
66014dd563SJed Brown PETSC_EXTERN PetscErrorCode PetscOptionsStringToReal(const char[], PetscReal *);
672d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsStringToScalar(const char[], PetscScalar *);
682e8a6d31SBarry Smith 
69014dd563SJed Brown PETSC_EXTERN PetscErrorCode PetscOptionsMonitorSet(PetscErrorCode (*)(const char[], const char[], void *), void *, PetscErrorCode (*)(void **));
70014dd563SJed Brown PETSC_EXTERN PetscErrorCode PetscOptionsMonitorDefault(const char[], const char[], void *);
71081c24baSBoyana Norris 
7284761bfeSJed Brown PETSC_EXTERN PetscErrorCode PetscObjectSetOptions(PetscObject, PetscOptions);
7384761bfeSJed Brown PETSC_EXTERN PetscErrorCode PetscObjectGetOptions(PetscObject, PetscOptions *);
7484761bfeSJed Brown 
75014dd563SJed Brown PETSC_EXTERN PetscBool PetscOptionsPublish;
76e55864a3SBarry Smith 
77e55864a3SBarry Smith /*
78e55864a3SBarry Smith     See manual page for PetscOptionsBegin()
794416b707SBarry Smith 
804416b707SBarry Smith     PetscOptionsItem and PetscOptionsItems are a single option (such as ksp_type) and a collection of such single
814416b707SBarry Smith   options being handled with a PetscOptionsBegin/End()
824416b707SBarry Smith 
83e55864a3SBarry Smith */
849371c9d4SSatish Balay typedef enum {
859371c9d4SSatish Balay   OPTION_INT,
869371c9d4SSatish Balay   OPTION_BOOL,
879371c9d4SSatish Balay   OPTION_REAL,
889371c9d4SSatish Balay   OPTION_FLIST,
899371c9d4SSatish Balay   OPTION_STRING,
909371c9d4SSatish Balay   OPTION_REAL_ARRAY,
919371c9d4SSatish Balay   OPTION_SCALAR_ARRAY,
929371c9d4SSatish Balay   OPTION_HEAD,
939371c9d4SSatish Balay   OPTION_INT_ARRAY,
949371c9d4SSatish Balay   OPTION_ELIST,
959371c9d4SSatish Balay   OPTION_BOOL_ARRAY,
969371c9d4SSatish Balay   OPTION_STRING_ARRAY
979371c9d4SSatish Balay } PetscOptionType;
984416b707SBarry Smith typedef struct _n_PetscOptionItem *PetscOptionItem;
994416b707SBarry Smith struct _n_PetscOptionItem {
100e55864a3SBarry Smith   char              *option;
101e55864a3SBarry Smith   char              *text;
102e55864a3SBarry Smith   void              *data;  /* used to hold the default value and then any value it is changed to by GUI */
103e55864a3SBarry Smith   PetscFunctionList  flist; /* used for available values for PetscOptionsList() */
104e55864a3SBarry Smith   const char *const *list;  /* used for available values for PetscOptionsEList() */
105e55864a3SBarry Smith   char               nlist; /* number of entries in list */
106e55864a3SBarry Smith   char              *man;
107e55864a3SBarry Smith   size_t             arraylength; /* number of entries in data in the case that it is an array (of PetscInt etc) */
108e55864a3SBarry Smith   PetscBool          set;         /* the user has changed this value in the GUI */
109e55864a3SBarry Smith   PetscOptionType    type;
1104416b707SBarry Smith   PetscOptionItem    next;
111e55864a3SBarry Smith   char              *pman;
112e55864a3SBarry Smith   void              *edata;
113e55864a3SBarry Smith };
114e55864a3SBarry Smith 
1154416b707SBarry Smith typedef struct _p_PetscOptionItems {
116e55864a3SBarry Smith   PetscInt        count;
1174416b707SBarry Smith   PetscOptionItem next;
118e55864a3SBarry Smith   char           *prefix, *pprefix;
119e55864a3SBarry Smith   char           *title;
120e55864a3SBarry Smith   MPI_Comm        comm;
121e55864a3SBarry Smith   PetscBool       printhelp, changedmethod, alreadyprinted;
122e55864a3SBarry Smith   PetscObject     object;
123c5929fdfSBarry Smith   PetscOptions    options;
1244416b707SBarry Smith } PetscOptionItems;
12530de9b25SBarry Smith 
1265f80ce2aSJacob Faibussowitsch #if defined(PETSC_CLANG_STATIC_ANALYZER)
12794bad497SJacob Faibussowitsch extern PetscOptionItems *PetscOptionsObject; /* declare this so that the PetscOptions stubs work */
1285f80ce2aSJacob Faibussowitsch PetscErrorCode           PetscOptionsBegin(MPI_Comm, const char *, const char *, const char *);
1295f80ce2aSJacob Faibussowitsch PetscErrorCode           PetscObjectOptionsBegin(PetscObject);
1305f80ce2aSJacob Faibussowitsch PetscErrorCode           PetscOptionsEnd(void);
1315f80ce2aSJacob Faibussowitsch #else
13230de9b25SBarry Smith /*MC
13330de9b25SBarry Smith     PetscOptionsBegin - Begins a set of queries on the options database that are related and should be
1341957e957SBarry Smith      displayed on the same window of a GUI that allows the user to set the options interactively. Often one should
1351957e957SBarry Smith      use PetscObjectOptionsBegin() rather than this call.
13630de9b25SBarry Smith 
137f2ba6396SBarry Smith    Synopsis:
138aaa7dc30SBarry Smith     #include <petscoptions.h>
139f2ba6396SBarry Smith     PetscErrorCode PetscOptionsBegin(MPI_Comm comm,const char prefix[],const char title[],const char mansec[])
14030de9b25SBarry Smith 
141fb455bf4SPatrick Sanan     Collective
14230de9b25SBarry Smith 
14330de9b25SBarry Smith   Input Parameters:
14430de9b25SBarry Smith +   comm - communicator that shares GUI
14576280437SVaclav Hapla .   prefix - options prefix for all options displayed on window (optional)
14630de9b25SBarry Smith .   title - short descriptive text, for example "Krylov Solver Options"
14787497f52SBarry Smith -   mansec - section of manual pages for options, for example `KSP` (optional)
14830de9b25SBarry Smith 
14930de9b25SBarry Smith   Level: intermediate
15030de9b25SBarry Smith 
15195452b02SPatrick Sanan   Notes:
152d0609cedSBarry Smith     This is a macro that handles its own error checking, it does not return an error code.
153d0609cedSBarry Smith 
15487497f52SBarry Smith     The set of queries needs to be ended by a call to `PetscOptionsEnd()`.
155fb455bf4SPatrick Sanan 
15687497f52SBarry Smith     One can add subheadings with `PetscOptionsHeadBegin()`.
15730de9b25SBarry Smith 
15895452b02SPatrick Sanan   Developer Notes:
15995452b02SPatrick Sanan       PetscOptionsPublish is set in PetscOptionsCheckInitial_Private() with -saws_options. When PetscOptionsPublish is set the
160fb455bf4SPatrick Sanan       loop between PetscOptionsBegin() and PetscOptionsEnd() is run THREE times with PetscOptionsPublishCount of values -1,0,1.
161fb455bf4SPatrick Sanan       Otherwise the loop is run ONCE with a PetscOptionsPublishCount of 1.
162fb455bf4SPatrick Sanan +      \-1 - PetscOptionsInt() etc. just call PetscOptionsGetInt() etc.
163fb455bf4SPatrick Sanan .      0  - The GUI objects are created in PetscOptionsInt() etc. and displayed in PetscOptionsEnd() and the options
164fb455bf4SPatrick Sanan                database updated with user changes; PetscOptionsGetInt() etc. are also called.
165fb455bf4SPatrick Sanan -      1 - PetscOptionsInt() etc. again call PetscOptionsGetInt() etc. (possibly getting new values), in addition the help message and
166fb455bf4SPatrick Sanan               default values are printed if -help was given.
167fb455bf4SPatrick Sanan       When PetscOptionsObject.changedmethod is set this causes PetscOptionsPublishCount to be reset to -2 (so in the next loop iteration it is -1)
168fb455bf4SPatrick Sanan       and the whole process is repeated. This is to handle when, for example, the KSPType is changed thus changing the list of
169fb455bf4SPatrick Sanan       options available so they need to be redisplayed so the user can change the. Changing PetscOptionsObjects.changedmethod is never
170fb455bf4SPatrick Sanan       currently set.
171aee2cecaSBarry Smith 
172db781477SPatrick Sanan .seealso: `PetscOptionsGetReal()`, `PetscOptionsHasName()`, `PetscOptionsGetString()`, `PetscOptionsGetInt()`,
173db781477SPatrick Sanan           `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()`
174db781477SPatrick Sanan           `PetscOptionsInt()`, `PetscOptionsString()`, `PetscOptionsReal()`, `PetscOptionsBool()`,
175db781477SPatrick Sanan           `PetscOptionsName()`, `PetscOptionsEnd()`, `PetscOptionsHeadBegin()`,
176c2e3fba1SPatrick Sanan           `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`,
177db781477SPatrick Sanan           `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`,
178db781477SPatrick Sanan           `PetscOptionsFList()`, `PetscOptionsEList()`, `PetscObjectOptionsBegin()`
17930de9b25SBarry Smith 
18030de9b25SBarry Smith M*/
1819371c9d4SSatish Balay #define PetscOptionsBegin(comm, prefix, mess, sec) \
1829371c9d4SSatish Balay   do { \
1834416b707SBarry Smith     PetscOptionItems  PetscOptionsObjectBase; \
1844416b707SBarry Smith     PetscOptionItems *PetscOptionsObject = &PetscOptionsObjectBase; \
185d0609cedSBarry Smith     PetscCall(PetscMemzero(PetscOptionsObject, sizeof(*PetscOptionsObject))); \
186e55864a3SBarry Smith     for (PetscOptionsObject->count = (PetscOptionsPublish ? -1 : 1); PetscOptionsObject->count < 2; PetscOptionsObject->count++) { \
1879566063dSJacob Faibussowitsch       PetscCall(PetscOptionsBegin_Private(PetscOptionsObject, comm, prefix, mess, sec))
18830de9b25SBarry Smith 
1895fefd1ebSJed Brown /*MC
1905fefd1ebSJed Brown     PetscObjectOptionsBegin - Begins a set of queries on the options database that are related and should be
1915fefd1ebSJed Brown      displayed on the same window of a GUI that allows the user to set the options interactively.
1925fefd1ebSJed Brown 
193f2ba6396SBarry Smith    Synopsis:
194aaa7dc30SBarry Smith     #include <petscoptions.h>
195f2ba6396SBarry Smith     PetscErrorCode PetscObjectOptionsBegin(PetscObject obj)
1965fefd1ebSJed Brown 
197d083f849SBarry Smith     Collective on obj
1985fefd1ebSJed Brown 
1995fefd1ebSJed Brown   Input Parameters:
2005fefd1ebSJed Brown .   obj - object to set options for
2015fefd1ebSJed Brown 
2025fefd1ebSJed Brown   Level: intermediate
2035fefd1ebSJed Brown 
20495452b02SPatrick Sanan   Notes:
205d0609cedSBarry Smith     This is a macro that handles its own error checking, it does not return an error code.
206d0609cedSBarry Smith 
20787497f52SBarry Smith     Needs to be ended by a call the `PetscOptionsEnd()`
208d0609cedSBarry Smith 
20987497f52SBarry Smith     Can add subheadings with `PetscOptionsHeadBegin()`
2105fefd1ebSJed Brown 
211db781477SPatrick Sanan .seealso: `PetscOptionsGetReal()`, `PetscOptionsHasName()`, `PetscOptionsGetString()`, `PetscOptionsGetInt()`,
212db781477SPatrick Sanan           `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()`
213db781477SPatrick Sanan           `PetscOptionsInt()`, `PetscOptionsString()`, `PetscOptionsReal()`, `PetscOptionsBool()`,
214db781477SPatrick Sanan           `PetscOptionsName()`, `PetscOptionsBegin()`, `PetscOptionsEnd()`, `PetscOptionsHeadBegin()`,
215c2e3fba1SPatrick Sanan           `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`,
216db781477SPatrick Sanan           `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`,
217db781477SPatrick Sanan           `PetscOptionsFList()`, `PetscOptionsEList()`
2185fefd1ebSJed Brown 
2195fefd1ebSJed Brown M*/
2209371c9d4SSatish Balay #define PetscObjectOptionsBegin(obj) \
2219371c9d4SSatish Balay   do { \
2224416b707SBarry Smith     PetscOptionItems  PetscOptionsObjectBase; \
2234416b707SBarry Smith     PetscOptionItems *PetscOptionsObject = &PetscOptionsObjectBase; \
224c5929fdfSBarry Smith     PetscOptionsObject->options          = ((PetscObject)obj)->options; \
225e55864a3SBarry Smith     for (PetscOptionsObject->count = (PetscOptionsPublish ? -1 : 1); PetscOptionsObject->count < 2; PetscOptionsObject->count++) { \
226dbbe0bcdSBarry Smith       PetscCall(PetscObjectOptionsBegin_Private(obj, PetscOptionsObject))
2273194b578SJed Brown 
22830de9b25SBarry Smith /*MC
22930de9b25SBarry Smith     PetscOptionsEnd - Ends a set of queries on the options database that are related and should be
23030de9b25SBarry Smith      displayed on the same window of a GUI that allows the user to set the options interactively.
23130de9b25SBarry Smith 
23287497f52SBarry Smith     Collective on the comm used in `PetscOptionsBegin()` or obj used in `PetscObjectOptionsBegin()`
23330de9b25SBarry Smith 
234f2ba6396SBarry Smith    Synopsis:
235aaa7dc30SBarry Smith      #include <petscoptions.h>
236f2ba6396SBarry Smith      PetscErrorCode PetscOptionsEnd(void)
23730de9b25SBarry Smith 
23830de9b25SBarry Smith   Level: intermediate
23930de9b25SBarry Smith 
24095452b02SPatrick Sanan   Notes:
24187497f52SBarry Smith     Needs to be preceded by a call to `PetscOptionsBegin()` or `PetscObjectOptionsBegin()`
24230de9b25SBarry Smith 
243d0609cedSBarry Smith     This is a macro that handles its own error checking, it does not return an error code.
244d0609cedSBarry Smith 
245db781477SPatrick Sanan .seealso: `PetscOptionsGetReal()`, `PetscOptionsHasName()`, `PetscOptionsGetString()`, `PetscOptionsGetInt()`,
246db781477SPatrick Sanan           `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()`
247db781477SPatrick Sanan           `PetscOptionsInt()`, `PetscOptionsString()`, `PetscOptionsReal()`, `PetscOptionsBool()`,
248db781477SPatrick Sanan           `PetscOptionsName()`, `PetscOptionsBegin()`, `PetscOptionsHeadBegin()`,
249c2e3fba1SPatrick Sanan           `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`,
250db781477SPatrick Sanan           `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`,
251db781477SPatrick Sanan           `PetscOptionsFList()`, `PetscOptionsEList()`, `PetscObjectOptionsBegin()`
25230de9b25SBarry Smith 
25330de9b25SBarry Smith M*/
2549371c9d4SSatish Balay #define PetscOptionsEnd() \
2559371c9d4SSatish Balay   PetscCall(PetscOptionsEnd_Private(PetscOptionsObject)); \
2569371c9d4SSatish Balay   } \
2579371c9d4SSatish Balay   } \
2589371c9d4SSatish Balay   while (0)
2595f80ce2aSJacob Faibussowitsch #endif /* PETSC_CLANG_STATIC_ANALYZER */
26030de9b25SBarry Smith 
2614416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsBegin_Private(PetscOptionItems *, MPI_Comm, const char[], const char[], const char[]);
262dbbe0bcdSBarry Smith PETSC_EXTERN PetscErrorCode PetscObjectOptionsBegin_Private(PetscObject, PetscOptionItems *);
2634416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsEnd_Private(PetscOptionItems *);
264d0609cedSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsHeadBegin(PetscOptionItems *, const char[]);
26530de9b25SBarry Smith 
2665f80ce2aSJacob Faibussowitsch #if defined(PETSC_CLANG_STATIC_ANALYZER)
2679371c9d4SSatish Balay template <typename... T>
2689371c9d4SSatish Balay void PetscOptionsHeadBegin(T...);
269d0609cedSBarry Smith void PetscOptionsHeadEnd(void);
2709371c9d4SSatish Balay template <typename... T>
2719371c9d4SSatish Balay PetscErrorCode PetscOptionsEnum(T...);
2729371c9d4SSatish Balay template <typename... T>
2739371c9d4SSatish Balay PetscErrorCode PetscOptionsInt(T...);
2749371c9d4SSatish Balay template <typename... T>
2759371c9d4SSatish Balay PetscErrorCode PetscOptionsBoundedInt(T...);
2769371c9d4SSatish Balay template <typename... T>
2779371c9d4SSatish Balay PetscErrorCode PetscOptionsRangeInt(T...);
2789371c9d4SSatish Balay template <typename... T>
2799371c9d4SSatish Balay PetscErrorCode PetscOptionsReal(T...);
2809371c9d4SSatish Balay template <typename... T>
2819371c9d4SSatish Balay PetscErrorCode PetscOptionsScalar(T...);
2829371c9d4SSatish Balay template <typename... T>
2839371c9d4SSatish Balay PetscErrorCode PetscOptionsName(T...);
2849371c9d4SSatish Balay template <typename... T>
2859371c9d4SSatish Balay PetscErrorCode PetscOptionsString(T...);
2869371c9d4SSatish Balay template <typename... T>
2879371c9d4SSatish Balay PetscErrorCode PetscOptionsBool(T...);
2889371c9d4SSatish Balay template <typename... T>
2899371c9d4SSatish Balay PetscErrorCode PetscOptionsBoolGroupBegin(T...);
2909371c9d4SSatish Balay template <typename... T>
2919371c9d4SSatish Balay PetscErrorCode PetscOptionsBoolGroup(T...);
2929371c9d4SSatish Balay template <typename... T>
2939371c9d4SSatish Balay PetscErrorCode PetscOptionsBoolGroupEnd(T...);
2949371c9d4SSatish Balay template <typename... T>
2959371c9d4SSatish Balay PetscErrorCode PetscOptionsFList(T...);
2969371c9d4SSatish Balay template <typename... T>
2979371c9d4SSatish Balay PetscErrorCode PetscOptionsEList(T...);
2989371c9d4SSatish Balay template <typename... T>
2999371c9d4SSatish Balay PetscErrorCode PetscOptionsRealArray(T...);
3009371c9d4SSatish Balay template <typename... T>
3019371c9d4SSatish Balay PetscErrorCode PetscOptionsScalarArray(T...);
3029371c9d4SSatish Balay template <typename... T>
3039371c9d4SSatish Balay PetscErrorCode PetscOptionsIntArray(T...);
3049371c9d4SSatish Balay template <typename... T>
3059371c9d4SSatish Balay PetscErrorCode PetscOptionsStringArray(T...);
3069371c9d4SSatish Balay template <typename... T>
3079371c9d4SSatish Balay PetscErrorCode PetscOptionsBoolArray(T...);
3089371c9d4SSatish Balay template <typename... T>
3099371c9d4SSatish Balay PetscErrorCode PetscOptionsEnumArray(T...);
3109371c9d4SSatish Balay template <typename... T>
3119371c9d4SSatish Balay PetscErrorCode PetscOptionsDeprecated(T...);
3129371c9d4SSatish Balay template <typename... T>
3139371c9d4SSatish Balay PetscErrorCode PetscOptionsDeprecatedNoObject(T...);
3145f80ce2aSJacob Faibussowitsch #else
31530de9b25SBarry Smith /*MC
316d0609cedSBarry Smith      PetscOptionsHeadBegin - Puts a heading before listing any more published options. Used, for example,
317d0609cedSBarry Smith             in KSPSetFromOptions_GMRES().
318d0609cedSBarry Smith 
319d0609cedSBarry Smith    Logically Collective on the communicator passed in PetscOptionsBegin()
320d0609cedSBarry Smith 
321d0609cedSBarry Smith    Input Parameter:
322d0609cedSBarry Smith .   head - the heading text
323d0609cedSBarry Smith 
32487497f52SBarry Smith    Level: developer
325d0609cedSBarry Smith 
326d0609cedSBarry Smith    Notes:
327d0609cedSBarry Smith     Handles errors directly, hence does not return an error code
328d0609cedSBarry Smith 
32987497f52SBarry Smith     Must be between a `PetscOptionsBegin()` and a `PetscOptionsEnd()`, and PetscOptionsObject created in `PetscOptionsBegin()` should be the first argument
330d0609cedSBarry Smith 
33187497f52SBarry Smith     Must be followed by a call to `PetscOptionsHeadEnd()` in the same function.
332d0609cedSBarry Smith 
333db781477SPatrick Sanan .seealso: `PetscOptionsGetInt()`, `PetscOptionsGetReal()`,
334db781477SPatrick Sanan           `PetscOptionsHasName()`, `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()`,
335db781477SPatrick Sanan           `PetscOptionsName()`, `PetscOptionsBegin()`, `PetscOptionsEnd()`, `PetscOptionsHeadBegin()`,
336c2e3fba1SPatrick Sanan           `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`,
337db781477SPatrick Sanan           `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`,
338db781477SPatrick Sanan           `PetscOptionsFList()`, `PetscOptionsEList()`
339d0609cedSBarry Smith @*/
3409371c9d4SSatish Balay #define PetscOptionsHeadBegin(PetscOptionsObject, head) \
3419371c9d4SSatish Balay   do { \
342*48a46eb9SPierre Jolivet     if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) PetscCall((*PetscHelpPrintf)(PetscOptionsObject->comm, "  %s\n", head)); \
343d0609cedSBarry Smith   } while (0)
344d0609cedSBarry Smith 
345d0609cedSBarry Smith #define PetscOptionsHead(...) PETSC_DEPRECATED_MACRO("GCC warning \"Use PetscOptionsHeadBegin() (since version 3.18)\"") PetscOptionsHeadBegin(__VA_ARGS__)
346d0609cedSBarry Smith 
347d0609cedSBarry Smith /*MC
34887497f52SBarry Smith      PetscOptionsHeadEnd - Ends a section of options begun with `PetscOptionsHeadBegin()`
34930de9b25SBarry Smith             See, for example, KSPSetFromOptions_GMRES().
35030de9b25SBarry Smith 
35187497f52SBarry Smith     Collective on the comm used in `PetscOptionsBegin()` or obj used in `PetscObjectOptionsBegin()`
35230de9b25SBarry Smith 
353f2ba6396SBarry Smith    Synopsis:
354aaa7dc30SBarry Smith      #include <petscoptions.h>
355d0609cedSBarry Smith      PetscErrorCode PetscOptionsHeadEnd(void)
35630de9b25SBarry Smith 
35730de9b25SBarry Smith   Level: intermediate
35830de9b25SBarry Smith 
35995452b02SPatrick Sanan    Notes:
36087497f52SBarry Smith     Must be between a `PetscOptionsBegin()` or `PetscObjectOptionsBegin()` and a `PetscOptionsEnd()`
36130de9b25SBarry Smith 
36287497f52SBarry Smith     Must be preceded by a call to `PetscOptionsHeadBegin()` in the same function.
36330de9b25SBarry Smith 
36487497f52SBarry Smith     This needs to be used only if the code below `PetscOptionsHeadEnd()` can be run ONLY once.
36587497f52SBarry Smith     See, for example, `PCSetFromOptions_Composite()`. This is a return(0) in it for early exit
366b52f573bSBarry Smith     from the function.
367b52f573bSBarry Smith 
36856752e42SBarry Smith           This is only for use with the PETSc options GUI
369b52f573bSBarry Smith 
370db781477SPatrick Sanan .seealso: `PetscOptionsGetInt()`, `PetscOptionsGetReal()`,
371db781477SPatrick Sanan           `PetscOptionsHasName()`, `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()`,
372db781477SPatrick Sanan           `PetscOptionsName()`, `PetscOptionsBegin()`, `PetscOptionsEnd()`, `PetscOptionsHeadBegin()`,
373c2e3fba1SPatrick Sanan           `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`,
374db781477SPatrick Sanan           `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`,
375db781477SPatrick Sanan           `PetscOptionsFList()`, `PetscOptionsEList()`, `PetscOptionsEnum()`
37630de9b25SBarry Smith M*/
3779371c9d4SSatish Balay #define PetscOptionsHeadEnd() \
3789371c9d4SSatish Balay   do { \
3799371c9d4SSatish Balay     if (PetscOptionsObject->count != 1) PetscFunctionReturn(0); \
3809371c9d4SSatish Balay   } while (0)
381d0609cedSBarry Smith 
382d0609cedSBarry Smith #define PetscOptionsTail(...) PETSC_DEPRECATED_MACRO("GCC warning \"Use PetscOptionsHeadEnd() (since version 3.18)\"") PetscOptionsHeadEnd(__VA_ARGS__)
383186905e3SBarry Smith 
384e55864a3SBarry Smith #define PetscOptionsEnum(a, b, c, d, e, f, g)        PetscOptionsEnum_Private(PetscOptionsObject, a, b, c, d, e, f, g)
3855a856986SBarry Smith #define PetscOptionsInt(a, b, c, d, e, f)            PetscOptionsInt_Private(PetscOptionsObject, a, b, c, d, e, f, PETSC_MIN_INT, PETSC_MAX_INT)
3865a856986SBarry Smith #define PetscOptionsBoundedInt(a, b, c, d, e, f, g)  PetscOptionsInt_Private(PetscOptionsObject, a, b, c, d, e, f, g, PETSC_MAX_INT)
3875a856986SBarry Smith #define PetscOptionsRangeInt(a, b, c, d, e, f, g, h) PetscOptionsInt_Private(PetscOptionsObject, a, b, c, d, e, f, g, h)
388e55864a3SBarry Smith #define PetscOptionsReal(a, b, c, d, e, f)           PetscOptionsReal_Private(PetscOptionsObject, a, b, c, d, e, f)
389e55864a3SBarry Smith #define PetscOptionsScalar(a, b, c, d, e, f)         PetscOptionsScalar_Private(PetscOptionsObject, a, b, c, d, e, f)
390e55864a3SBarry Smith #define PetscOptionsName(a, b, c, d)                 PetscOptionsName_Private(PetscOptionsObject, a, b, c, d)
391e55864a3SBarry Smith #define PetscOptionsString(a, b, c, d, e, f, g)      PetscOptionsString_Private(PetscOptionsObject, a, b, c, d, e, f, g)
392e55864a3SBarry Smith #define PetscOptionsBool(a, b, c, d, e, f)           PetscOptionsBool_Private(PetscOptionsObject, a, b, c, d, e, f)
393e55864a3SBarry Smith #define PetscOptionsBoolGroupBegin(a, b, c, d)       PetscOptionsBoolGroupBegin_Private(PetscOptionsObject, a, b, c, d)
394e55864a3SBarry Smith #define PetscOptionsBoolGroup(a, b, c, d)            PetscOptionsBoolGroup_Private(PetscOptionsObject, a, b, c, d)
395e55864a3SBarry Smith #define PetscOptionsBoolGroupEnd(a, b, c, d)         PetscOptionsBoolGroupEnd_Private(PetscOptionsObject, a, b, c, d)
39683355fc5SBarry Smith #define PetscOptionsFList(a, b, c, d, e, f, g, h)    PetscOptionsFList_Private(PetscOptionsObject, a, b, c, d, e, f, g, h)
397e55864a3SBarry Smith #define PetscOptionsEList(a, b, c, d, e, f, g, h)    PetscOptionsEList_Private(PetscOptionsObject, a, b, c, d, e, f, g, h)
398e55864a3SBarry Smith #define PetscOptionsRealArray(a, b, c, d, e, f)      PetscOptionsRealArray_Private(PetscOptionsObject, a, b, c, d, e, f)
399050cccc3SHong Zhang #define PetscOptionsScalarArray(a, b, c, d, e, f)    PetscOptionsScalarArray_Private(PetscOptionsObject, a, b, c, d, e, f)
400e55864a3SBarry Smith #define PetscOptionsIntArray(a, b, c, d, e, f)       PetscOptionsIntArray_Private(PetscOptionsObject, a, b, c, d, e, f)
401e55864a3SBarry Smith #define PetscOptionsStringArray(a, b, c, d, e, f)    PetscOptionsStringArray_Private(PetscOptionsObject, a, b, c, d, e, f)
402e55864a3SBarry Smith #define PetscOptionsBoolArray(a, b, c, d, e, f)      PetscOptionsBoolArray_Private(PetscOptionsObject, a, b, c, d, e, f)
403d3e47460SLisandro Dalcin #define PetscOptionsEnumArray(a, b, c, d, e, f, g)   PetscOptionsEnumArray_Private(PetscOptionsObject, a, b, c, d, e, f, g)
4049f3a6782SPatrick Sanan #define PetscOptionsDeprecated(a, b, c, d)           PetscOptionsDeprecated_Private(PetscOptionsObject, a, b, c, d)
405b0bdc838SStefano Zampini #define PetscOptionsDeprecatedNoObject(a, b, c, d)   PetscOptionsDeprecated_Private(NULL, a, b, c, d)
4065f80ce2aSJacob Faibussowitsch #endif /* PETSC_CLANG_STATIC_ANALYZER */
407e55864a3SBarry Smith 
4084416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsEnum_Private(PetscOptionItems *, const char[], const char[], const char[], const char *const *, PetscEnum, PetscEnum *, PetscBool *);
4095a856986SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsInt_Private(PetscOptionItems *, const char[], const char[], const char[], PetscInt, PetscInt *, PetscBool *, PetscInt, PetscInt);
4104416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsReal_Private(PetscOptionItems *, const char[], const char[], const char[], PetscReal, PetscReal *, PetscBool *);
4114416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsScalar_Private(PetscOptionItems *, const char[], const char[], const char[], PetscScalar, PetscScalar *, PetscBool *);
4124416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsName_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool *);
4134416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsString_Private(PetscOptionItems *, const char[], const char[], const char[], const char[], char *, size_t, PetscBool *);
4144416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsBool_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool, PetscBool *, PetscBool *);
4154416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsBoolGroupBegin_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool *);
4164416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsBoolGroup_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool *);
4174416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsBoolGroupEnd_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool *);
4184416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsFList_Private(PetscOptionItems *, const char[], const char[], const char[], PetscFunctionList, const char[], char[], size_t, PetscBool *);
4194416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsEList_Private(PetscOptionItems *, const char[], const char[], const char[], const char *const *, PetscInt, const char[], PetscInt *, PetscBool *);
4204416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsRealArray_Private(PetscOptionItems *, const char[], const char[], const char[], PetscReal[], PetscInt *, PetscBool *);
4214416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsScalarArray_Private(PetscOptionItems *, const char[], const char[], const char[], PetscScalar[], PetscInt *, PetscBool *);
4224416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsIntArray_Private(PetscOptionItems *, const char[], const char[], const char[], PetscInt[], PetscInt *, PetscBool *);
4234416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsStringArray_Private(PetscOptionItems *, const char[], const char[], const char[], char *[], PetscInt *, PetscBool *);
4244416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsBoolArray_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool[], PetscInt *, PetscBool *);
4254416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsEnumArray_Private(PetscOptionItems *, const char[], const char[], const char[], const char *const *, PetscEnum[], PetscInt *, PetscBool *);
4269f3a6782SPatrick Sanan PETSC_EXTERN PetscErrorCode PetscOptionsDeprecated_Private(PetscOptionItems *, const char[], const char[], const char[], const char[]);
427cffb1e40SBarry Smith 
428e04113cfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsSAWsDestroy(void);
429f8d0b74dSMatthew Knepley 
430dbbe0bcdSBarry Smith PETSC_EXTERN PetscErrorCode PetscObjectAddOptionsHandler(PetscObject, PetscErrorCode (*)(PetscObject, PetscOptionItems *, void *), PetscErrorCode (*)(PetscObject, void *), void *);
431dbbe0bcdSBarry Smith PETSC_EXTERN PetscErrorCode PetscObjectProcessOptionsHandlers(PetscObject, PetscOptionItems *);
432447ac60bSBarry Smith PETSC_EXTERN PetscErrorCode PetscObjectDestroyOptionsHandlers(PetscObject);
433447ac60bSBarry Smith 
434f4bc716fSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsLeftError(void);
4353a3b2205SBarry Smith #endif
436