1f26ada1bSBarry Smith /* 237f753daSBarry Smith Routines to determine options set in the options database. 3f26ada1bSBarry Smith */ 46524c165SJacob Faibussowitsch #ifndef 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 129355ec05SMatthew G. Knepley typedef enum { 139355ec05SMatthew G. Knepley PETSC_OPT_CODE, 149355ec05SMatthew G. Knepley PETSC_OPT_COMMAND_LINE, 159355ec05SMatthew G. Knepley PETSC_OPT_FILE, 169355ec05SMatthew G. Knepley PETSC_OPT_ENVIRONMENT, 179355ec05SMatthew G. Knepley NUM_PETSC_OPT_SOURCE 189355ec05SMatthew G. Knepley } PetscOptionSource; 199355ec05SMatthew G. Knepley 20c5c1f447SLisandro Dalcin #define PETSC_MAX_OPTION_NAME 512 21c5929fdfSBarry Smith typedef struct _n_PetscOptions *PetscOptions; 22c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsCreate(PetscOptions *); 23b4205f0bSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsPush(PetscOptions); 24b4205f0bSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsPop(void); 25c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsDestroy(PetscOptions *); 262d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsCreateDefault(void); 272d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsDestroyDefault(void); 28c5929fdfSBarry Smith 292d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsHasHelp(PetscOptions, PetscBool *); 30c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsHasName(PetscOptions, const char[], const char[], PetscBool *); 31c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsGetBool(PetscOptions, const char[], const char[], PetscBool *, PetscBool *); 322d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsGetInt(PetscOptions, const char[], const char[], PetscInt *, PetscBool *); 332d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsGetEnum(PetscOptions, const char[], const char[], const char *const *, PetscEnum *, PetscBool *); 342d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsGetEList(PetscOptions, const char[], const char[], const char *const *, PetscInt, PetscInt *, PetscBool *); 35c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsGetReal(PetscOptions, const char[], const char[], PetscReal *, PetscBool *); 36c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsGetScalar(PetscOptions, const char[], const char[], PetscScalar *, PetscBool *); 372d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsGetString(PetscOptions, const char[], const char[], char[], size_t, PetscBool *); 382d747510SLisandro Dalcin 392d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsGetBoolArray(PetscOptions, const char[], const char[], PetscBool[], PetscInt *, PetscBool *); 402d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsGetEnumArray(PetscOptions, const char[], const char[], const char *const *, PetscEnum *, PetscInt *, PetscBool *); 41c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsGetIntArray(PetscOptions, const char[], const char[], PetscInt[], PetscInt *, PetscBool *); 42c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsGetRealArray(PetscOptions, const char[], const char[], PetscReal[], PetscInt *, PetscBool *); 43c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsGetScalarArray(PetscOptions, const char[], const char[], PetscScalar[], PetscInt *, PetscBool *); 44c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsGetStringArray(PetscOptions, const char[], const char[], char *[], PetscInt *, PetscBool *); 453a3b2205SBarry Smith 462d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsValidKey(const char[], PetscBool *); 47c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsSetAlias(PetscOptions, const char[], const char[]); 48c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsSetValue(PetscOptions, const char[], const char[]); 49c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsClearValue(PetscOptions, const char[]); 502d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsFindPair(PetscOptions, const char[], const char[], const char *[], PetscBool *); 513a3b2205SBarry Smith 522d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsGetAll(PetscOptions, char *[]); 53c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsAllUsed(PetscOptions, PetscInt *); 542d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsUsed(PetscOptions, const char[], PetscBool *); 55c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsLeft(PetscOptions); 561ab23d95SFande Kong PETSC_EXTERN PetscErrorCode PetscOptionsLeftGet(PetscOptions, PetscInt *, char ***, char ***); 575b191818SFande Kong PETSC_EXTERN PetscErrorCode PetscOptionsLeftRestore(PetscOptions, PetscInt *, char ***, char ***); 58c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsView(PetscOptions, PetscViewer); 594b0e389bSBarry Smith 602d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsReject(PetscOptions, const char[], const char[], const char[]); 61c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsInsert(PetscOptions, int *, char ***, const char[]); 62c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsInsertFile(MPI_Comm, PetscOptions, const char[], PetscBool); 635c23ca1cSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsInsertFileYAML(MPI_Comm, PetscOptions, const char[], PetscBool); 64c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsInsertString(PetscOptions, const char[]); 65080f0011SToby Isaac PETSC_EXTERN PetscErrorCode PetscOptionsInsertStringYAML(PetscOptions, const char[]); 66d06005cbSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsInsertArgs(PetscOptions, int, char **); 67c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsClear(PetscOptions); 68c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsPrefixPush(PetscOptions, const char[]); 69c5929fdfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsPrefixPop(PetscOptions); 705d0dffe5SBarry Smith 71014dd563SJed Brown PETSC_EXTERN PetscErrorCode PetscOptionsGetenv(MPI_Comm, const char[], char[], size_t, PetscBool *); 722d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsStringToBool(const char[], PetscBool *); 73014dd563SJed Brown PETSC_EXTERN PetscErrorCode PetscOptionsStringToInt(const char[], PetscInt *); 74014dd563SJed Brown PETSC_EXTERN PetscErrorCode PetscOptionsStringToReal(const char[], PetscReal *); 752d747510SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscOptionsStringToScalar(const char[], PetscScalar *); 762e8a6d31SBarry Smith 779355ec05SMatthew G. Knepley PETSC_EXTERN PetscErrorCode PetscOptionsMonitorSet(PetscErrorCode (*)(const char[], const char[], PetscOptionSource, void *), void *, PetscErrorCode (*)(void **)); 789355ec05SMatthew G. Knepley PETSC_EXTERN PetscErrorCode PetscOptionsMonitorDefault(const char[], const char[], PetscOptionSource, void *); 79081c24baSBoyana Norris 8084761bfeSJed Brown PETSC_EXTERN PetscErrorCode PetscObjectSetOptions(PetscObject, PetscOptions); 8184761bfeSJed Brown PETSC_EXTERN PetscErrorCode PetscObjectGetOptions(PetscObject, PetscOptions *); 8284761bfeSJed Brown 83014dd563SJed Brown PETSC_EXTERN PetscBool PetscOptionsPublish; 84e55864a3SBarry Smith 85e55864a3SBarry Smith /* 86e55864a3SBarry Smith See manual page for PetscOptionsBegin() 874416b707SBarry Smith 884416b707SBarry Smith PetscOptionsItem and PetscOptionsItems are a single option (such as ksp_type) and a collection of such single 894416b707SBarry Smith options being handled with a PetscOptionsBegin/End() 904416b707SBarry Smith 91e55864a3SBarry Smith */ 929371c9d4SSatish Balay typedef enum { 939371c9d4SSatish Balay OPTION_INT, 949371c9d4SSatish Balay OPTION_BOOL, 959371c9d4SSatish Balay OPTION_REAL, 969371c9d4SSatish Balay OPTION_FLIST, 979371c9d4SSatish Balay OPTION_STRING, 989371c9d4SSatish Balay OPTION_REAL_ARRAY, 999371c9d4SSatish Balay OPTION_SCALAR_ARRAY, 1009371c9d4SSatish Balay OPTION_HEAD, 1019371c9d4SSatish Balay OPTION_INT_ARRAY, 1029371c9d4SSatish Balay OPTION_ELIST, 1039371c9d4SSatish Balay OPTION_BOOL_ARRAY, 1049371c9d4SSatish Balay OPTION_STRING_ARRAY 1059371c9d4SSatish Balay } PetscOptionType; 1069355ec05SMatthew G. Knepley 1074416b707SBarry Smith typedef struct _n_PetscOptionItem *PetscOptionItem; 1084416b707SBarry Smith struct _n_PetscOptionItem { 109e55864a3SBarry Smith char *option; 110e55864a3SBarry Smith char *text; 111e55864a3SBarry Smith void *data; /* used to hold the default value and then any value it is changed to by GUI */ 112e55864a3SBarry Smith PetscFunctionList flist; /* used for available values for PetscOptionsList() */ 113e55864a3SBarry Smith const char *const *list; /* used for available values for PetscOptionsEList() */ 114e55864a3SBarry Smith char nlist; /* number of entries in list */ 115e55864a3SBarry Smith char *man; 116e55864a3SBarry Smith size_t arraylength; /* number of entries in data in the case that it is an array (of PetscInt etc) */ 117e55864a3SBarry Smith PetscBool set; /* the user has changed this value in the GUI */ 118e55864a3SBarry Smith PetscOptionType type; 1194416b707SBarry Smith PetscOptionItem next; 120e55864a3SBarry Smith char *pman; 121e55864a3SBarry Smith void *edata; 122e55864a3SBarry Smith }; 123e55864a3SBarry Smith 1244416b707SBarry Smith typedef struct _p_PetscOptionItems { 125e55864a3SBarry Smith PetscInt count; 1264416b707SBarry Smith PetscOptionItem next; 127e55864a3SBarry Smith char *prefix, *pprefix; 128e55864a3SBarry Smith char *title; 129e55864a3SBarry Smith MPI_Comm comm; 130e55864a3SBarry Smith PetscBool printhelp, changedmethod, alreadyprinted; 131e55864a3SBarry Smith PetscObject object; 132c5929fdfSBarry Smith PetscOptions options; 1334416b707SBarry Smith } PetscOptionItems; 13430de9b25SBarry Smith 1355f80ce2aSJacob Faibussowitsch #if defined(PETSC_CLANG_STATIC_ANALYZER) 13694bad497SJacob Faibussowitsch extern PetscOptionItems *PetscOptionsObject; /* declare this so that the PetscOptions stubs work */ 1375f80ce2aSJacob Faibussowitsch PetscErrorCode PetscOptionsBegin(MPI_Comm, const char *, const char *, const char *); 1385f80ce2aSJacob Faibussowitsch PetscErrorCode PetscObjectOptionsBegin(PetscObject); 1395f80ce2aSJacob Faibussowitsch PetscErrorCode PetscOptionsEnd(void); 1405f80ce2aSJacob Faibussowitsch #else 14130de9b25SBarry Smith /*MC 14230de9b25SBarry Smith PetscOptionsBegin - Begins a set of queries on the options database that are related and should be 1431957e957SBarry Smith displayed on the same window of a GUI that allows the user to set the options interactively. Often one should 1441957e957SBarry Smith use PetscObjectOptionsBegin() rather than this call. 14530de9b25SBarry Smith 146f2ba6396SBarry Smith Synopsis: 147aaa7dc30SBarry Smith #include <petscoptions.h> 148f2ba6396SBarry Smith PetscErrorCode PetscOptionsBegin(MPI_Comm comm,const char prefix[],const char title[],const char mansec[]) 14930de9b25SBarry Smith 150fb455bf4SPatrick Sanan Collective 15130de9b25SBarry Smith 15230de9b25SBarry Smith Input Parameters: 15330de9b25SBarry Smith + comm - communicator that shares GUI 15476280437SVaclav Hapla . prefix - options prefix for all options displayed on window (optional) 15530de9b25SBarry Smith . title - short descriptive text, for example "Krylov Solver Options" 15687497f52SBarry Smith - mansec - section of manual pages for options, for example `KSP` (optional) 15730de9b25SBarry Smith 15830de9b25SBarry Smith Level: intermediate 15930de9b25SBarry Smith 16095452b02SPatrick Sanan Notes: 161d0609cedSBarry Smith This is a macro that handles its own error checking, it does not return an error code. 162d0609cedSBarry Smith 16387497f52SBarry Smith The set of queries needs to be ended by a call to `PetscOptionsEnd()`. 164fb455bf4SPatrick Sanan 16587497f52SBarry Smith One can add subheadings with `PetscOptionsHeadBegin()`. 16630de9b25SBarry Smith 16795452b02SPatrick Sanan Developer Notes: 16895452b02SPatrick Sanan PetscOptionsPublish is set in PetscOptionsCheckInitial_Private() with -saws_options. When PetscOptionsPublish is set the 169fb455bf4SPatrick Sanan loop between PetscOptionsBegin() and PetscOptionsEnd() is run THREE times with PetscOptionsPublishCount of values -1,0,1. 170fb455bf4SPatrick Sanan Otherwise the loop is run ONCE with a PetscOptionsPublishCount of 1. 171fb455bf4SPatrick Sanan + \-1 - PetscOptionsInt() etc. just call PetscOptionsGetInt() etc. 172fb455bf4SPatrick Sanan . 0 - The GUI objects are created in PetscOptionsInt() etc. and displayed in PetscOptionsEnd() and the options 173fb455bf4SPatrick Sanan database updated with user changes; PetscOptionsGetInt() etc. are also called. 174fb455bf4SPatrick Sanan - 1 - PetscOptionsInt() etc. again call PetscOptionsGetInt() etc. (possibly getting new values), in addition the help message and 175fb455bf4SPatrick Sanan default values are printed if -help was given. 176fb455bf4SPatrick Sanan When PetscOptionsObject.changedmethod is set this causes PetscOptionsPublishCount to be reset to -2 (so in the next loop iteration it is -1) 177fb455bf4SPatrick Sanan and the whole process is repeated. This is to handle when, for example, the KSPType is changed thus changing the list of 178fb455bf4SPatrick Sanan options available so they need to be redisplayed so the user can change the. Changing PetscOptionsObjects.changedmethod is never 179fb455bf4SPatrick Sanan currently set. 180aee2cecaSBarry Smith 181db781477SPatrick Sanan .seealso: `PetscOptionsGetReal()`, `PetscOptionsHasName()`, `PetscOptionsGetString()`, `PetscOptionsGetInt()`, 182db781477SPatrick Sanan `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()` 183db781477SPatrick Sanan `PetscOptionsInt()`, `PetscOptionsString()`, `PetscOptionsReal()`, `PetscOptionsBool()`, 184db781477SPatrick Sanan `PetscOptionsName()`, `PetscOptionsEnd()`, `PetscOptionsHeadBegin()`, 185c2e3fba1SPatrick Sanan `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`, 186db781477SPatrick Sanan `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`, 187db781477SPatrick Sanan `PetscOptionsFList()`, `PetscOptionsEList()`, `PetscObjectOptionsBegin()` 18830de9b25SBarry Smith 18930de9b25SBarry Smith M*/ 1909371c9d4SSatish Balay #define PetscOptionsBegin(comm, prefix, mess, sec) \ 1919371c9d4SSatish Balay do { \ 1924416b707SBarry Smith PetscOptionItems PetscOptionsObjectBase; \ 1934416b707SBarry Smith PetscOptionItems *PetscOptionsObject = &PetscOptionsObjectBase; \ 194d0609cedSBarry Smith PetscCall(PetscMemzero(PetscOptionsObject, sizeof(*PetscOptionsObject))); \ 195e55864a3SBarry Smith for (PetscOptionsObject->count = (PetscOptionsPublish ? -1 : 1); PetscOptionsObject->count < 2; PetscOptionsObject->count++) { \ 1969566063dSJacob Faibussowitsch PetscCall(PetscOptionsBegin_Private(PetscOptionsObject, comm, prefix, mess, sec)) 19730de9b25SBarry Smith 1985fefd1ebSJed Brown /*MC 1995fefd1ebSJed Brown PetscObjectOptionsBegin - Begins a set of queries on the options database that are related and should be 2005fefd1ebSJed Brown displayed on the same window of a GUI that allows the user to set the options interactively. 2015fefd1ebSJed Brown 202f2ba6396SBarry Smith Synopsis: 203aaa7dc30SBarry Smith #include <petscoptions.h> 204f2ba6396SBarry Smith PetscErrorCode PetscObjectOptionsBegin(PetscObject obj) 2055fefd1ebSJed Brown 206c3339decSBarry Smith Collective 2075fefd1ebSJed Brown 208*2fe279fdSBarry Smith Input Parameter: 2095fefd1ebSJed Brown . obj - object to set options for 2105fefd1ebSJed Brown 2115fefd1ebSJed Brown Level: intermediate 2125fefd1ebSJed Brown 21395452b02SPatrick Sanan Notes: 214d0609cedSBarry Smith This is a macro that handles its own error checking, it does not return an error code. 215d0609cedSBarry Smith 21687497f52SBarry Smith Needs to be ended by a call the `PetscOptionsEnd()` 217d0609cedSBarry Smith 21887497f52SBarry Smith Can add subheadings with `PetscOptionsHeadBegin()` 2195fefd1ebSJed Brown 220db781477SPatrick Sanan .seealso: `PetscOptionsGetReal()`, `PetscOptionsHasName()`, `PetscOptionsGetString()`, `PetscOptionsGetInt()`, 221db781477SPatrick Sanan `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()` 222db781477SPatrick Sanan `PetscOptionsInt()`, `PetscOptionsString()`, `PetscOptionsReal()`, `PetscOptionsBool()`, 223db781477SPatrick Sanan `PetscOptionsName()`, `PetscOptionsBegin()`, `PetscOptionsEnd()`, `PetscOptionsHeadBegin()`, 224c2e3fba1SPatrick Sanan `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`, 225db781477SPatrick Sanan `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`, 226db781477SPatrick Sanan `PetscOptionsFList()`, `PetscOptionsEList()` 2275fefd1ebSJed Brown 2285fefd1ebSJed Brown M*/ 2299371c9d4SSatish Balay #define PetscObjectOptionsBegin(obj) \ 2309371c9d4SSatish Balay do { \ 2314416b707SBarry Smith PetscOptionItems PetscOptionsObjectBase; \ 2324416b707SBarry Smith PetscOptionItems *PetscOptionsObject = &PetscOptionsObjectBase; \ 233c5929fdfSBarry Smith PetscOptionsObject->options = ((PetscObject)obj)->options; \ 234e55864a3SBarry Smith for (PetscOptionsObject->count = (PetscOptionsPublish ? -1 : 1); PetscOptionsObject->count < 2; PetscOptionsObject->count++) { \ 235dbbe0bcdSBarry Smith PetscCall(PetscObjectOptionsBegin_Private(obj, PetscOptionsObject)) 2363194b578SJed Brown 23730de9b25SBarry Smith /*MC 23830de9b25SBarry Smith PetscOptionsEnd - Ends a set of queries on the options database that are related and should be 23930de9b25SBarry Smith displayed on the same window of a GUI that allows the user to set the options interactively. 24030de9b25SBarry Smith 24187497f52SBarry Smith Collective on the comm used in `PetscOptionsBegin()` or obj used in `PetscObjectOptionsBegin()` 24230de9b25SBarry Smith 243f2ba6396SBarry Smith Synopsis: 244aaa7dc30SBarry Smith #include <petscoptions.h> 245f2ba6396SBarry Smith PetscErrorCode PetscOptionsEnd(void) 24630de9b25SBarry Smith 24730de9b25SBarry Smith Level: intermediate 24830de9b25SBarry Smith 24995452b02SPatrick Sanan Notes: 25087497f52SBarry Smith Needs to be preceded by a call to `PetscOptionsBegin()` or `PetscObjectOptionsBegin()` 25130de9b25SBarry Smith 252d0609cedSBarry Smith This is a macro that handles its own error checking, it does not return an error code. 253d0609cedSBarry Smith 254db781477SPatrick Sanan .seealso: `PetscOptionsGetReal()`, `PetscOptionsHasName()`, `PetscOptionsGetString()`, `PetscOptionsGetInt()`, 255db781477SPatrick Sanan `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()` 256db781477SPatrick Sanan `PetscOptionsInt()`, `PetscOptionsString()`, `PetscOptionsReal()`, `PetscOptionsBool()`, 257db781477SPatrick Sanan `PetscOptionsName()`, `PetscOptionsBegin()`, `PetscOptionsHeadBegin()`, 258c2e3fba1SPatrick Sanan `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`, 259db781477SPatrick Sanan `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`, 260db781477SPatrick Sanan `PetscOptionsFList()`, `PetscOptionsEList()`, `PetscObjectOptionsBegin()` 26130de9b25SBarry Smith 26230de9b25SBarry Smith M*/ 2639371c9d4SSatish Balay #define PetscOptionsEnd() \ 2649371c9d4SSatish Balay PetscCall(PetscOptionsEnd_Private(PetscOptionsObject)); \ 2659371c9d4SSatish Balay } \ 2669371c9d4SSatish Balay } \ 2679371c9d4SSatish Balay while (0) 2685f80ce2aSJacob Faibussowitsch #endif /* PETSC_CLANG_STATIC_ANALYZER */ 26930de9b25SBarry Smith 2704416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsBegin_Private(PetscOptionItems *, MPI_Comm, const char[], const char[], const char[]); 271dbbe0bcdSBarry Smith PETSC_EXTERN PetscErrorCode PetscObjectOptionsBegin_Private(PetscObject, PetscOptionItems *); 2724416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsEnd_Private(PetscOptionItems *); 273d0609cedSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsHeadBegin(PetscOptionItems *, const char[]); 27430de9b25SBarry Smith 2755f80ce2aSJacob Faibussowitsch #if defined(PETSC_CLANG_STATIC_ANALYZER) 2769371c9d4SSatish Balay template <typename... T> 2779371c9d4SSatish Balay void PetscOptionsHeadBegin(T...); 278d0609cedSBarry Smith void PetscOptionsHeadEnd(void); 2799371c9d4SSatish Balay template <typename... T> 2809371c9d4SSatish Balay PetscErrorCode PetscOptionsEnum(T...); 2819371c9d4SSatish Balay template <typename... T> 2829371c9d4SSatish Balay PetscErrorCode PetscOptionsInt(T...); 2839371c9d4SSatish Balay template <typename... T> 2849371c9d4SSatish Balay PetscErrorCode PetscOptionsBoundedInt(T...); 2859371c9d4SSatish Balay template <typename... T> 2869371c9d4SSatish Balay PetscErrorCode PetscOptionsRangeInt(T...); 2879371c9d4SSatish Balay template <typename... T> 2889371c9d4SSatish Balay PetscErrorCode PetscOptionsReal(T...); 2899371c9d4SSatish Balay template <typename... T> 2909371c9d4SSatish Balay PetscErrorCode PetscOptionsScalar(T...); 2919371c9d4SSatish Balay template <typename... T> 2929371c9d4SSatish Balay PetscErrorCode PetscOptionsName(T...); 2939371c9d4SSatish Balay template <typename... T> 2949371c9d4SSatish Balay PetscErrorCode PetscOptionsString(T...); 2959371c9d4SSatish Balay template <typename... T> 2969371c9d4SSatish Balay PetscErrorCode PetscOptionsBool(T...); 2979371c9d4SSatish Balay template <typename... T> 2989371c9d4SSatish Balay PetscErrorCode PetscOptionsBoolGroupBegin(T...); 2999371c9d4SSatish Balay template <typename... T> 3009371c9d4SSatish Balay PetscErrorCode PetscOptionsBoolGroup(T...); 3019371c9d4SSatish Balay template <typename... T> 3029371c9d4SSatish Balay PetscErrorCode PetscOptionsBoolGroupEnd(T...); 3039371c9d4SSatish Balay template <typename... T> 3049371c9d4SSatish Balay PetscErrorCode PetscOptionsFList(T...); 3059371c9d4SSatish Balay template <typename... T> 3069371c9d4SSatish Balay PetscErrorCode PetscOptionsEList(T...); 3079371c9d4SSatish Balay template <typename... T> 3089371c9d4SSatish Balay PetscErrorCode PetscOptionsRealArray(T...); 3099371c9d4SSatish Balay template <typename... T> 3109371c9d4SSatish Balay PetscErrorCode PetscOptionsScalarArray(T...); 3119371c9d4SSatish Balay template <typename... T> 3129371c9d4SSatish Balay PetscErrorCode PetscOptionsIntArray(T...); 3139371c9d4SSatish Balay template <typename... T> 3149371c9d4SSatish Balay PetscErrorCode PetscOptionsStringArray(T...); 3159371c9d4SSatish Balay template <typename... T> 3169371c9d4SSatish Balay PetscErrorCode PetscOptionsBoolArray(T...); 3179371c9d4SSatish Balay template <typename... T> 3189371c9d4SSatish Balay PetscErrorCode PetscOptionsEnumArray(T...); 3199371c9d4SSatish Balay template <typename... T> 3209371c9d4SSatish Balay PetscErrorCode PetscOptionsDeprecated(T...); 3219371c9d4SSatish Balay template <typename... T> 3229371c9d4SSatish Balay PetscErrorCode PetscOptionsDeprecatedNoObject(T...); 3235f80ce2aSJacob Faibussowitsch #else 32430de9b25SBarry Smith /*MC 325d0609cedSBarry Smith PetscOptionsHeadBegin - Puts a heading before listing any more published options. Used, for example, 326d0609cedSBarry Smith in KSPSetFromOptions_GMRES(). 327d0609cedSBarry Smith 328d0609cedSBarry Smith Logically Collective on the communicator passed in PetscOptionsBegin() 329d0609cedSBarry Smith 330d0609cedSBarry Smith Input Parameter: 331d0609cedSBarry Smith . head - the heading text 332d0609cedSBarry Smith 33387497f52SBarry Smith Level: developer 334d0609cedSBarry Smith 335d0609cedSBarry Smith Notes: 336d0609cedSBarry Smith Handles errors directly, hence does not return an error code 337d0609cedSBarry Smith 33887497f52SBarry Smith Must be between a `PetscOptionsBegin()` and a `PetscOptionsEnd()`, and PetscOptionsObject created in `PetscOptionsBegin()` should be the first argument 339d0609cedSBarry Smith 34087497f52SBarry Smith Must be followed by a call to `PetscOptionsHeadEnd()` in the same function. 341d0609cedSBarry Smith 342db781477SPatrick Sanan .seealso: `PetscOptionsGetInt()`, `PetscOptionsGetReal()`, 343db781477SPatrick Sanan `PetscOptionsHasName()`, `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()`, 344db781477SPatrick Sanan `PetscOptionsName()`, `PetscOptionsBegin()`, `PetscOptionsEnd()`, `PetscOptionsHeadBegin()`, 345c2e3fba1SPatrick Sanan `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`, 346db781477SPatrick Sanan `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`, 347db781477SPatrick Sanan `PetscOptionsFList()`, `PetscOptionsEList()` 348d0609cedSBarry Smith @*/ 3499371c9d4SSatish Balay #define PetscOptionsHeadBegin(PetscOptionsObject, head) \ 3509371c9d4SSatish Balay do { \ 35148a46eb9SPierre Jolivet if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) PetscCall((*PetscHelpPrintf)(PetscOptionsObject->comm, " %s\n", head)); \ 352d0609cedSBarry Smith } while (0) 353d0609cedSBarry Smith 354d0609cedSBarry Smith #define PetscOptionsHead(...) PETSC_DEPRECATED_MACRO("GCC warning \"Use PetscOptionsHeadBegin() (since version 3.18)\"") PetscOptionsHeadBegin(__VA_ARGS__) 355d0609cedSBarry Smith 356d0609cedSBarry Smith /*MC 35787497f52SBarry Smith PetscOptionsHeadEnd - Ends a section of options begun with `PetscOptionsHeadBegin()` 35830de9b25SBarry Smith See, for example, KSPSetFromOptions_GMRES(). 35930de9b25SBarry Smith 36087497f52SBarry Smith Collective on the comm used in `PetscOptionsBegin()` or obj used in `PetscObjectOptionsBegin()` 36130de9b25SBarry Smith 362f2ba6396SBarry Smith Synopsis: 363aaa7dc30SBarry Smith #include <petscoptions.h> 364d0609cedSBarry Smith PetscErrorCode PetscOptionsHeadEnd(void) 36530de9b25SBarry Smith 36630de9b25SBarry Smith Level: intermediate 36730de9b25SBarry Smith 36895452b02SPatrick Sanan Notes: 36987497f52SBarry Smith Must be between a `PetscOptionsBegin()` or `PetscObjectOptionsBegin()` and a `PetscOptionsEnd()` 37030de9b25SBarry Smith 37187497f52SBarry Smith Must be preceded by a call to `PetscOptionsHeadBegin()` in the same function. 37230de9b25SBarry Smith 37387497f52SBarry Smith This needs to be used only if the code below `PetscOptionsHeadEnd()` can be run ONLY once. 37487497f52SBarry Smith See, for example, `PCSetFromOptions_Composite()`. This is a return(0) in it for early exit 375b52f573bSBarry Smith from the function. 376b52f573bSBarry Smith 37756752e42SBarry Smith This is only for use with the PETSc options GUI 378b52f573bSBarry Smith 379db781477SPatrick Sanan .seealso: `PetscOptionsGetInt()`, `PetscOptionsGetReal()`, 380db781477SPatrick Sanan `PetscOptionsHasName()`, `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()`, 381db781477SPatrick Sanan `PetscOptionsName()`, `PetscOptionsBegin()`, `PetscOptionsEnd()`, `PetscOptionsHeadBegin()`, 382c2e3fba1SPatrick Sanan `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`, 383db781477SPatrick Sanan `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`, 384db781477SPatrick Sanan `PetscOptionsFList()`, `PetscOptionsEList()`, `PetscOptionsEnum()` 38530de9b25SBarry Smith M*/ 3869371c9d4SSatish Balay #define PetscOptionsHeadEnd() \ 3879371c9d4SSatish Balay do { \ 3883ba16761SJacob Faibussowitsch if (PetscOptionsObject->count != 1) PetscFunctionReturn(PETSC_SUCCESS); \ 3899371c9d4SSatish Balay } while (0) 390d0609cedSBarry Smith 391d0609cedSBarry Smith #define PetscOptionsTail(...) PETSC_DEPRECATED_MACRO("GCC warning \"Use PetscOptionsHeadEnd() (since version 3.18)\"") PetscOptionsHeadEnd(__VA_ARGS__) 392186905e3SBarry Smith 393e55864a3SBarry Smith #define PetscOptionsEnum(a, b, c, d, e, f, g) PetscOptionsEnum_Private(PetscOptionsObject, a, b, c, d, e, f, g) 3945a856986SBarry Smith #define PetscOptionsInt(a, b, c, d, e, f) PetscOptionsInt_Private(PetscOptionsObject, a, b, c, d, e, f, PETSC_MIN_INT, PETSC_MAX_INT) 3955a856986SBarry Smith #define PetscOptionsBoundedInt(a, b, c, d, e, f, g) PetscOptionsInt_Private(PetscOptionsObject, a, b, c, d, e, f, g, PETSC_MAX_INT) 3965a856986SBarry Smith #define PetscOptionsRangeInt(a, b, c, d, e, f, g, h) PetscOptionsInt_Private(PetscOptionsObject, a, b, c, d, e, f, g, h) 397e55864a3SBarry Smith #define PetscOptionsReal(a, b, c, d, e, f) PetscOptionsReal_Private(PetscOptionsObject, a, b, c, d, e, f) 398e55864a3SBarry Smith #define PetscOptionsScalar(a, b, c, d, e, f) PetscOptionsScalar_Private(PetscOptionsObject, a, b, c, d, e, f) 399e55864a3SBarry Smith #define PetscOptionsName(a, b, c, d) PetscOptionsName_Private(PetscOptionsObject, a, b, c, d) 400e55864a3SBarry Smith #define PetscOptionsString(a, b, c, d, e, f, g) PetscOptionsString_Private(PetscOptionsObject, a, b, c, d, e, f, g) 401e55864a3SBarry Smith #define PetscOptionsBool(a, b, c, d, e, f) PetscOptionsBool_Private(PetscOptionsObject, a, b, c, d, e, f) 402e55864a3SBarry Smith #define PetscOptionsBoolGroupBegin(a, b, c, d) PetscOptionsBoolGroupBegin_Private(PetscOptionsObject, a, b, c, d) 403e55864a3SBarry Smith #define PetscOptionsBoolGroup(a, b, c, d) PetscOptionsBoolGroup_Private(PetscOptionsObject, a, b, c, d) 404e55864a3SBarry Smith #define PetscOptionsBoolGroupEnd(a, b, c, d) PetscOptionsBoolGroupEnd_Private(PetscOptionsObject, a, b, c, d) 40583355fc5SBarry Smith #define PetscOptionsFList(a, b, c, d, e, f, g, h) PetscOptionsFList_Private(PetscOptionsObject, a, b, c, d, e, f, g, h) 406e55864a3SBarry Smith #define PetscOptionsEList(a, b, c, d, e, f, g, h) PetscOptionsEList_Private(PetscOptionsObject, a, b, c, d, e, f, g, h) 407e55864a3SBarry Smith #define PetscOptionsRealArray(a, b, c, d, e, f) PetscOptionsRealArray_Private(PetscOptionsObject, a, b, c, d, e, f) 408050cccc3SHong Zhang #define PetscOptionsScalarArray(a, b, c, d, e, f) PetscOptionsScalarArray_Private(PetscOptionsObject, a, b, c, d, e, f) 409e55864a3SBarry Smith #define PetscOptionsIntArray(a, b, c, d, e, f) PetscOptionsIntArray_Private(PetscOptionsObject, a, b, c, d, e, f) 410e55864a3SBarry Smith #define PetscOptionsStringArray(a, b, c, d, e, f) PetscOptionsStringArray_Private(PetscOptionsObject, a, b, c, d, e, f) 411e55864a3SBarry Smith #define PetscOptionsBoolArray(a, b, c, d, e, f) PetscOptionsBoolArray_Private(PetscOptionsObject, a, b, c, d, e, f) 412d3e47460SLisandro Dalcin #define PetscOptionsEnumArray(a, b, c, d, e, f, g) PetscOptionsEnumArray_Private(PetscOptionsObject, a, b, c, d, e, f, g) 4139f3a6782SPatrick Sanan #define PetscOptionsDeprecated(a, b, c, d) PetscOptionsDeprecated_Private(PetscOptionsObject, a, b, c, d) 414b0bdc838SStefano Zampini #define PetscOptionsDeprecatedNoObject(a, b, c, d) PetscOptionsDeprecated_Private(NULL, a, b, c, d) 4155f80ce2aSJacob Faibussowitsch #endif /* PETSC_CLANG_STATIC_ANALYZER */ 416e55864a3SBarry Smith 4174416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsEnum_Private(PetscOptionItems *, const char[], const char[], const char[], const char *const *, PetscEnum, PetscEnum *, PetscBool *); 4185a856986SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsInt_Private(PetscOptionItems *, const char[], const char[], const char[], PetscInt, PetscInt *, PetscBool *, PetscInt, PetscInt); 4194416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsReal_Private(PetscOptionItems *, const char[], const char[], const char[], PetscReal, PetscReal *, PetscBool *); 4204416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsScalar_Private(PetscOptionItems *, const char[], const char[], const char[], PetscScalar, PetscScalar *, PetscBool *); 4214416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsName_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool *); 4224416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsString_Private(PetscOptionItems *, const char[], const char[], const char[], const char[], char *, size_t, PetscBool *); 4234416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsBool_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool, PetscBool *, PetscBool *); 4244416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsBoolGroupBegin_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool *); 4254416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsBoolGroup_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool *); 4264416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsBoolGroupEnd_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool *); 4274416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsFList_Private(PetscOptionItems *, const char[], const char[], const char[], PetscFunctionList, const char[], char[], size_t, PetscBool *); 4284416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsEList_Private(PetscOptionItems *, const char[], const char[], const char[], const char *const *, PetscInt, const char[], PetscInt *, PetscBool *); 4294416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsRealArray_Private(PetscOptionItems *, const char[], const char[], const char[], PetscReal[], PetscInt *, PetscBool *); 4304416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsScalarArray_Private(PetscOptionItems *, const char[], const char[], const char[], PetscScalar[], PetscInt *, PetscBool *); 4314416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsIntArray_Private(PetscOptionItems *, const char[], const char[], const char[], PetscInt[], PetscInt *, PetscBool *); 4324416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsStringArray_Private(PetscOptionItems *, const char[], const char[], const char[], char *[], PetscInt *, PetscBool *); 4334416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsBoolArray_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool[], PetscInt *, PetscBool *); 4344416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsEnumArray_Private(PetscOptionItems *, const char[], const char[], const char[], const char *const *, PetscEnum[], PetscInt *, PetscBool *); 4359f3a6782SPatrick Sanan PETSC_EXTERN PetscErrorCode PetscOptionsDeprecated_Private(PetscOptionItems *, const char[], const char[], const char[], const char[]); 436cffb1e40SBarry Smith 437e04113cfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsSAWsDestroy(void); 438f8d0b74dSMatthew Knepley 439dbbe0bcdSBarry Smith PETSC_EXTERN PetscErrorCode PetscObjectAddOptionsHandler(PetscObject, PetscErrorCode (*)(PetscObject, PetscOptionItems *, void *), PetscErrorCode (*)(PetscObject, void *), void *); 440dbbe0bcdSBarry Smith PETSC_EXTERN PetscErrorCode PetscObjectProcessOptionsHandlers(PetscObject, PetscOptionItems *); 441447ac60bSBarry Smith PETSC_EXTERN PetscErrorCode PetscObjectDestroyOptionsHandlers(PetscObject); 442447ac60bSBarry Smith 443f4bc716fSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsLeftError(void); 4443a3b2205SBarry Smith #endif 445