xref: /petsc/src/sys/objects/aoptions.c (revision b52f573bf7dd30aec2f45ea71ed0f119e1fe824d)
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;
296356e834SBarry Smith   char         *man;
3053acd3b1SBarry Smith   int          arraylength;
3153acd3b1SBarry Smith   PetscTruth   set;
3253acd3b1SBarry Smith   OptionType   type;
3353acd3b1SBarry Smith   PetscOptions next;
3453acd3b1SBarry Smith };
3553acd3b1SBarry Smith 
3661b37b28SSatish Balay typedef struct _p_OptionsHelp* OptionsHelp;
3761b37b28SSatish Balay struct _p_OptionsHelp {
3861b37b28SSatish Balay   char        *prefix;
3961b37b28SSatish Balay   char        *title;
4061b37b28SSatish Balay   char        *mansec;
4161b37b28SSatish Balay   OptionsHelp next;
4261b37b28SSatish Balay };
4361b37b28SSatish Balay 
4453acd3b1SBarry Smith static struct {
4553acd3b1SBarry Smith   PetscOptions    next;
4653acd3b1SBarry Smith   char            *prefix,*mprefix;
4753acd3b1SBarry Smith   char            *title;
4853acd3b1SBarry Smith   MPI_Comm        comm;
4961b37b28SSatish Balay   PetscTruth      printhelp,changedmethod,alreadyprinted;
5061b37b28SSatish Balay   OptionsHelp     help;
5153acd3b1SBarry Smith }                                   PetscOptionsObject;
5253acd3b1SBarry Smith PetscInt                            PetscOptionsPublishCount = 0;
5353acd3b1SBarry Smith 
5461b37b28SSatish Balay 
5561b37b28SSatish Balay #undef __FUNCT__
5661b37b28SSatish Balay #define __FUNCT__ "PetscOptionsHelpAddList"
5761b37b28SSatish Balay PetscErrorCode PetscOptionsHelpAddList(const char prefix[],const char title[],const char mansec[])
5861b37b28SSatish Balay {
5961b37b28SSatish Balay   int          ierr;
6061b37b28SSatish Balay   OptionsHelp  newhelp;
6161b37b28SSatish Balay   PetscFunctionBegin;
6261b37b28SSatish Balay   ierr = PetscNew(struct _p_OptionsHelp,&newhelp);CHKERRQ(ierr);
6361b37b28SSatish Balay   ierr = PetscStrallocpy(prefix,&newhelp->prefix);CHKERRQ(ierr);
6461b37b28SSatish Balay   ierr = PetscStrallocpy(title,&newhelp->title);CHKERRQ(ierr);
6561b37b28SSatish Balay   ierr = PetscStrallocpy(mansec,&newhelp->mansec);CHKERRQ(ierr);
6661b37b28SSatish Balay   newhelp->next = 0;
6761b37b28SSatish Balay 
6861b37b28SSatish Balay   if (!PetscOptionsObject.help) {
6961b37b28SSatish Balay     PetscOptionsObject.help = newhelp;
7061b37b28SSatish Balay   } else {
7161b37b28SSatish Balay     newhelp->next = PetscOptionsObject.help;
7261b37b28SSatish Balay     PetscOptionsObject.help = newhelp;
7361b37b28SSatish Balay   }
7461b37b28SSatish Balay   PetscFunctionReturn(0);
7561b37b28SSatish Balay }
7661b37b28SSatish Balay 
7761b37b28SSatish Balay #undef __FUNCT__
7861b37b28SSatish Balay #define __FUNCT__ "PetscOptionsHelpDestroyList"
7961b37b28SSatish Balay PetscErrorCode PetscOptionsHelpDestroyList(void)
8061b37b28SSatish Balay {
8161b37b28SSatish Balay   PetscErrorCode ierr;
8261b37b28SSatish Balay   OptionsHelp    help = PetscOptionsObject.help, next;
8361b37b28SSatish Balay 
8461b37b28SSatish Balay   PetscFunctionBegin;
8561b37b28SSatish Balay   while (help) {
8661b37b28SSatish Balay     next = help->next;
8761b37b28SSatish Balay     ierr = PetscStrfree(help->prefix);CHKERRQ(ierr);
8861b37b28SSatish Balay     ierr = PetscStrfree(help->title);CHKERRQ(ierr);
8961b37b28SSatish Balay     ierr = PetscStrfree(help->mansec);CHKERRQ(ierr);
9061b37b28SSatish Balay     ierr = PetscFree(help);CHKERRQ(ierr);
9161b37b28SSatish Balay     help = next;
9261b37b28SSatish Balay   }
9361b37b28SSatish Balay   PetscFunctionReturn(0);
9461b37b28SSatish Balay }
9561b37b28SSatish Balay 
9661b37b28SSatish Balay 
9761b37b28SSatish Balay #undef __FUNCT__
9861b37b28SSatish Balay #define __FUNCT__ "PetscOptionsHelpFindList"
9961b37b28SSatish Balay PetscErrorCode PetscOptionsHelpFindList(const char prefix[],const char title[],const char mansec[],PetscTruth *flg)
10061b37b28SSatish Balay {
10161b37b28SSatish Balay   PetscErrorCode ierr;
10261b37b28SSatish Balay   PetscTruth     flg1,flg2,flg3;
10361b37b28SSatish Balay   OptionsHelp help = PetscOptionsObject.help;
1042c33bbaeSSatish Balay   PetscFunctionBegin;
10561b37b28SSatish Balay   while (help) {
10661b37b28SSatish Balay     ierr = PetscStrcmp(help->prefix,prefix,&flg1);CHKERRQ(ierr);
10761b37b28SSatish Balay     ierr = PetscStrcmp(help->title,title,&flg2);CHKERRQ(ierr);
10861b37b28SSatish Balay     ierr = PetscStrcmp(help->mansec,mansec,&flg3);CHKERRQ(ierr);
10961b37b28SSatish Balay     if (flg1 && flg2 && flg3) {
110115b5ef7SSatish Balay       *flg = PETSC_TRUE;
11161b37b28SSatish Balay       break;
11261b37b28SSatish Balay     }
11361b37b28SSatish Balay     help = help->next;
11461b37b28SSatish Balay   }
11561b37b28SSatish Balay   PetscFunctionReturn(0);
11661b37b28SSatish Balay 
11761b37b28SSatish Balay }
11861b37b28SSatish Balay 
11961b37b28SSatish Balay #undef __FUNCT__
12061b37b28SSatish Balay #define __FUNCT__ "PetscOptionsHelpCheckAddList"
12161b37b28SSatish Balay PetscErrorCode PetscOptionsHelpCheckAddList(const char prefix[],const char title[],const char mansec[],PetscTruth *flg)
12261b37b28SSatish Balay {
12361b37b28SSatish Balay   PetscFunctionBegin;
12461b37b28SSatish Balay   PetscOptionsHelpFindList(prefix,title,mansec,flg);
12561b37b28SSatish Balay   if (!(*flg)) PetscOptionsHelpAddList(prefix,title,mansec);
12661b37b28SSatish Balay   PetscFunctionReturn(0);
12761b37b28SSatish Balay }
12861b37b28SSatish Balay 
12953acd3b1SBarry Smith #undef __FUNCT__
13053acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsBegin_Private"
13153acd3b1SBarry Smith /*
13253acd3b1SBarry Smith     Handles setting up the data structure in a call to PetscOptionsBegin()
13353acd3b1SBarry Smith */
13453acd3b1SBarry Smith PetscErrorCode PetscOptionsBegin_Private(MPI_Comm comm,const char prefix[],const char title[],const char mansec[])
13553acd3b1SBarry Smith {
13653acd3b1SBarry Smith   PetscErrorCode ierr;
13753acd3b1SBarry Smith 
13853acd3b1SBarry Smith   PetscFunctionBegin;
13953acd3b1SBarry Smith   PetscOptionsObject.next          = 0;
14053acd3b1SBarry Smith   PetscOptionsObject.comm          = comm;
1416356e834SBarry Smith   PetscOptionsObject.changedmethod = PETSC_FALSE;
14253acd3b1SBarry Smith   ierr = PetscStrallocpy(prefix,&PetscOptionsObject.prefix);CHKERRQ(ierr);
14353acd3b1SBarry Smith   ierr = PetscStrallocpy(title,&PetscOptionsObject.title);CHKERRQ(ierr);
14453acd3b1SBarry Smith 
14553acd3b1SBarry Smith   ierr = PetscOptionsHasName(PETSC_NULL,"-help",&PetscOptionsObject.printhelp);CHKERRQ(ierr);
14653acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
14761b37b28SSatish Balay     ierr = PetscOptionsHelpCheckAddList(prefix,title,mansec,&PetscOptionsObject.alreadyprinted);
14861b37b28SSatish Balay     if (!PetscOptionsObject.alreadyprinted) {
14953acd3b1SBarry Smith       ierr = (*PetscHelpPrintf)(comm,"%s -------------------------------------------------\n",title);CHKERRQ(ierr);
15053acd3b1SBarry Smith     }
15161b37b28SSatish Balay   }
15253acd3b1SBarry Smith   PetscFunctionReturn(0);
15353acd3b1SBarry Smith }
15453acd3b1SBarry Smith 
15553acd3b1SBarry Smith /*
15653acd3b1SBarry Smith      Handles adding another option to the list of options within this particular PetscOptionsBegin() PetscOptionsEnd()
15753acd3b1SBarry Smith */
15853acd3b1SBarry Smith #undef __FUNCT__
15953acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsCreate_Private"
1606356e834SBarry Smith static int PetscOptionsCreate_Private(const char opt[],const char text[],const char man[],OptionType t,PetscOptions *amsopt)
16153acd3b1SBarry Smith {
16253acd3b1SBarry Smith   int          ierr;
16353acd3b1SBarry Smith   PetscOptions next;
16453acd3b1SBarry Smith 
16553acd3b1SBarry Smith   PetscFunctionBegin;
16653acd3b1SBarry Smith   ierr             = PetscNew(struct _p_Options,amsopt);CHKERRQ(ierr);
16753acd3b1SBarry Smith   (*amsopt)->next  = 0;
16853acd3b1SBarry Smith   (*amsopt)->set   = PETSC_FALSE;
1696356e834SBarry Smith   (*amsopt)->type  = t;
17053acd3b1SBarry Smith   (*amsopt)->data  = 0;
17153acd3b1SBarry Smith   (*amsopt)->edata = 0;
17261b37b28SSatish Balay 
17353acd3b1SBarry Smith   ierr             = PetscStrallocpy(text,&(*amsopt)->text);CHKERRQ(ierr);
17453acd3b1SBarry Smith   ierr             = PetscStrallocpy(opt,&(*amsopt)->option);CHKERRQ(ierr);
1756356e834SBarry Smith   ierr             = PetscStrallocpy(man,&(*amsopt)->man);CHKERRQ(ierr);
17653acd3b1SBarry Smith 
17753acd3b1SBarry Smith   if (!PetscOptionsObject.next) {
17853acd3b1SBarry Smith     PetscOptionsObject.next = *amsopt;
17953acd3b1SBarry Smith   } else {
18053acd3b1SBarry Smith     next = PetscOptionsObject.next;
18153acd3b1SBarry Smith     while (next->next) next = next->next;
18253acd3b1SBarry Smith     next->next = *amsopt;
18353acd3b1SBarry Smith   }
18453acd3b1SBarry Smith   PetscFunctionReturn(0);
18553acd3b1SBarry Smith }
18653acd3b1SBarry Smith 
18753acd3b1SBarry Smith #undef __FUNCT__
1886356e834SBarry Smith #define __FUNCT__ "PetscOptionsGetFromGui"
189b47fd4b1SSatish Balay PetscErrorCode PetscOptionsGetFromGUI()
1906356e834SBarry Smith {
1916356e834SBarry Smith   PetscErrorCode ierr;
1926356e834SBarry Smith   PetscOptions   next = PetscOptionsObject.next;
1936356e834SBarry Smith   char           str[512];
1946356e834SBarry Smith 
1956356e834SBarry Smith   ierr = (*PetscPrintf)(PetscOptionsObject.comm,"%s -------------------------------------------------\n",PetscOptionsObject.title);CHKERRQ(ierr);
1966356e834SBarry Smith   while (next) {
1976356e834SBarry Smith     switch (next->type) {
1986356e834SBarry Smith       case OPTION_HEAD:
1996356e834SBarry Smith         break;
2006356e834SBarry Smith       case OPTION_INT:
2016356e834SBarry 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);
2026356e834SBarry Smith         scanf("%s\n",str);
2036356e834SBarry Smith         if (str[0] != '\n') {
204b432afdaSMatthew Knepley           printf("changing value\n");
2056356e834SBarry Smith         }
2066356e834SBarry Smith         break;
207b432afdaSMatthew Knepley     default:
208b432afdaSMatthew Knepley       break;
2096356e834SBarry Smith     }
2106356e834SBarry Smith     next = next->next;
2116356e834SBarry Smith   }
2126356e834SBarry Smith   PetscFunctionReturn(0);
2136356e834SBarry Smith }
2146356e834SBarry Smith 
2156356e834SBarry Smith #undef __FUNCT__
21653acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsEnd_Private"
21753acd3b1SBarry Smith PetscErrorCode PetscOptionsEnd_Private(void)
21853acd3b1SBarry Smith {
21953acd3b1SBarry Smith   PetscErrorCode ierr;
2206356e834SBarry Smith   PetscOptions   last;
2216356e834SBarry Smith   char           option[256],value[1024],tmp[32];
2226356e834SBarry Smith   PetscInt       j;
22353acd3b1SBarry Smith 
22453acd3b1SBarry Smith   PetscFunctionBegin;
2256356e834SBarry Smith 
226265dcc83SBarry Smith   /*  if (PetscOptionsObject.next) {
2276356e834SBarry Smith     ierr = PetscOptionsGetFromGUI();
228265dcc83SBarry Smith     }*/
2296356e834SBarry Smith 
23053acd3b1SBarry Smith   ierr = PetscStrfree(PetscOptionsObject.title);CHKERRQ(ierr); PetscOptionsObject.title  = 0;
23153acd3b1SBarry Smith   ierr = PetscStrfree(PetscOptionsObject.prefix);CHKERRQ(ierr); PetscOptionsObject.prefix = 0;
2326356e834SBarry Smith 
2336356e834SBarry Smith   /* reset counter to -2; this updates the screen with the new options for the selected method */
2346356e834SBarry Smith   if (PetscOptionsObject.changedmethod) PetscOptionsPublishCount = -2;
23561b37b28SSatish Balay   /* reset alreadyprinted flag */
23661b37b28SSatish Balay   PetscOptionsObject.alreadyprinted = PETSC_FALSE;
2376356e834SBarry Smith 
2386356e834SBarry Smith   while (PetscOptionsObject.next) {
2396356e834SBarry Smith     if (PetscOptionsObject.next->set) {
2406356e834SBarry Smith       if (PetscOptionsObject.prefix) {
2416356e834SBarry Smith         ierr = PetscStrcpy(option,"-");CHKERRQ(ierr);
2426356e834SBarry Smith         ierr = PetscStrcat(option,PetscOptionsObject.prefix);CHKERRQ(ierr);
2436356e834SBarry Smith         ierr = PetscStrcat(option,PetscOptionsObject.next->option+1);CHKERRQ(ierr);
2446356e834SBarry Smith       } else {
2456356e834SBarry Smith         ierr = PetscStrcpy(option,PetscOptionsObject.next->option);CHKERRQ(ierr);
2466356e834SBarry Smith       }
2476356e834SBarry Smith 
2486356e834SBarry Smith       switch (PetscOptionsObject.next->type) {
2496356e834SBarry Smith         case OPTION_HEAD:
2506356e834SBarry Smith           break;
2516356e834SBarry Smith         case OPTION_INT:
2526356e834SBarry Smith           sprintf(value,"%d",*(PetscInt*)PetscOptionsObject.next->data);
2536356e834SBarry Smith           break;
2546356e834SBarry Smith         case OPTION_REAL:
2556356e834SBarry Smith           sprintf(value,"%g",*(PetscReal*)PetscOptionsObject.next->data);
2566356e834SBarry Smith           break;
2576356e834SBarry Smith         case OPTION_REAL_ARRAY:
2586356e834SBarry Smith           sprintf(value,"%g",((PetscReal*)PetscOptionsObject.next->data)[0]);
2596356e834SBarry Smith           for (j=1; j<PetscOptionsObject.next->arraylength; j++) {
2606356e834SBarry Smith             sprintf(tmp,"%g",((PetscReal*)PetscOptionsObject.next->data)[j]);
2616356e834SBarry Smith             ierr = PetscStrcat(value,",");CHKERRQ(ierr);
2626356e834SBarry Smith             ierr = PetscStrcat(value,tmp);CHKERRQ(ierr);
2636356e834SBarry Smith           }
2646356e834SBarry Smith           break;
2656356e834SBarry Smith         case OPTION_LOGICAL:
2666356e834SBarry Smith           sprintf(value,"%d",*(PetscInt*)PetscOptionsObject.next->data);
2676356e834SBarry Smith           break;
2686356e834SBarry Smith         case OPTION_LIST:
2696356e834SBarry Smith           ierr = PetscStrcpy(value,*(char**)PetscOptionsObject.next->data);CHKERRQ(ierr);
2706356e834SBarry Smith           break;
2716356e834SBarry Smith         case OPTION_STRING: /* also handles string arrays */
2726356e834SBarry Smith           ierr = PetscStrcpy(value,*(char**)PetscOptionsObject.next->data);CHKERRQ(ierr);
2736356e834SBarry Smith           break;
2746356e834SBarry Smith       }
2756356e834SBarry Smith       ierr = PetscOptionsSetValue(option,value);CHKERRQ(ierr);
2766356e834SBarry Smith     }
2776356e834SBarry Smith     ierr   = PetscStrfree(PetscOptionsObject.next->text);CHKERRQ(ierr);
2786356e834SBarry Smith     ierr   = PetscStrfree(PetscOptionsObject.next->option);CHKERRQ(ierr);
2796356e834SBarry Smith     ierr   = PetscFree(PetscOptionsObject.next->man);CHKERRQ(ierr);
28005b42c5fSBarry Smith     ierr   = PetscFree(PetscOptionsObject.next->data);CHKERRQ(ierr);
28105b42c5fSBarry Smith     ierr   = PetscFree(PetscOptionsObject.next->edata);CHKERRQ(ierr);
2826356e834SBarry Smith     last                    = PetscOptionsObject.next;
2836356e834SBarry Smith     PetscOptionsObject.next = PetscOptionsObject.next->next;
2846356e834SBarry Smith     ierr                    = PetscFree(last);CHKERRQ(ierr);
2856356e834SBarry Smith   }
2866356e834SBarry Smith   PetscOptionsObject.next = 0;
28753acd3b1SBarry Smith   PetscFunctionReturn(0);
28853acd3b1SBarry Smith }
28953acd3b1SBarry Smith 
29053acd3b1SBarry Smith #undef __FUNCT__
29153acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsEnum"
29253acd3b1SBarry Smith /*@C
29353acd3b1SBarry Smith    PetscOptionsEnum - Gets the enum value for a particular option in the database.
29453acd3b1SBarry Smith 
29553acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
29653acd3b1SBarry Smith 
29753acd3b1SBarry Smith    Input Parameters:
29853acd3b1SBarry Smith +  opt - option name
29953acd3b1SBarry Smith .  text - short string that describes the option
30053acd3b1SBarry Smith .  man - manual page with additional information on option
30153acd3b1SBarry Smith .  list - array containing the list of choices, followed by the enum name, followed by the enum prefix, followed by a null
30253acd3b1SBarry Smith -  defaultv - the default (current) value
30353acd3b1SBarry Smith 
30453acd3b1SBarry Smith    Output Parameter:
30553acd3b1SBarry Smith +  value - the  value to return
30653acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
30753acd3b1SBarry Smith 
30853acd3b1SBarry Smith    Level: beginner
30953acd3b1SBarry Smith 
31053acd3b1SBarry Smith    Concepts: options database
31153acd3b1SBarry Smith 
31253acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
31353acd3b1SBarry Smith 
31453acd3b1SBarry Smith           list is usually something like PCASMTypes or some other predefined list of enum names
31553acd3b1SBarry Smith 
31653acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
31753acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
31853acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
31953acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
32053acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
32153acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
32253acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
32353acd3b1SBarry Smith @*/
32453acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsEnum(const char opt[],const char text[],const char man[],const char **list,PetscEnum defaultv,PetscEnum *value,PetscTruth *set)
32553acd3b1SBarry Smith {
32653acd3b1SBarry Smith   PetscErrorCode ierr;
32753acd3b1SBarry Smith   PetscInt       ntext = 0;
32853acd3b1SBarry Smith 
32953acd3b1SBarry Smith   PetscFunctionBegin;
33053acd3b1SBarry Smith   while (list[ntext++]) {
33153acd3b1SBarry Smith     if (ntext > 50) SETERRQ(PETSC_ERR_ARG_WRONG,"List argument appears to be wrong or have more than 50 entries");
33253acd3b1SBarry Smith   }
33353acd3b1SBarry Smith   if (ntext < 3) SETERRQ(PETSC_ERR_ARG_WRONG,"List argument must have at least two entries: typename and type prefix");
33453acd3b1SBarry Smith   ntext -= 3;
33553acd3b1SBarry Smith   ierr = PetscOptionsEList(opt,text,man,list,ntext,list[defaultv],(PetscInt*)value,set);CHKERRQ(ierr);
33653acd3b1SBarry Smith   PetscFunctionReturn(0);
33753acd3b1SBarry Smith }
33853acd3b1SBarry Smith 
33953acd3b1SBarry Smith /* -------------------------------------------------------------------------------------------------------------*/
34053acd3b1SBarry Smith #undef __FUNCT__
34153acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsInt"
34253acd3b1SBarry Smith /*@C
34353acd3b1SBarry Smith    PetscOptionsInt - Gets the integer value for a particular option in the database.
34453acd3b1SBarry Smith 
34553acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
34653acd3b1SBarry Smith 
34753acd3b1SBarry Smith    Input Parameters:
34853acd3b1SBarry Smith +  opt - option name
34953acd3b1SBarry Smith .  text - short string that describes the option
35053acd3b1SBarry Smith .  man - manual page with additional information on option
35153acd3b1SBarry Smith -  defaultv - the default (current) value
35253acd3b1SBarry Smith 
35353acd3b1SBarry Smith    Output Parameter:
35453acd3b1SBarry Smith +  value - the integer value to return
35553acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
35653acd3b1SBarry Smith 
35753acd3b1SBarry Smith    Level: beginner
35853acd3b1SBarry Smith 
35953acd3b1SBarry Smith    Concepts: options database^has int
36053acd3b1SBarry Smith 
36153acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
36253acd3b1SBarry Smith 
36353acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
36453acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
36553acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
36653acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
36753acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
36853acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
36953acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
37053acd3b1SBarry Smith @*/
37153acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsInt(const char opt[],const char text[],const char man[],PetscInt defaultv,PetscInt *value,PetscTruth *set)
37253acd3b1SBarry Smith {
37353acd3b1SBarry Smith   PetscErrorCode ierr;
3746356e834SBarry Smith   PetscOptions   amsopt;
37553acd3b1SBarry Smith 
37653acd3b1SBarry Smith   PetscFunctionBegin;
3776356e834SBarry Smith   if (PetscOptionsPublishCount == 1) {
3786356e834SBarry Smith     ierr = PetscOptionsCreate_Private(opt,text,man,OPTION_INT,&amsopt);CHKERRQ(ierr);
3796356e834SBarry Smith     ierr = PetscMalloc(sizeof(PetscInt),&amsopt->data);CHKERRQ(ierr);
3806356e834SBarry Smith     *(PetscInt*)amsopt->data = defaultv;
3816356e834SBarry Smith   }
38253acd3b1SBarry Smith   ierr = PetscOptionsGetInt(PetscOptionsObject.prefix,opt,value,set);CHKERRQ(ierr);
38361b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
38453acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%d>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv,text,man);CHKERRQ(ierr);
38553acd3b1SBarry Smith   }
38653acd3b1SBarry Smith   PetscFunctionReturn(0);
38753acd3b1SBarry Smith }
38853acd3b1SBarry Smith 
38953acd3b1SBarry Smith #undef __FUNCT__
39053acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsString"
39153acd3b1SBarry Smith /*@C
39253acd3b1SBarry Smith    PetscOptionsString - Gets the string value for a particular option in the database.
39353acd3b1SBarry Smith 
39453acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
39553acd3b1SBarry Smith 
39653acd3b1SBarry Smith    Input Parameters:
39753acd3b1SBarry Smith +  opt - option name
39853acd3b1SBarry Smith .  text - short string that describes the option
39953acd3b1SBarry Smith .  man - manual page with additional information on option
40053acd3b1SBarry Smith -  defaultv - the default (current) value
40153acd3b1SBarry Smith 
40253acd3b1SBarry Smith    Output Parameter:
40353acd3b1SBarry Smith +  value - the value to return
40453acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
40553acd3b1SBarry Smith 
40653acd3b1SBarry Smith    Level: beginner
40753acd3b1SBarry Smith 
40853acd3b1SBarry Smith    Concepts: options database^has int
40953acd3b1SBarry Smith 
41053acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
41153acd3b1SBarry Smith 
41253acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
41353acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
41453acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
41553acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
41653acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
41753acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
41853acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
41953acd3b1SBarry Smith @*/
42053acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsString(const char opt[],const char text[],const char man[],const char defaultv[],char value[],size_t len,PetscTruth *set)
42153acd3b1SBarry Smith {
42253acd3b1SBarry Smith   PetscErrorCode ierr;
42353acd3b1SBarry Smith 
42453acd3b1SBarry Smith   PetscFunctionBegin;
42553acd3b1SBarry Smith   ierr = PetscOptionsGetString(PetscOptionsObject.prefix,opt,value,len,set);CHKERRQ(ierr);
42661b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
42753acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%s>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv,text,man);CHKERRQ(ierr);
42853acd3b1SBarry Smith   }
42953acd3b1SBarry Smith   PetscFunctionReturn(0);
43053acd3b1SBarry Smith }
43153acd3b1SBarry Smith 
43253acd3b1SBarry Smith /*
43353acd3b1SBarry Smith      Publishes an AMS double field (with the default value in it) and with a name
43453acd3b1SBarry Smith    given by the text string
43553acd3b1SBarry Smith */
43653acd3b1SBarry Smith #undef __FUNCT__
43753acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsReal"
43853acd3b1SBarry Smith /*@C
43953acd3b1SBarry Smith    PetscOptionsReal - Gets the PetscReal value for a particular option in the database.
44053acd3b1SBarry Smith 
44153acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
44253acd3b1SBarry Smith 
44353acd3b1SBarry Smith    Input Parameters:
44453acd3b1SBarry Smith +  opt - option name
44553acd3b1SBarry Smith .  text - short string that describes the option
44653acd3b1SBarry Smith .  man - manual page with additional information on option
44753acd3b1SBarry Smith -  defaultv - the default (current) value
44853acd3b1SBarry Smith 
44953acd3b1SBarry Smith    Output Parameter:
45053acd3b1SBarry Smith +  value - the value to return
45153acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
45253acd3b1SBarry Smith 
45353acd3b1SBarry Smith    Level: beginner
45453acd3b1SBarry Smith 
45553acd3b1SBarry Smith    Concepts: options database^has int
45653acd3b1SBarry Smith 
45753acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
45853acd3b1SBarry Smith 
45953acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
46053acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
46153acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
46253acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
46353acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
46453acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
46553acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
46653acd3b1SBarry Smith @*/
46753acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsReal(const char opt[],const char text[],const char man[],PetscReal defaultv,PetscReal *value,PetscTruth *set)
46853acd3b1SBarry Smith {
46953acd3b1SBarry Smith   PetscErrorCode ierr;
47053acd3b1SBarry Smith 
47153acd3b1SBarry Smith   PetscFunctionBegin;
47253acd3b1SBarry Smith   ierr = PetscOptionsGetReal(PetscOptionsObject.prefix,opt,value,set);CHKERRQ(ierr);
47361b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
474a83599f4SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%G>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv,text,man);CHKERRQ(ierr);
47553acd3b1SBarry Smith   }
47653acd3b1SBarry Smith   PetscFunctionReturn(0);
47753acd3b1SBarry Smith }
47853acd3b1SBarry Smith 
47953acd3b1SBarry Smith #undef __FUNCT__
48053acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsScalar"
48153acd3b1SBarry Smith /*@C
48253acd3b1SBarry Smith    PetscOptionsScalar - Gets the scalar value for a particular option in the database.
48353acd3b1SBarry Smith 
48453acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
48553acd3b1SBarry Smith 
48653acd3b1SBarry Smith    Input Parameters:
48753acd3b1SBarry Smith +  opt - option name
48853acd3b1SBarry Smith .  text - short string that describes the option
48953acd3b1SBarry Smith .  man - manual page with additional information on option
49053acd3b1SBarry Smith -  defaultv - the default (current) value
49153acd3b1SBarry Smith 
49253acd3b1SBarry Smith    Output Parameter:
49353acd3b1SBarry Smith +  value - the value to return
49453acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
49553acd3b1SBarry Smith 
49653acd3b1SBarry Smith    Level: beginner
49753acd3b1SBarry Smith 
49853acd3b1SBarry Smith    Concepts: options database^has int
49953acd3b1SBarry Smith 
50053acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
50153acd3b1SBarry Smith 
50253acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
50353acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
50453acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
50553acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
50653acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
50753acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
50853acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
50953acd3b1SBarry Smith @*/
51053acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsScalar(const char opt[],const char text[],const char man[],PetscScalar defaultv,PetscScalar *value,PetscTruth *set)
51153acd3b1SBarry Smith {
51253acd3b1SBarry Smith   PetscErrorCode ierr;
51353acd3b1SBarry Smith 
51453acd3b1SBarry Smith   PetscFunctionBegin;
51553acd3b1SBarry Smith #if !defined(PETSC_USE_COMPLEX)
51653acd3b1SBarry Smith   ierr = PetscOptionsReal(opt,text,man,defaultv,value,set);CHKERRQ(ierr);
51753acd3b1SBarry Smith #else
51853acd3b1SBarry Smith   ierr = PetscOptionsGetScalar(PetscOptionsObject.prefix,opt,value,set);CHKERRQ(ierr);
51953acd3b1SBarry Smith #endif
52053acd3b1SBarry Smith   PetscFunctionReturn(0);
52153acd3b1SBarry Smith }
52253acd3b1SBarry Smith 
52353acd3b1SBarry Smith /*
52453acd3b1SBarry Smith      Publishes an AMS logical field (with the default value in it) and with a name
52553acd3b1SBarry Smith    given by the text string
52653acd3b1SBarry Smith */
52753acd3b1SBarry Smith #undef __FUNCT__
52853acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsName"
52953acd3b1SBarry Smith /*@C
53053acd3b1SBarry Smith    PetscOptionsName - Determines if a particular option is in the database
53153acd3b1SBarry Smith 
53253acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
53353acd3b1SBarry Smith 
53453acd3b1SBarry Smith    Input Parameters:
53553acd3b1SBarry Smith +  opt - option name
53653acd3b1SBarry Smith .  text - short string that describes the option
53753acd3b1SBarry Smith -  man - manual page with additional information on option
53853acd3b1SBarry Smith 
53953acd3b1SBarry Smith    Output Parameter:
54053acd3b1SBarry Smith .  flg - PETSC_TRUE if found, else PETSC_FALSE
54153acd3b1SBarry Smith 
54253acd3b1SBarry Smith    Level: beginner
54353acd3b1SBarry Smith 
54453acd3b1SBarry Smith    Concepts: options database^has int
54553acd3b1SBarry Smith 
54653acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
54753acd3b1SBarry Smith 
54853acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
54953acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
55053acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
55153acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
55253acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
55353acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
55453acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
55553acd3b1SBarry Smith @*/
55653acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsName(const char opt[],const char text[],const char man[],PetscTruth *flg)
55753acd3b1SBarry Smith {
55853acd3b1SBarry Smith   PetscErrorCode ierr;
55953acd3b1SBarry Smith 
56053acd3b1SBarry Smith   PetscFunctionBegin;
56153acd3b1SBarry Smith   ierr = PetscOptionsHasName(PetscOptionsObject.prefix,opt,flg);CHKERRQ(ierr);
56261b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
56353acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
56453acd3b1SBarry Smith   }
56553acd3b1SBarry Smith   PetscFunctionReturn(0);
56653acd3b1SBarry Smith }
56753acd3b1SBarry Smith 
56853acd3b1SBarry Smith #undef __FUNCT__
56953acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsList"
57053acd3b1SBarry Smith /*@C
57153acd3b1SBarry Smith      PetscOptionsList - Puts a list of option values that a single one may be selected from
57253acd3b1SBarry Smith 
57353acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
57453acd3b1SBarry Smith 
57553acd3b1SBarry Smith    Input Parameters:
57653acd3b1SBarry Smith +  opt - option name
57753acd3b1SBarry Smith .  text - short string that describes the option
57853acd3b1SBarry Smith .  man - manual page with additional information on option
57953acd3b1SBarry Smith .  list - the possible choices
58053acd3b1SBarry Smith -  defaultv - the default (current) value
58153acd3b1SBarry Smith 
58253acd3b1SBarry Smith    Output Parameter:
58353acd3b1SBarry Smith +  value - the value to return
58453acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
58553acd3b1SBarry Smith 
58653acd3b1SBarry Smith    Level: intermediate
58753acd3b1SBarry Smith 
58853acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
58953acd3b1SBarry Smith 
59053acd3b1SBarry Smith    See PetscOptionsEList() for when the choices are given in a string array
59153acd3b1SBarry Smith 
59253acd3b1SBarry Smith    To get a listing of all currently specified options,
59353acd3b1SBarry Smith     see PetscOptionsPrint() or PetscOptionsGetAll()
59453acd3b1SBarry Smith 
59553acd3b1SBarry Smith    Concepts: options database^list
59653acd3b1SBarry Smith 
59753acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
59853acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
59953acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
60053acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
60153acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
60253acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
60353acd3b1SBarry Smith @*/
60453acd3b1SBarry 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)
60553acd3b1SBarry Smith {
60653acd3b1SBarry Smith   PetscErrorCode ierr;
60753acd3b1SBarry Smith 
60853acd3b1SBarry Smith   PetscFunctionBegin;
60953acd3b1SBarry Smith   ierr = PetscOptionsGetString(PetscOptionsObject.prefix,opt,value,len,set);CHKERRQ(ierr);
61061b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
61153acd3b1SBarry Smith     ierr = PetscFListPrintTypes(PetscOptionsObject.comm,stdout,PetscOptionsObject.prefix,opt,ltext,man,list);CHKERRQ(ierr);CHKERRQ(ierr);
61253acd3b1SBarry Smith   }
61353acd3b1SBarry Smith   PetscFunctionReturn(0);
61453acd3b1SBarry Smith }
61553acd3b1SBarry Smith 
61653acd3b1SBarry Smith #undef __FUNCT__
61753acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsEList"
61853acd3b1SBarry Smith /*@C
61953acd3b1SBarry Smith      PetscOptionsEList - Puts a list of option values that a single one may be selected from
62053acd3b1SBarry Smith 
62153acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
62253acd3b1SBarry Smith 
62353acd3b1SBarry Smith    Input Parameters:
62453acd3b1SBarry Smith +  opt - option name
62553acd3b1SBarry Smith .  ltext - short string that describes the option
62653acd3b1SBarry Smith .  man - manual page with additional information on option
62753acd3b1SBarry Smith .  list - the possible choices
62853acd3b1SBarry Smith .  ntext - number of choices
62953acd3b1SBarry Smith -  defaultv - the default (current) value
63053acd3b1SBarry Smith 
63153acd3b1SBarry Smith    Output Parameter:
63253acd3b1SBarry Smith +  value - the index of the value to return
63353acd3b1SBarry Smith -  set - 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    See PetscOptionsList() for when the choices are given in a PetscFList()
64053acd3b1SBarry Smith 
64153acd3b1SBarry Smith    Concepts: options database^list
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 PetscOptionsEList(const char opt[],const char ltext[],const char man[],const char **list,PetscInt ntext,const char defaultv[],PetscInt *value,PetscTruth *set)
65153acd3b1SBarry Smith {
65253acd3b1SBarry Smith   PetscErrorCode ierr;
65353acd3b1SBarry Smith   PetscInt       i;
65453acd3b1SBarry Smith 
65553acd3b1SBarry Smith   PetscFunctionBegin;
65653acd3b1SBarry Smith   ierr = PetscOptionsGetEList(PetscOptionsObject.prefix,opt,list,ntext,value,set);CHKERRQ(ierr);
65761b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
65853acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%s> (choose one of)",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv);CHKERRQ(ierr);
65953acd3b1SBarry Smith     for (i=0; i<ntext; i++){
66053acd3b1SBarry Smith       ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm," %s",list[i]);CHKERRQ(ierr);
66153acd3b1SBarry Smith     }
66253acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"\n");CHKERRQ(ierr);
66353acd3b1SBarry Smith   }
66453acd3b1SBarry Smith   PetscFunctionReturn(0);
66553acd3b1SBarry Smith }
66653acd3b1SBarry Smith 
66753acd3b1SBarry Smith #undef __FUNCT__
66853acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruthGroupBegin"
66953acd3b1SBarry Smith /*@C
67053acd3b1SBarry Smith      PetscOptionsTruthGroupBegin - First in a series of logical queries on the options database for
67153acd3b1SBarry Smith        which only a single value can be true.
67253acd3b1SBarry Smith 
67353acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
67453acd3b1SBarry Smith 
67553acd3b1SBarry Smith    Input Parameters:
67653acd3b1SBarry Smith +  opt - option name
67753acd3b1SBarry Smith .  text - short string that describes the option
67853acd3b1SBarry Smith -  man - manual page with additional information on option
67953acd3b1SBarry Smith 
68053acd3b1SBarry Smith    Output Parameter:
68153acd3b1SBarry Smith .  flg - whether that option was set or not
68253acd3b1SBarry Smith 
68353acd3b1SBarry Smith    Level: intermediate
68453acd3b1SBarry Smith 
68553acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
68653acd3b1SBarry Smith 
68753acd3b1SBarry Smith    Must be followed by 0 or more PetscOptionsTruthGroup()s and PetscOptionsTruthGroupEnd()
68853acd3b1SBarry Smith 
68953acd3b1SBarry Smith     Concepts: options database^logical group
69053acd3b1SBarry Smith 
69153acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
69253acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
69353acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
69453acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
69553acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
69653acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
69753acd3b1SBarry Smith @*/
69853acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruthGroupBegin(const char opt[],const char text[],const char man[],PetscTruth *flg)
69953acd3b1SBarry Smith {
70053acd3b1SBarry Smith   PetscErrorCode ierr;
70153acd3b1SBarry Smith 
70253acd3b1SBarry Smith   PetscFunctionBegin;
70353acd3b1SBarry Smith   ierr = PetscOptionsHasName(PetscOptionsObject.prefix,opt,flg);CHKERRQ(ierr);
70461b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
70553acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  Pick at most one of -------------\n");CHKERRQ(ierr);
70653acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"    -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
70753acd3b1SBarry Smith   }
70853acd3b1SBarry Smith   PetscFunctionReturn(0);
70953acd3b1SBarry Smith }
71053acd3b1SBarry Smith 
71153acd3b1SBarry Smith #undef __FUNCT__
71253acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruthGroup"
71353acd3b1SBarry Smith /*@C
71453acd3b1SBarry Smith      PetscOptionsTruthGroup - One in a series of logical queries on the options database for
71553acd3b1SBarry Smith        which only a single value can be true.
71653acd3b1SBarry Smith 
71753acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
71853acd3b1SBarry Smith 
71953acd3b1SBarry Smith    Input Parameters:
72053acd3b1SBarry Smith +  opt - option name
72153acd3b1SBarry Smith .  text - short string that describes the option
72253acd3b1SBarry Smith -  man - manual page with additional information on option
72353acd3b1SBarry Smith 
72453acd3b1SBarry Smith    Output Parameter:
72553acd3b1SBarry Smith .  flg - PETSC_TRUE if found, else PETSC_FALSE
72653acd3b1SBarry Smith 
72753acd3b1SBarry Smith    Level: intermediate
72853acd3b1SBarry Smith 
72953acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
73053acd3b1SBarry Smith 
73153acd3b1SBarry Smith    Must follow a PetscOptionsTruthGroupBegin() and preceded a PetscOptionsTruthGroupEnd()
73253acd3b1SBarry Smith 
73353acd3b1SBarry Smith     Concepts: options database^logical group
73453acd3b1SBarry Smith 
73553acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
73653acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
73753acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
73853acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
73953acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
74053acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
74153acd3b1SBarry Smith @*/
74253acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruthGroup(const char opt[],const char text[],const char man[],PetscTruth *flg)
74353acd3b1SBarry Smith {
74453acd3b1SBarry Smith   PetscErrorCode ierr;
74553acd3b1SBarry Smith 
74653acd3b1SBarry Smith   PetscFunctionBegin;
74753acd3b1SBarry Smith   ierr = PetscOptionsHasName(PetscOptionsObject.prefix,opt,flg);CHKERRQ(ierr);
74861b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
74953acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"    -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
75053acd3b1SBarry Smith   }
75153acd3b1SBarry Smith   PetscFunctionReturn(0);
75253acd3b1SBarry Smith }
75353acd3b1SBarry Smith 
75453acd3b1SBarry Smith #undef __FUNCT__
75553acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruthGroupEnd"
75653acd3b1SBarry Smith /*@C
75753acd3b1SBarry Smith      PetscOptionsTruthGroupEnd - Last in a series of logical queries on the options database for
75853acd3b1SBarry Smith        which only a single value can be true.
75953acd3b1SBarry Smith 
76053acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
76153acd3b1SBarry Smith 
76253acd3b1SBarry Smith    Input Parameters:
76353acd3b1SBarry Smith +  opt - option name
76453acd3b1SBarry Smith .  text - short string that describes the option
76553acd3b1SBarry Smith -  man - manual page with additional information on option
76653acd3b1SBarry Smith 
76753acd3b1SBarry Smith    Output Parameter:
76853acd3b1SBarry Smith .  flg - PETSC_TRUE if found, else PETSC_FALSE
76953acd3b1SBarry Smith 
77053acd3b1SBarry Smith    Level: intermediate
77153acd3b1SBarry Smith 
77253acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
77353acd3b1SBarry Smith 
77453acd3b1SBarry Smith    Must follow a PetscOptionsTruthGroupBegin()
77553acd3b1SBarry Smith 
77653acd3b1SBarry Smith     Concepts: options database^logical group
77753acd3b1SBarry Smith 
77853acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
77953acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
78053acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
78153acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
78253acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
78353acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
78453acd3b1SBarry Smith @*/
78553acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruthGroupEnd(const char opt[],const char text[],const char man[],PetscTruth *flg)
78653acd3b1SBarry Smith {
78753acd3b1SBarry Smith   PetscErrorCode ierr;
78853acd3b1SBarry Smith 
78953acd3b1SBarry Smith   PetscFunctionBegin;
79053acd3b1SBarry Smith   ierr = PetscOptionsHasName(PetscOptionsObject.prefix,opt,flg);CHKERRQ(ierr);
79161b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
79253acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"    -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
79353acd3b1SBarry Smith   }
79453acd3b1SBarry Smith   PetscFunctionReturn(0);
79553acd3b1SBarry Smith }
79653acd3b1SBarry Smith 
79753acd3b1SBarry Smith #undef __FUNCT__
79853acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruth"
79953acd3b1SBarry Smith /*@C
80053acd3b1SBarry Smith    PetscOptionsTruth - Determines if a particular option is in the database with a true or false
80153acd3b1SBarry Smith 
80253acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
80353acd3b1SBarry Smith 
80453acd3b1SBarry Smith    Input Parameters:
80553acd3b1SBarry Smith +  opt - option name
80653acd3b1SBarry Smith .  text - short string that describes the option
80753acd3b1SBarry Smith -  man - manual page with additional information on option
80853acd3b1SBarry Smith 
80953acd3b1SBarry Smith    Output Parameter:
81053acd3b1SBarry Smith .  flg - PETSC_TRUE or PETSC_FALSE
81153acd3b1SBarry Smith .  set - PETSC_TRUE if found, else PETSC_FALSE
81253acd3b1SBarry Smith 
81353acd3b1SBarry Smith    Level: beginner
81453acd3b1SBarry Smith 
81553acd3b1SBarry Smith    Concepts: options database^logical
81653acd3b1SBarry Smith 
81753acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
81853acd3b1SBarry Smith 
81953acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
82053acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
82153acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
82253acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
82353acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
82453acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
82553acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
82653acd3b1SBarry Smith @*/
82753acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruth(const char opt[],const char text[],const char man[],PetscTruth deflt,PetscTruth *flg,PetscTruth *set)
82853acd3b1SBarry Smith {
82953acd3b1SBarry Smith   PetscErrorCode ierr;
83053acd3b1SBarry Smith   PetscTruth     iset;
83153acd3b1SBarry Smith 
83253acd3b1SBarry Smith   PetscFunctionBegin;
83353acd3b1SBarry Smith   ierr = PetscOptionsGetTruth(PetscOptionsObject.prefix,opt,flg,&iset);CHKERRQ(ierr);
83453acd3b1SBarry Smith   if (!iset) {
83553acd3b1SBarry Smith     if (flg) *flg = deflt;
83653acd3b1SBarry Smith   }
83753acd3b1SBarry Smith   if (set) *set = iset;
83861b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
83953acd3b1SBarry Smith     const char *v = PetscTruths[deflt];
84053acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s: <%s> %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,v,text,man);CHKERRQ(ierr);
84153acd3b1SBarry Smith   }
84253acd3b1SBarry Smith   PetscFunctionReturn(0);
84353acd3b1SBarry Smith }
84453acd3b1SBarry Smith 
84553acd3b1SBarry Smith #undef __FUNCT__
84653acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsRealArray"
84753acd3b1SBarry Smith /*@C
84853acd3b1SBarry Smith    PetscOptionsRealArray - Gets an array of double values for a particular
84953acd3b1SBarry Smith    option in the database. The values must be separated with commas with
85053acd3b1SBarry Smith    no intervening spaces.
85153acd3b1SBarry Smith 
85253acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
85353acd3b1SBarry Smith 
85453acd3b1SBarry Smith    Input Parameters:
85553acd3b1SBarry Smith +  opt - the option one is seeking
85653acd3b1SBarry Smith .  text - short string describing option
85753acd3b1SBarry Smith .  man - manual page for option
85853acd3b1SBarry Smith -  nmax - maximum number of values
85953acd3b1SBarry Smith 
86053acd3b1SBarry Smith    Output Parameter:
86153acd3b1SBarry Smith +  value - location to copy values
86253acd3b1SBarry Smith .  nmax - actual number of values found
86353acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
86453acd3b1SBarry Smith 
86553acd3b1SBarry Smith    Level: beginner
86653acd3b1SBarry Smith 
86753acd3b1SBarry Smith    Notes:
86853acd3b1SBarry Smith    The user should pass in an array of doubles
86953acd3b1SBarry Smith 
87053acd3b1SBarry Smith    Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
87153acd3b1SBarry Smith 
87253acd3b1SBarry Smith    Concepts: options database^array of strings
87353acd3b1SBarry Smith 
87453acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
87553acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
87653acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
87753acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
87853acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
87953acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
88053acd3b1SBarry Smith @*/
88153acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsRealArray(const char opt[],const char text[],const char man[],PetscReal value[],PetscInt *n,PetscTruth *set)
88253acd3b1SBarry Smith {
88353acd3b1SBarry Smith   PetscErrorCode ierr;
88453acd3b1SBarry Smith   PetscInt       i;
88553acd3b1SBarry Smith 
88653acd3b1SBarry Smith   PetscFunctionBegin;
88753acd3b1SBarry Smith   ierr = PetscOptionsGetRealArray(PetscOptionsObject.prefix,opt,value,n,set);CHKERRQ(ierr);
88861b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
889a83599f4SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%G",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,value[0]);CHKERRQ(ierr);
89053acd3b1SBarry Smith     for (i=1; i<*n; i++) {
891a83599f4SBarry Smith       ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,",%G",value[i]);CHKERRQ(ierr);
89253acd3b1SBarry Smith     }
89353acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,">: %s (%s)\n",text,man);CHKERRQ(ierr);
89453acd3b1SBarry Smith   }
89553acd3b1SBarry Smith   PetscFunctionReturn(0);
89653acd3b1SBarry Smith }
89753acd3b1SBarry Smith 
89853acd3b1SBarry Smith 
89953acd3b1SBarry Smith #undef __FUNCT__
90053acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsIntArray"
90153acd3b1SBarry Smith /*@C
90253acd3b1SBarry Smith    PetscOptionsIntArray - Gets an array of integers for a particular
90353acd3b1SBarry Smith    option in the database. The values must be separated with commas with
90453acd3b1SBarry Smith    no intervening spaces.
90553acd3b1SBarry Smith 
90653acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
90753acd3b1SBarry Smith 
90853acd3b1SBarry Smith    Input Parameters:
90953acd3b1SBarry Smith +  opt - the option one is seeking
91053acd3b1SBarry Smith .  text - short string describing option
91153acd3b1SBarry Smith .  man - manual page for option
91253acd3b1SBarry Smith -  nmax - maximum number of values
91353acd3b1SBarry Smith 
91453acd3b1SBarry Smith    Output Parameter:
91553acd3b1SBarry Smith +  value - location to copy values
91653acd3b1SBarry Smith .  nmax - actual number of values found
91753acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
91853acd3b1SBarry Smith 
91953acd3b1SBarry Smith    Level: beginner
92053acd3b1SBarry Smith 
92153acd3b1SBarry Smith    Notes:
92253acd3b1SBarry Smith    The user should pass in an array of integers
92353acd3b1SBarry Smith 
92453acd3b1SBarry Smith    Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
92553acd3b1SBarry Smith 
92653acd3b1SBarry Smith    Concepts: options database^array of strings
92753acd3b1SBarry Smith 
92853acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
92953acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
93053acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
93153acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
93253acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
93353acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList(), PetscOptionsRealArray()
93453acd3b1SBarry Smith @*/
93553acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsIntArray(const char opt[],const char text[],const char man[],PetscInt value[],PetscInt *n,PetscTruth *set)
93653acd3b1SBarry Smith {
93753acd3b1SBarry Smith   PetscErrorCode ierr;
93853acd3b1SBarry Smith   PetscInt       i;
93953acd3b1SBarry Smith 
94053acd3b1SBarry Smith   PetscFunctionBegin;
94153acd3b1SBarry Smith   ierr = PetscOptionsGetIntArray(PetscOptionsObject.prefix,opt,value,n,set);CHKERRQ(ierr);
94261b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
94353acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%d",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,value[0]);CHKERRQ(ierr);
94453acd3b1SBarry Smith     for (i=1; i<*n; i++) {
94553acd3b1SBarry Smith       ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,",%d",value[i]);CHKERRQ(ierr);
94653acd3b1SBarry Smith     }
94753acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,">: %s (%s)\n",text,man);CHKERRQ(ierr);
94853acd3b1SBarry Smith   }
94953acd3b1SBarry Smith   PetscFunctionReturn(0);
95053acd3b1SBarry Smith }
95153acd3b1SBarry Smith 
95253acd3b1SBarry Smith #undef __FUNCT__
95353acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsStringArray"
95453acd3b1SBarry Smith /*@C
95553acd3b1SBarry Smith    PetscOptionsStringArray - Gets an array of string values for a particular
95653acd3b1SBarry Smith    option in the database. The values must be separated with commas with
95753acd3b1SBarry Smith    no intervening spaces.
95853acd3b1SBarry Smith 
95953acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
96053acd3b1SBarry Smith 
96153acd3b1SBarry Smith    Input Parameters:
96253acd3b1SBarry Smith +  opt - the option one is seeking
96353acd3b1SBarry Smith .  text - short string describing option
96453acd3b1SBarry Smith .  man - manual page for option
96553acd3b1SBarry Smith -  nmax - maximum number of strings
96653acd3b1SBarry Smith 
96753acd3b1SBarry Smith    Output Parameter:
96853acd3b1SBarry Smith +  value - location to copy strings
96953acd3b1SBarry Smith .  nmax - actual number of strings found
97053acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
97153acd3b1SBarry Smith 
97253acd3b1SBarry Smith    Level: beginner
97353acd3b1SBarry Smith 
97453acd3b1SBarry Smith    Notes:
97553acd3b1SBarry Smith    The user should pass in an array of pointers to char, to hold all the
97653acd3b1SBarry Smith    strings returned by this function.
97753acd3b1SBarry Smith 
97853acd3b1SBarry Smith    The user is responsible for deallocating the strings that are
97953acd3b1SBarry Smith    returned. The Fortran interface for this routine is not supported.
98053acd3b1SBarry Smith 
98153acd3b1SBarry Smith    Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
98253acd3b1SBarry Smith 
98353acd3b1SBarry Smith    Concepts: options database^array of strings
98453acd3b1SBarry Smith 
98553acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
98653acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
98753acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
98853acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
98953acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
99053acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
99153acd3b1SBarry Smith @*/
99253acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsStringArray(const char opt[],const char text[],const char man[],char *value[],PetscInt *nmax,PetscTruth *set)
99353acd3b1SBarry Smith {
99453acd3b1SBarry Smith   PetscErrorCode ierr;
99553acd3b1SBarry Smith 
99653acd3b1SBarry Smith   PetscFunctionBegin;
99753acd3b1SBarry Smith   ierr = PetscOptionsGetStringArray(PetscOptionsObject.prefix,opt,value,nmax,set);CHKERRQ(ierr);
99861b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
99953acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <string1,string2,...>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
100053acd3b1SBarry Smith   }
100153acd3b1SBarry Smith   PetscFunctionReturn(0);
100253acd3b1SBarry Smith }
100353acd3b1SBarry Smith 
100453acd3b1SBarry Smith 
100553acd3b1SBarry Smith #undef __FUNCT__
100653acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsHead"
100753acd3b1SBarry Smith /*@C
1008*b52f573bSBarry Smith      PetscOptionsHead - Puts a heading before listing any more published options. Used, for example,
100953acd3b1SBarry Smith             in KSPSetFromOptions_GMRES().
101053acd3b1SBarry Smith 
101153acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
101253acd3b1SBarry Smith 
101353acd3b1SBarry Smith    Input Parameter:
101453acd3b1SBarry Smith .   head - the heading text
101553acd3b1SBarry Smith 
101653acd3b1SBarry Smith 
101753acd3b1SBarry Smith    Level: intermediate
101853acd3b1SBarry Smith 
101953acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
102053acd3b1SBarry Smith 
1021*b52f573bSBarry Smith           Can be followed by a call to PetscOptionsTail() in the same function.
102253acd3b1SBarry Smith 
102353acd3b1SBarry Smith    Concepts: options database^subheading
102453acd3b1SBarry Smith 
102553acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
102653acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
102753acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
102853acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
102953acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
103053acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
103153acd3b1SBarry Smith @*/
103253acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsHead(const char head[])
103353acd3b1SBarry Smith {
103453acd3b1SBarry Smith   PetscErrorCode ierr;
103553acd3b1SBarry Smith 
103653acd3b1SBarry Smith   PetscFunctionBegin;
103761b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
103853acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  %s\n",head);CHKERRQ(ierr);
103953acd3b1SBarry Smith   }
104053acd3b1SBarry Smith   PetscFunctionReturn(0);
104153acd3b1SBarry Smith }
104253acd3b1SBarry Smith 
104353acd3b1SBarry Smith 
104453acd3b1SBarry Smith 
104553acd3b1SBarry Smith 
104653acd3b1SBarry Smith 
104753acd3b1SBarry Smith 
1048