xref: /petsc/src/sys/objects/aoptions.c (revision 53acd3b15c214a587b7d6cf873d67163df364191)
1*53acd3b1SBarry Smith #define PETSC_DLL
2*53acd3b1SBarry Smith /*
3*53acd3b1SBarry Smith    These routines simplify the use of command line, file options, etc.,
4*53acd3b1SBarry Smith    and are used to manipulate the options database.
5*53acd3b1SBarry Smith 
6*53acd3b1SBarry Smith   This file uses regular malloc and free because it cannot know
7*53acd3b1SBarry Smith   what malloc is being used until it has already processed the input.
8*53acd3b1SBarry Smith */
9*53acd3b1SBarry Smith 
10*53acd3b1SBarry Smith #include "petsc.h"        /*I  "petsc.h"   I*/
11*53acd3b1SBarry Smith #include "petscsys.h"
12*53acd3b1SBarry Smith #if defined(PETSC_HAVE_STDLIB_H)
13*53acd3b1SBarry Smith #include <stdlib.h>
14*53acd3b1SBarry Smith #endif
15*53acd3b1SBarry Smith 
16*53acd3b1SBarry Smith /*
17*53acd3b1SBarry Smith     Keep a linked list of options that have been posted and we are waiting for
18*53acd3b1SBarry Smith    user selection
19*53acd3b1SBarry Smith 
20*53acd3b1SBarry Smith     Eventually we'll attach this beast to a MPI_Comm
21*53acd3b1SBarry Smith */
22*53acd3b1SBarry Smith typedef enum {OPTION_INT,OPTION_LOGICAL,OPTION_REAL,OPTION_LIST,OPTION_STRING,OPTION_REAL_ARRAY,OPTION_HEAD} OptionType;
23*53acd3b1SBarry Smith typedef struct _p_Options* PetscOptions;
24*53acd3b1SBarry Smith struct _p_Options {
25*53acd3b1SBarry Smith   char         *option;
26*53acd3b1SBarry Smith   char         *text;
27*53acd3b1SBarry Smith   void         *data;
28*53acd3b1SBarry Smith   void         *edata;
29*53acd3b1SBarry Smith   int          arraylength;
30*53acd3b1SBarry Smith   PetscTruth   set;
31*53acd3b1SBarry Smith   OptionType   type;
32*53acd3b1SBarry Smith   PetscOptions next;
33*53acd3b1SBarry Smith   char         *man;
34*53acd3b1SBarry Smith };
35*53acd3b1SBarry Smith 
36*53acd3b1SBarry Smith static struct {
37*53acd3b1SBarry Smith   PetscOptions    next;
38*53acd3b1SBarry Smith   char            *prefix,*mprefix;
39*53acd3b1SBarry Smith   char            *title;
40*53acd3b1SBarry Smith   MPI_Comm        comm;
41*53acd3b1SBarry Smith   PetscTruth      printhelp;
42*53acd3b1SBarry Smith }                                   PetscOptionsObject;
43*53acd3b1SBarry Smith PetscInt                            PetscOptionsPublishCount = 0;
44*53acd3b1SBarry Smith 
45*53acd3b1SBarry Smith #undef __FUNCT__
46*53acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsBegin_Private"
47*53acd3b1SBarry Smith /*
48*53acd3b1SBarry Smith     Handles setting up the data structure in a call to PetscOptionsBegin()
49*53acd3b1SBarry Smith */
50*53acd3b1SBarry Smith PetscErrorCode PetscOptionsBegin_Private(MPI_Comm comm,const char prefix[],const char title[],const char mansec[])
51*53acd3b1SBarry Smith {
52*53acd3b1SBarry Smith   PetscErrorCode ierr;
53*53acd3b1SBarry Smith 
54*53acd3b1SBarry Smith   PetscFunctionBegin;
55*53acd3b1SBarry Smith   PetscOptionsObject.next = 0;
56*53acd3b1SBarry Smith   PetscOptionsObject.comm  = comm;
57*53acd3b1SBarry Smith   ierr = PetscStrallocpy(prefix,&PetscOptionsObject.prefix);CHKERRQ(ierr);
58*53acd3b1SBarry Smith   ierr = PetscStrallocpy(title,&PetscOptionsObject.title);CHKERRQ(ierr);
59*53acd3b1SBarry Smith 
60*53acd3b1SBarry Smith   ierr = PetscOptionsHasName(PETSC_NULL,"-help",&PetscOptionsObject.printhelp);CHKERRQ(ierr);
61*53acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
62*53acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(comm,"%s -------------------------------------------------\n",title);CHKERRQ(ierr);
63*53acd3b1SBarry Smith   }
64*53acd3b1SBarry Smith   PetscFunctionReturn(0);
65*53acd3b1SBarry Smith }
66*53acd3b1SBarry Smith 
67*53acd3b1SBarry Smith /*
68*53acd3b1SBarry Smith      Handles adding another option to the list of options within this particular PetscOptionsBegin() PetscOptionsEnd()
69*53acd3b1SBarry Smith */
70*53acd3b1SBarry Smith #undef __FUNCT__
71*53acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsCreate_Private"
72*53acd3b1SBarry Smith static int PetscOptionsCreate_Private(const char opt[],const char text[],const char man[],PetscOptions *amsopt)
73*53acd3b1SBarry Smith {
74*53acd3b1SBarry Smith   int          ierr;
75*53acd3b1SBarry Smith   PetscOptions next;
76*53acd3b1SBarry Smith 
77*53acd3b1SBarry Smith   PetscFunctionBegin;
78*53acd3b1SBarry Smith   ierr             = PetscNew(struct _p_Options,amsopt);CHKERRQ(ierr);
79*53acd3b1SBarry Smith   (*amsopt)->next  = 0;
80*53acd3b1SBarry Smith   (*amsopt)->set   = PETSC_FALSE;
81*53acd3b1SBarry Smith   (*amsopt)->data  = 0;
82*53acd3b1SBarry Smith   (*amsopt)->edata = 0;
83*53acd3b1SBarry Smith   ierr             = PetscStrallocpy(text,&(*amsopt)->text);CHKERRQ(ierr);
84*53acd3b1SBarry Smith   ierr             = PetscStrallocpy(opt,&(*amsopt)->option);CHKERRQ(ierr);
85*53acd3b1SBarry Smith   ierr             = PetscStrallocpy(opt,&(*amsopt)->man);CHKERRQ(ierr);
86*53acd3b1SBarry Smith 
87*53acd3b1SBarry Smith   if (!PetscOptionsObject.next) {
88*53acd3b1SBarry Smith     PetscOptionsObject.next = *amsopt;
89*53acd3b1SBarry Smith   } else {
90*53acd3b1SBarry Smith     next = PetscOptionsObject.next;
91*53acd3b1SBarry Smith     while (next->next) next = next->next;
92*53acd3b1SBarry Smith     next->next = *amsopt;
93*53acd3b1SBarry Smith   }
94*53acd3b1SBarry Smith   PetscFunctionReturn(0);
95*53acd3b1SBarry Smith }
96*53acd3b1SBarry Smith 
97*53acd3b1SBarry Smith #undef __FUNCT__
98*53acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsEnd_Private"
99*53acd3b1SBarry Smith PetscErrorCode PetscOptionsEnd_Private(void)
100*53acd3b1SBarry Smith {
101*53acd3b1SBarry Smith   PetscErrorCode ierr;
102*53acd3b1SBarry Smith 
103*53acd3b1SBarry Smith   PetscFunctionBegin;
104*53acd3b1SBarry Smith   ierr = PetscStrfree(PetscOptionsObject.title);CHKERRQ(ierr); PetscOptionsObject.title  = 0;
105*53acd3b1SBarry Smith   ierr = PetscStrfree(PetscOptionsObject.prefix);CHKERRQ(ierr); PetscOptionsObject.prefix = 0;
106*53acd3b1SBarry Smith   PetscFunctionReturn(0);
107*53acd3b1SBarry Smith }
108*53acd3b1SBarry Smith 
109*53acd3b1SBarry Smith #undef __FUNCT__
110*53acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsEnum"
111*53acd3b1SBarry Smith /*@C
112*53acd3b1SBarry Smith    PetscOptionsEnum - Gets the enum value for a particular option in the database.
113*53acd3b1SBarry Smith 
114*53acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
115*53acd3b1SBarry Smith 
116*53acd3b1SBarry Smith    Input Parameters:
117*53acd3b1SBarry Smith +  opt - option name
118*53acd3b1SBarry Smith .  text - short string that describes the option
119*53acd3b1SBarry Smith .  man - manual page with additional information on option
120*53acd3b1SBarry Smith .  list - array containing the list of choices, followed by the enum name, followed by the enum prefix, followed by a null
121*53acd3b1SBarry Smith -  defaultv - the default (current) value
122*53acd3b1SBarry Smith 
123*53acd3b1SBarry Smith    Output Parameter:
124*53acd3b1SBarry Smith +  value - the  value to return
125*53acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
126*53acd3b1SBarry Smith 
127*53acd3b1SBarry Smith    Level: beginner
128*53acd3b1SBarry Smith 
129*53acd3b1SBarry Smith    Concepts: options database
130*53acd3b1SBarry Smith 
131*53acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
132*53acd3b1SBarry Smith 
133*53acd3b1SBarry Smith           list is usually something like PCASMTypes or some other predefined list of enum names
134*53acd3b1SBarry Smith 
135*53acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
136*53acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
137*53acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
138*53acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
139*53acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
140*53acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
141*53acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
142*53acd3b1SBarry Smith @*/
143*53acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsEnum(const char opt[],const char text[],const char man[],const char **list,PetscEnum defaultv,PetscEnum *value,PetscTruth *set)
144*53acd3b1SBarry Smith {
145*53acd3b1SBarry Smith   PetscErrorCode ierr;
146*53acd3b1SBarry Smith   PetscInt       ntext = 0;
147*53acd3b1SBarry Smith 
148*53acd3b1SBarry Smith   PetscFunctionBegin;
149*53acd3b1SBarry Smith   while (list[ntext++]) {
150*53acd3b1SBarry Smith     if (ntext > 50) SETERRQ(PETSC_ERR_ARG_WRONG,"List argument appears to be wrong or have more than 50 entries");
151*53acd3b1SBarry Smith   }
152*53acd3b1SBarry Smith   if (ntext < 3) SETERRQ(PETSC_ERR_ARG_WRONG,"List argument must have at least two entries: typename and type prefix");
153*53acd3b1SBarry Smith   ntext -= 3;
154*53acd3b1SBarry Smith   ierr = PetscOptionsEList(opt,text,man,list,ntext,list[defaultv],(PetscInt*)value,set);CHKERRQ(ierr);
155*53acd3b1SBarry Smith   PetscFunctionReturn(0);
156*53acd3b1SBarry Smith }
157*53acd3b1SBarry Smith 
158*53acd3b1SBarry Smith /* -------------------------------------------------------------------------------------------------------------*/
159*53acd3b1SBarry Smith #undef __FUNCT__
160*53acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsInt"
161*53acd3b1SBarry Smith /*@C
162*53acd3b1SBarry Smith    PetscOptionsInt - Gets the integer value for a particular option in the database.
163*53acd3b1SBarry Smith 
164*53acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
165*53acd3b1SBarry Smith 
166*53acd3b1SBarry Smith    Input Parameters:
167*53acd3b1SBarry Smith +  opt - option name
168*53acd3b1SBarry Smith .  text - short string that describes the option
169*53acd3b1SBarry Smith .  man - manual page with additional information on option
170*53acd3b1SBarry Smith -  defaultv - the default (current) value
171*53acd3b1SBarry Smith 
172*53acd3b1SBarry Smith    Output Parameter:
173*53acd3b1SBarry Smith +  value - the integer value to return
174*53acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
175*53acd3b1SBarry Smith 
176*53acd3b1SBarry Smith    Level: beginner
177*53acd3b1SBarry Smith 
178*53acd3b1SBarry Smith    Concepts: options database^has int
179*53acd3b1SBarry Smith 
180*53acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
181*53acd3b1SBarry Smith 
182*53acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
183*53acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
184*53acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
185*53acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
186*53acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
187*53acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
188*53acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
189*53acd3b1SBarry Smith @*/
190*53acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsInt(const char opt[],const char text[],const char man[],PetscInt defaultv,PetscInt *value,PetscTruth *set)
191*53acd3b1SBarry Smith {
192*53acd3b1SBarry Smith   PetscErrorCode ierr;
193*53acd3b1SBarry Smith 
194*53acd3b1SBarry Smith   PetscFunctionBegin;
195*53acd3b1SBarry Smith   ierr = PetscOptionsGetInt(PetscOptionsObject.prefix,opt,value,set);CHKERRQ(ierr);
196*53acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
197*53acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%d>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv,text,man);CHKERRQ(ierr);
198*53acd3b1SBarry Smith   }
199*53acd3b1SBarry Smith   PetscFunctionReturn(0);
200*53acd3b1SBarry Smith }
201*53acd3b1SBarry Smith 
202*53acd3b1SBarry Smith #undef __FUNCT__
203*53acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsString"
204*53acd3b1SBarry Smith /*@C
205*53acd3b1SBarry Smith    PetscOptionsString - Gets the string value for a particular option in the database.
206*53acd3b1SBarry Smith 
207*53acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
208*53acd3b1SBarry Smith 
209*53acd3b1SBarry Smith    Input Parameters:
210*53acd3b1SBarry Smith +  opt - option name
211*53acd3b1SBarry Smith .  text - short string that describes the option
212*53acd3b1SBarry Smith .  man - manual page with additional information on option
213*53acd3b1SBarry Smith -  defaultv - the default (current) value
214*53acd3b1SBarry Smith 
215*53acd3b1SBarry Smith    Output Parameter:
216*53acd3b1SBarry Smith +  value - the value to return
217*53acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
218*53acd3b1SBarry Smith 
219*53acd3b1SBarry Smith    Level: beginner
220*53acd3b1SBarry Smith 
221*53acd3b1SBarry Smith    Concepts: options database^has int
222*53acd3b1SBarry Smith 
223*53acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
224*53acd3b1SBarry Smith 
225*53acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
226*53acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
227*53acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
228*53acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
229*53acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
230*53acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
231*53acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
232*53acd3b1SBarry Smith @*/
233*53acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsString(const char opt[],const char text[],const char man[],const char defaultv[],char value[],size_t len,PetscTruth *set)
234*53acd3b1SBarry Smith {
235*53acd3b1SBarry Smith   PetscErrorCode ierr;
236*53acd3b1SBarry Smith 
237*53acd3b1SBarry Smith   PetscFunctionBegin;
238*53acd3b1SBarry Smith   ierr = PetscOptionsGetString(PetscOptionsObject.prefix,opt,value,len,set);CHKERRQ(ierr);
239*53acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
240*53acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%s>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv,text,man);CHKERRQ(ierr);
241*53acd3b1SBarry Smith   }
242*53acd3b1SBarry Smith   PetscFunctionReturn(0);
243*53acd3b1SBarry Smith }
244*53acd3b1SBarry Smith 
245*53acd3b1SBarry Smith /*
246*53acd3b1SBarry Smith      Publishes an AMS double field (with the default value in it) and with a name
247*53acd3b1SBarry Smith    given by the text string
248*53acd3b1SBarry Smith */
249*53acd3b1SBarry Smith #undef __FUNCT__
250*53acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsReal"
251*53acd3b1SBarry Smith /*@C
252*53acd3b1SBarry Smith    PetscOptionsReal - Gets the PetscReal value for a particular option in the database.
253*53acd3b1SBarry Smith 
254*53acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
255*53acd3b1SBarry Smith 
256*53acd3b1SBarry Smith    Input Parameters:
257*53acd3b1SBarry Smith +  opt - option name
258*53acd3b1SBarry Smith .  text - short string that describes the option
259*53acd3b1SBarry Smith .  man - manual page with additional information on option
260*53acd3b1SBarry Smith -  defaultv - the default (current) value
261*53acd3b1SBarry Smith 
262*53acd3b1SBarry Smith    Output Parameter:
263*53acd3b1SBarry Smith +  value - the value to return
264*53acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
265*53acd3b1SBarry Smith 
266*53acd3b1SBarry Smith    Level: beginner
267*53acd3b1SBarry Smith 
268*53acd3b1SBarry Smith    Concepts: options database^has int
269*53acd3b1SBarry Smith 
270*53acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
271*53acd3b1SBarry Smith 
272*53acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
273*53acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
274*53acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
275*53acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
276*53acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
277*53acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
278*53acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
279*53acd3b1SBarry Smith @*/
280*53acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsReal(const char opt[],const char text[],const char man[],PetscReal defaultv,PetscReal *value,PetscTruth *set)
281*53acd3b1SBarry Smith {
282*53acd3b1SBarry Smith   PetscErrorCode ierr;
283*53acd3b1SBarry Smith 
284*53acd3b1SBarry Smith   PetscFunctionBegin;
285*53acd3b1SBarry Smith   ierr = PetscOptionsGetReal(PetscOptionsObject.prefix,opt,value,set);CHKERRQ(ierr);
286*53acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
287*53acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%g>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv,text,man);CHKERRQ(ierr);
288*53acd3b1SBarry Smith   }
289*53acd3b1SBarry Smith   PetscFunctionReturn(0);
290*53acd3b1SBarry Smith }
291*53acd3b1SBarry Smith 
292*53acd3b1SBarry Smith #undef __FUNCT__
293*53acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsScalar"
294*53acd3b1SBarry Smith /*@C
295*53acd3b1SBarry Smith    PetscOptionsScalar - Gets the scalar value for a particular option in the database.
296*53acd3b1SBarry Smith 
297*53acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
298*53acd3b1SBarry Smith 
299*53acd3b1SBarry Smith    Input Parameters:
300*53acd3b1SBarry Smith +  opt - option name
301*53acd3b1SBarry Smith .  text - short string that describes the option
302*53acd3b1SBarry Smith .  man - manual page with additional information on option
303*53acd3b1SBarry Smith -  defaultv - the default (current) value
304*53acd3b1SBarry Smith 
305*53acd3b1SBarry Smith    Output Parameter:
306*53acd3b1SBarry Smith +  value - the value to return
307*53acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
308*53acd3b1SBarry Smith 
309*53acd3b1SBarry Smith    Level: beginner
310*53acd3b1SBarry Smith 
311*53acd3b1SBarry Smith    Concepts: options database^has int
312*53acd3b1SBarry Smith 
313*53acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
314*53acd3b1SBarry Smith 
315*53acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
316*53acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
317*53acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
318*53acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
319*53acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
320*53acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
321*53acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
322*53acd3b1SBarry Smith @*/
323*53acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsScalar(const char opt[],const char text[],const char man[],PetscScalar defaultv,PetscScalar *value,PetscTruth *set)
324*53acd3b1SBarry Smith {
325*53acd3b1SBarry Smith   PetscErrorCode ierr;
326*53acd3b1SBarry Smith 
327*53acd3b1SBarry Smith   PetscFunctionBegin;
328*53acd3b1SBarry Smith #if !defined(PETSC_USE_COMPLEX)
329*53acd3b1SBarry Smith   ierr = PetscOptionsReal(opt,text,man,defaultv,value,set);CHKERRQ(ierr);
330*53acd3b1SBarry Smith #else
331*53acd3b1SBarry Smith   ierr = PetscOptionsGetScalar(PetscOptionsObject.prefix,opt,value,set);CHKERRQ(ierr);
332*53acd3b1SBarry Smith #endif
333*53acd3b1SBarry Smith   PetscFunctionReturn(0);
334*53acd3b1SBarry Smith }
335*53acd3b1SBarry Smith 
336*53acd3b1SBarry Smith /*
337*53acd3b1SBarry Smith      Publishes an AMS logical field (with the default value in it) and with a name
338*53acd3b1SBarry Smith    given by the text string
339*53acd3b1SBarry Smith */
340*53acd3b1SBarry Smith #undef __FUNCT__
341*53acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsName"
342*53acd3b1SBarry Smith /*@C
343*53acd3b1SBarry Smith    PetscOptionsName - Determines if a particular option is in the database
344*53acd3b1SBarry Smith 
345*53acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
346*53acd3b1SBarry Smith 
347*53acd3b1SBarry Smith    Input Parameters:
348*53acd3b1SBarry Smith +  opt - option name
349*53acd3b1SBarry Smith .  text - short string that describes the option
350*53acd3b1SBarry Smith -  man - manual page with additional information on option
351*53acd3b1SBarry Smith 
352*53acd3b1SBarry Smith    Output Parameter:
353*53acd3b1SBarry Smith .  flg - PETSC_TRUE if found, else PETSC_FALSE
354*53acd3b1SBarry Smith 
355*53acd3b1SBarry Smith    Level: beginner
356*53acd3b1SBarry Smith 
357*53acd3b1SBarry Smith    Concepts: options database^has int
358*53acd3b1SBarry Smith 
359*53acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
360*53acd3b1SBarry Smith 
361*53acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
362*53acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
363*53acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
364*53acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
365*53acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
366*53acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
367*53acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
368*53acd3b1SBarry Smith @*/
369*53acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsName(const char opt[],const char text[],const char man[],PetscTruth *flg)
370*53acd3b1SBarry Smith {
371*53acd3b1SBarry Smith   PetscErrorCode ierr;
372*53acd3b1SBarry Smith 
373*53acd3b1SBarry Smith   PetscFunctionBegin;
374*53acd3b1SBarry Smith   ierr = PetscOptionsHasName(PetscOptionsObject.prefix,opt,flg);CHKERRQ(ierr);
375*53acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
376*53acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
377*53acd3b1SBarry Smith   }
378*53acd3b1SBarry Smith   PetscFunctionReturn(0);
379*53acd3b1SBarry Smith }
380*53acd3b1SBarry Smith 
381*53acd3b1SBarry Smith #undef __FUNCT__
382*53acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsList"
383*53acd3b1SBarry Smith /*@C
384*53acd3b1SBarry Smith      PetscOptionsList - Puts a list of option values that a single one may be selected from
385*53acd3b1SBarry Smith 
386*53acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
387*53acd3b1SBarry Smith 
388*53acd3b1SBarry Smith    Input Parameters:
389*53acd3b1SBarry Smith +  opt - option name
390*53acd3b1SBarry Smith .  text - short string that describes the option
391*53acd3b1SBarry Smith .  man - manual page with additional information on option
392*53acd3b1SBarry Smith .  list - the possible choices
393*53acd3b1SBarry Smith -  defaultv - the default (current) value
394*53acd3b1SBarry Smith 
395*53acd3b1SBarry Smith    Output Parameter:
396*53acd3b1SBarry Smith +  value - the value to return
397*53acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
398*53acd3b1SBarry Smith 
399*53acd3b1SBarry Smith    Level: intermediate
400*53acd3b1SBarry Smith 
401*53acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
402*53acd3b1SBarry Smith 
403*53acd3b1SBarry Smith    See PetscOptionsEList() for when the choices are given in a string array
404*53acd3b1SBarry Smith 
405*53acd3b1SBarry Smith    To get a listing of all currently specified options,
406*53acd3b1SBarry Smith     see PetscOptionsPrint() or PetscOptionsGetAll()
407*53acd3b1SBarry Smith 
408*53acd3b1SBarry Smith    Concepts: options database^list
409*53acd3b1SBarry Smith 
410*53acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
411*53acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
412*53acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
413*53acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
414*53acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
415*53acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
416*53acd3b1SBarry Smith @*/
417*53acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsList(const char opt[],const char ltext[],const char man[],PetscFList list,const char defaultv[],char value[],PetscInt len,PetscTruth *set)
418*53acd3b1SBarry Smith {
419*53acd3b1SBarry Smith   PetscErrorCode ierr;
420*53acd3b1SBarry Smith 
421*53acd3b1SBarry Smith   PetscFunctionBegin;
422*53acd3b1SBarry Smith   ierr = PetscOptionsGetString(PetscOptionsObject.prefix,opt,value,len,set);CHKERRQ(ierr);
423*53acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
424*53acd3b1SBarry Smith     ierr = PetscFListPrintTypes(PetscOptionsObject.comm,stdout,PetscOptionsObject.prefix,opt,ltext,man,list);CHKERRQ(ierr);CHKERRQ(ierr);
425*53acd3b1SBarry Smith   }
426*53acd3b1SBarry Smith   PetscFunctionReturn(0);
427*53acd3b1SBarry Smith }
428*53acd3b1SBarry Smith 
429*53acd3b1SBarry Smith #undef __FUNCT__
430*53acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsEList"
431*53acd3b1SBarry Smith /*@C
432*53acd3b1SBarry Smith      PetscOptionsEList - Puts a list of option values that a single one may be selected from
433*53acd3b1SBarry Smith 
434*53acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
435*53acd3b1SBarry Smith 
436*53acd3b1SBarry Smith    Input Parameters:
437*53acd3b1SBarry Smith +  opt - option name
438*53acd3b1SBarry Smith .  ltext - short string that describes the option
439*53acd3b1SBarry Smith .  man - manual page with additional information on option
440*53acd3b1SBarry Smith .  list - the possible choices
441*53acd3b1SBarry Smith .  ntext - number of choices
442*53acd3b1SBarry Smith -  defaultv - the default (current) value
443*53acd3b1SBarry Smith 
444*53acd3b1SBarry Smith    Output Parameter:
445*53acd3b1SBarry Smith +  value - the index of the value to return
446*53acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
447*53acd3b1SBarry Smith 
448*53acd3b1SBarry Smith    Level: intermediate
449*53acd3b1SBarry Smith 
450*53acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
451*53acd3b1SBarry Smith 
452*53acd3b1SBarry Smith    See PetscOptionsList() for when the choices are given in a PetscFList()
453*53acd3b1SBarry Smith 
454*53acd3b1SBarry Smith    Concepts: options database^list
455*53acd3b1SBarry Smith 
456*53acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
457*53acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
458*53acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
459*53acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
460*53acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
461*53acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
462*53acd3b1SBarry Smith @*/
463*53acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsEList(const char opt[],const char ltext[],const char man[],const char **list,PetscInt ntext,const char defaultv[],PetscInt *value,PetscTruth *set)
464*53acd3b1SBarry Smith {
465*53acd3b1SBarry Smith   PetscErrorCode ierr;
466*53acd3b1SBarry Smith   PetscInt       i;
467*53acd3b1SBarry Smith 
468*53acd3b1SBarry Smith   PetscFunctionBegin;
469*53acd3b1SBarry Smith   ierr = PetscOptionsGetEList(PetscOptionsObject.prefix,opt,list,ntext,value,set);CHKERRQ(ierr);
470*53acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
471*53acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%s> (choose one of)",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv);CHKERRQ(ierr);
472*53acd3b1SBarry Smith     for (i=0; i<ntext; i++){
473*53acd3b1SBarry Smith       ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm," %s",list[i]);CHKERRQ(ierr);
474*53acd3b1SBarry Smith     }
475*53acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"\n");CHKERRQ(ierr);
476*53acd3b1SBarry Smith   }
477*53acd3b1SBarry Smith   PetscFunctionReturn(0);
478*53acd3b1SBarry Smith }
479*53acd3b1SBarry Smith 
480*53acd3b1SBarry Smith #undef __FUNCT__
481*53acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruthGroupBegin"
482*53acd3b1SBarry Smith /*@C
483*53acd3b1SBarry Smith      PetscOptionsTruthGroupBegin - First in a series of logical queries on the options database for
484*53acd3b1SBarry Smith        which only a single value can be true.
485*53acd3b1SBarry Smith 
486*53acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
487*53acd3b1SBarry Smith 
488*53acd3b1SBarry Smith    Input Parameters:
489*53acd3b1SBarry Smith +  opt - option name
490*53acd3b1SBarry Smith .  text - short string that describes the option
491*53acd3b1SBarry Smith -  man - manual page with additional information on option
492*53acd3b1SBarry Smith 
493*53acd3b1SBarry Smith    Output Parameter:
494*53acd3b1SBarry Smith .  flg - whether that option was set or not
495*53acd3b1SBarry Smith 
496*53acd3b1SBarry Smith    Level: intermediate
497*53acd3b1SBarry Smith 
498*53acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
499*53acd3b1SBarry Smith 
500*53acd3b1SBarry Smith    Must be followed by 0 or more PetscOptionsTruthGroup()s and PetscOptionsTruthGroupEnd()
501*53acd3b1SBarry Smith 
502*53acd3b1SBarry Smith     Concepts: options database^logical group
503*53acd3b1SBarry Smith 
504*53acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
505*53acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
506*53acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
507*53acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
508*53acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
509*53acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
510*53acd3b1SBarry Smith @*/
511*53acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruthGroupBegin(const char opt[],const char text[],const char man[],PetscTruth *flg)
512*53acd3b1SBarry Smith {
513*53acd3b1SBarry Smith   PetscErrorCode ierr;
514*53acd3b1SBarry Smith 
515*53acd3b1SBarry Smith   PetscFunctionBegin;
516*53acd3b1SBarry Smith   ierr = PetscOptionsHasName(PetscOptionsObject.prefix,opt,flg);CHKERRQ(ierr);
517*53acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
518*53acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  Pick at most one of -------------\n");CHKERRQ(ierr);
519*53acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"    -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
520*53acd3b1SBarry Smith   }
521*53acd3b1SBarry Smith   PetscFunctionReturn(0);
522*53acd3b1SBarry Smith }
523*53acd3b1SBarry Smith 
524*53acd3b1SBarry Smith #undef __FUNCT__
525*53acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruthGroup"
526*53acd3b1SBarry Smith /*@C
527*53acd3b1SBarry Smith      PetscOptionsTruthGroup - One in a series of logical queries on the options database for
528*53acd3b1SBarry Smith        which only a single value can be true.
529*53acd3b1SBarry Smith 
530*53acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
531*53acd3b1SBarry Smith 
532*53acd3b1SBarry Smith    Input Parameters:
533*53acd3b1SBarry Smith +  opt - option name
534*53acd3b1SBarry Smith .  text - short string that describes the option
535*53acd3b1SBarry Smith -  man - manual page with additional information on option
536*53acd3b1SBarry Smith 
537*53acd3b1SBarry Smith    Output Parameter:
538*53acd3b1SBarry Smith .  flg - PETSC_TRUE if found, else PETSC_FALSE
539*53acd3b1SBarry Smith 
540*53acd3b1SBarry Smith    Level: intermediate
541*53acd3b1SBarry Smith 
542*53acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
543*53acd3b1SBarry Smith 
544*53acd3b1SBarry Smith    Must follow a PetscOptionsTruthGroupBegin() and preceded a PetscOptionsTruthGroupEnd()
545*53acd3b1SBarry Smith 
546*53acd3b1SBarry Smith     Concepts: options database^logical group
547*53acd3b1SBarry Smith 
548*53acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
549*53acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
550*53acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
551*53acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
552*53acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
553*53acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
554*53acd3b1SBarry Smith @*/
555*53acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruthGroup(const char opt[],const char text[],const char man[],PetscTruth *flg)
556*53acd3b1SBarry Smith {
557*53acd3b1SBarry Smith   PetscErrorCode ierr;
558*53acd3b1SBarry Smith 
559*53acd3b1SBarry Smith   PetscFunctionBegin;
560*53acd3b1SBarry Smith   ierr = PetscOptionsHasName(PetscOptionsObject.prefix,opt,flg);CHKERRQ(ierr);
561*53acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
562*53acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"    -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
563*53acd3b1SBarry Smith   }
564*53acd3b1SBarry Smith   PetscFunctionReturn(0);
565*53acd3b1SBarry Smith }
566*53acd3b1SBarry Smith 
567*53acd3b1SBarry Smith #undef __FUNCT__
568*53acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruthGroupEnd"
569*53acd3b1SBarry Smith /*@C
570*53acd3b1SBarry Smith      PetscOptionsTruthGroupEnd - Last in a series of logical queries on the options database for
571*53acd3b1SBarry Smith        which only a single value can be true.
572*53acd3b1SBarry Smith 
573*53acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
574*53acd3b1SBarry Smith 
575*53acd3b1SBarry Smith    Input Parameters:
576*53acd3b1SBarry Smith +  opt - option name
577*53acd3b1SBarry Smith .  text - short string that describes the option
578*53acd3b1SBarry Smith -  man - manual page with additional information on option
579*53acd3b1SBarry Smith 
580*53acd3b1SBarry Smith    Output Parameter:
581*53acd3b1SBarry Smith .  flg - PETSC_TRUE if found, else PETSC_FALSE
582*53acd3b1SBarry Smith 
583*53acd3b1SBarry Smith    Level: intermediate
584*53acd3b1SBarry Smith 
585*53acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
586*53acd3b1SBarry Smith 
587*53acd3b1SBarry Smith    Must follow a PetscOptionsTruthGroupBegin()
588*53acd3b1SBarry Smith 
589*53acd3b1SBarry Smith     Concepts: options database^logical group
590*53acd3b1SBarry Smith 
591*53acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
592*53acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
593*53acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
594*53acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
595*53acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
596*53acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
597*53acd3b1SBarry Smith @*/
598*53acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruthGroupEnd(const char opt[],const char text[],const char man[],PetscTruth *flg)
599*53acd3b1SBarry Smith {
600*53acd3b1SBarry Smith   PetscErrorCode ierr;
601*53acd3b1SBarry Smith 
602*53acd3b1SBarry Smith   PetscFunctionBegin;
603*53acd3b1SBarry Smith   ierr = PetscOptionsHasName(PetscOptionsObject.prefix,opt,flg);CHKERRQ(ierr);
604*53acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
605*53acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"    -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
606*53acd3b1SBarry Smith   }
607*53acd3b1SBarry Smith   PetscFunctionReturn(0);
608*53acd3b1SBarry Smith }
609*53acd3b1SBarry Smith 
610*53acd3b1SBarry Smith #undef __FUNCT__
611*53acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruth"
612*53acd3b1SBarry Smith /*@C
613*53acd3b1SBarry Smith    PetscOptionsTruth - Determines if a particular option is in the database with a true or false
614*53acd3b1SBarry Smith 
615*53acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
616*53acd3b1SBarry Smith 
617*53acd3b1SBarry Smith    Input Parameters:
618*53acd3b1SBarry Smith +  opt - option name
619*53acd3b1SBarry Smith .  text - short string that describes the option
620*53acd3b1SBarry Smith -  man - manual page with additional information on option
621*53acd3b1SBarry Smith 
622*53acd3b1SBarry Smith    Output Parameter:
623*53acd3b1SBarry Smith .  flg - PETSC_TRUE or PETSC_FALSE
624*53acd3b1SBarry Smith .  set - PETSC_TRUE if found, else PETSC_FALSE
625*53acd3b1SBarry Smith 
626*53acd3b1SBarry Smith    Level: beginner
627*53acd3b1SBarry Smith 
628*53acd3b1SBarry Smith    Concepts: options database^logical
629*53acd3b1SBarry Smith 
630*53acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
631*53acd3b1SBarry Smith 
632*53acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
633*53acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
634*53acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
635*53acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
636*53acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
637*53acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
638*53acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
639*53acd3b1SBarry Smith @*/
640*53acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruth(const char opt[],const char text[],const char man[],PetscTruth deflt,PetscTruth *flg,PetscTruth *set)
641*53acd3b1SBarry Smith {
642*53acd3b1SBarry Smith   PetscErrorCode ierr;
643*53acd3b1SBarry Smith   PetscTruth     iset;
644*53acd3b1SBarry Smith 
645*53acd3b1SBarry Smith   PetscFunctionBegin;
646*53acd3b1SBarry Smith   ierr = PetscOptionsGetTruth(PetscOptionsObject.prefix,opt,flg,&iset);CHKERRQ(ierr);
647*53acd3b1SBarry Smith   if (!iset) {
648*53acd3b1SBarry Smith     if (flg) *flg = deflt;
649*53acd3b1SBarry Smith   }
650*53acd3b1SBarry Smith   if (set) *set = iset;
651*53acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
652*53acd3b1SBarry Smith     const char *v = PetscTruths[deflt];
653*53acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s: <%s> %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,v,text,man);CHKERRQ(ierr);
654*53acd3b1SBarry Smith   }
655*53acd3b1SBarry Smith   PetscFunctionReturn(0);
656*53acd3b1SBarry Smith }
657*53acd3b1SBarry Smith 
658*53acd3b1SBarry Smith #undef __FUNCT__
659*53acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsRealArray"
660*53acd3b1SBarry Smith /*@C
661*53acd3b1SBarry Smith    PetscOptionsRealArray - Gets an array of double values for a particular
662*53acd3b1SBarry Smith    option in the database. The values must be separated with commas with
663*53acd3b1SBarry Smith    no intervening spaces.
664*53acd3b1SBarry Smith 
665*53acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
666*53acd3b1SBarry Smith 
667*53acd3b1SBarry Smith    Input Parameters:
668*53acd3b1SBarry Smith +  opt - the option one is seeking
669*53acd3b1SBarry Smith .  text - short string describing option
670*53acd3b1SBarry Smith .  man - manual page for option
671*53acd3b1SBarry Smith -  nmax - maximum number of values
672*53acd3b1SBarry Smith 
673*53acd3b1SBarry Smith    Output Parameter:
674*53acd3b1SBarry Smith +  value - location to copy values
675*53acd3b1SBarry Smith .  nmax - actual number of values found
676*53acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
677*53acd3b1SBarry Smith 
678*53acd3b1SBarry Smith    Level: beginner
679*53acd3b1SBarry Smith 
680*53acd3b1SBarry Smith    Notes:
681*53acd3b1SBarry Smith    The user should pass in an array of doubles
682*53acd3b1SBarry Smith 
683*53acd3b1SBarry Smith    Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
684*53acd3b1SBarry Smith 
685*53acd3b1SBarry Smith    Concepts: options database^array of strings
686*53acd3b1SBarry Smith 
687*53acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
688*53acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
689*53acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
690*53acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
691*53acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
692*53acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
693*53acd3b1SBarry Smith @*/
694*53acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsRealArray(const char opt[],const char text[],const char man[],PetscReal value[],PetscInt *n,PetscTruth *set)
695*53acd3b1SBarry Smith {
696*53acd3b1SBarry Smith   PetscErrorCode ierr;
697*53acd3b1SBarry Smith   PetscInt       i;
698*53acd3b1SBarry Smith 
699*53acd3b1SBarry Smith   PetscFunctionBegin;
700*53acd3b1SBarry Smith   ierr = PetscOptionsGetRealArray(PetscOptionsObject.prefix,opt,value,n,set);CHKERRQ(ierr);
701*53acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
702*53acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%g",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,value[0]);CHKERRQ(ierr);
703*53acd3b1SBarry Smith     for (i=1; i<*n; i++) {
704*53acd3b1SBarry Smith       ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,",%g",value[i]);CHKERRQ(ierr);
705*53acd3b1SBarry Smith     }
706*53acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,">: %s (%s)\n",text,man);CHKERRQ(ierr);
707*53acd3b1SBarry Smith   }
708*53acd3b1SBarry Smith   PetscFunctionReturn(0);
709*53acd3b1SBarry Smith }
710*53acd3b1SBarry Smith 
711*53acd3b1SBarry Smith 
712*53acd3b1SBarry Smith #undef __FUNCT__
713*53acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsIntArray"
714*53acd3b1SBarry Smith /*@C
715*53acd3b1SBarry Smith    PetscOptionsIntArray - Gets an array of integers for a particular
716*53acd3b1SBarry Smith    option in the database. The values must be separated with commas with
717*53acd3b1SBarry Smith    no intervening spaces.
718*53acd3b1SBarry Smith 
719*53acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
720*53acd3b1SBarry Smith 
721*53acd3b1SBarry Smith    Input Parameters:
722*53acd3b1SBarry Smith +  opt - the option one is seeking
723*53acd3b1SBarry Smith .  text - short string describing option
724*53acd3b1SBarry Smith .  man - manual page for option
725*53acd3b1SBarry Smith -  nmax - maximum number of values
726*53acd3b1SBarry Smith 
727*53acd3b1SBarry Smith    Output Parameter:
728*53acd3b1SBarry Smith +  value - location to copy values
729*53acd3b1SBarry Smith .  nmax - actual number of values found
730*53acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
731*53acd3b1SBarry Smith 
732*53acd3b1SBarry Smith    Level: beginner
733*53acd3b1SBarry Smith 
734*53acd3b1SBarry Smith    Notes:
735*53acd3b1SBarry Smith    The user should pass in an array of integers
736*53acd3b1SBarry Smith 
737*53acd3b1SBarry Smith    Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
738*53acd3b1SBarry Smith 
739*53acd3b1SBarry Smith    Concepts: options database^array of strings
740*53acd3b1SBarry Smith 
741*53acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
742*53acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
743*53acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
744*53acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
745*53acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
746*53acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList(), PetscOptionsRealArray()
747*53acd3b1SBarry Smith @*/
748*53acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsIntArray(const char opt[],const char text[],const char man[],PetscInt value[],PetscInt *n,PetscTruth *set)
749*53acd3b1SBarry Smith {
750*53acd3b1SBarry Smith   PetscErrorCode ierr;
751*53acd3b1SBarry Smith   PetscInt       i;
752*53acd3b1SBarry Smith 
753*53acd3b1SBarry Smith   PetscFunctionBegin;
754*53acd3b1SBarry Smith   ierr = PetscOptionsGetIntArray(PetscOptionsObject.prefix,opt,value,n,set);CHKERRQ(ierr);
755*53acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
756*53acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%d",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,value[0]);CHKERRQ(ierr);
757*53acd3b1SBarry Smith     for (i=1; i<*n; i++) {
758*53acd3b1SBarry Smith       ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,",%d",value[i]);CHKERRQ(ierr);
759*53acd3b1SBarry Smith     }
760*53acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,">: %s (%s)\n",text,man);CHKERRQ(ierr);
761*53acd3b1SBarry Smith   }
762*53acd3b1SBarry Smith   PetscFunctionReturn(0);
763*53acd3b1SBarry Smith }
764*53acd3b1SBarry Smith 
765*53acd3b1SBarry Smith #undef __FUNCT__
766*53acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsStringArray"
767*53acd3b1SBarry Smith /*@C
768*53acd3b1SBarry Smith    PetscOptionsStringArray - Gets an array of string values for a particular
769*53acd3b1SBarry Smith    option in the database. The values must be separated with commas with
770*53acd3b1SBarry Smith    no intervening spaces.
771*53acd3b1SBarry Smith 
772*53acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
773*53acd3b1SBarry Smith 
774*53acd3b1SBarry Smith    Input Parameters:
775*53acd3b1SBarry Smith +  opt - the option one is seeking
776*53acd3b1SBarry Smith .  text - short string describing option
777*53acd3b1SBarry Smith .  man - manual page for option
778*53acd3b1SBarry Smith -  nmax - maximum number of strings
779*53acd3b1SBarry Smith 
780*53acd3b1SBarry Smith    Output Parameter:
781*53acd3b1SBarry Smith +  value - location to copy strings
782*53acd3b1SBarry Smith .  nmax - actual number of strings found
783*53acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
784*53acd3b1SBarry Smith 
785*53acd3b1SBarry Smith    Level: beginner
786*53acd3b1SBarry Smith 
787*53acd3b1SBarry Smith    Notes:
788*53acd3b1SBarry Smith    The user should pass in an array of pointers to char, to hold all the
789*53acd3b1SBarry Smith    strings returned by this function.
790*53acd3b1SBarry Smith 
791*53acd3b1SBarry Smith    The user is responsible for deallocating the strings that are
792*53acd3b1SBarry Smith    returned. The Fortran interface for this routine is not supported.
793*53acd3b1SBarry Smith 
794*53acd3b1SBarry Smith    Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
795*53acd3b1SBarry Smith 
796*53acd3b1SBarry Smith    Concepts: options database^array of strings
797*53acd3b1SBarry Smith 
798*53acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
799*53acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
800*53acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
801*53acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
802*53acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
803*53acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
804*53acd3b1SBarry Smith @*/
805*53acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsStringArray(const char opt[],const char text[],const char man[],char *value[],PetscInt *nmax,PetscTruth *set)
806*53acd3b1SBarry Smith {
807*53acd3b1SBarry Smith   PetscErrorCode ierr;
808*53acd3b1SBarry Smith 
809*53acd3b1SBarry Smith   PetscFunctionBegin;
810*53acd3b1SBarry Smith   ierr = PetscOptionsGetStringArray(PetscOptionsObject.prefix,opt,value,nmax,set);CHKERRQ(ierr);
811*53acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
812*53acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <string1,string2,...>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
813*53acd3b1SBarry Smith   }
814*53acd3b1SBarry Smith   PetscFunctionReturn(0);
815*53acd3b1SBarry Smith }
816*53acd3b1SBarry Smith 
817*53acd3b1SBarry Smith 
818*53acd3b1SBarry Smith #undef __FUNCT__
819*53acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsHead"
820*53acd3b1SBarry Smith /*@C
821*53acd3b1SBarry Smith      PetscOptionsHead - Puts a heading before list any more published options. Used, for example,
822*53acd3b1SBarry Smith             in KSPSetFromOptions_GMRES().
823*53acd3b1SBarry Smith 
824*53acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
825*53acd3b1SBarry Smith 
826*53acd3b1SBarry Smith    Input Parameter:
827*53acd3b1SBarry Smith .   head - the heading text
828*53acd3b1SBarry Smith 
829*53acd3b1SBarry Smith 
830*53acd3b1SBarry Smith    Level: intermediate
831*53acd3b1SBarry Smith 
832*53acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
833*53acd3b1SBarry Smith 
834*53acd3b1SBarry Smith           Must be followed by a call to PetscOptionsTail() in the same function.
835*53acd3b1SBarry Smith 
836*53acd3b1SBarry Smith    Concepts: options database^subheading
837*53acd3b1SBarry Smith 
838*53acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
839*53acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
840*53acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
841*53acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
842*53acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
843*53acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
844*53acd3b1SBarry Smith @*/
845*53acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsHead(const char head[])
846*53acd3b1SBarry Smith {
847*53acd3b1SBarry Smith   PetscErrorCode ierr;
848*53acd3b1SBarry Smith 
849*53acd3b1SBarry Smith   PetscFunctionBegin;
850*53acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
851*53acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  %s\n",head);CHKERRQ(ierr);
852*53acd3b1SBarry Smith   }
853*53acd3b1SBarry Smith   PetscFunctionReturn(0);
854*53acd3b1SBarry Smith }
855*53acd3b1SBarry Smith 
856*53acd3b1SBarry Smith 
857*53acd3b1SBarry Smith 
858*53acd3b1SBarry Smith 
859*53acd3b1SBarry Smith 
860*53acd3b1SBarry Smith 
861