xref: /petsc/src/sys/objects/aoptions.c (revision e3ed6ec877bedf4e837ee0c4ff2272f4487e99bf)
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 */
22f8d0b74dSMatthew Knepley PetscOptionsObjectType PetscOptionsObject;
2353acd3b1SBarry Smith PetscInt               PetscOptionsPublishCount = 0;
2453acd3b1SBarry Smith 
2561b37b28SSatish Balay 
2661b37b28SSatish Balay #undef __FUNCT__
2761b37b28SSatish Balay #define __FUNCT__ "PetscOptionsHelpAddList"
2861b37b28SSatish Balay PetscErrorCode PetscOptionsHelpAddList(const char prefix[],const char title[],const char mansec[])
2961b37b28SSatish Balay {
3061b37b28SSatish Balay   int               ierr;
31*e3ed6ec8SBarry Smith   PetscOptionsHelp  newhelp;
3261b37b28SSatish Balay   PetscFunctionBegin;
33*e3ed6ec8SBarry Smith   ierr = PetscNew(struct _p_PetscOptionsHelp,&newhelp);CHKERRQ(ierr);
3461b37b28SSatish Balay   ierr = PetscStrallocpy(prefix,&newhelp->prefix);CHKERRQ(ierr);
3561b37b28SSatish Balay   ierr = PetscStrallocpy(title,&newhelp->title);CHKERRQ(ierr);
3661b37b28SSatish Balay   ierr = PetscStrallocpy(mansec,&newhelp->mansec);CHKERRQ(ierr);
3761b37b28SSatish Balay   newhelp->next = 0;
3861b37b28SSatish Balay 
3961b37b28SSatish Balay   if (!PetscOptionsObject.help) {
4061b37b28SSatish Balay     PetscOptionsObject.help = newhelp;
4161b37b28SSatish Balay   } else {
4261b37b28SSatish Balay     newhelp->next = PetscOptionsObject.help;
4361b37b28SSatish Balay     PetscOptionsObject.help = newhelp;
4461b37b28SSatish Balay   }
4561b37b28SSatish Balay   PetscFunctionReturn(0);
4661b37b28SSatish Balay }
4761b37b28SSatish Balay 
4861b37b28SSatish Balay #undef __FUNCT__
4961b37b28SSatish Balay #define __FUNCT__ "PetscOptionsHelpDestroyList"
5061b37b28SSatish Balay PetscErrorCode PetscOptionsHelpDestroyList(void)
5161b37b28SSatish Balay {
5261b37b28SSatish Balay   PetscErrorCode   ierr;
53*e3ed6ec8SBarry Smith   PetscOptionsHelp help = PetscOptionsObject.help, next;
5461b37b28SSatish Balay 
5561b37b28SSatish Balay   PetscFunctionBegin;
5661b37b28SSatish Balay   while (help) {
5761b37b28SSatish Balay     next = help->next;
5861b37b28SSatish Balay     ierr = PetscStrfree(help->prefix);CHKERRQ(ierr);
5961b37b28SSatish Balay     ierr = PetscStrfree(help->title);CHKERRQ(ierr);
6061b37b28SSatish Balay     ierr = PetscStrfree(help->mansec);CHKERRQ(ierr);
6161b37b28SSatish Balay     ierr = PetscFree(help);CHKERRQ(ierr);
6261b37b28SSatish Balay     help = next;
6361b37b28SSatish Balay   }
6461b37b28SSatish Balay   PetscFunctionReturn(0);
6561b37b28SSatish Balay }
6661b37b28SSatish Balay 
6761b37b28SSatish Balay 
6861b37b28SSatish Balay #undef __FUNCT__
6961b37b28SSatish Balay #define __FUNCT__ "PetscOptionsHelpFindList"
7061b37b28SSatish Balay PetscErrorCode PetscOptionsHelpFindList(const char prefix[],const char title[],const char mansec[],PetscTruth *flg)
7161b37b28SSatish Balay {
7261b37b28SSatish Balay   PetscErrorCode   ierr;
7361b37b28SSatish Balay   PetscTruth       flg1,flg2,flg3;
74*e3ed6ec8SBarry Smith   PetscOptionsHelp help = PetscOptionsObject.help;
752c33bbaeSSatish Balay   PetscFunctionBegin;
7661b37b28SSatish Balay   while (help) {
7761b37b28SSatish Balay     ierr = PetscStrcmp(help->prefix,prefix,&flg1);CHKERRQ(ierr);
7861b37b28SSatish Balay     ierr = PetscStrcmp(help->title,title,&flg2);CHKERRQ(ierr);
7961b37b28SSatish Balay     ierr = PetscStrcmp(help->mansec,mansec,&flg3);CHKERRQ(ierr);
8061b37b28SSatish Balay     if (flg1 && flg2 && flg3) {
81115b5ef7SSatish Balay       *flg = PETSC_TRUE;
8261b37b28SSatish Balay       break;
8361b37b28SSatish Balay     }
8461b37b28SSatish Balay     help = help->next;
8561b37b28SSatish Balay   }
8661b37b28SSatish Balay   PetscFunctionReturn(0);
8761b37b28SSatish Balay 
8861b37b28SSatish Balay }
8961b37b28SSatish Balay 
9061b37b28SSatish Balay #undef __FUNCT__
9161b37b28SSatish Balay #define __FUNCT__ "PetscOptionsHelpCheckAddList"
9261b37b28SSatish Balay PetscErrorCode PetscOptionsHelpCheckAddList(const char prefix[],const char title[],const char mansec[],PetscTruth *flg)
9361b37b28SSatish Balay {
9461b37b28SSatish Balay   PetscFunctionBegin;
9561b37b28SSatish Balay   PetscOptionsHelpFindList(prefix,title,mansec,flg);
9661b37b28SSatish Balay   if (!(*flg)) PetscOptionsHelpAddList(prefix,title,mansec);
9761b37b28SSatish Balay   PetscFunctionReturn(0);
9861b37b28SSatish Balay }
9961b37b28SSatish Balay 
10053acd3b1SBarry Smith #undef __FUNCT__
10153acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsBegin_Private"
10253acd3b1SBarry Smith /*
10353acd3b1SBarry Smith     Handles setting up the data structure in a call to PetscOptionsBegin()
10453acd3b1SBarry Smith */
10553acd3b1SBarry Smith PetscErrorCode PetscOptionsBegin_Private(MPI_Comm comm,const char prefix[],const char title[],const char mansec[])
10653acd3b1SBarry Smith {
10753acd3b1SBarry Smith   PetscErrorCode ierr;
10853acd3b1SBarry Smith 
10953acd3b1SBarry Smith   PetscFunctionBegin;
11053acd3b1SBarry Smith   PetscOptionsObject.next          = 0;
11153acd3b1SBarry Smith   PetscOptionsObject.comm          = comm;
1126356e834SBarry Smith   PetscOptionsObject.changedmethod = PETSC_FALSE;
113f8d0b74dSMatthew Knepley   if (PetscOptionsObject.prefix) {
114f8d0b74dSMatthew Knepley     ierr = PetscStrfree(PetscOptionsObject.prefix);CHKERRQ(ierr); PetscOptionsObject.prefix = 0;
115f8d0b74dSMatthew Knepley   }
11653acd3b1SBarry Smith   ierr = PetscStrallocpy(prefix,&PetscOptionsObject.prefix);CHKERRQ(ierr);
117f8d0b74dSMatthew Knepley   if (PetscOptionsObject.title) {
118f8d0b74dSMatthew Knepley     ierr = PetscStrfree(PetscOptionsObject.title);CHKERRQ(ierr); PetscOptionsObject.title  = 0;
119f8d0b74dSMatthew Knepley   }
12053acd3b1SBarry Smith   ierr = PetscStrallocpy(title,&PetscOptionsObject.title);CHKERRQ(ierr);
12153acd3b1SBarry Smith 
12253acd3b1SBarry Smith   ierr = PetscOptionsHasName(PETSC_NULL,"-help",&PetscOptionsObject.printhelp);CHKERRQ(ierr);
12353acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
12461b37b28SSatish Balay     ierr = PetscOptionsHelpCheckAddList(prefix,title,mansec,&PetscOptionsObject.alreadyprinted);
12561b37b28SSatish Balay     if (!PetscOptionsObject.alreadyprinted) {
12653acd3b1SBarry Smith       ierr = (*PetscHelpPrintf)(comm,"%s -------------------------------------------------\n",title);CHKERRQ(ierr);
12753acd3b1SBarry Smith     }
12861b37b28SSatish Balay   }
12953acd3b1SBarry Smith   PetscFunctionReturn(0);
13053acd3b1SBarry Smith }
13153acd3b1SBarry Smith 
13253acd3b1SBarry Smith /*
13353acd3b1SBarry Smith      Handles adding another option to the list of options within this particular PetscOptionsBegin() PetscOptionsEnd()
13453acd3b1SBarry Smith */
13553acd3b1SBarry Smith #undef __FUNCT__
13653acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsCreate_Private"
137*e3ed6ec8SBarry Smith static int PetscOptionsCreate_Private(const char opt[],const char text[],const char man[],PetscOptionType t,PetscOptions *amsopt)
13853acd3b1SBarry Smith {
13953acd3b1SBarry Smith   int          ierr;
14053acd3b1SBarry Smith   PetscOptions next;
14153acd3b1SBarry Smith 
14253acd3b1SBarry Smith   PetscFunctionBegin;
143*e3ed6ec8SBarry Smith   ierr             = PetscNew(struct _p_PetscOptions,amsopt);CHKERRQ(ierr);
14453acd3b1SBarry Smith   (*amsopt)->next  = 0;
14553acd3b1SBarry Smith   (*amsopt)->set   = PETSC_FALSE;
1466356e834SBarry Smith   (*amsopt)->type  = t;
14753acd3b1SBarry Smith   (*amsopt)->data  = 0;
14853acd3b1SBarry Smith   (*amsopt)->edata = 0;
14961b37b28SSatish Balay 
15053acd3b1SBarry Smith   ierr             = PetscStrallocpy(text,&(*amsopt)->text);CHKERRQ(ierr);
15153acd3b1SBarry Smith   ierr             = PetscStrallocpy(opt,&(*amsopt)->option);CHKERRQ(ierr);
1526356e834SBarry Smith   ierr             = PetscStrallocpy(man,&(*amsopt)->man);CHKERRQ(ierr);
15353acd3b1SBarry Smith 
15453acd3b1SBarry Smith   if (!PetscOptionsObject.next) {
15553acd3b1SBarry Smith     PetscOptionsObject.next = *amsopt;
15653acd3b1SBarry Smith   } else {
15753acd3b1SBarry Smith     next = PetscOptionsObject.next;
15853acd3b1SBarry Smith     while (next->next) next = next->next;
15953acd3b1SBarry Smith     next->next = *amsopt;
16053acd3b1SBarry Smith   }
16153acd3b1SBarry Smith   PetscFunctionReturn(0);
16253acd3b1SBarry Smith }
16353acd3b1SBarry Smith 
16453acd3b1SBarry Smith #undef __FUNCT__
1656356e834SBarry Smith #define __FUNCT__ "PetscOptionsGetFromGui"
166b47fd4b1SSatish Balay PetscErrorCode PetscOptionsGetFromGUI()
1676356e834SBarry Smith {
1686356e834SBarry Smith   PetscErrorCode ierr;
1696356e834SBarry Smith   PetscOptions   next = PetscOptionsObject.next;
1706356e834SBarry Smith   char           str[512];
1716356e834SBarry Smith 
1726356e834SBarry Smith   ierr = (*PetscPrintf)(PetscOptionsObject.comm,"%s -------------------------------------------------\n",PetscOptionsObject.title);CHKERRQ(ierr);
1736356e834SBarry Smith   while (next) {
1746356e834SBarry Smith     switch (next->type) {
1756356e834SBarry Smith       case OPTION_HEAD:
1766356e834SBarry Smith         break;
1776356e834SBarry Smith       case OPTION_INT:
1786356e834SBarry 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);
1796356e834SBarry Smith         scanf("%s\n",str);
1806356e834SBarry Smith         if (str[0] != '\n') {
181b432afdaSMatthew Knepley           printf("changing value\n");
1826356e834SBarry Smith         }
1836356e834SBarry Smith         break;
184b432afdaSMatthew Knepley     default:
185b432afdaSMatthew Knepley       break;
1866356e834SBarry Smith     }
1876356e834SBarry Smith     next = next->next;
1886356e834SBarry Smith   }
1896356e834SBarry Smith   PetscFunctionReturn(0);
1906356e834SBarry Smith }
1916356e834SBarry Smith 
1926356e834SBarry Smith #undef __FUNCT__
19353acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsEnd_Private"
19453acd3b1SBarry Smith PetscErrorCode PetscOptionsEnd_Private(void)
19553acd3b1SBarry Smith {
19653acd3b1SBarry Smith   PetscErrorCode ierr;
1976356e834SBarry Smith   PetscOptions   last;
1986356e834SBarry Smith   char           option[256],value[1024],tmp[32];
1996356e834SBarry Smith   PetscInt       j;
20053acd3b1SBarry Smith 
20153acd3b1SBarry Smith   PetscFunctionBegin;
2026356e834SBarry Smith 
203265dcc83SBarry Smith   /*  if (PetscOptionsObject.next) {
2046356e834SBarry Smith     ierr = PetscOptionsGetFromGUI();
205265dcc83SBarry Smith     }*/
2066356e834SBarry Smith 
20753acd3b1SBarry Smith   ierr = PetscStrfree(PetscOptionsObject.title);CHKERRQ(ierr); PetscOptionsObject.title  = 0;
20853acd3b1SBarry Smith   ierr = PetscStrfree(PetscOptionsObject.prefix);CHKERRQ(ierr); PetscOptionsObject.prefix = 0;
2096356e834SBarry Smith 
2106356e834SBarry Smith   /* reset counter to -2; this updates the screen with the new options for the selected method */
2116356e834SBarry Smith   if (PetscOptionsObject.changedmethod) PetscOptionsPublishCount = -2;
21261b37b28SSatish Balay   /* reset alreadyprinted flag */
21361b37b28SSatish Balay   PetscOptionsObject.alreadyprinted = PETSC_FALSE;
2146356e834SBarry Smith 
2156356e834SBarry Smith   while (PetscOptionsObject.next) {
2166356e834SBarry Smith     if (PetscOptionsObject.next->set) {
2176356e834SBarry Smith       if (PetscOptionsObject.prefix) {
2186356e834SBarry Smith         ierr = PetscStrcpy(option,"-");CHKERRQ(ierr);
2196356e834SBarry Smith         ierr = PetscStrcat(option,PetscOptionsObject.prefix);CHKERRQ(ierr);
2206356e834SBarry Smith         ierr = PetscStrcat(option,PetscOptionsObject.next->option+1);CHKERRQ(ierr);
2216356e834SBarry Smith       } else {
2226356e834SBarry Smith         ierr = PetscStrcpy(option,PetscOptionsObject.next->option);CHKERRQ(ierr);
2236356e834SBarry Smith       }
2246356e834SBarry Smith 
2256356e834SBarry Smith       switch (PetscOptionsObject.next->type) {
2266356e834SBarry Smith         case OPTION_HEAD:
2276356e834SBarry Smith           break;
2286356e834SBarry Smith         case OPTION_INT:
2296356e834SBarry Smith           sprintf(value,"%d",*(PetscInt*)PetscOptionsObject.next->data);
2306356e834SBarry Smith           break;
2316356e834SBarry Smith         case OPTION_REAL:
2326356e834SBarry Smith           sprintf(value,"%g",*(PetscReal*)PetscOptionsObject.next->data);
2336356e834SBarry Smith           break;
2346356e834SBarry Smith         case OPTION_REAL_ARRAY:
2356356e834SBarry Smith           sprintf(value,"%g",((PetscReal*)PetscOptionsObject.next->data)[0]);
2366356e834SBarry Smith           for (j=1; j<PetscOptionsObject.next->arraylength; j++) {
2376356e834SBarry Smith             sprintf(tmp,"%g",((PetscReal*)PetscOptionsObject.next->data)[j]);
2386356e834SBarry Smith             ierr = PetscStrcat(value,",");CHKERRQ(ierr);
2396356e834SBarry Smith             ierr = PetscStrcat(value,tmp);CHKERRQ(ierr);
2406356e834SBarry Smith           }
2416356e834SBarry Smith           break;
2426356e834SBarry Smith         case OPTION_LOGICAL:
2436356e834SBarry Smith           sprintf(value,"%d",*(PetscInt*)PetscOptionsObject.next->data);
2446356e834SBarry Smith           break;
2456356e834SBarry Smith         case OPTION_LIST:
2466356e834SBarry Smith           ierr = PetscStrcpy(value,*(char**)PetscOptionsObject.next->data);CHKERRQ(ierr);
2476356e834SBarry Smith           break;
2486356e834SBarry Smith         case OPTION_STRING: /* also handles string arrays */
2496356e834SBarry Smith           ierr = PetscStrcpy(value,*(char**)PetscOptionsObject.next->data);CHKERRQ(ierr);
2506356e834SBarry Smith           break;
2516356e834SBarry Smith       }
2526356e834SBarry Smith       ierr = PetscOptionsSetValue(option,value);CHKERRQ(ierr);
2536356e834SBarry Smith     }
2546356e834SBarry Smith     ierr   = PetscStrfree(PetscOptionsObject.next->text);CHKERRQ(ierr);
2556356e834SBarry Smith     ierr   = PetscStrfree(PetscOptionsObject.next->option);CHKERRQ(ierr);
2566356e834SBarry Smith     ierr   = PetscFree(PetscOptionsObject.next->man);CHKERRQ(ierr);
25705b42c5fSBarry Smith     ierr   = PetscFree(PetscOptionsObject.next->data);CHKERRQ(ierr);
25805b42c5fSBarry Smith     ierr   = PetscFree(PetscOptionsObject.next->edata);CHKERRQ(ierr);
2596356e834SBarry Smith     last                    = PetscOptionsObject.next;
2606356e834SBarry Smith     PetscOptionsObject.next = PetscOptionsObject.next->next;
2616356e834SBarry Smith     ierr                    = PetscFree(last);CHKERRQ(ierr);
2626356e834SBarry Smith   }
2636356e834SBarry Smith   PetscOptionsObject.next = 0;
26453acd3b1SBarry Smith   PetscFunctionReturn(0);
26553acd3b1SBarry Smith }
26653acd3b1SBarry Smith 
26753acd3b1SBarry Smith #undef __FUNCT__
26853acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsEnum"
26953acd3b1SBarry Smith /*@C
27053acd3b1SBarry Smith    PetscOptionsEnum - Gets the enum value for a particular option in the database.
27153acd3b1SBarry Smith 
27253acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
27353acd3b1SBarry Smith 
27453acd3b1SBarry Smith    Input Parameters:
27553acd3b1SBarry Smith +  opt - option name
27653acd3b1SBarry Smith .  text - short string that describes the option
27753acd3b1SBarry Smith .  man - manual page with additional information on option
27853acd3b1SBarry Smith .  list - array containing the list of choices, followed by the enum name, followed by the enum prefix, followed by a null
27953acd3b1SBarry Smith -  defaultv - the default (current) value
28053acd3b1SBarry Smith 
28153acd3b1SBarry Smith    Output Parameter:
28253acd3b1SBarry Smith +  value - the  value to return
28353acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
28453acd3b1SBarry Smith 
28553acd3b1SBarry Smith    Level: beginner
28653acd3b1SBarry Smith 
28753acd3b1SBarry Smith    Concepts: options database
28853acd3b1SBarry Smith 
28953acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
29053acd3b1SBarry Smith 
29153acd3b1SBarry Smith           list is usually something like PCASMTypes or some other predefined list of enum names
29253acd3b1SBarry Smith 
29353acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
29453acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
29553acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
29653acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
29753acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
29853acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
29953acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
30053acd3b1SBarry Smith @*/
30153acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsEnum(const char opt[],const char text[],const char man[],const char **list,PetscEnum defaultv,PetscEnum *value,PetscTruth *set)
30253acd3b1SBarry Smith {
30353acd3b1SBarry Smith   PetscErrorCode ierr;
30453acd3b1SBarry Smith   PetscInt       ntext = 0;
30553acd3b1SBarry Smith 
30653acd3b1SBarry Smith   PetscFunctionBegin;
30753acd3b1SBarry Smith   while (list[ntext++]) {
30853acd3b1SBarry Smith     if (ntext > 50) SETERRQ(PETSC_ERR_ARG_WRONG,"List argument appears to be wrong or have more than 50 entries");
30953acd3b1SBarry Smith   }
31053acd3b1SBarry Smith   if (ntext < 3) SETERRQ(PETSC_ERR_ARG_WRONG,"List argument must have at least two entries: typename and type prefix");
31153acd3b1SBarry Smith   ntext -= 3;
31253acd3b1SBarry Smith   ierr = PetscOptionsEList(opt,text,man,list,ntext,list[defaultv],(PetscInt*)value,set);CHKERRQ(ierr);
31353acd3b1SBarry Smith   PetscFunctionReturn(0);
31453acd3b1SBarry Smith }
31553acd3b1SBarry Smith 
31653acd3b1SBarry Smith /* -------------------------------------------------------------------------------------------------------------*/
31753acd3b1SBarry Smith #undef __FUNCT__
31853acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsInt"
31953acd3b1SBarry Smith /*@C
32053acd3b1SBarry Smith    PetscOptionsInt - Gets the integer value for a particular option in the database.
32153acd3b1SBarry Smith 
32253acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
32353acd3b1SBarry Smith 
32453acd3b1SBarry Smith    Input Parameters:
32553acd3b1SBarry Smith +  opt - option name
32653acd3b1SBarry Smith .  text - short string that describes the option
32753acd3b1SBarry Smith .  man - manual page with additional information on option
32853acd3b1SBarry Smith -  defaultv - the default (current) value
32953acd3b1SBarry Smith 
33053acd3b1SBarry Smith    Output Parameter:
33153acd3b1SBarry Smith +  value - the integer value to return
33253acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
33353acd3b1SBarry Smith 
33453acd3b1SBarry Smith    Level: beginner
33553acd3b1SBarry Smith 
33653acd3b1SBarry Smith    Concepts: options database^has int
33753acd3b1SBarry Smith 
33853acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
33953acd3b1SBarry Smith 
34053acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
34153acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
34253acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
34353acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
34453acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
34553acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
34653acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
34753acd3b1SBarry Smith @*/
34853acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsInt(const char opt[],const char text[],const char man[],PetscInt defaultv,PetscInt *value,PetscTruth *set)
34953acd3b1SBarry Smith {
35053acd3b1SBarry Smith   PetscErrorCode ierr;
3516356e834SBarry Smith   PetscOptions   amsopt;
35253acd3b1SBarry Smith 
35353acd3b1SBarry Smith   PetscFunctionBegin;
3546356e834SBarry Smith   if (PetscOptionsPublishCount == 1) {
3556356e834SBarry Smith     ierr = PetscOptionsCreate_Private(opt,text,man,OPTION_INT,&amsopt);CHKERRQ(ierr);
3566356e834SBarry Smith     ierr = PetscMalloc(sizeof(PetscInt),&amsopt->data);CHKERRQ(ierr);
3576356e834SBarry Smith     *(PetscInt*)amsopt->data = defaultv;
3586356e834SBarry Smith   }
35953acd3b1SBarry Smith   ierr = PetscOptionsGetInt(PetscOptionsObject.prefix,opt,value,set);CHKERRQ(ierr);
36061b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
36153acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%d>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv,text,man);CHKERRQ(ierr);
36253acd3b1SBarry Smith   }
36353acd3b1SBarry Smith   PetscFunctionReturn(0);
36453acd3b1SBarry Smith }
36553acd3b1SBarry Smith 
36653acd3b1SBarry Smith #undef __FUNCT__
36753acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsString"
36853acd3b1SBarry Smith /*@C
36953acd3b1SBarry Smith    PetscOptionsString - Gets the string value for a particular option in the database.
37053acd3b1SBarry Smith 
37153acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
37253acd3b1SBarry Smith 
37353acd3b1SBarry Smith    Input Parameters:
37453acd3b1SBarry Smith +  opt - option name
37553acd3b1SBarry Smith .  text - short string that describes the option
37653acd3b1SBarry Smith .  man - manual page with additional information on option
37753acd3b1SBarry Smith -  defaultv - the default (current) value
37853acd3b1SBarry Smith 
37953acd3b1SBarry Smith    Output Parameter:
38053acd3b1SBarry Smith +  value - the value to return
38153acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
38253acd3b1SBarry Smith 
38353acd3b1SBarry Smith    Level: beginner
38453acd3b1SBarry Smith 
38553acd3b1SBarry Smith    Concepts: options database^has int
38653acd3b1SBarry Smith 
38753acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
38853acd3b1SBarry Smith 
38953acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
39053acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
39153acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
39253acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
39353acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
39453acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
39553acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
39653acd3b1SBarry Smith @*/
39753acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsString(const char opt[],const char text[],const char man[],const char defaultv[],char value[],size_t len,PetscTruth *set)
39853acd3b1SBarry Smith {
39953acd3b1SBarry Smith   PetscErrorCode ierr;
40053acd3b1SBarry Smith 
40153acd3b1SBarry Smith   PetscFunctionBegin;
40253acd3b1SBarry Smith   ierr = PetscOptionsGetString(PetscOptionsObject.prefix,opt,value,len,set);CHKERRQ(ierr);
40361b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
40453acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%s>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv,text,man);CHKERRQ(ierr);
40553acd3b1SBarry Smith   }
40653acd3b1SBarry Smith   PetscFunctionReturn(0);
40753acd3b1SBarry Smith }
40853acd3b1SBarry Smith 
40953acd3b1SBarry Smith /*
41053acd3b1SBarry Smith      Publishes an AMS double field (with the default value in it) and with a name
41153acd3b1SBarry Smith    given by the text string
41253acd3b1SBarry Smith */
41353acd3b1SBarry Smith #undef __FUNCT__
41453acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsReal"
41553acd3b1SBarry Smith /*@C
41653acd3b1SBarry Smith    PetscOptionsReal - Gets the PetscReal value for a particular option in the database.
41753acd3b1SBarry Smith 
41853acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
41953acd3b1SBarry Smith 
42053acd3b1SBarry Smith    Input Parameters:
42153acd3b1SBarry Smith +  opt - option name
42253acd3b1SBarry Smith .  text - short string that describes the option
42353acd3b1SBarry Smith .  man - manual page with additional information on option
42453acd3b1SBarry Smith -  defaultv - the default (current) value
42553acd3b1SBarry Smith 
42653acd3b1SBarry Smith    Output Parameter:
42753acd3b1SBarry Smith +  value - the value to return
42853acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
42953acd3b1SBarry Smith 
43053acd3b1SBarry Smith    Level: beginner
43153acd3b1SBarry Smith 
43253acd3b1SBarry Smith    Concepts: options database^has int
43353acd3b1SBarry Smith 
43453acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
43553acd3b1SBarry Smith 
43653acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
43753acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
43853acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
43953acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
44053acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
44153acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
44253acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
44353acd3b1SBarry Smith @*/
44453acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsReal(const char opt[],const char text[],const char man[],PetscReal defaultv,PetscReal *value,PetscTruth *set)
44553acd3b1SBarry Smith {
44653acd3b1SBarry Smith   PetscErrorCode ierr;
44753acd3b1SBarry Smith 
44853acd3b1SBarry Smith   PetscFunctionBegin;
44953acd3b1SBarry Smith   ierr = PetscOptionsGetReal(PetscOptionsObject.prefix,opt,value,set);CHKERRQ(ierr);
45061b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
451a83599f4SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%G>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv,text,man);CHKERRQ(ierr);
45253acd3b1SBarry Smith   }
45353acd3b1SBarry Smith   PetscFunctionReturn(0);
45453acd3b1SBarry Smith }
45553acd3b1SBarry Smith 
45653acd3b1SBarry Smith #undef __FUNCT__
45753acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsScalar"
45853acd3b1SBarry Smith /*@C
45953acd3b1SBarry Smith    PetscOptionsScalar - Gets the scalar value for a particular option in the database.
46053acd3b1SBarry Smith 
46153acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
46253acd3b1SBarry Smith 
46353acd3b1SBarry Smith    Input Parameters:
46453acd3b1SBarry Smith +  opt - option name
46553acd3b1SBarry Smith .  text - short string that describes the option
46653acd3b1SBarry Smith .  man - manual page with additional information on option
46753acd3b1SBarry Smith -  defaultv - the default (current) value
46853acd3b1SBarry Smith 
46953acd3b1SBarry Smith    Output Parameter:
47053acd3b1SBarry Smith +  value - the value to return
47153acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
47253acd3b1SBarry Smith 
47353acd3b1SBarry Smith    Level: beginner
47453acd3b1SBarry Smith 
47553acd3b1SBarry Smith    Concepts: options database^has int
47653acd3b1SBarry Smith 
47753acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
47853acd3b1SBarry Smith 
47953acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
48053acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
48153acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
48253acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
48353acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
48453acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
48553acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
48653acd3b1SBarry Smith @*/
48753acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsScalar(const char opt[],const char text[],const char man[],PetscScalar defaultv,PetscScalar *value,PetscTruth *set)
48853acd3b1SBarry Smith {
48953acd3b1SBarry Smith   PetscErrorCode ierr;
49053acd3b1SBarry Smith 
49153acd3b1SBarry Smith   PetscFunctionBegin;
49253acd3b1SBarry Smith #if !defined(PETSC_USE_COMPLEX)
49353acd3b1SBarry Smith   ierr = PetscOptionsReal(opt,text,man,defaultv,value,set);CHKERRQ(ierr);
49453acd3b1SBarry Smith #else
49553acd3b1SBarry Smith   ierr = PetscOptionsGetScalar(PetscOptionsObject.prefix,opt,value,set);CHKERRQ(ierr);
49653acd3b1SBarry Smith #endif
49753acd3b1SBarry Smith   PetscFunctionReturn(0);
49853acd3b1SBarry Smith }
49953acd3b1SBarry Smith 
50053acd3b1SBarry Smith /*
50153acd3b1SBarry Smith      Publishes an AMS logical field (with the default value in it) and with a name
50253acd3b1SBarry Smith    given by the text string
50353acd3b1SBarry Smith */
50453acd3b1SBarry Smith #undef __FUNCT__
50553acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsName"
50653acd3b1SBarry Smith /*@C
50753acd3b1SBarry Smith    PetscOptionsName - Determines if a particular option is in the database
50853acd3b1SBarry Smith 
50953acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
51053acd3b1SBarry Smith 
51153acd3b1SBarry Smith    Input Parameters:
51253acd3b1SBarry Smith +  opt - option name
51353acd3b1SBarry Smith .  text - short string that describes the option
51453acd3b1SBarry Smith -  man - manual page with additional information on option
51553acd3b1SBarry Smith 
51653acd3b1SBarry Smith    Output Parameter:
51753acd3b1SBarry Smith .  flg - PETSC_TRUE if found, else PETSC_FALSE
51853acd3b1SBarry Smith 
51953acd3b1SBarry Smith    Level: beginner
52053acd3b1SBarry Smith 
52153acd3b1SBarry Smith    Concepts: options database^has int
52253acd3b1SBarry Smith 
52353acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
52453acd3b1SBarry Smith 
52553acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
52653acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
52753acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
52853acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
52953acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
53053acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
53153acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
53253acd3b1SBarry Smith @*/
53353acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsName(const char opt[],const char text[],const char man[],PetscTruth *flg)
53453acd3b1SBarry Smith {
53553acd3b1SBarry Smith   PetscErrorCode ierr;
53653acd3b1SBarry Smith 
53753acd3b1SBarry Smith   PetscFunctionBegin;
53853acd3b1SBarry Smith   ierr = PetscOptionsHasName(PetscOptionsObject.prefix,opt,flg);CHKERRQ(ierr);
53961b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
54053acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
54153acd3b1SBarry Smith   }
54253acd3b1SBarry Smith   PetscFunctionReturn(0);
54353acd3b1SBarry Smith }
54453acd3b1SBarry Smith 
54553acd3b1SBarry Smith #undef __FUNCT__
54653acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsList"
54753acd3b1SBarry Smith /*@C
54853acd3b1SBarry Smith      PetscOptionsList - Puts a list of option values that a single one may be selected from
54953acd3b1SBarry Smith 
55053acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
55153acd3b1SBarry Smith 
55253acd3b1SBarry Smith    Input Parameters:
55353acd3b1SBarry Smith +  opt - option name
55453acd3b1SBarry Smith .  text - short string that describes the option
55553acd3b1SBarry Smith .  man - manual page with additional information on option
55653acd3b1SBarry Smith .  list - the possible choices
55753acd3b1SBarry Smith -  defaultv - the default (current) value
55853acd3b1SBarry Smith 
55953acd3b1SBarry Smith    Output Parameter:
56053acd3b1SBarry Smith +  value - the value to return
56153acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
56253acd3b1SBarry Smith 
56353acd3b1SBarry Smith    Level: intermediate
56453acd3b1SBarry Smith 
56553acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
56653acd3b1SBarry Smith 
56753acd3b1SBarry Smith    See PetscOptionsEList() for when the choices are given in a string array
56853acd3b1SBarry Smith 
56953acd3b1SBarry Smith    To get a listing of all currently specified options,
57053acd3b1SBarry Smith     see PetscOptionsPrint() or PetscOptionsGetAll()
57153acd3b1SBarry Smith 
57253acd3b1SBarry Smith    Concepts: options database^list
57353acd3b1SBarry Smith 
57453acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
57553acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
57653acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
57753acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
57853acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
57953acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
58053acd3b1SBarry Smith @*/
58153acd3b1SBarry 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)
58253acd3b1SBarry Smith {
58353acd3b1SBarry Smith   PetscErrorCode ierr;
58453acd3b1SBarry Smith 
58553acd3b1SBarry Smith   PetscFunctionBegin;
58653acd3b1SBarry Smith   ierr = PetscOptionsGetString(PetscOptionsObject.prefix,opt,value,len,set);CHKERRQ(ierr);
58761b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
5881d280d73SBarry Smith     ierr = PetscFListPrintTypes(list,PetscOptionsObject.comm,stdout,PetscOptionsObject.prefix,opt,ltext,man);CHKERRQ(ierr);CHKERRQ(ierr);
58953acd3b1SBarry Smith   }
59053acd3b1SBarry Smith   PetscFunctionReturn(0);
59153acd3b1SBarry Smith }
59253acd3b1SBarry Smith 
59353acd3b1SBarry Smith #undef __FUNCT__
59453acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsEList"
59553acd3b1SBarry Smith /*@C
59653acd3b1SBarry Smith      PetscOptionsEList - Puts a list of option values that a single one may be selected from
59753acd3b1SBarry Smith 
59853acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
59953acd3b1SBarry Smith 
60053acd3b1SBarry Smith    Input Parameters:
60153acd3b1SBarry Smith +  opt - option name
60253acd3b1SBarry Smith .  ltext - short string that describes the option
60353acd3b1SBarry Smith .  man - manual page with additional information on option
60453acd3b1SBarry Smith .  list - the possible choices
60553acd3b1SBarry Smith .  ntext - number of choices
60653acd3b1SBarry Smith -  defaultv - the default (current) value
60753acd3b1SBarry Smith 
60853acd3b1SBarry Smith    Output Parameter:
60953acd3b1SBarry Smith +  value - the index of the value to return
61053acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
61153acd3b1SBarry Smith 
61253acd3b1SBarry Smith    Level: intermediate
61353acd3b1SBarry Smith 
61453acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
61553acd3b1SBarry Smith 
61653acd3b1SBarry Smith    See PetscOptionsList() for when the choices are given in a PetscFList()
61753acd3b1SBarry Smith 
61853acd3b1SBarry Smith    Concepts: options database^list
61953acd3b1SBarry Smith 
62053acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
62153acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
62253acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
62353acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
62453acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
62553acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
62653acd3b1SBarry Smith @*/
62753acd3b1SBarry 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)
62853acd3b1SBarry Smith {
62953acd3b1SBarry Smith   PetscErrorCode ierr;
63053acd3b1SBarry Smith   PetscInt       i;
63153acd3b1SBarry Smith 
63253acd3b1SBarry Smith   PetscFunctionBegin;
63353acd3b1SBarry Smith   ierr = PetscOptionsGetEList(PetscOptionsObject.prefix,opt,list,ntext,value,set);CHKERRQ(ierr);
63461b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
63553acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%s> (choose one of)",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv);CHKERRQ(ierr);
63653acd3b1SBarry Smith     for (i=0; i<ntext; i++){
63753acd3b1SBarry Smith       ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm," %s",list[i]);CHKERRQ(ierr);
63853acd3b1SBarry Smith     }
63953acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"\n");CHKERRQ(ierr);
64053acd3b1SBarry Smith   }
64153acd3b1SBarry Smith   PetscFunctionReturn(0);
64253acd3b1SBarry Smith }
64353acd3b1SBarry Smith 
64453acd3b1SBarry Smith #undef __FUNCT__
64553acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruthGroupBegin"
64653acd3b1SBarry Smith /*@C
64753acd3b1SBarry Smith      PetscOptionsTruthGroupBegin - First in a series of logical queries on the options database for
64853acd3b1SBarry Smith        which only a single value can be true.
64953acd3b1SBarry Smith 
65053acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
65153acd3b1SBarry Smith 
65253acd3b1SBarry Smith    Input Parameters:
65353acd3b1SBarry Smith +  opt - option name
65453acd3b1SBarry Smith .  text - short string that describes the option
65553acd3b1SBarry Smith -  man - manual page with additional information on option
65653acd3b1SBarry Smith 
65753acd3b1SBarry Smith    Output Parameter:
65853acd3b1SBarry Smith .  flg - whether that option was set or not
65953acd3b1SBarry Smith 
66053acd3b1SBarry Smith    Level: intermediate
66153acd3b1SBarry Smith 
66253acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
66353acd3b1SBarry Smith 
66453acd3b1SBarry Smith    Must be followed by 0 or more PetscOptionsTruthGroup()s and PetscOptionsTruthGroupEnd()
66553acd3b1SBarry Smith 
66653acd3b1SBarry Smith     Concepts: options database^logical group
66753acd3b1SBarry Smith 
66853acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
66953acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
67053acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
67153acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
67253acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
67353acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
67453acd3b1SBarry Smith @*/
67553acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruthGroupBegin(const char opt[],const char text[],const char man[],PetscTruth *flg)
67653acd3b1SBarry Smith {
67753acd3b1SBarry Smith   PetscErrorCode ierr;
67853acd3b1SBarry Smith 
67953acd3b1SBarry Smith   PetscFunctionBegin;
68053acd3b1SBarry Smith   ierr = PetscOptionsHasName(PetscOptionsObject.prefix,opt,flg);CHKERRQ(ierr);
68161b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
68253acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  Pick at most one of -------------\n");CHKERRQ(ierr);
68353acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"    -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
68453acd3b1SBarry Smith   }
68553acd3b1SBarry Smith   PetscFunctionReturn(0);
68653acd3b1SBarry Smith }
68753acd3b1SBarry Smith 
68853acd3b1SBarry Smith #undef __FUNCT__
68953acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruthGroup"
69053acd3b1SBarry Smith /*@C
69153acd3b1SBarry Smith      PetscOptionsTruthGroup - One in a series of logical queries on the options database for
69253acd3b1SBarry Smith        which only a single value can be true.
69353acd3b1SBarry Smith 
69453acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
69553acd3b1SBarry Smith 
69653acd3b1SBarry Smith    Input Parameters:
69753acd3b1SBarry Smith +  opt - option name
69853acd3b1SBarry Smith .  text - short string that describes the option
69953acd3b1SBarry Smith -  man - manual page with additional information on option
70053acd3b1SBarry Smith 
70153acd3b1SBarry Smith    Output Parameter:
70253acd3b1SBarry Smith .  flg - PETSC_TRUE if found, else PETSC_FALSE
70353acd3b1SBarry Smith 
70453acd3b1SBarry Smith    Level: intermediate
70553acd3b1SBarry Smith 
70653acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
70753acd3b1SBarry Smith 
70853acd3b1SBarry Smith    Must follow a PetscOptionsTruthGroupBegin() and preceded a PetscOptionsTruthGroupEnd()
70953acd3b1SBarry Smith 
71053acd3b1SBarry Smith     Concepts: options database^logical group
71153acd3b1SBarry Smith 
71253acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
71353acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
71453acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
71553acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
71653acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
71753acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
71853acd3b1SBarry Smith @*/
71953acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruthGroup(const char opt[],const char text[],const char man[],PetscTruth *flg)
72053acd3b1SBarry Smith {
72153acd3b1SBarry Smith   PetscErrorCode ierr;
72253acd3b1SBarry Smith 
72353acd3b1SBarry Smith   PetscFunctionBegin;
72453acd3b1SBarry Smith   ierr = PetscOptionsHasName(PetscOptionsObject.prefix,opt,flg);CHKERRQ(ierr);
72561b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
72653acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"    -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
72753acd3b1SBarry Smith   }
72853acd3b1SBarry Smith   PetscFunctionReturn(0);
72953acd3b1SBarry Smith }
73053acd3b1SBarry Smith 
73153acd3b1SBarry Smith #undef __FUNCT__
73253acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruthGroupEnd"
73353acd3b1SBarry Smith /*@C
73453acd3b1SBarry Smith      PetscOptionsTruthGroupEnd - Last in a series of logical queries on the options database for
73553acd3b1SBarry Smith        which only a single value can be true.
73653acd3b1SBarry Smith 
73753acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
73853acd3b1SBarry Smith 
73953acd3b1SBarry Smith    Input Parameters:
74053acd3b1SBarry Smith +  opt - option name
74153acd3b1SBarry Smith .  text - short string that describes the option
74253acd3b1SBarry Smith -  man - manual page with additional information on option
74353acd3b1SBarry Smith 
74453acd3b1SBarry Smith    Output Parameter:
74553acd3b1SBarry Smith .  flg - PETSC_TRUE if found, else PETSC_FALSE
74653acd3b1SBarry Smith 
74753acd3b1SBarry Smith    Level: intermediate
74853acd3b1SBarry Smith 
74953acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
75053acd3b1SBarry Smith 
75153acd3b1SBarry Smith    Must follow a PetscOptionsTruthGroupBegin()
75253acd3b1SBarry Smith 
75353acd3b1SBarry Smith     Concepts: options database^logical group
75453acd3b1SBarry Smith 
75553acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
75653acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
75753acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
75853acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
75953acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
76053acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
76153acd3b1SBarry Smith @*/
76253acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruthGroupEnd(const char opt[],const char text[],const char man[],PetscTruth *flg)
76353acd3b1SBarry Smith {
76453acd3b1SBarry Smith   PetscErrorCode ierr;
76553acd3b1SBarry Smith 
76653acd3b1SBarry Smith   PetscFunctionBegin;
76753acd3b1SBarry Smith   ierr = PetscOptionsHasName(PetscOptionsObject.prefix,opt,flg);CHKERRQ(ierr);
76861b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
76953acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"    -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
77053acd3b1SBarry Smith   }
77153acd3b1SBarry Smith   PetscFunctionReturn(0);
77253acd3b1SBarry Smith }
77353acd3b1SBarry Smith 
77453acd3b1SBarry Smith #undef __FUNCT__
77553acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruth"
77653acd3b1SBarry Smith /*@C
77753acd3b1SBarry Smith    PetscOptionsTruth - Determines if a particular option is in the database with a true or false
77853acd3b1SBarry Smith 
77953acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
78053acd3b1SBarry Smith 
78153acd3b1SBarry Smith    Input Parameters:
78253acd3b1SBarry Smith +  opt - option name
78353acd3b1SBarry Smith .  text - short string that describes the option
78453acd3b1SBarry Smith -  man - manual page with additional information on option
78553acd3b1SBarry Smith 
78653acd3b1SBarry Smith    Output Parameter:
78753acd3b1SBarry Smith .  flg - PETSC_TRUE or PETSC_FALSE
78853acd3b1SBarry Smith .  set - PETSC_TRUE if found, else PETSC_FALSE
78953acd3b1SBarry Smith 
79053acd3b1SBarry Smith    Level: beginner
79153acd3b1SBarry Smith 
79253acd3b1SBarry Smith    Concepts: options database^logical
79353acd3b1SBarry Smith 
79453acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
79553acd3b1SBarry Smith 
79653acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
79753acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
79853acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
79953acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
80053acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
80153acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
80253acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
80353acd3b1SBarry Smith @*/
80453acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruth(const char opt[],const char text[],const char man[],PetscTruth deflt,PetscTruth *flg,PetscTruth *set)
80553acd3b1SBarry Smith {
80653acd3b1SBarry Smith   PetscErrorCode ierr;
80753acd3b1SBarry Smith   PetscTruth     iset;
80853acd3b1SBarry Smith 
80953acd3b1SBarry Smith   PetscFunctionBegin;
81053acd3b1SBarry Smith   ierr = PetscOptionsGetTruth(PetscOptionsObject.prefix,opt,flg,&iset);CHKERRQ(ierr);
81153acd3b1SBarry Smith   if (!iset) {
81253acd3b1SBarry Smith     if (flg) *flg = deflt;
81353acd3b1SBarry Smith   }
81453acd3b1SBarry Smith   if (set) *set = iset;
81561b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
81653acd3b1SBarry Smith     const char *v = PetscTruths[deflt];
81753acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s: <%s> %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,v,text,man);CHKERRQ(ierr);
81853acd3b1SBarry Smith   }
81953acd3b1SBarry Smith   PetscFunctionReturn(0);
82053acd3b1SBarry Smith }
82153acd3b1SBarry Smith 
82253acd3b1SBarry Smith #undef __FUNCT__
82353acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsRealArray"
82453acd3b1SBarry Smith /*@C
82553acd3b1SBarry Smith    PetscOptionsRealArray - Gets an array of double values for a particular
82653acd3b1SBarry Smith    option in the database. The values must be separated with commas with
82753acd3b1SBarry Smith    no intervening spaces.
82853acd3b1SBarry Smith 
82953acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
83053acd3b1SBarry Smith 
83153acd3b1SBarry Smith    Input Parameters:
83253acd3b1SBarry Smith +  opt - the option one is seeking
83353acd3b1SBarry Smith .  text - short string describing option
83453acd3b1SBarry Smith .  man - manual page for option
83553acd3b1SBarry Smith -  nmax - maximum number of values
83653acd3b1SBarry Smith 
83753acd3b1SBarry Smith    Output Parameter:
83853acd3b1SBarry Smith +  value - location to copy values
83953acd3b1SBarry Smith .  nmax - actual number of values found
84053acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
84153acd3b1SBarry Smith 
84253acd3b1SBarry Smith    Level: beginner
84353acd3b1SBarry Smith 
84453acd3b1SBarry Smith    Notes:
84553acd3b1SBarry Smith    The user should pass in an array of doubles
84653acd3b1SBarry Smith 
84753acd3b1SBarry Smith    Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
84853acd3b1SBarry Smith 
84953acd3b1SBarry Smith    Concepts: options database^array of strings
85053acd3b1SBarry Smith 
85153acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
85253acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
85353acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
85453acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
85553acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
85653acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
85753acd3b1SBarry Smith @*/
85853acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsRealArray(const char opt[],const char text[],const char man[],PetscReal value[],PetscInt *n,PetscTruth *set)
85953acd3b1SBarry Smith {
86053acd3b1SBarry Smith   PetscErrorCode ierr;
86153acd3b1SBarry Smith   PetscInt       i;
86253acd3b1SBarry Smith 
86353acd3b1SBarry Smith   PetscFunctionBegin;
86453acd3b1SBarry Smith   ierr = PetscOptionsGetRealArray(PetscOptionsObject.prefix,opt,value,n,set);CHKERRQ(ierr);
86561b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
866a83599f4SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%G",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,value[0]);CHKERRQ(ierr);
86753acd3b1SBarry Smith     for (i=1; i<*n; i++) {
868a83599f4SBarry Smith       ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,",%G",value[i]);CHKERRQ(ierr);
86953acd3b1SBarry Smith     }
87053acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,">: %s (%s)\n",text,man);CHKERRQ(ierr);
87153acd3b1SBarry Smith   }
87253acd3b1SBarry Smith   PetscFunctionReturn(0);
87353acd3b1SBarry Smith }
87453acd3b1SBarry Smith 
87553acd3b1SBarry Smith 
87653acd3b1SBarry Smith #undef __FUNCT__
87753acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsIntArray"
87853acd3b1SBarry Smith /*@C
87953acd3b1SBarry Smith    PetscOptionsIntArray - Gets an array of integers for a particular
88053acd3b1SBarry Smith    option in the database. The values must be separated with commas with
88153acd3b1SBarry Smith    no intervening spaces.
88253acd3b1SBarry Smith 
88353acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
88453acd3b1SBarry Smith 
88553acd3b1SBarry Smith    Input Parameters:
88653acd3b1SBarry Smith +  opt - the option one is seeking
88753acd3b1SBarry Smith .  text - short string describing option
88853acd3b1SBarry Smith .  man - manual page for option
88953acd3b1SBarry Smith -  nmax - maximum number of values
89053acd3b1SBarry Smith 
89153acd3b1SBarry Smith    Output Parameter:
89253acd3b1SBarry Smith +  value - location to copy values
89353acd3b1SBarry Smith .  nmax - actual number of values found
89453acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
89553acd3b1SBarry Smith 
89653acd3b1SBarry Smith    Level: beginner
89753acd3b1SBarry Smith 
89853acd3b1SBarry Smith    Notes:
89953acd3b1SBarry Smith    The user should pass in an array of integers
90053acd3b1SBarry Smith 
90153acd3b1SBarry Smith    Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
90253acd3b1SBarry Smith 
90353acd3b1SBarry Smith    Concepts: options database^array of strings
90453acd3b1SBarry Smith 
90553acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
90653acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
90753acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
90853acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
90953acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
91053acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList(), PetscOptionsRealArray()
91153acd3b1SBarry Smith @*/
91253acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsIntArray(const char opt[],const char text[],const char man[],PetscInt value[],PetscInt *n,PetscTruth *set)
91353acd3b1SBarry Smith {
91453acd3b1SBarry Smith   PetscErrorCode ierr;
91553acd3b1SBarry Smith   PetscInt       i;
91653acd3b1SBarry Smith 
91753acd3b1SBarry Smith   PetscFunctionBegin;
91853acd3b1SBarry Smith   ierr = PetscOptionsGetIntArray(PetscOptionsObject.prefix,opt,value,n,set);CHKERRQ(ierr);
91961b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
92053acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%d",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,value[0]);CHKERRQ(ierr);
92153acd3b1SBarry Smith     for (i=1; i<*n; i++) {
92253acd3b1SBarry Smith       ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,",%d",value[i]);CHKERRQ(ierr);
92353acd3b1SBarry Smith     }
92453acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,">: %s (%s)\n",text,man);CHKERRQ(ierr);
92553acd3b1SBarry Smith   }
92653acd3b1SBarry Smith   PetscFunctionReturn(0);
92753acd3b1SBarry Smith }
92853acd3b1SBarry Smith 
92953acd3b1SBarry Smith #undef __FUNCT__
93053acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsStringArray"
93153acd3b1SBarry Smith /*@C
93253acd3b1SBarry Smith    PetscOptionsStringArray - Gets an array of string values for a particular
93353acd3b1SBarry Smith    option in the database. The values must be separated with commas with
93453acd3b1SBarry Smith    no intervening spaces.
93553acd3b1SBarry Smith 
93653acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
93753acd3b1SBarry Smith 
93853acd3b1SBarry Smith    Input Parameters:
93953acd3b1SBarry Smith +  opt - the option one is seeking
94053acd3b1SBarry Smith .  text - short string describing option
94153acd3b1SBarry Smith .  man - manual page for option
94253acd3b1SBarry Smith -  nmax - maximum number of strings
94353acd3b1SBarry Smith 
94453acd3b1SBarry Smith    Output Parameter:
94553acd3b1SBarry Smith +  value - location to copy strings
94653acd3b1SBarry Smith .  nmax - actual number of strings found
94753acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
94853acd3b1SBarry Smith 
94953acd3b1SBarry Smith    Level: beginner
95053acd3b1SBarry Smith 
95153acd3b1SBarry Smith    Notes:
95253acd3b1SBarry Smith    The user should pass in an array of pointers to char, to hold all the
95353acd3b1SBarry Smith    strings returned by this function.
95453acd3b1SBarry Smith 
95553acd3b1SBarry Smith    The user is responsible for deallocating the strings that are
95653acd3b1SBarry Smith    returned. The Fortran interface for this routine is not supported.
95753acd3b1SBarry Smith 
95853acd3b1SBarry Smith    Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
95953acd3b1SBarry Smith 
96053acd3b1SBarry Smith    Concepts: options database^array of strings
96153acd3b1SBarry Smith 
96253acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
96353acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
96453acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
96553acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
96653acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
96753acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
96853acd3b1SBarry Smith @*/
96953acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsStringArray(const char opt[],const char text[],const char man[],char *value[],PetscInt *nmax,PetscTruth *set)
97053acd3b1SBarry Smith {
97153acd3b1SBarry Smith   PetscErrorCode ierr;
97253acd3b1SBarry Smith 
97353acd3b1SBarry Smith   PetscFunctionBegin;
97453acd3b1SBarry Smith   ierr = PetscOptionsGetStringArray(PetscOptionsObject.prefix,opt,value,nmax,set);CHKERRQ(ierr);
97561b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
97653acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <string1,string2,...>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
97753acd3b1SBarry Smith   }
97853acd3b1SBarry Smith   PetscFunctionReturn(0);
97953acd3b1SBarry Smith }
98053acd3b1SBarry Smith 
98153acd3b1SBarry Smith 
98253acd3b1SBarry Smith #undef __FUNCT__
98353acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsHead"
98453acd3b1SBarry Smith /*@C
985b52f573bSBarry Smith      PetscOptionsHead - Puts a heading before listing any more published options. Used, for example,
98653acd3b1SBarry Smith             in KSPSetFromOptions_GMRES().
98753acd3b1SBarry Smith 
98853acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
98953acd3b1SBarry Smith 
99053acd3b1SBarry Smith    Input Parameter:
99153acd3b1SBarry Smith .   head - the heading text
99253acd3b1SBarry Smith 
99353acd3b1SBarry Smith 
99453acd3b1SBarry Smith    Level: intermediate
99553acd3b1SBarry Smith 
99653acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
99753acd3b1SBarry Smith 
998b52f573bSBarry Smith           Can be followed by a call to PetscOptionsTail() in the same function.
99953acd3b1SBarry Smith 
100053acd3b1SBarry Smith    Concepts: options database^subheading
100153acd3b1SBarry Smith 
100253acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
100353acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
100453acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
100553acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
100653acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
100753acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
100853acd3b1SBarry Smith @*/
100953acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsHead(const char head[])
101053acd3b1SBarry Smith {
101153acd3b1SBarry Smith   PetscErrorCode ierr;
101253acd3b1SBarry Smith 
101353acd3b1SBarry Smith   PetscFunctionBegin;
101461b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
101553acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  %s\n",head);CHKERRQ(ierr);
101653acd3b1SBarry Smith   }
101753acd3b1SBarry Smith   PetscFunctionReturn(0);
101853acd3b1SBarry Smith }
101953acd3b1SBarry Smith 
102053acd3b1SBarry Smith 
102153acd3b1SBarry Smith 
102253acd3b1SBarry Smith 
102353acd3b1SBarry Smith 
102453acd3b1SBarry Smith 
1025