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