xref: /petsc/src/sys/objects/aoptions.c (revision 6356e834d5fb4a471e3a695b6642083919bc5a29)
153acd3b1SBarry Smith #define PETSC_DLL
253acd3b1SBarry Smith /*
353acd3b1SBarry Smith    These routines simplify the use of command line, file options, etc.,
453acd3b1SBarry Smith    and are used to manipulate the options database.
553acd3b1SBarry Smith 
653acd3b1SBarry Smith   This file uses regular malloc and free because it cannot know
753acd3b1SBarry Smith   what malloc is being used until it has already processed the input.
853acd3b1SBarry Smith */
953acd3b1SBarry Smith 
1053acd3b1SBarry Smith #include "petsc.h"        /*I  "petsc.h"   I*/
1153acd3b1SBarry Smith #include "petscsys.h"
1253acd3b1SBarry Smith #if defined(PETSC_HAVE_STDLIB_H)
1353acd3b1SBarry Smith #include <stdlib.h>
1453acd3b1SBarry Smith #endif
1553acd3b1SBarry Smith 
1653acd3b1SBarry Smith /*
1753acd3b1SBarry Smith     Keep a linked list of options that have been posted and we are waiting for
1853acd3b1SBarry Smith    user selection
1953acd3b1SBarry Smith 
2053acd3b1SBarry Smith     Eventually we'll attach this beast to a MPI_Comm
2153acd3b1SBarry Smith */
2253acd3b1SBarry Smith typedef enum {OPTION_INT,OPTION_LOGICAL,OPTION_REAL,OPTION_LIST,OPTION_STRING,OPTION_REAL_ARRAY,OPTION_HEAD} OptionType;
2353acd3b1SBarry Smith typedef struct _p_Options* PetscOptions;
2453acd3b1SBarry Smith struct _p_Options {
2553acd3b1SBarry Smith   char         *option;
2653acd3b1SBarry Smith   char         *text;
2753acd3b1SBarry Smith   void         *data;
2853acd3b1SBarry Smith   void         *edata;
29*6356e834SBarry Smith   char         *man;
3053acd3b1SBarry Smith   int          arraylength;
3153acd3b1SBarry Smith   PetscTruth   set;
3253acd3b1SBarry Smith   OptionType   type;
3353acd3b1SBarry Smith   PetscOptions next;
3453acd3b1SBarry Smith };
3553acd3b1SBarry Smith 
3653acd3b1SBarry Smith static struct {
3753acd3b1SBarry Smith   PetscOptions    next;
3853acd3b1SBarry Smith   char            *prefix,*mprefix;
3953acd3b1SBarry Smith   char            *title;
4053acd3b1SBarry Smith   MPI_Comm        comm;
41*6356e834SBarry Smith   PetscTruth      printhelp,changedmethod;
4253acd3b1SBarry Smith }                                   PetscOptionsObject;
4353acd3b1SBarry Smith PetscInt                            PetscOptionsPublishCount = 0;
4453acd3b1SBarry Smith 
4553acd3b1SBarry Smith #undef __FUNCT__
4653acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsBegin_Private"
4753acd3b1SBarry Smith /*
4853acd3b1SBarry Smith     Handles setting up the data structure in a call to PetscOptionsBegin()
4953acd3b1SBarry Smith */
5053acd3b1SBarry Smith PetscErrorCode PetscOptionsBegin_Private(MPI_Comm comm,const char prefix[],const char title[],const char mansec[])
5153acd3b1SBarry Smith {
5253acd3b1SBarry Smith   PetscErrorCode ierr;
5353acd3b1SBarry Smith 
5453acd3b1SBarry Smith   PetscFunctionBegin;
5553acd3b1SBarry Smith   PetscOptionsObject.next          = 0;
5653acd3b1SBarry Smith   PetscOptionsObject.comm          = comm;
57*6356e834SBarry Smith   PetscOptionsObject.changedmethod = PETSC_FALSE;
5853acd3b1SBarry Smith   ierr = PetscStrallocpy(prefix,&PetscOptionsObject.prefix);CHKERRQ(ierr);
5953acd3b1SBarry Smith   ierr = PetscStrallocpy(title,&PetscOptionsObject.title);CHKERRQ(ierr);
6053acd3b1SBarry Smith 
6153acd3b1SBarry Smith   ierr = PetscOptionsHasName(PETSC_NULL,"-help",&PetscOptionsObject.printhelp);CHKERRQ(ierr);
6253acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
6353acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(comm,"%s -------------------------------------------------\n",title);CHKERRQ(ierr);
6453acd3b1SBarry Smith   }
6553acd3b1SBarry Smith   PetscFunctionReturn(0);
6653acd3b1SBarry Smith }
6753acd3b1SBarry Smith 
6853acd3b1SBarry Smith /*
6953acd3b1SBarry Smith      Handles adding another option to the list of options within this particular PetscOptionsBegin() PetscOptionsEnd()
7053acd3b1SBarry Smith */
7153acd3b1SBarry Smith #undef __FUNCT__
7253acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsCreate_Private"
73*6356e834SBarry Smith static int PetscOptionsCreate_Private(const char opt[],const char text[],const char man[],OptionType t,PetscOptions *amsopt)
7453acd3b1SBarry Smith {
7553acd3b1SBarry Smith   int          ierr;
7653acd3b1SBarry Smith   PetscOptions next;
7753acd3b1SBarry Smith 
7853acd3b1SBarry Smith   PetscFunctionBegin;
7953acd3b1SBarry Smith   ierr             = PetscNew(struct _p_Options,amsopt);CHKERRQ(ierr);
8053acd3b1SBarry Smith   (*amsopt)->next  = 0;
8153acd3b1SBarry Smith   (*amsopt)->set   = PETSC_FALSE;
82*6356e834SBarry Smith   (*amsopt)->type  = t;
8353acd3b1SBarry Smith   (*amsopt)->data  = 0;
8453acd3b1SBarry Smith   (*amsopt)->edata = 0;
8553acd3b1SBarry Smith   ierr             = PetscStrallocpy(text,&(*amsopt)->text);CHKERRQ(ierr);
8653acd3b1SBarry Smith   ierr             = PetscStrallocpy(opt,&(*amsopt)->option);CHKERRQ(ierr);
87*6356e834SBarry Smith   ierr             = PetscStrallocpy(man,&(*amsopt)->man);CHKERRQ(ierr);
8853acd3b1SBarry Smith 
8953acd3b1SBarry Smith   if (!PetscOptionsObject.next) {
9053acd3b1SBarry Smith     PetscOptionsObject.next = *amsopt;
9153acd3b1SBarry Smith   } else {
9253acd3b1SBarry Smith     next = PetscOptionsObject.next;
9353acd3b1SBarry Smith     while (next->next) next = next->next;
9453acd3b1SBarry Smith     next->next = *amsopt;
9553acd3b1SBarry Smith   }
9653acd3b1SBarry Smith   PetscFunctionReturn(0);
9753acd3b1SBarry Smith }
9853acd3b1SBarry Smith 
9953acd3b1SBarry Smith #undef __FUNCT__
100*6356e834SBarry Smith #define __FUNCT__ "PetscOptionsGetFromGui"
101*6356e834SBarry Smith static PetscErrorCode PetscOptionsGetFromGUI()
102*6356e834SBarry Smith {
103*6356e834SBarry Smith   PetscErrorCode ierr;
104*6356e834SBarry Smith   PetscOptions   next = PetscOptionsObject.next;
105*6356e834SBarry Smith   char           str[512];
106*6356e834SBarry Smith 
107*6356e834SBarry Smith   ierr = (*PetscPrintf)(PetscOptionsObject.comm,"%s -------------------------------------------------\n",PetscOptionsObject.title);CHKERRQ(ierr);
108*6356e834SBarry Smith   while (next) {
109*6356e834SBarry Smith     switch (next->type) {
110*6356e834SBarry Smith       case OPTION_HEAD:
111*6356e834SBarry Smith         break;
112*6356e834SBarry Smith       case OPTION_INT:
113*6356e834SBarry Smith         ierr = PetscPrintf(PetscOptionsObject.comm,"-%s%s <%d>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",next->option,*(int*)next->data,next->text,next->man);CHKERRQ(ierr);
114*6356e834SBarry Smith         scanf("%s\n",str);
115*6356e834SBarry Smith         if (str[0] != '\n') {
116*6356e834SBarry Smith           printf("chainginf value\n");
117*6356e834SBarry Smith         }
118*6356e834SBarry Smith         break;
119*6356e834SBarry Smith     }
120*6356e834SBarry Smith     next = next->next;
121*6356e834SBarry Smith   }
122*6356e834SBarry Smith   PetscFunctionReturn(0);
123*6356e834SBarry Smith }
124*6356e834SBarry Smith 
125*6356e834SBarry Smith #undef __FUNCT__
12653acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsEnd_Private"
12753acd3b1SBarry Smith PetscErrorCode PetscOptionsEnd_Private(void)
12853acd3b1SBarry Smith {
12953acd3b1SBarry Smith   PetscErrorCode ierr;
130*6356e834SBarry Smith   PetscOptions   last;
131*6356e834SBarry Smith   char           option[256],value[1024],tmp[32];
132*6356e834SBarry Smith   PetscInt       j;
13353acd3b1SBarry Smith 
13453acd3b1SBarry Smith   PetscFunctionBegin;
135*6356e834SBarry Smith 
136*6356e834SBarry Smith   if (PetscOptionsObject.next) {
137*6356e834SBarry Smith     ierr = PetscOptionsGetFromGUI();
138*6356e834SBarry Smith   }
139*6356e834SBarry Smith 
14053acd3b1SBarry Smith   ierr = PetscStrfree(PetscOptionsObject.title);CHKERRQ(ierr); PetscOptionsObject.title  = 0;
14153acd3b1SBarry Smith   ierr = PetscStrfree(PetscOptionsObject.prefix);CHKERRQ(ierr); PetscOptionsObject.prefix = 0;
142*6356e834SBarry Smith 
143*6356e834SBarry Smith   /* reset counter to -2; this updates the screen with the new options for the selected method */
144*6356e834SBarry Smith   if (PetscOptionsObject.changedmethod) PetscOptionsPublishCount = -2;
145*6356e834SBarry Smith 
146*6356e834SBarry Smith   while (PetscOptionsObject.next) {
147*6356e834SBarry Smith     if (PetscOptionsObject.next->set) {
148*6356e834SBarry Smith       if (PetscOptionsObject.prefix) {
149*6356e834SBarry Smith         ierr = PetscStrcpy(option,"-");CHKERRQ(ierr);
150*6356e834SBarry Smith         ierr = PetscStrcat(option,PetscOptionsObject.prefix);CHKERRQ(ierr);
151*6356e834SBarry Smith         ierr = PetscStrcat(option,PetscOptionsObject.next->option+1);CHKERRQ(ierr);
152*6356e834SBarry Smith       } else {
153*6356e834SBarry Smith         ierr = PetscStrcpy(option,PetscOptionsObject.next->option);CHKERRQ(ierr);
154*6356e834SBarry Smith       }
155*6356e834SBarry Smith 
156*6356e834SBarry Smith       switch (PetscOptionsObject.next->type) {
157*6356e834SBarry Smith         case OPTION_HEAD:
158*6356e834SBarry Smith           break;
159*6356e834SBarry Smith         case OPTION_INT:
160*6356e834SBarry Smith           sprintf(value,"%d",*(PetscInt*)PetscOptionsObject.next->data);
161*6356e834SBarry Smith           break;
162*6356e834SBarry Smith         case OPTION_REAL:
163*6356e834SBarry Smith           sprintf(value,"%g",*(PetscReal*)PetscOptionsObject.next->data);
164*6356e834SBarry Smith           break;
165*6356e834SBarry Smith         case OPTION_REAL_ARRAY:
166*6356e834SBarry Smith           sprintf(value,"%g",((PetscReal*)PetscOptionsObject.next->data)[0]);
167*6356e834SBarry Smith           for (j=1; j<PetscOptionsObject.next->arraylength; j++) {
168*6356e834SBarry Smith             sprintf(tmp,"%g",((PetscReal*)PetscOptionsObject.next->data)[j]);
169*6356e834SBarry Smith             ierr = PetscStrcat(value,",");CHKERRQ(ierr);
170*6356e834SBarry Smith             ierr = PetscStrcat(value,tmp);CHKERRQ(ierr);
171*6356e834SBarry Smith           }
172*6356e834SBarry Smith           break;
173*6356e834SBarry Smith         case OPTION_LOGICAL:
174*6356e834SBarry Smith           sprintf(value,"%d",*(PetscInt*)PetscOptionsObject.next->data);
175*6356e834SBarry Smith           break;
176*6356e834SBarry Smith         case OPTION_LIST:
177*6356e834SBarry Smith           ierr = PetscStrcpy(value,*(char**)PetscOptionsObject.next->data);CHKERRQ(ierr);
178*6356e834SBarry Smith           break;
179*6356e834SBarry Smith         case OPTION_STRING: /* also handles string arrays */
180*6356e834SBarry Smith           ierr = PetscStrcpy(value,*(char**)PetscOptionsObject.next->data);CHKERRQ(ierr);
181*6356e834SBarry Smith           break;
182*6356e834SBarry Smith       }
183*6356e834SBarry Smith       ierr = PetscOptionsSetValue(option,value);CHKERRQ(ierr);
184*6356e834SBarry Smith     }
185*6356e834SBarry Smith     ierr   = PetscStrfree(PetscOptionsObject.next->text);CHKERRQ(ierr);
186*6356e834SBarry Smith     ierr   = PetscStrfree(PetscOptionsObject.next->option);CHKERRQ(ierr);
187*6356e834SBarry Smith     ierr   = PetscFree(PetscOptionsObject.next->man);CHKERRQ(ierr);
188*6356e834SBarry Smith     if (PetscOptionsObject.next->data)  {ierr = PetscFree(PetscOptionsObject.next->data);CHKERRQ(ierr);}
189*6356e834SBarry Smith     if (PetscOptionsObject.next->edata) {ierr = PetscFree(PetscOptionsObject.next->edata);CHKERRQ(ierr);}
190*6356e834SBarry Smith     last                    = PetscOptionsObject.next;
191*6356e834SBarry Smith     PetscOptionsObject.next = PetscOptionsObject.next->next;
192*6356e834SBarry Smith     ierr                    = PetscFree(last);CHKERRQ(ierr);
193*6356e834SBarry Smith   }
194*6356e834SBarry Smith   PetscOptionsObject.next = 0;
19553acd3b1SBarry Smith   PetscFunctionReturn(0);
19653acd3b1SBarry Smith }
19753acd3b1SBarry Smith 
19853acd3b1SBarry Smith #undef __FUNCT__
19953acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsEnum"
20053acd3b1SBarry Smith /*@C
20153acd3b1SBarry Smith    PetscOptionsEnum - Gets the enum value for a particular option in the database.
20253acd3b1SBarry Smith 
20353acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
20453acd3b1SBarry Smith 
20553acd3b1SBarry Smith    Input Parameters:
20653acd3b1SBarry Smith +  opt - option name
20753acd3b1SBarry Smith .  text - short string that describes the option
20853acd3b1SBarry Smith .  man - manual page with additional information on option
20953acd3b1SBarry Smith .  list - array containing the list of choices, followed by the enum name, followed by the enum prefix, followed by a null
21053acd3b1SBarry Smith -  defaultv - the default (current) value
21153acd3b1SBarry Smith 
21253acd3b1SBarry Smith    Output Parameter:
21353acd3b1SBarry Smith +  value - the  value to return
21453acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
21553acd3b1SBarry Smith 
21653acd3b1SBarry Smith    Level: beginner
21753acd3b1SBarry Smith 
21853acd3b1SBarry Smith    Concepts: options database
21953acd3b1SBarry Smith 
22053acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
22153acd3b1SBarry Smith 
22253acd3b1SBarry Smith           list is usually something like PCASMTypes or some other predefined list of enum names
22353acd3b1SBarry Smith 
22453acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
22553acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
22653acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
22753acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
22853acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
22953acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
23053acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
23153acd3b1SBarry Smith @*/
23253acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsEnum(const char opt[],const char text[],const char man[],const char **list,PetscEnum defaultv,PetscEnum *value,PetscTruth *set)
23353acd3b1SBarry Smith {
23453acd3b1SBarry Smith   PetscErrorCode ierr;
23553acd3b1SBarry Smith   PetscInt       ntext = 0;
23653acd3b1SBarry Smith 
23753acd3b1SBarry Smith   PetscFunctionBegin;
23853acd3b1SBarry Smith   while (list[ntext++]) {
23953acd3b1SBarry Smith     if (ntext > 50) SETERRQ(PETSC_ERR_ARG_WRONG,"List argument appears to be wrong or have more than 50 entries");
24053acd3b1SBarry Smith   }
24153acd3b1SBarry Smith   if (ntext < 3) SETERRQ(PETSC_ERR_ARG_WRONG,"List argument must have at least two entries: typename and type prefix");
24253acd3b1SBarry Smith   ntext -= 3;
24353acd3b1SBarry Smith   ierr = PetscOptionsEList(opt,text,man,list,ntext,list[defaultv],(PetscInt*)value,set);CHKERRQ(ierr);
24453acd3b1SBarry Smith   PetscFunctionReturn(0);
24553acd3b1SBarry Smith }
24653acd3b1SBarry Smith 
24753acd3b1SBarry Smith /* -------------------------------------------------------------------------------------------------------------*/
24853acd3b1SBarry Smith #undef __FUNCT__
24953acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsInt"
25053acd3b1SBarry Smith /*@C
25153acd3b1SBarry Smith    PetscOptionsInt - Gets the integer value for a particular option in the database.
25253acd3b1SBarry Smith 
25353acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
25453acd3b1SBarry Smith 
25553acd3b1SBarry Smith    Input Parameters:
25653acd3b1SBarry Smith +  opt - option name
25753acd3b1SBarry Smith .  text - short string that describes the option
25853acd3b1SBarry Smith .  man - manual page with additional information on option
25953acd3b1SBarry Smith -  defaultv - the default (current) value
26053acd3b1SBarry Smith 
26153acd3b1SBarry Smith    Output Parameter:
26253acd3b1SBarry Smith +  value - the integer value to return
26353acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
26453acd3b1SBarry Smith 
26553acd3b1SBarry Smith    Level: beginner
26653acd3b1SBarry Smith 
26753acd3b1SBarry Smith    Concepts: options database^has int
26853acd3b1SBarry Smith 
26953acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
27053acd3b1SBarry Smith 
27153acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
27253acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
27353acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
27453acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
27553acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
27653acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
27753acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
27853acd3b1SBarry Smith @*/
27953acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsInt(const char opt[],const char text[],const char man[],PetscInt defaultv,PetscInt *value,PetscTruth *set)
28053acd3b1SBarry Smith {
28153acd3b1SBarry Smith   PetscErrorCode ierr;
282*6356e834SBarry Smith   PetscOptions   amsopt;
28353acd3b1SBarry Smith 
28453acd3b1SBarry Smith   PetscFunctionBegin;
285*6356e834SBarry Smith   if (PetscOptionsPublishCount == 1) {
286*6356e834SBarry Smith     ierr = PetscOptionsCreate_Private(opt,text,man,OPTION_INT,&amsopt);CHKERRQ(ierr);
287*6356e834SBarry Smith     ierr = PetscMalloc(sizeof(PetscInt),&amsopt->data);CHKERRQ(ierr);
288*6356e834SBarry Smith     *(PetscInt*)amsopt->data = defaultv;
289*6356e834SBarry Smith   }
29053acd3b1SBarry Smith   ierr = PetscOptionsGetInt(PetscOptionsObject.prefix,opt,value,set);CHKERRQ(ierr);
29153acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
29253acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%d>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv,text,man);CHKERRQ(ierr);
29353acd3b1SBarry Smith   }
29453acd3b1SBarry Smith   PetscFunctionReturn(0);
29553acd3b1SBarry Smith }
29653acd3b1SBarry Smith 
29753acd3b1SBarry Smith #undef __FUNCT__
29853acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsString"
29953acd3b1SBarry Smith /*@C
30053acd3b1SBarry Smith    PetscOptionsString - Gets the string value for a particular option in the database.
30153acd3b1SBarry Smith 
30253acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
30353acd3b1SBarry Smith 
30453acd3b1SBarry Smith    Input Parameters:
30553acd3b1SBarry Smith +  opt - option name
30653acd3b1SBarry Smith .  text - short string that describes the option
30753acd3b1SBarry Smith .  man - manual page with additional information on option
30853acd3b1SBarry Smith -  defaultv - the default (current) value
30953acd3b1SBarry Smith 
31053acd3b1SBarry Smith    Output Parameter:
31153acd3b1SBarry Smith +  value - the value to return
31253acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
31353acd3b1SBarry Smith 
31453acd3b1SBarry Smith    Level: beginner
31553acd3b1SBarry Smith 
31653acd3b1SBarry Smith    Concepts: options database^has int
31753acd3b1SBarry Smith 
31853acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
31953acd3b1SBarry Smith 
32053acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
32153acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
32253acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
32353acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
32453acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
32553acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
32653acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
32753acd3b1SBarry Smith @*/
32853acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsString(const char opt[],const char text[],const char man[],const char defaultv[],char value[],size_t len,PetscTruth *set)
32953acd3b1SBarry Smith {
33053acd3b1SBarry Smith   PetscErrorCode ierr;
33153acd3b1SBarry Smith 
33253acd3b1SBarry Smith   PetscFunctionBegin;
33353acd3b1SBarry Smith   ierr = PetscOptionsGetString(PetscOptionsObject.prefix,opt,value,len,set);CHKERRQ(ierr);
33453acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
33553acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%s>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv,text,man);CHKERRQ(ierr);
33653acd3b1SBarry Smith   }
33753acd3b1SBarry Smith   PetscFunctionReturn(0);
33853acd3b1SBarry Smith }
33953acd3b1SBarry Smith 
34053acd3b1SBarry Smith /*
34153acd3b1SBarry Smith      Publishes an AMS double field (with the default value in it) and with a name
34253acd3b1SBarry Smith    given by the text string
34353acd3b1SBarry Smith */
34453acd3b1SBarry Smith #undef __FUNCT__
34553acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsReal"
34653acd3b1SBarry Smith /*@C
34753acd3b1SBarry Smith    PetscOptionsReal - Gets the PetscReal value for a particular option in the database.
34853acd3b1SBarry Smith 
34953acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
35053acd3b1SBarry Smith 
35153acd3b1SBarry Smith    Input Parameters:
35253acd3b1SBarry Smith +  opt - option name
35353acd3b1SBarry Smith .  text - short string that describes the option
35453acd3b1SBarry Smith .  man - manual page with additional information on option
35553acd3b1SBarry Smith -  defaultv - the default (current) value
35653acd3b1SBarry Smith 
35753acd3b1SBarry Smith    Output Parameter:
35853acd3b1SBarry Smith +  value - the value to return
35953acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
36053acd3b1SBarry Smith 
36153acd3b1SBarry Smith    Level: beginner
36253acd3b1SBarry Smith 
36353acd3b1SBarry Smith    Concepts: options database^has int
36453acd3b1SBarry Smith 
36553acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
36653acd3b1SBarry Smith 
36753acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
36853acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
36953acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
37053acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
37153acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
37253acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
37353acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
37453acd3b1SBarry Smith @*/
37553acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsReal(const char opt[],const char text[],const char man[],PetscReal defaultv,PetscReal *value,PetscTruth *set)
37653acd3b1SBarry Smith {
37753acd3b1SBarry Smith   PetscErrorCode ierr;
37853acd3b1SBarry Smith 
37953acd3b1SBarry Smith   PetscFunctionBegin;
38053acd3b1SBarry Smith   ierr = PetscOptionsGetReal(PetscOptionsObject.prefix,opt,value,set);CHKERRQ(ierr);
38153acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
38253acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%g>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv,text,man);CHKERRQ(ierr);
38353acd3b1SBarry Smith   }
38453acd3b1SBarry Smith   PetscFunctionReturn(0);
38553acd3b1SBarry Smith }
38653acd3b1SBarry Smith 
38753acd3b1SBarry Smith #undef __FUNCT__
38853acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsScalar"
38953acd3b1SBarry Smith /*@C
39053acd3b1SBarry Smith    PetscOptionsScalar - Gets the scalar value for a particular option in the database.
39153acd3b1SBarry Smith 
39253acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
39353acd3b1SBarry Smith 
39453acd3b1SBarry Smith    Input Parameters:
39553acd3b1SBarry Smith +  opt - option name
39653acd3b1SBarry Smith .  text - short string that describes the option
39753acd3b1SBarry Smith .  man - manual page with additional information on option
39853acd3b1SBarry Smith -  defaultv - the default (current) value
39953acd3b1SBarry Smith 
40053acd3b1SBarry Smith    Output Parameter:
40153acd3b1SBarry Smith +  value - the value to return
40253acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
40353acd3b1SBarry Smith 
40453acd3b1SBarry Smith    Level: beginner
40553acd3b1SBarry Smith 
40653acd3b1SBarry Smith    Concepts: options database^has int
40753acd3b1SBarry Smith 
40853acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
40953acd3b1SBarry Smith 
41053acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
41153acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
41253acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
41353acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
41453acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
41553acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
41653acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
41753acd3b1SBarry Smith @*/
41853acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsScalar(const char opt[],const char text[],const char man[],PetscScalar defaultv,PetscScalar *value,PetscTruth *set)
41953acd3b1SBarry Smith {
42053acd3b1SBarry Smith   PetscErrorCode ierr;
42153acd3b1SBarry Smith 
42253acd3b1SBarry Smith   PetscFunctionBegin;
42353acd3b1SBarry Smith #if !defined(PETSC_USE_COMPLEX)
42453acd3b1SBarry Smith   ierr = PetscOptionsReal(opt,text,man,defaultv,value,set);CHKERRQ(ierr);
42553acd3b1SBarry Smith #else
42653acd3b1SBarry Smith   ierr = PetscOptionsGetScalar(PetscOptionsObject.prefix,opt,value,set);CHKERRQ(ierr);
42753acd3b1SBarry Smith #endif
42853acd3b1SBarry Smith   PetscFunctionReturn(0);
42953acd3b1SBarry Smith }
43053acd3b1SBarry Smith 
43153acd3b1SBarry Smith /*
43253acd3b1SBarry Smith      Publishes an AMS logical field (with the default value in it) and with a name
43353acd3b1SBarry Smith    given by the text string
43453acd3b1SBarry Smith */
43553acd3b1SBarry Smith #undef __FUNCT__
43653acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsName"
43753acd3b1SBarry Smith /*@C
43853acd3b1SBarry Smith    PetscOptionsName - Determines if a particular option is in the database
43953acd3b1SBarry Smith 
44053acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
44153acd3b1SBarry Smith 
44253acd3b1SBarry Smith    Input Parameters:
44353acd3b1SBarry Smith +  opt - option name
44453acd3b1SBarry Smith .  text - short string that describes the option
44553acd3b1SBarry Smith -  man - manual page with additional information on option
44653acd3b1SBarry Smith 
44753acd3b1SBarry Smith    Output Parameter:
44853acd3b1SBarry Smith .  flg - PETSC_TRUE if found, else PETSC_FALSE
44953acd3b1SBarry Smith 
45053acd3b1SBarry Smith    Level: beginner
45153acd3b1SBarry Smith 
45253acd3b1SBarry Smith    Concepts: options database^has int
45353acd3b1SBarry Smith 
45453acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
45553acd3b1SBarry Smith 
45653acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
45753acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
45853acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
45953acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
46053acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
46153acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
46253acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
46353acd3b1SBarry Smith @*/
46453acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsName(const char opt[],const char text[],const char man[],PetscTruth *flg)
46553acd3b1SBarry Smith {
46653acd3b1SBarry Smith   PetscErrorCode ierr;
46753acd3b1SBarry Smith 
46853acd3b1SBarry Smith   PetscFunctionBegin;
46953acd3b1SBarry Smith   ierr = PetscOptionsHasName(PetscOptionsObject.prefix,opt,flg);CHKERRQ(ierr);
47053acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
47153acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
47253acd3b1SBarry Smith   }
47353acd3b1SBarry Smith   PetscFunctionReturn(0);
47453acd3b1SBarry Smith }
47553acd3b1SBarry Smith 
47653acd3b1SBarry Smith #undef __FUNCT__
47753acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsList"
47853acd3b1SBarry Smith /*@C
47953acd3b1SBarry Smith      PetscOptionsList - Puts a list of option values that a single one may be selected from
48053acd3b1SBarry Smith 
48153acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
48253acd3b1SBarry Smith 
48353acd3b1SBarry Smith    Input Parameters:
48453acd3b1SBarry Smith +  opt - option name
48553acd3b1SBarry Smith .  text - short string that describes the option
48653acd3b1SBarry Smith .  man - manual page with additional information on option
48753acd3b1SBarry Smith .  list - the possible choices
48853acd3b1SBarry Smith -  defaultv - the default (current) value
48953acd3b1SBarry Smith 
49053acd3b1SBarry Smith    Output Parameter:
49153acd3b1SBarry Smith +  value - the value to return
49253acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
49353acd3b1SBarry Smith 
49453acd3b1SBarry Smith    Level: intermediate
49553acd3b1SBarry Smith 
49653acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
49753acd3b1SBarry Smith 
49853acd3b1SBarry Smith    See PetscOptionsEList() for when the choices are given in a string array
49953acd3b1SBarry Smith 
50053acd3b1SBarry Smith    To get a listing of all currently specified options,
50153acd3b1SBarry Smith     see PetscOptionsPrint() or PetscOptionsGetAll()
50253acd3b1SBarry Smith 
50353acd3b1SBarry Smith    Concepts: options database^list
50453acd3b1SBarry Smith 
50553acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
50653acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
50753acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
50853acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
50953acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
51053acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
51153acd3b1SBarry Smith @*/
51253acd3b1SBarry 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)
51353acd3b1SBarry Smith {
51453acd3b1SBarry Smith   PetscErrorCode ierr;
51553acd3b1SBarry Smith 
51653acd3b1SBarry Smith   PetscFunctionBegin;
51753acd3b1SBarry Smith   ierr = PetscOptionsGetString(PetscOptionsObject.prefix,opt,value,len,set);CHKERRQ(ierr);
51853acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
51953acd3b1SBarry Smith     ierr = PetscFListPrintTypes(PetscOptionsObject.comm,stdout,PetscOptionsObject.prefix,opt,ltext,man,list);CHKERRQ(ierr);CHKERRQ(ierr);
52053acd3b1SBarry Smith   }
52153acd3b1SBarry Smith   PetscFunctionReturn(0);
52253acd3b1SBarry Smith }
52353acd3b1SBarry Smith 
52453acd3b1SBarry Smith #undef __FUNCT__
52553acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsEList"
52653acd3b1SBarry Smith /*@C
52753acd3b1SBarry Smith      PetscOptionsEList - Puts a list of option values that a single one may be selected from
52853acd3b1SBarry Smith 
52953acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
53053acd3b1SBarry Smith 
53153acd3b1SBarry Smith    Input Parameters:
53253acd3b1SBarry Smith +  opt - option name
53353acd3b1SBarry Smith .  ltext - short string that describes the option
53453acd3b1SBarry Smith .  man - manual page with additional information on option
53553acd3b1SBarry Smith .  list - the possible choices
53653acd3b1SBarry Smith .  ntext - number of choices
53753acd3b1SBarry Smith -  defaultv - the default (current) value
53853acd3b1SBarry Smith 
53953acd3b1SBarry Smith    Output Parameter:
54053acd3b1SBarry Smith +  value - the index of the value to return
54153acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
54253acd3b1SBarry Smith 
54353acd3b1SBarry Smith    Level: intermediate
54453acd3b1SBarry Smith 
54553acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
54653acd3b1SBarry Smith 
54753acd3b1SBarry Smith    See PetscOptionsList() for when the choices are given in a PetscFList()
54853acd3b1SBarry Smith 
54953acd3b1SBarry Smith    Concepts: options database^list
55053acd3b1SBarry Smith 
55153acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
55253acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
55353acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
55453acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
55553acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
55653acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
55753acd3b1SBarry Smith @*/
55853acd3b1SBarry 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)
55953acd3b1SBarry Smith {
56053acd3b1SBarry Smith   PetscErrorCode ierr;
56153acd3b1SBarry Smith   PetscInt       i;
56253acd3b1SBarry Smith 
56353acd3b1SBarry Smith   PetscFunctionBegin;
56453acd3b1SBarry Smith   ierr = PetscOptionsGetEList(PetscOptionsObject.prefix,opt,list,ntext,value,set);CHKERRQ(ierr);
56553acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
56653acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%s> (choose one of)",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv);CHKERRQ(ierr);
56753acd3b1SBarry Smith     for (i=0; i<ntext; i++){
56853acd3b1SBarry Smith       ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm," %s",list[i]);CHKERRQ(ierr);
56953acd3b1SBarry Smith     }
57053acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"\n");CHKERRQ(ierr);
57153acd3b1SBarry Smith   }
57253acd3b1SBarry Smith   PetscFunctionReturn(0);
57353acd3b1SBarry Smith }
57453acd3b1SBarry Smith 
57553acd3b1SBarry Smith #undef __FUNCT__
57653acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruthGroupBegin"
57753acd3b1SBarry Smith /*@C
57853acd3b1SBarry Smith      PetscOptionsTruthGroupBegin - First in a series of logical queries on the options database for
57953acd3b1SBarry Smith        which only a single value can be true.
58053acd3b1SBarry Smith 
58153acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
58253acd3b1SBarry Smith 
58353acd3b1SBarry Smith    Input Parameters:
58453acd3b1SBarry Smith +  opt - option name
58553acd3b1SBarry Smith .  text - short string that describes the option
58653acd3b1SBarry Smith -  man - manual page with additional information on option
58753acd3b1SBarry Smith 
58853acd3b1SBarry Smith    Output Parameter:
58953acd3b1SBarry Smith .  flg - whether that option was set or not
59053acd3b1SBarry Smith 
59153acd3b1SBarry Smith    Level: intermediate
59253acd3b1SBarry Smith 
59353acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
59453acd3b1SBarry Smith 
59553acd3b1SBarry Smith    Must be followed by 0 or more PetscOptionsTruthGroup()s and PetscOptionsTruthGroupEnd()
59653acd3b1SBarry Smith 
59753acd3b1SBarry Smith     Concepts: options database^logical group
59853acd3b1SBarry Smith 
59953acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
60053acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
60153acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
60253acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
60353acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
60453acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
60553acd3b1SBarry Smith @*/
60653acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruthGroupBegin(const char opt[],const char text[],const char man[],PetscTruth *flg)
60753acd3b1SBarry Smith {
60853acd3b1SBarry Smith   PetscErrorCode ierr;
60953acd3b1SBarry Smith 
61053acd3b1SBarry Smith   PetscFunctionBegin;
61153acd3b1SBarry Smith   ierr = PetscOptionsHasName(PetscOptionsObject.prefix,opt,flg);CHKERRQ(ierr);
61253acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
61353acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  Pick at most one of -------------\n");CHKERRQ(ierr);
61453acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"    -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
61553acd3b1SBarry Smith   }
61653acd3b1SBarry Smith   PetscFunctionReturn(0);
61753acd3b1SBarry Smith }
61853acd3b1SBarry Smith 
61953acd3b1SBarry Smith #undef __FUNCT__
62053acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruthGroup"
62153acd3b1SBarry Smith /*@C
62253acd3b1SBarry Smith      PetscOptionsTruthGroup - One in a series of logical queries on the options database for
62353acd3b1SBarry Smith        which only a single value can be true.
62453acd3b1SBarry Smith 
62553acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
62653acd3b1SBarry Smith 
62753acd3b1SBarry Smith    Input Parameters:
62853acd3b1SBarry Smith +  opt - option name
62953acd3b1SBarry Smith .  text - short string that describes the option
63053acd3b1SBarry Smith -  man - manual page with additional information on option
63153acd3b1SBarry Smith 
63253acd3b1SBarry Smith    Output Parameter:
63353acd3b1SBarry Smith .  flg - PETSC_TRUE if found, else PETSC_FALSE
63453acd3b1SBarry Smith 
63553acd3b1SBarry Smith    Level: intermediate
63653acd3b1SBarry Smith 
63753acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
63853acd3b1SBarry Smith 
63953acd3b1SBarry Smith    Must follow a PetscOptionsTruthGroupBegin() and preceded a PetscOptionsTruthGroupEnd()
64053acd3b1SBarry Smith 
64153acd3b1SBarry Smith     Concepts: options database^logical group
64253acd3b1SBarry Smith 
64353acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
64453acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
64553acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
64653acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
64753acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
64853acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
64953acd3b1SBarry Smith @*/
65053acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruthGroup(const char opt[],const char text[],const char man[],PetscTruth *flg)
65153acd3b1SBarry Smith {
65253acd3b1SBarry Smith   PetscErrorCode ierr;
65353acd3b1SBarry Smith 
65453acd3b1SBarry Smith   PetscFunctionBegin;
65553acd3b1SBarry Smith   ierr = PetscOptionsHasName(PetscOptionsObject.prefix,opt,flg);CHKERRQ(ierr);
65653acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
65753acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"    -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
65853acd3b1SBarry Smith   }
65953acd3b1SBarry Smith   PetscFunctionReturn(0);
66053acd3b1SBarry Smith }
66153acd3b1SBarry Smith 
66253acd3b1SBarry Smith #undef __FUNCT__
66353acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruthGroupEnd"
66453acd3b1SBarry Smith /*@C
66553acd3b1SBarry Smith      PetscOptionsTruthGroupEnd - Last in a series of logical queries on the options database for
66653acd3b1SBarry Smith        which only a single value can be true.
66753acd3b1SBarry Smith 
66853acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
66953acd3b1SBarry Smith 
67053acd3b1SBarry Smith    Input Parameters:
67153acd3b1SBarry Smith +  opt - option name
67253acd3b1SBarry Smith .  text - short string that describes the option
67353acd3b1SBarry Smith -  man - manual page with additional information on option
67453acd3b1SBarry Smith 
67553acd3b1SBarry Smith    Output Parameter:
67653acd3b1SBarry Smith .  flg - PETSC_TRUE if found, else PETSC_FALSE
67753acd3b1SBarry Smith 
67853acd3b1SBarry Smith    Level: intermediate
67953acd3b1SBarry Smith 
68053acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
68153acd3b1SBarry Smith 
68253acd3b1SBarry Smith    Must follow a PetscOptionsTruthGroupBegin()
68353acd3b1SBarry Smith 
68453acd3b1SBarry Smith     Concepts: options database^logical group
68553acd3b1SBarry Smith 
68653acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
68753acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
68853acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
68953acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
69053acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
69153acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
69253acd3b1SBarry Smith @*/
69353acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruthGroupEnd(const char opt[],const char text[],const char man[],PetscTruth *flg)
69453acd3b1SBarry Smith {
69553acd3b1SBarry Smith   PetscErrorCode ierr;
69653acd3b1SBarry Smith 
69753acd3b1SBarry Smith   PetscFunctionBegin;
69853acd3b1SBarry Smith   ierr = PetscOptionsHasName(PetscOptionsObject.prefix,opt,flg);CHKERRQ(ierr);
69953acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
70053acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"    -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
70153acd3b1SBarry Smith   }
70253acd3b1SBarry Smith   PetscFunctionReturn(0);
70353acd3b1SBarry Smith }
70453acd3b1SBarry Smith 
70553acd3b1SBarry Smith #undef __FUNCT__
70653acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruth"
70753acd3b1SBarry Smith /*@C
70853acd3b1SBarry Smith    PetscOptionsTruth - Determines if a particular option is in the database with a true or false
70953acd3b1SBarry Smith 
71053acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
71153acd3b1SBarry Smith 
71253acd3b1SBarry Smith    Input Parameters:
71353acd3b1SBarry Smith +  opt - option name
71453acd3b1SBarry Smith .  text - short string that describes the option
71553acd3b1SBarry Smith -  man - manual page with additional information on option
71653acd3b1SBarry Smith 
71753acd3b1SBarry Smith    Output Parameter:
71853acd3b1SBarry Smith .  flg - PETSC_TRUE or PETSC_FALSE
71953acd3b1SBarry Smith .  set - PETSC_TRUE if found, else PETSC_FALSE
72053acd3b1SBarry Smith 
72153acd3b1SBarry Smith    Level: beginner
72253acd3b1SBarry Smith 
72353acd3b1SBarry Smith    Concepts: options database^logical
72453acd3b1SBarry Smith 
72553acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
72653acd3b1SBarry Smith 
72753acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
72853acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
72953acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
73053acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
73153acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
73253acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
73353acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
73453acd3b1SBarry Smith @*/
73553acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruth(const char opt[],const char text[],const char man[],PetscTruth deflt,PetscTruth *flg,PetscTruth *set)
73653acd3b1SBarry Smith {
73753acd3b1SBarry Smith   PetscErrorCode ierr;
73853acd3b1SBarry Smith   PetscTruth     iset;
73953acd3b1SBarry Smith 
74053acd3b1SBarry Smith   PetscFunctionBegin;
74153acd3b1SBarry Smith   ierr = PetscOptionsGetTruth(PetscOptionsObject.prefix,opt,flg,&iset);CHKERRQ(ierr);
74253acd3b1SBarry Smith   if (!iset) {
74353acd3b1SBarry Smith     if (flg) *flg = deflt;
74453acd3b1SBarry Smith   }
74553acd3b1SBarry Smith   if (set) *set = iset;
74653acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
74753acd3b1SBarry Smith     const char *v = PetscTruths[deflt];
74853acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s: <%s> %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,v,text,man);CHKERRQ(ierr);
74953acd3b1SBarry Smith   }
75053acd3b1SBarry Smith   PetscFunctionReturn(0);
75153acd3b1SBarry Smith }
75253acd3b1SBarry Smith 
75353acd3b1SBarry Smith #undef __FUNCT__
75453acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsRealArray"
75553acd3b1SBarry Smith /*@C
75653acd3b1SBarry Smith    PetscOptionsRealArray - Gets an array of double values for a particular
75753acd3b1SBarry Smith    option in the database. The values must be separated with commas with
75853acd3b1SBarry Smith    no intervening spaces.
75953acd3b1SBarry Smith 
76053acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
76153acd3b1SBarry Smith 
76253acd3b1SBarry Smith    Input Parameters:
76353acd3b1SBarry Smith +  opt - the option one is seeking
76453acd3b1SBarry Smith .  text - short string describing option
76553acd3b1SBarry Smith .  man - manual page for option
76653acd3b1SBarry Smith -  nmax - maximum number of values
76753acd3b1SBarry Smith 
76853acd3b1SBarry Smith    Output Parameter:
76953acd3b1SBarry Smith +  value - location to copy values
77053acd3b1SBarry Smith .  nmax - actual number of values found
77153acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
77253acd3b1SBarry Smith 
77353acd3b1SBarry Smith    Level: beginner
77453acd3b1SBarry Smith 
77553acd3b1SBarry Smith    Notes:
77653acd3b1SBarry Smith    The user should pass in an array of doubles
77753acd3b1SBarry Smith 
77853acd3b1SBarry Smith    Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
77953acd3b1SBarry Smith 
78053acd3b1SBarry Smith    Concepts: options database^array of strings
78153acd3b1SBarry Smith 
78253acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
78353acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
78453acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
78553acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
78653acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
78753acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
78853acd3b1SBarry Smith @*/
78953acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsRealArray(const char opt[],const char text[],const char man[],PetscReal value[],PetscInt *n,PetscTruth *set)
79053acd3b1SBarry Smith {
79153acd3b1SBarry Smith   PetscErrorCode ierr;
79253acd3b1SBarry Smith   PetscInt       i;
79353acd3b1SBarry Smith 
79453acd3b1SBarry Smith   PetscFunctionBegin;
79553acd3b1SBarry Smith   ierr = PetscOptionsGetRealArray(PetscOptionsObject.prefix,opt,value,n,set);CHKERRQ(ierr);
79653acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
79753acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%g",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,value[0]);CHKERRQ(ierr);
79853acd3b1SBarry Smith     for (i=1; i<*n; i++) {
79953acd3b1SBarry Smith       ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,",%g",value[i]);CHKERRQ(ierr);
80053acd3b1SBarry Smith     }
80153acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,">: %s (%s)\n",text,man);CHKERRQ(ierr);
80253acd3b1SBarry Smith   }
80353acd3b1SBarry Smith   PetscFunctionReturn(0);
80453acd3b1SBarry Smith }
80553acd3b1SBarry Smith 
80653acd3b1SBarry Smith 
80753acd3b1SBarry Smith #undef __FUNCT__
80853acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsIntArray"
80953acd3b1SBarry Smith /*@C
81053acd3b1SBarry Smith    PetscOptionsIntArray - Gets an array of integers for a particular
81153acd3b1SBarry Smith    option in the database. The values must be separated with commas with
81253acd3b1SBarry Smith    no intervening spaces.
81353acd3b1SBarry Smith 
81453acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
81553acd3b1SBarry Smith 
81653acd3b1SBarry Smith    Input Parameters:
81753acd3b1SBarry Smith +  opt - the option one is seeking
81853acd3b1SBarry Smith .  text - short string describing option
81953acd3b1SBarry Smith .  man - manual page for option
82053acd3b1SBarry Smith -  nmax - maximum number of values
82153acd3b1SBarry Smith 
82253acd3b1SBarry Smith    Output Parameter:
82353acd3b1SBarry Smith +  value - location to copy values
82453acd3b1SBarry Smith .  nmax - actual number of values found
82553acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
82653acd3b1SBarry Smith 
82753acd3b1SBarry Smith    Level: beginner
82853acd3b1SBarry Smith 
82953acd3b1SBarry Smith    Notes:
83053acd3b1SBarry Smith    The user should pass in an array of integers
83153acd3b1SBarry Smith 
83253acd3b1SBarry Smith    Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
83353acd3b1SBarry Smith 
83453acd3b1SBarry Smith    Concepts: options database^array of strings
83553acd3b1SBarry Smith 
83653acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
83753acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
83853acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
83953acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
84053acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
84153acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList(), PetscOptionsRealArray()
84253acd3b1SBarry Smith @*/
84353acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsIntArray(const char opt[],const char text[],const char man[],PetscInt value[],PetscInt *n,PetscTruth *set)
84453acd3b1SBarry Smith {
84553acd3b1SBarry Smith   PetscErrorCode ierr;
84653acd3b1SBarry Smith   PetscInt       i;
84753acd3b1SBarry Smith 
84853acd3b1SBarry Smith   PetscFunctionBegin;
84953acd3b1SBarry Smith   ierr = PetscOptionsGetIntArray(PetscOptionsObject.prefix,opt,value,n,set);CHKERRQ(ierr);
85053acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
85153acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%d",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,value[0]);CHKERRQ(ierr);
85253acd3b1SBarry Smith     for (i=1; i<*n; i++) {
85353acd3b1SBarry Smith       ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,",%d",value[i]);CHKERRQ(ierr);
85453acd3b1SBarry Smith     }
85553acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,">: %s (%s)\n",text,man);CHKERRQ(ierr);
85653acd3b1SBarry Smith   }
85753acd3b1SBarry Smith   PetscFunctionReturn(0);
85853acd3b1SBarry Smith }
85953acd3b1SBarry Smith 
86053acd3b1SBarry Smith #undef __FUNCT__
86153acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsStringArray"
86253acd3b1SBarry Smith /*@C
86353acd3b1SBarry Smith    PetscOptionsStringArray - Gets an array of string values for a particular
86453acd3b1SBarry Smith    option in the database. The values must be separated with commas with
86553acd3b1SBarry Smith    no intervening spaces.
86653acd3b1SBarry Smith 
86753acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
86853acd3b1SBarry Smith 
86953acd3b1SBarry Smith    Input Parameters:
87053acd3b1SBarry Smith +  opt - the option one is seeking
87153acd3b1SBarry Smith .  text - short string describing option
87253acd3b1SBarry Smith .  man - manual page for option
87353acd3b1SBarry Smith -  nmax - maximum number of strings
87453acd3b1SBarry Smith 
87553acd3b1SBarry Smith    Output Parameter:
87653acd3b1SBarry Smith +  value - location to copy strings
87753acd3b1SBarry Smith .  nmax - actual number of strings found
87853acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
87953acd3b1SBarry Smith 
88053acd3b1SBarry Smith    Level: beginner
88153acd3b1SBarry Smith 
88253acd3b1SBarry Smith    Notes:
88353acd3b1SBarry Smith    The user should pass in an array of pointers to char, to hold all the
88453acd3b1SBarry Smith    strings returned by this function.
88553acd3b1SBarry Smith 
88653acd3b1SBarry Smith    The user is responsible for deallocating the strings that are
88753acd3b1SBarry Smith    returned. The Fortran interface for this routine is not supported.
88853acd3b1SBarry Smith 
88953acd3b1SBarry Smith    Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
89053acd3b1SBarry Smith 
89153acd3b1SBarry Smith    Concepts: options database^array of strings
89253acd3b1SBarry Smith 
89353acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
89453acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
89553acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
89653acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
89753acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
89853acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
89953acd3b1SBarry Smith @*/
90053acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsStringArray(const char opt[],const char text[],const char man[],char *value[],PetscInt *nmax,PetscTruth *set)
90153acd3b1SBarry Smith {
90253acd3b1SBarry Smith   PetscErrorCode ierr;
90353acd3b1SBarry Smith 
90453acd3b1SBarry Smith   PetscFunctionBegin;
90553acd3b1SBarry Smith   ierr = PetscOptionsGetStringArray(PetscOptionsObject.prefix,opt,value,nmax,set);CHKERRQ(ierr);
90653acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
90753acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <string1,string2,...>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
90853acd3b1SBarry Smith   }
90953acd3b1SBarry Smith   PetscFunctionReturn(0);
91053acd3b1SBarry Smith }
91153acd3b1SBarry Smith 
91253acd3b1SBarry Smith 
91353acd3b1SBarry Smith #undef __FUNCT__
91453acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsHead"
91553acd3b1SBarry Smith /*@C
91653acd3b1SBarry Smith      PetscOptionsHead - Puts a heading before list any more published options. Used, for example,
91753acd3b1SBarry Smith             in KSPSetFromOptions_GMRES().
91853acd3b1SBarry Smith 
91953acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
92053acd3b1SBarry Smith 
92153acd3b1SBarry Smith    Input Parameter:
92253acd3b1SBarry Smith .   head - the heading text
92353acd3b1SBarry Smith 
92453acd3b1SBarry Smith 
92553acd3b1SBarry Smith    Level: intermediate
92653acd3b1SBarry Smith 
92753acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
92853acd3b1SBarry Smith 
92953acd3b1SBarry Smith           Must be followed by a call to PetscOptionsTail() in the same function.
93053acd3b1SBarry Smith 
93153acd3b1SBarry Smith    Concepts: options database^subheading
93253acd3b1SBarry Smith 
93353acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
93453acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
93553acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
93653acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
93753acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
93853acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
93953acd3b1SBarry Smith @*/
94053acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsHead(const char head[])
94153acd3b1SBarry Smith {
94253acd3b1SBarry Smith   PetscErrorCode ierr;
94353acd3b1SBarry Smith 
94453acd3b1SBarry Smith   PetscFunctionBegin;
94553acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
94653acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  %s\n",head);CHKERRQ(ierr);
94753acd3b1SBarry Smith   }
94853acd3b1SBarry Smith   PetscFunctionReturn(0);
94953acd3b1SBarry Smith }
95053acd3b1SBarry Smith 
95153acd3b1SBarry Smith 
95253acd3b1SBarry Smith 
95353acd3b1SBarry Smith 
95453acd3b1SBarry Smith 
95553acd3b1SBarry Smith 
956