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 14416a05f60SBarry 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: 16816a05f60SBarry Smith `PetscOptionsPublish` is set in `PetscOptionsCheckInitial_Private()` with `-saws_options`. When `PetscOptionsPublish` is set the 16916a05f60SBarry Smith loop between `PetscOptionsBegin()` and `PetscOptionsEnd()` is run THREE times with `PetscOptionsPublishCount` of values -1,0,1. 17016a05f60SBarry Smith Otherwise the loop is run ONCE with a `PetscOptionsPublishCount` of 1. 17116a05f60SBarry Smith + \-1 - `PetscOptionsInt()` etc. just call `PetscOptionsGetInt()` etc. 17216a05f60SBarry Smith . 0 - The GUI objects are created in `PetscOptionsInt()` etc. and displayed in `PetscOptionsEnd()` and the options 17316a05f60SBarry Smith database updated with user changes; `PetscOptionsGetInt()` etc. are also called. 17416a05f60SBarry Smith - 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. 17616a05f60SBarry Smith When `PetscOptionsObject.changedmethod` is set this causes `PetscOptionsPublishCount` to be reset to -2 (so in the next loop iteration it is -1) 17716a05f60SBarry Smith and the whole process is repeated. This is to handle when, for example, the `KSPType` is changed thus changing the list of 17816a05f60SBarry Smith 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 1814bb2516aSBarry Smith Fortran Note: 1824bb2516aSBarry Smith Returns ierr error code per PETSc Fortran API 1834bb2516aSBarry Smith 184db781477SPatrick Sanan .seealso: `PetscOptionsGetReal()`, `PetscOptionsHasName()`, `PetscOptionsGetString()`, `PetscOptionsGetInt()`, 185db781477SPatrick Sanan `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()` 186db781477SPatrick Sanan `PetscOptionsInt()`, `PetscOptionsString()`, `PetscOptionsReal()`, `PetscOptionsBool()`, 187db781477SPatrick Sanan `PetscOptionsName()`, `PetscOptionsEnd()`, `PetscOptionsHeadBegin()`, 188c2e3fba1SPatrick Sanan `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`, 189db781477SPatrick Sanan `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`, 190db781477SPatrick Sanan `PetscOptionsFList()`, `PetscOptionsEList()`, `PetscObjectOptionsBegin()` 19130de9b25SBarry Smith M*/ 1929371c9d4SSatish Balay #define PetscOptionsBegin(comm, prefix, mess, sec) \ 1939371c9d4SSatish Balay do { \ 1944416b707SBarry Smith PetscOptionItems PetscOptionsObjectBase; \ 1954416b707SBarry Smith PetscOptionItems *PetscOptionsObject = &PetscOptionsObjectBase; \ 196d0609cedSBarry Smith PetscCall(PetscMemzero(PetscOptionsObject, sizeof(*PetscOptionsObject))); \ 197e55864a3SBarry Smith for (PetscOptionsObject->count = (PetscOptionsPublish ? -1 : 1); PetscOptionsObject->count < 2; PetscOptionsObject->count++) { \ 1989566063dSJacob Faibussowitsch PetscCall(PetscOptionsBegin_Private(PetscOptionsObject, comm, prefix, mess, sec)) 19930de9b25SBarry Smith 2005fefd1ebSJed Brown /*MC 2015fefd1ebSJed Brown PetscObjectOptionsBegin - Begins a set of queries on the options database that are related and should be 2025fefd1ebSJed Brown displayed on the same window of a GUI that allows the user to set the options interactively. 2035fefd1ebSJed Brown 204f2ba6396SBarry Smith Synopsis: 205aaa7dc30SBarry Smith #include <petscoptions.h> 206f2ba6396SBarry Smith PetscErrorCode PetscObjectOptionsBegin(PetscObject obj) 2075fefd1ebSJed Brown 208c3339decSBarry Smith Collective 2095fefd1ebSJed Brown 2102fe279fdSBarry Smith Input Parameter: 2115fefd1ebSJed Brown . obj - object to set options for 2125fefd1ebSJed Brown 2135fefd1ebSJed Brown Level: intermediate 2145fefd1ebSJed Brown 21595452b02SPatrick Sanan Notes: 216d0609cedSBarry Smith This is a macro that handles its own error checking, it does not return an error code. 217d0609cedSBarry Smith 21887497f52SBarry Smith Needs to be ended by a call the `PetscOptionsEnd()` 219d0609cedSBarry Smith 22087497f52SBarry Smith Can add subheadings with `PetscOptionsHeadBegin()` 2215fefd1ebSJed Brown 222db781477SPatrick Sanan .seealso: `PetscOptionsGetReal()`, `PetscOptionsHasName()`, `PetscOptionsGetString()`, `PetscOptionsGetInt()`, 223db781477SPatrick Sanan `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()` 224db781477SPatrick Sanan `PetscOptionsInt()`, `PetscOptionsString()`, `PetscOptionsReal()`, `PetscOptionsBool()`, 225db781477SPatrick Sanan `PetscOptionsName()`, `PetscOptionsBegin()`, `PetscOptionsEnd()`, `PetscOptionsHeadBegin()`, 226c2e3fba1SPatrick Sanan `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`, 227db781477SPatrick Sanan `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`, 228db781477SPatrick Sanan `PetscOptionsFList()`, `PetscOptionsEList()` 2295fefd1ebSJed Brown M*/ 2309371c9d4SSatish Balay #define PetscObjectOptionsBegin(obj) \ 2319371c9d4SSatish Balay do { \ 2324416b707SBarry Smith PetscOptionItems PetscOptionsObjectBase; \ 2334416b707SBarry Smith PetscOptionItems *PetscOptionsObject = &PetscOptionsObjectBase; \ 234c5929fdfSBarry Smith PetscOptionsObject->options = ((PetscObject)obj)->options; \ 235e55864a3SBarry Smith for (PetscOptionsObject->count = (PetscOptionsPublish ? -1 : 1); PetscOptionsObject->count < 2; PetscOptionsObject->count++) { \ 236dbbe0bcdSBarry Smith PetscCall(PetscObjectOptionsBegin_Private(obj, PetscOptionsObject)) 2373194b578SJed Brown 23830de9b25SBarry Smith /*MC 23930de9b25SBarry Smith PetscOptionsEnd - Ends a set of queries on the options database that are related and should be 24030de9b25SBarry Smith displayed on the same window of a GUI that allows the user to set the options interactively. 24130de9b25SBarry Smith 242f2ba6396SBarry Smith Synopsis: 243aaa7dc30SBarry Smith #include <petscoptions.h> 244f2ba6396SBarry Smith PetscErrorCode PetscOptionsEnd(void) 24530de9b25SBarry Smith 2467cdbe19fSJose E. Roman Collective on the comm used in `PetscOptionsBegin()` or obj used in `PetscObjectOptionsBegin()` 2477cdbe19fSJose E. Roman 24830de9b25SBarry Smith Level: intermediate 24930de9b25SBarry Smith 25095452b02SPatrick Sanan Notes: 25187497f52SBarry Smith Needs to be preceded by a call to `PetscOptionsBegin()` or `PetscObjectOptionsBegin()` 25230de9b25SBarry Smith 253d0609cedSBarry Smith This is a macro that handles its own error checking, it does not return an error code. 254d0609cedSBarry Smith 2554bb2516aSBarry Smith Fortran Note: 2564bb2516aSBarry Smith Returns ierr error code per PETSc Fortran API 2574bb2516aSBarry Smith 258db781477SPatrick Sanan .seealso: `PetscOptionsGetReal()`, `PetscOptionsHasName()`, `PetscOptionsGetString()`, `PetscOptionsGetInt()`, 259db781477SPatrick Sanan `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()` 260db781477SPatrick Sanan `PetscOptionsInt()`, `PetscOptionsString()`, `PetscOptionsReal()`, `PetscOptionsBool()`, 261db781477SPatrick Sanan `PetscOptionsName()`, `PetscOptionsBegin()`, `PetscOptionsHeadBegin()`, 262c2e3fba1SPatrick Sanan `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`, 263db781477SPatrick Sanan `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`, 264db781477SPatrick Sanan `PetscOptionsFList()`, `PetscOptionsEList()`, `PetscObjectOptionsBegin()` 26530de9b25SBarry Smith M*/ 2669371c9d4SSatish Balay #define PetscOptionsEnd() \ 2679371c9d4SSatish Balay PetscCall(PetscOptionsEnd_Private(PetscOptionsObject)); \ 2689371c9d4SSatish Balay } \ 2699371c9d4SSatish Balay } \ 2709371c9d4SSatish Balay while (0) 2715f80ce2aSJacob Faibussowitsch #endif /* PETSC_CLANG_STATIC_ANALYZER */ 27230de9b25SBarry Smith 2734416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsBegin_Private(PetscOptionItems *, MPI_Comm, const char[], const char[], const char[]); 274dbbe0bcdSBarry Smith PETSC_EXTERN PetscErrorCode PetscObjectOptionsBegin_Private(PetscObject, PetscOptionItems *); 2754416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsEnd_Private(PetscOptionItems *); 276d0609cedSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsHeadBegin(PetscOptionItems *, const char[]); 27730de9b25SBarry Smith 2785f80ce2aSJacob Faibussowitsch #if defined(PETSC_CLANG_STATIC_ANALYZER) 2799371c9d4SSatish Balay template <typename... T> 2809371c9d4SSatish Balay void PetscOptionsHeadBegin(T...); 281d0609cedSBarry Smith void PetscOptionsHeadEnd(void); 2829371c9d4SSatish Balay template <typename... T> 2839371c9d4SSatish Balay PetscErrorCode PetscOptionsEnum(T...); 2849371c9d4SSatish Balay template <typename... T> 2859371c9d4SSatish Balay PetscErrorCode PetscOptionsInt(T...); 2869371c9d4SSatish Balay template <typename... T> 2879371c9d4SSatish Balay PetscErrorCode PetscOptionsBoundedInt(T...); 2889371c9d4SSatish Balay template <typename... T> 2899371c9d4SSatish Balay PetscErrorCode PetscOptionsRangeInt(T...); 2909371c9d4SSatish Balay template <typename... T> 2919371c9d4SSatish Balay PetscErrorCode PetscOptionsReal(T...); 2929371c9d4SSatish Balay template <typename... T> 2939371c9d4SSatish Balay PetscErrorCode PetscOptionsScalar(T...); 2949371c9d4SSatish Balay template <typename... T> 2959371c9d4SSatish Balay PetscErrorCode PetscOptionsName(T...); 2969371c9d4SSatish Balay template <typename... T> 2979371c9d4SSatish Balay PetscErrorCode PetscOptionsString(T...); 2989371c9d4SSatish Balay template <typename... T> 2999371c9d4SSatish Balay PetscErrorCode PetscOptionsBool(T...); 3009371c9d4SSatish Balay template <typename... T> 3019371c9d4SSatish Balay PetscErrorCode PetscOptionsBoolGroupBegin(T...); 3029371c9d4SSatish Balay template <typename... T> 3039371c9d4SSatish Balay PetscErrorCode PetscOptionsBoolGroup(T...); 3049371c9d4SSatish Balay template <typename... T> 3059371c9d4SSatish Balay PetscErrorCode PetscOptionsBoolGroupEnd(T...); 3069371c9d4SSatish Balay template <typename... T> 3079371c9d4SSatish Balay PetscErrorCode PetscOptionsFList(T...); 3089371c9d4SSatish Balay template <typename... T> 3099371c9d4SSatish Balay PetscErrorCode PetscOptionsEList(T...); 3109371c9d4SSatish Balay template <typename... T> 3119371c9d4SSatish Balay PetscErrorCode PetscOptionsRealArray(T...); 3129371c9d4SSatish Balay template <typename... T> 3139371c9d4SSatish Balay PetscErrorCode PetscOptionsScalarArray(T...); 3149371c9d4SSatish Balay template <typename... T> 3159371c9d4SSatish Balay PetscErrorCode PetscOptionsIntArray(T...); 3169371c9d4SSatish Balay template <typename... T> 3179371c9d4SSatish Balay PetscErrorCode PetscOptionsStringArray(T...); 3189371c9d4SSatish Balay template <typename... T> 3199371c9d4SSatish Balay PetscErrorCode PetscOptionsBoolArray(T...); 3209371c9d4SSatish Balay template <typename... T> 3219371c9d4SSatish Balay PetscErrorCode PetscOptionsEnumArray(T...); 3229371c9d4SSatish Balay template <typename... T> 3239371c9d4SSatish Balay PetscErrorCode PetscOptionsDeprecated(T...); 3249371c9d4SSatish Balay template <typename... T> 3259371c9d4SSatish Balay PetscErrorCode PetscOptionsDeprecatedNoObject(T...); 3265f80ce2aSJacob Faibussowitsch #else 32730de9b25SBarry Smith /*MC 328d0609cedSBarry Smith PetscOptionsHeadBegin - Puts a heading before listing any more published options. Used, for example, 32916a05f60SBarry Smith in `KSPSetFromOptions_GMRES()`. 330d0609cedSBarry Smith 33116a05f60SBarry Smith Logically Collective on the communicator passed in `PetscOptionsBegin()` 332d0609cedSBarry Smith 333d0609cedSBarry Smith Input Parameter: 334d0609cedSBarry Smith . head - the heading text 335d0609cedSBarry Smith 33687497f52SBarry Smith Level: developer 337d0609cedSBarry Smith 338d0609cedSBarry Smith Notes: 339d0609cedSBarry Smith Handles errors directly, hence does not return an error code 340d0609cedSBarry Smith 34116a05f60SBarry Smith Must be between a `PetscOptionsBegin()` and a `PetscOptionsEnd()`, and `PetscOptionsObject` created in `PetscOptionsBegin()` should be the first argument 342d0609cedSBarry Smith 34387497f52SBarry Smith Must be followed by a call to `PetscOptionsHeadEnd()` in the same function. 344d0609cedSBarry Smith 345db781477SPatrick Sanan .seealso: `PetscOptionsGetInt()`, `PetscOptionsGetReal()`, 346db781477SPatrick Sanan `PetscOptionsHasName()`, `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()`, 347db781477SPatrick Sanan `PetscOptionsName()`, `PetscOptionsBegin()`, `PetscOptionsEnd()`, `PetscOptionsHeadBegin()`, 348c2e3fba1SPatrick Sanan `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`, 349db781477SPatrick Sanan `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`, 350db781477SPatrick Sanan `PetscOptionsFList()`, `PetscOptionsEList()` 351d0609cedSBarry Smith @*/ 3529371c9d4SSatish Balay #define PetscOptionsHeadBegin(PetscOptionsObject, head) \ 3539371c9d4SSatish Balay do { \ 35448a46eb9SPierre Jolivet if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) PetscCall((*PetscHelpPrintf)(PetscOptionsObject->comm, " %s\n", head)); \ 355d0609cedSBarry Smith } while (0) 356d0609cedSBarry Smith 357*edd03b47SJacob Faibussowitsch #define PetscOptionsHead(...) PETSC_DEPRECATED_MACRO(3, 18, 0, "PetscOptionsHeadBegin()", ) PetscOptionsHeadBegin(__VA_ARGS__) 358d0609cedSBarry Smith 359d0609cedSBarry Smith /*MC 36087497f52SBarry Smith PetscOptionsHeadEnd - Ends a section of options begun with `PetscOptionsHeadBegin()` 36116a05f60SBarry Smith See, for example, `KSPSetFromOptions_GMRES()`. 36230de9b25SBarry Smith 363f2ba6396SBarry Smith Synopsis: 364aaa7dc30SBarry Smith #include <petscoptions.h> 365d0609cedSBarry Smith PetscErrorCode PetscOptionsHeadEnd(void) 36630de9b25SBarry Smith 3677cdbe19fSJose E. Roman Collective on the comm used in `PetscOptionsBegin()` or obj used in `PetscObjectOptionsBegin()` 3687cdbe19fSJose E. Roman 36930de9b25SBarry Smith Level: intermediate 37030de9b25SBarry Smith 37195452b02SPatrick Sanan Notes: 37287497f52SBarry Smith Must be between a `PetscOptionsBegin()` or `PetscObjectOptionsBegin()` and a `PetscOptionsEnd()` 37330de9b25SBarry Smith 37487497f52SBarry Smith Must be preceded by a call to `PetscOptionsHeadBegin()` in the same function. 37530de9b25SBarry Smith 37687497f52SBarry Smith This needs to be used only if the code below `PetscOptionsHeadEnd()` can be run ONLY once. 37716a05f60SBarry Smith See, for example, `PCSetFromOptions_Composite()`. This is a `return(0)` in it for early exit 378b52f573bSBarry Smith from the function. 379b52f573bSBarry Smith 38056752e42SBarry Smith This is only for use with the PETSc options GUI 381b52f573bSBarry Smith 382db781477SPatrick Sanan .seealso: `PetscOptionsGetInt()`, `PetscOptionsGetReal()`, 383db781477SPatrick Sanan `PetscOptionsHasName()`, `PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()`, 384db781477SPatrick Sanan `PetscOptionsName()`, `PetscOptionsBegin()`, `PetscOptionsEnd()`, `PetscOptionsHeadBegin()`, 385c2e3fba1SPatrick Sanan `PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`, 386db781477SPatrick Sanan `PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`, 387db781477SPatrick Sanan `PetscOptionsFList()`, `PetscOptionsEList()`, `PetscOptionsEnum()` 38830de9b25SBarry Smith M*/ 3899371c9d4SSatish Balay #define PetscOptionsHeadEnd() \ 3909371c9d4SSatish Balay do { \ 3913ba16761SJacob Faibussowitsch if (PetscOptionsObject->count != 1) PetscFunctionReturn(PETSC_SUCCESS); \ 3929371c9d4SSatish Balay } while (0) 393d0609cedSBarry Smith 394*edd03b47SJacob Faibussowitsch #define PetscOptionsTail(...) PETSC_DEPRECATED_MACRO(3, 18, 0, "PetscOptionsHeadEnd()", ) PetscOptionsHeadEnd(__VA_ARGS__) 395186905e3SBarry Smith 396e55864a3SBarry Smith #define PetscOptionsEnum(a, b, c, d, e, f, g) PetscOptionsEnum_Private(PetscOptionsObject, a, b, c, d, e, f, g) 3975a856986SBarry Smith #define PetscOptionsInt(a, b, c, d, e, f) PetscOptionsInt_Private(PetscOptionsObject, a, b, c, d, e, f, PETSC_MIN_INT, PETSC_MAX_INT) 3985a856986SBarry Smith #define PetscOptionsBoundedInt(a, b, c, d, e, f, g) PetscOptionsInt_Private(PetscOptionsObject, a, b, c, d, e, f, g, PETSC_MAX_INT) 3995a856986SBarry Smith #define PetscOptionsRangeInt(a, b, c, d, e, f, g, h) PetscOptionsInt_Private(PetscOptionsObject, a, b, c, d, e, f, g, h) 400e55864a3SBarry Smith #define PetscOptionsReal(a, b, c, d, e, f) PetscOptionsReal_Private(PetscOptionsObject, a, b, c, d, e, f) 401e55864a3SBarry Smith #define PetscOptionsScalar(a, b, c, d, e, f) PetscOptionsScalar_Private(PetscOptionsObject, a, b, c, d, e, f) 402e55864a3SBarry Smith #define PetscOptionsName(a, b, c, d) PetscOptionsName_Private(PetscOptionsObject, a, b, c, d) 403e55864a3SBarry Smith #define PetscOptionsString(a, b, c, d, e, f, g) PetscOptionsString_Private(PetscOptionsObject, a, b, c, d, e, f, g) 404e55864a3SBarry Smith #define PetscOptionsBool(a, b, c, d, e, f) PetscOptionsBool_Private(PetscOptionsObject, a, b, c, d, e, f) 405e55864a3SBarry Smith #define PetscOptionsBoolGroupBegin(a, b, c, d) PetscOptionsBoolGroupBegin_Private(PetscOptionsObject, a, b, c, d) 406e55864a3SBarry Smith #define PetscOptionsBoolGroup(a, b, c, d) PetscOptionsBoolGroup_Private(PetscOptionsObject, a, b, c, d) 407e55864a3SBarry Smith #define PetscOptionsBoolGroupEnd(a, b, c, d) PetscOptionsBoolGroupEnd_Private(PetscOptionsObject, a, b, c, d) 40883355fc5SBarry Smith #define PetscOptionsFList(a, b, c, d, e, f, g, h) PetscOptionsFList_Private(PetscOptionsObject, a, b, c, d, e, f, g, h) 409e55864a3SBarry Smith #define PetscOptionsEList(a, b, c, d, e, f, g, h) PetscOptionsEList_Private(PetscOptionsObject, a, b, c, d, e, f, g, h) 410e55864a3SBarry Smith #define PetscOptionsRealArray(a, b, c, d, e, f) PetscOptionsRealArray_Private(PetscOptionsObject, a, b, c, d, e, f) 411050cccc3SHong Zhang #define PetscOptionsScalarArray(a, b, c, d, e, f) PetscOptionsScalarArray_Private(PetscOptionsObject, a, b, c, d, e, f) 412e55864a3SBarry Smith #define PetscOptionsIntArray(a, b, c, d, e, f) PetscOptionsIntArray_Private(PetscOptionsObject, a, b, c, d, e, f) 413e55864a3SBarry Smith #define PetscOptionsStringArray(a, b, c, d, e, f) PetscOptionsStringArray_Private(PetscOptionsObject, a, b, c, d, e, f) 414e55864a3SBarry Smith #define PetscOptionsBoolArray(a, b, c, d, e, f) PetscOptionsBoolArray_Private(PetscOptionsObject, a, b, c, d, e, f) 415d3e47460SLisandro Dalcin #define PetscOptionsEnumArray(a, b, c, d, e, f, g) PetscOptionsEnumArray_Private(PetscOptionsObject, a, b, c, d, e, f, g) 4169f3a6782SPatrick Sanan #define PetscOptionsDeprecated(a, b, c, d) PetscOptionsDeprecated_Private(PetscOptionsObject, a, b, c, d) 417b0bdc838SStefano Zampini #define PetscOptionsDeprecatedNoObject(a, b, c, d) PetscOptionsDeprecated_Private(NULL, a, b, c, d) 4185f80ce2aSJacob Faibussowitsch #endif /* PETSC_CLANG_STATIC_ANALYZER */ 419e55864a3SBarry Smith 4204416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsEnum_Private(PetscOptionItems *, const char[], const char[], const char[], const char *const *, PetscEnum, PetscEnum *, PetscBool *); 4215a856986SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsInt_Private(PetscOptionItems *, const char[], const char[], const char[], PetscInt, PetscInt *, PetscBool *, PetscInt, PetscInt); 4224416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsReal_Private(PetscOptionItems *, const char[], const char[], const char[], PetscReal, PetscReal *, PetscBool *); 4234416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsScalar_Private(PetscOptionItems *, const char[], const char[], const char[], PetscScalar, PetscScalar *, PetscBool *); 4244416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsName_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool *); 4254416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsString_Private(PetscOptionItems *, const char[], const char[], const char[], const char[], char *, size_t, PetscBool *); 4264416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsBool_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool, PetscBool *, PetscBool *); 4274416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsBoolGroupBegin_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool *); 4284416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsBoolGroup_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool *); 4294416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsBoolGroupEnd_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool *); 4304416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsFList_Private(PetscOptionItems *, const char[], const char[], const char[], PetscFunctionList, const char[], char[], size_t, PetscBool *); 4314416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsEList_Private(PetscOptionItems *, const char[], const char[], const char[], const char *const *, PetscInt, const char[], PetscInt *, PetscBool *); 4324416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsRealArray_Private(PetscOptionItems *, const char[], const char[], const char[], PetscReal[], PetscInt *, PetscBool *); 4334416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsScalarArray_Private(PetscOptionItems *, const char[], const char[], const char[], PetscScalar[], PetscInt *, PetscBool *); 4344416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsIntArray_Private(PetscOptionItems *, const char[], const char[], const char[], PetscInt[], PetscInt *, PetscBool *); 4354416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsStringArray_Private(PetscOptionItems *, const char[], const char[], const char[], char *[], PetscInt *, PetscBool *); 4364416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsBoolArray_Private(PetscOptionItems *, const char[], const char[], const char[], PetscBool[], PetscInt *, PetscBool *); 4374416b707SBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsEnumArray_Private(PetscOptionItems *, const char[], const char[], const char[], const char *const *, PetscEnum[], PetscInt *, PetscBool *); 4389f3a6782SPatrick Sanan PETSC_EXTERN PetscErrorCode PetscOptionsDeprecated_Private(PetscOptionItems *, const char[], const char[], const char[], const char[]); 439cffb1e40SBarry Smith 440e04113cfSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsSAWsDestroy(void); 441f8d0b74dSMatthew Knepley 442dbbe0bcdSBarry Smith PETSC_EXTERN PetscErrorCode PetscObjectAddOptionsHandler(PetscObject, PetscErrorCode (*)(PetscObject, PetscOptionItems *, void *), PetscErrorCode (*)(PetscObject, void *), void *); 443dbbe0bcdSBarry Smith PETSC_EXTERN PetscErrorCode PetscObjectProcessOptionsHandlers(PetscObject, PetscOptionItems *); 444447ac60bSBarry Smith PETSC_EXTERN PetscErrorCode PetscObjectDestroyOptionsHandlers(PetscObject); 445447ac60bSBarry Smith 446f4bc716fSBarry Smith PETSC_EXTERN PetscErrorCode PetscOptionsLeftError(void); 4473a3b2205SBarry Smith #endif 448