xref: /petsc/src/sys/objects/aoptions.c (revision e32f2f54e699d0aa6e733466c00da7e34666fe5e)
153acd3b1SBarry Smith #define PETSC_DLL
253acd3b1SBarry Smith /*
33fc1eb6aSBarry Smith    Implements the higher-level options database querying methods. These are self-documenting and can attach at runtime to
43fc1eb6aSBarry Smith    GUI code to display the options and get values from the users.
553acd3b1SBarry Smith 
653acd3b1SBarry Smith */
753acd3b1SBarry Smith 
8d382aafbSBarry Smith #include "petscsys.h"        /*I  "petscsys.h"   I*/
953acd3b1SBarry Smith #if defined(PETSC_HAVE_STDLIB_H)
1053acd3b1SBarry Smith #include <stdlib.h>
1153acd3b1SBarry Smith #endif
1253acd3b1SBarry Smith 
1353acd3b1SBarry Smith /*
1453acd3b1SBarry Smith     Keep a linked list of options that have been posted and we are waiting for
153fc1eb6aSBarry Smith    user selection. See the manual page for PetscOptionsBegin()
1653acd3b1SBarry Smith 
1753acd3b1SBarry Smith     Eventually we'll attach this beast to a MPI_Comm
1853acd3b1SBarry Smith */
19f8d0b74dSMatthew Knepley PetscOptionsObjectType PetscOptionsObject;
2053acd3b1SBarry Smith PetscInt               PetscOptionsPublishCount = 0;
2153acd3b1SBarry Smith 
2253acd3b1SBarry Smith #undef __FUNCT__
2353acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsBegin_Private"
2453acd3b1SBarry Smith /*
2553acd3b1SBarry Smith     Handles setting up the data structure in a call to PetscOptionsBegin()
2653acd3b1SBarry Smith */
2753acd3b1SBarry Smith PetscErrorCode PetscOptionsBegin_Private(MPI_Comm comm,const char prefix[],const char title[],const char mansec[])
2853acd3b1SBarry Smith {
2953acd3b1SBarry Smith   PetscErrorCode ierr;
3053acd3b1SBarry Smith 
3153acd3b1SBarry Smith   PetscFunctionBegin;
3253acd3b1SBarry Smith   PetscOptionsObject.next          = 0;
3353acd3b1SBarry Smith   PetscOptionsObject.comm          = comm;
346356e834SBarry Smith   PetscOptionsObject.changedmethod = PETSC_FALSE;
35f8d0b74dSMatthew Knepley   if (PetscOptionsObject.prefix) {
36503cfb0cSBarry Smith     ierr = PetscFree(PetscOptionsObject.prefix);CHKERRQ(ierr); PetscOptionsObject.prefix = 0;
37f8d0b74dSMatthew Knepley   }
3853acd3b1SBarry Smith   ierr = PetscStrallocpy(prefix,&PetscOptionsObject.prefix);CHKERRQ(ierr);
39f8d0b74dSMatthew Knepley   if (PetscOptionsObject.title) {
40503cfb0cSBarry Smith     ierr = PetscFree(PetscOptionsObject.title);CHKERRQ(ierr); PetscOptionsObject.title  = 0;
41f8d0b74dSMatthew Knepley   }
4253acd3b1SBarry Smith   ierr = PetscStrallocpy(title,&PetscOptionsObject.title);CHKERRQ(ierr);
4353acd3b1SBarry Smith 
4453acd3b1SBarry Smith   ierr = PetscOptionsHasName(PETSC_NULL,"-help",&PetscOptionsObject.printhelp);CHKERRQ(ierr);
4553acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
4661b37b28SSatish Balay     if (!PetscOptionsObject.alreadyprinted) {
4753acd3b1SBarry Smith       ierr = (*PetscHelpPrintf)(comm,"%s -------------------------------------------------\n",title);CHKERRQ(ierr);
4853acd3b1SBarry Smith     }
4961b37b28SSatish Balay   }
5053acd3b1SBarry Smith   PetscFunctionReturn(0);
5153acd3b1SBarry Smith }
5253acd3b1SBarry Smith 
5353acd3b1SBarry Smith /*
5453acd3b1SBarry Smith      Handles adding another option to the list of options within this particular PetscOptionsBegin() PetscOptionsEnd()
5553acd3b1SBarry Smith */
5653acd3b1SBarry Smith #undef __FUNCT__
5753acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsCreate_Private"
58e3ed6ec8SBarry Smith static int PetscOptionsCreate_Private(const char opt[],const char text[],const char man[],PetscOptionType t,PetscOptions *amsopt)
5953acd3b1SBarry Smith {
6053acd3b1SBarry Smith   int          ierr;
6153acd3b1SBarry Smith   PetscOptions next;
6253acd3b1SBarry Smith 
6353acd3b1SBarry Smith   PetscFunctionBegin;
64e3ed6ec8SBarry Smith   ierr             = PetscNew(struct _p_PetscOptions,amsopt);CHKERRQ(ierr);
6553acd3b1SBarry Smith   (*amsopt)->next  = 0;
6653acd3b1SBarry Smith   (*amsopt)->set   = PETSC_FALSE;
676356e834SBarry Smith   (*amsopt)->type  = t;
6853acd3b1SBarry Smith   (*amsopt)->data  = 0;
6961b37b28SSatish Balay 
7053acd3b1SBarry Smith   ierr             = PetscStrallocpy(text,&(*amsopt)->text);CHKERRQ(ierr);
7153acd3b1SBarry Smith   ierr             = PetscStrallocpy(opt,&(*amsopt)->option);CHKERRQ(ierr);
726356e834SBarry Smith   ierr             = PetscStrallocpy(man,&(*amsopt)->man);CHKERRQ(ierr);
7353acd3b1SBarry Smith 
7453acd3b1SBarry Smith   if (!PetscOptionsObject.next) {
7553acd3b1SBarry Smith     PetscOptionsObject.next = *amsopt;
7653acd3b1SBarry Smith   } else {
7753acd3b1SBarry Smith     next = PetscOptionsObject.next;
7853acd3b1SBarry Smith     while (next->next) next = next->next;
7953acd3b1SBarry Smith     next->next = *amsopt;
8053acd3b1SBarry Smith   }
8153acd3b1SBarry Smith   PetscFunctionReturn(0);
8253acd3b1SBarry Smith }
8353acd3b1SBarry Smith 
8453acd3b1SBarry Smith #undef __FUNCT__
85aee2cecaSBarry Smith #define __FUNCT__ "PetscScanString"
86aee2cecaSBarry Smith /*
873fc1eb6aSBarry Smith     PetscScanString -  Gets user input via stdin from process and broadcasts to all processes
883fc1eb6aSBarry Smith 
893fc1eb6aSBarry Smith     Collective on MPI_Comm
903fc1eb6aSBarry Smith 
913fc1eb6aSBarry Smith    Input Parameters:
923fc1eb6aSBarry Smith +     commm - communicator for the broadcast, must be PETSC_COMM_WORLD
933fc1eb6aSBarry Smith .     n - length of the string, must be the same on all processes
943fc1eb6aSBarry Smith -     str - location to store input
95aee2cecaSBarry Smith 
96aee2cecaSBarry Smith     Bugs:
97aee2cecaSBarry Smith .   Assumes process 0 of the given communicator has access to stdin
98aee2cecaSBarry Smith 
99aee2cecaSBarry Smith */
1003fc1eb6aSBarry Smith static PetscErrorCode PetscScanString(MPI_Comm comm,size_t n,char str[])
101aee2cecaSBarry Smith {
102330cf3c9SBarry Smith   size_t         i;
103aee2cecaSBarry Smith   char           c;
1043fc1eb6aSBarry Smith   PetscMPIInt    rank,nm;
105aee2cecaSBarry Smith   PetscErrorCode ierr;
106aee2cecaSBarry Smith 
107aee2cecaSBarry Smith   PetscFunctionBegin;
108aee2cecaSBarry Smith   ierr = MPI_Comm_rank(comm,&rank);CHKERRQ(ierr);
109aee2cecaSBarry Smith   if (!rank) {
110aee2cecaSBarry Smith     c = (char) getchar();
111aee2cecaSBarry Smith     i = 0;
112aee2cecaSBarry Smith     while ( c != '\n' && i < n-1) {
113aee2cecaSBarry Smith       str[i++] = c;
114aee2cecaSBarry Smith       c = (char) getchar();
115aee2cecaSBarry Smith     }
116aee2cecaSBarry Smith     str[i] = 0;
117aee2cecaSBarry Smith   }
1183fc1eb6aSBarry Smith   nm   = PetscMPIIntCast(n);
1193fc1eb6aSBarry Smith   ierr = MPI_Bcast(str,nm,MPI_CHAR,0,comm);CHKERRQ(ierr);
120aee2cecaSBarry Smith   PetscFunctionReturn(0);
121aee2cecaSBarry Smith }
122aee2cecaSBarry Smith 
123aee2cecaSBarry Smith #undef __FUNCT__
124aee2cecaSBarry Smith #define __FUNCT__ "PetscOptionsGetFromTextInput"
125aee2cecaSBarry Smith /*
1263cc1e11dSBarry Smith     PetscOptionsGetFromTextInput - Presents all the PETSc Options processed by the program so the user may change them at runtime
127aee2cecaSBarry Smith 
128aee2cecaSBarry Smith     Notes: this isn't really practical, it is just to demonstrate the principle
129aee2cecaSBarry Smith 
130aee2cecaSBarry Smith     Bugs:
131aee2cecaSBarry Smith +    All processes must traverse through the exact same set of option queries do to the call to PetscScanString()
1323cc1e11dSBarry Smith .    Internal strings have arbitrary length and string copies are not checked that they fit into string space
133aee2cecaSBarry Smith -    Only works for PetscInt == int, PetscReal == double etc
134aee2cecaSBarry Smith 
1353cc1e11dSBarry Smith     Developer Notes: Normally the GUI that presents the options the user and retrieves the values would be running in a different
1363cc1e11dSBarry Smith      address space and communicating with the PETSc program
1373cc1e11dSBarry Smith 
138aee2cecaSBarry Smith */
139aee2cecaSBarry Smith PetscErrorCode PetscOptionsGetFromTextInput()
1406356e834SBarry Smith {
1416356e834SBarry Smith   PetscErrorCode ierr;
1426356e834SBarry Smith   PetscOptions   next = PetscOptionsObject.next;
1436356e834SBarry Smith   char           str[512];
144a4404d99SBarry Smith   PetscInt       id;
145a4404d99SBarry Smith   PetscReal      ir,*valr;
146330cf3c9SBarry Smith   PetscInt       *vald;
147330cf3c9SBarry Smith   size_t         i;
1486356e834SBarry Smith 
149e26ddf31SBarry Smith   ierr = (*PetscPrintf)(PETSC_COMM_WORLD,"%s -------------------------------------------------\n",PetscOptionsObject.title);CHKERRQ(ierr);
1506356e834SBarry Smith   while (next) {
1516356e834SBarry Smith     switch (next->type) {
1526356e834SBarry Smith       case OPTION_HEAD:
1536356e834SBarry Smith         break;
154e26ddf31SBarry Smith       case OPTION_INT_ARRAY:
155e26ddf31SBarry Smith         ierr = PetscPrintf(PETSC_COMM_WORLD,"-%s%s <",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",next->option+1);CHKERRQ(ierr);
156e26ddf31SBarry Smith         vald = (PetscInt*) next->data;
157e26ddf31SBarry Smith         for (i=0; i<next->arraylength; i++) {
158e26ddf31SBarry Smith           ierr = PetscPrintf(PETSC_COMM_WORLD,"%d",vald[i]);CHKERRQ(ierr);
159e26ddf31SBarry Smith           if (i < next->arraylength-1) {
160e26ddf31SBarry Smith             ierr = PetscPrintf(PETSC_COMM_WORLD,",");CHKERRQ(ierr);
161e26ddf31SBarry Smith           }
162e26ddf31SBarry Smith         }
163e26ddf31SBarry Smith         ierr = PetscPrintf(PETSC_COMM_WORLD,">: %s (%s)",next->text,next->man);CHKERRQ(ierr);
164e26ddf31SBarry Smith         ierr = PetscScanString(PETSC_COMM_WORLD,512,str);CHKERRQ(ierr);
165e26ddf31SBarry Smith         if (str[0]) {
166e26ddf31SBarry Smith           PetscToken token;
167e26ddf31SBarry Smith           PetscInt   n=0,nmax = next->arraylength,*dvalue = (PetscInt*)next->data,start,end;
168e26ddf31SBarry Smith           size_t     len;
169e26ddf31SBarry Smith           char*      value;
170e26ddf31SBarry Smith           PetscTruth foundrange;
171e26ddf31SBarry Smith 
172e26ddf31SBarry Smith           next->set = PETSC_TRUE;
173e26ddf31SBarry Smith           value = str;
174e26ddf31SBarry Smith 	  ierr = PetscTokenCreate(value,',',&token);CHKERRQ(ierr);
175e26ddf31SBarry Smith 	  ierr = PetscTokenFind(token,&value);CHKERRQ(ierr);
176e26ddf31SBarry Smith 	  while (n < nmax) {
177e26ddf31SBarry Smith 	    if (!value) break;
178e26ddf31SBarry Smith 
179e26ddf31SBarry Smith 	    /* look for form  d-D where d and D are integers */
180e26ddf31SBarry Smith 	    foundrange = PETSC_FALSE;
181e26ddf31SBarry Smith 	    ierr      = PetscStrlen(value,&len);CHKERRQ(ierr);
182e26ddf31SBarry Smith 	    if (value[0] == '-') i=2;
183e26ddf31SBarry Smith 	    else i=1;
184330cf3c9SBarry Smith 	    for (;i<len; i++) {
185e26ddf31SBarry Smith 	      if (value[i] == '-') {
186*e32f2f54SBarry Smith 		if (i == len-1) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_USER,"Error in %D-th array entry %s\n",n,value);
187e26ddf31SBarry Smith 		value[i] = 0;
188e26ddf31SBarry Smith 		ierr     = PetscOptionsAtoi(value,&start);CHKERRQ(ierr);
189e26ddf31SBarry Smith 		ierr     = PetscOptionsAtoi(value+i+1,&end);CHKERRQ(ierr);
190*e32f2f54SBarry Smith 		if (end <= start) SETERRQ3(PETSC_COMM_SELF,PETSC_ERR_USER,"Error in %D-th array entry, %s-%s cannot have decreasing list",n,value,value+i+1);
191*e32f2f54SBarry Smith 		if (n + end - start - 1 >= nmax) SETERRQ4(PETSC_COMM_SELF,PETSC_ERR_USER,"Error in %D-th array entry, not enough space in left in array (%D) to contain entire range from %D to %D",n,nmax-n,start,end);
192e26ddf31SBarry Smith 		for (;start<end; start++) {
193e26ddf31SBarry Smith 		  *dvalue = start; dvalue++;n++;
194e26ddf31SBarry Smith 		}
195e26ddf31SBarry Smith 		foundrange = PETSC_TRUE;
196e26ddf31SBarry Smith 		break;
197e26ddf31SBarry Smith 	      }
198e26ddf31SBarry Smith 	    }
199e26ddf31SBarry Smith 	    if (!foundrange) {
200e26ddf31SBarry Smith 	      ierr      = PetscOptionsAtoi(value,dvalue);CHKERRQ(ierr);
201e26ddf31SBarry Smith 	      dvalue++;
202e26ddf31SBarry Smith 	      n++;
203e26ddf31SBarry Smith 	    }
204e26ddf31SBarry Smith 	    ierr = PetscTokenFind(token,&value);CHKERRQ(ierr);
205e26ddf31SBarry Smith 	  }
206e26ddf31SBarry Smith 	  ierr = PetscTokenDestroy(token);CHKERRQ(ierr);
207e26ddf31SBarry Smith         }
208e26ddf31SBarry Smith         break;
209e26ddf31SBarry Smith       case OPTION_REAL_ARRAY:
210e26ddf31SBarry Smith         ierr = PetscPrintf(PETSC_COMM_WORLD,"-%s%s <",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",next->option+1);CHKERRQ(ierr);
211e26ddf31SBarry Smith         valr = (PetscReal*) next->data;
212e26ddf31SBarry Smith         for (i=0; i<next->arraylength; i++) {
213e26ddf31SBarry Smith           ierr = PetscPrintf(PETSC_COMM_WORLD,"%g",valr[i]);CHKERRQ(ierr);
214e26ddf31SBarry Smith           if (i < next->arraylength-1) {
215e26ddf31SBarry Smith             ierr = PetscPrintf(PETSC_COMM_WORLD,",");CHKERRQ(ierr);
216e26ddf31SBarry Smith           }
217e26ddf31SBarry Smith         }
218e26ddf31SBarry Smith         ierr = PetscPrintf(PETSC_COMM_WORLD,">: %s (%s)",next->text,next->man);CHKERRQ(ierr);
219e26ddf31SBarry Smith         ierr = PetscScanString(PETSC_COMM_WORLD,512,str);CHKERRQ(ierr);
220e26ddf31SBarry Smith         if (str[0]) {
221e26ddf31SBarry Smith           PetscToken token;
222e26ddf31SBarry Smith           PetscInt   n=0,nmax = next->arraylength;
223e26ddf31SBarry Smith           PetscReal   *dvalue = (PetscReal*)next->data;
224e26ddf31SBarry Smith           char*      value;
225e26ddf31SBarry Smith 
226e26ddf31SBarry Smith           next->set = PETSC_TRUE;
227e26ddf31SBarry Smith           value = str;
228e26ddf31SBarry Smith 	  ierr = PetscTokenCreate(value,',',&token);CHKERRQ(ierr);
229e26ddf31SBarry Smith 	  ierr = PetscTokenFind(token,&value);CHKERRQ(ierr);
230e26ddf31SBarry Smith 	  while (n < nmax) {
231e26ddf31SBarry Smith 	    if (!value) break;
232e26ddf31SBarry Smith             ierr      = PetscOptionsAtod(value,dvalue);CHKERRQ(ierr);
233e26ddf31SBarry Smith 	    dvalue++;
234e26ddf31SBarry Smith 	    n++;
235e26ddf31SBarry Smith 	    ierr = PetscTokenFind(token,&value);CHKERRQ(ierr);
236e26ddf31SBarry Smith 	  }
237e26ddf31SBarry Smith 	  ierr = PetscTokenDestroy(token);CHKERRQ(ierr);
238e26ddf31SBarry Smith         }
239e26ddf31SBarry Smith         break;
2406356e834SBarry Smith       case OPTION_INT:
241e26ddf31SBarry Smith         ierr = PetscPrintf(PETSC_COMM_WORLD,"-%s%s <%d>: %s (%s)",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",next->option+1,*(int*)next->data,next->text,next->man);CHKERRQ(ierr);
2423fc1eb6aSBarry Smith         ierr = PetscScanString(PETSC_COMM_WORLD,512,str);CHKERRQ(ierr);
2433fc1eb6aSBarry Smith         if (str[0]) {
244c272547aSJed Brown #if defined(PETSC_USE_64BIT_INDICES)
245c272547aSJed Brown           sscanf(str,"%lld",&id);
246c272547aSJed Brown #else
247aee2cecaSBarry Smith           sscanf(str,"%d",&id);
248c272547aSJed Brown #endif
249aee2cecaSBarry Smith           next->set = PETSC_TRUE;
250aee2cecaSBarry Smith           *((PetscInt*)next->data) = id;
251aee2cecaSBarry Smith         }
252aee2cecaSBarry Smith         break;
253aee2cecaSBarry Smith       case OPTION_REAL:
254e26ddf31SBarry Smith         ierr = PetscPrintf(PETSC_COMM_WORLD,"-%s%s <%g>: %s (%s)",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",next->option+1,*(double*)next->data,next->text,next->man);CHKERRQ(ierr);
2553fc1eb6aSBarry Smith         ierr = PetscScanString(PETSC_COMM_WORLD,512,str);CHKERRQ(ierr);
2563fc1eb6aSBarry Smith         if (str[0]) {
257a4404d99SBarry Smith #if defined(PETSC_USE_SCALAR_SINGLE)
258a4404d99SBarry Smith           sscanf(str,"%e",&ir);
259a4404d99SBarry Smith #else
260aee2cecaSBarry Smith           sscanf(str,"%le",&ir);
261a4404d99SBarry Smith #endif
262aee2cecaSBarry Smith           next->set = PETSC_TRUE;
263aee2cecaSBarry Smith           *((PetscReal*)next->data) = ir;
264aee2cecaSBarry Smith         }
265aee2cecaSBarry Smith         break;
266aee2cecaSBarry Smith       case OPTION_LOGICAL:
267aee2cecaSBarry Smith       case OPTION_STRING:
268e26ddf31SBarry Smith         ierr = PetscPrintf(PETSC_COMM_WORLD,"-%s%s <%s>: %s (%s)",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",next->option+1,(char*)next->data,next->text,next->man);CHKERRQ(ierr);
2693fc1eb6aSBarry Smith         ierr = PetscScanString(PETSC_COMM_WORLD,512,str);CHKERRQ(ierr);
2703fc1eb6aSBarry Smith         if (str[0]) {
271aee2cecaSBarry Smith           next->set = PETSC_TRUE;
272330cf3c9SBarry Smith           ierr = PetscStrcpy((char*)next->data,str);CHKERRQ(ierr);
2736356e834SBarry Smith         }
2746356e834SBarry Smith         break;
2753cc1e11dSBarry Smith       case OPTION_LIST:
2763cc1e11dSBarry Smith         ierr = PetscFListPrintTypes(PETSC_COMM_WORLD,stdout,PetscOptionsObject.prefix,next->option,next->text,next->man,next->flist,(char*)next->data);CHKERRQ(ierr);
2773cc1e11dSBarry Smith         ierr = PetscScanString(PETSC_COMM_WORLD,512,str);CHKERRQ(ierr);
2783cc1e11dSBarry Smith         if (str[0]) {
2793cc1e11dSBarry Smith 	  PetscOptionsObject.changedmethod = PETSC_TRUE;
2803cc1e11dSBarry Smith           next->set = PETSC_TRUE;
281330cf3c9SBarry Smith           ierr = PetscStrcpy((char*)next->data,str);CHKERRQ(ierr);
2823cc1e11dSBarry Smith         }
2833cc1e11dSBarry Smith         break;
284b432afdaSMatthew Knepley     default:
285b432afdaSMatthew Knepley       break;
2866356e834SBarry Smith     }
2876356e834SBarry Smith     next = next->next;
2886356e834SBarry Smith   }
2896356e834SBarry Smith   PetscFunctionReturn(0);
2906356e834SBarry Smith }
2916356e834SBarry Smith 
2926356e834SBarry Smith #undef __FUNCT__
29353acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsEnd_Private"
29453acd3b1SBarry Smith PetscErrorCode PetscOptionsEnd_Private(void)
29553acd3b1SBarry Smith {
29653acd3b1SBarry Smith   PetscErrorCode ierr;
2976356e834SBarry Smith   PetscOptions   last;
2986356e834SBarry Smith   char           option[256],value[1024],tmp[32];
299330cf3c9SBarry Smith   size_t         j;
30053acd3b1SBarry Smith 
30153acd3b1SBarry Smith   PetscFunctionBegin;
3026356e834SBarry Smith 
303aee2cecaSBarry Smith   if (PetscOptionsObject.next) {
304aee2cecaSBarry Smith     if (PetscOptionsPublishCount == 0) {
305aee2cecaSBarry Smith       ierr = PetscOptionsGetFromTextInput();
306aee2cecaSBarry Smith     }
307aee2cecaSBarry Smith   }
3086356e834SBarry Smith 
309503cfb0cSBarry Smith   ierr = PetscFree(PetscOptionsObject.title);CHKERRQ(ierr); PetscOptionsObject.title  = 0;
310503cfb0cSBarry Smith   ierr = PetscFree(PetscOptionsObject.prefix);CHKERRQ(ierr); PetscOptionsObject.prefix = 0;
3116356e834SBarry Smith 
3126356e834SBarry Smith   /* reset counter to -2; this updates the screen with the new options for the selected method */
3136356e834SBarry Smith   if (PetscOptionsObject.changedmethod) PetscOptionsPublishCount = -2;
31461b37b28SSatish Balay   /* reset alreadyprinted flag */
31561b37b28SSatish Balay   PetscOptionsObject.alreadyprinted = PETSC_FALSE;
3166356e834SBarry Smith 
3176356e834SBarry Smith   while (PetscOptionsObject.next) {
3186356e834SBarry Smith     if (PetscOptionsObject.next->set) {
3196356e834SBarry Smith       if (PetscOptionsObject.prefix) {
3206356e834SBarry Smith         ierr = PetscStrcpy(option,"-");CHKERRQ(ierr);
3216356e834SBarry Smith         ierr = PetscStrcat(option,PetscOptionsObject.prefix);CHKERRQ(ierr);
3226356e834SBarry Smith         ierr = PetscStrcat(option,PetscOptionsObject.next->option+1);CHKERRQ(ierr);
3236356e834SBarry Smith       } else {
3246356e834SBarry Smith         ierr = PetscStrcpy(option,PetscOptionsObject.next->option);CHKERRQ(ierr);
3256356e834SBarry Smith       }
3266356e834SBarry Smith 
3276356e834SBarry Smith       switch (PetscOptionsObject.next->type) {
3286356e834SBarry Smith         case OPTION_HEAD:
3296356e834SBarry Smith           break;
330e26ddf31SBarry Smith         case OPTION_INT_ARRAY:
331e26ddf31SBarry Smith           sprintf(value,"%d",(int)((PetscInt*)PetscOptionsObject.next->data)[0]);
332e26ddf31SBarry Smith           for (j=1; j<PetscOptionsObject.next->arraylength; j++) {
333e26ddf31SBarry Smith             sprintf(tmp,"%d",(int)((PetscInt*)PetscOptionsObject.next->data)[j]);
334e26ddf31SBarry Smith             ierr = PetscStrcat(value,",");CHKERRQ(ierr);
335e26ddf31SBarry Smith             ierr = PetscStrcat(value,tmp);CHKERRQ(ierr);
336e26ddf31SBarry Smith           }
337e26ddf31SBarry Smith           break;
3386356e834SBarry Smith         case OPTION_INT:
3397a72a596SBarry Smith           sprintf(value,"%d",(int) *(PetscInt*)PetscOptionsObject.next->data);
3406356e834SBarry Smith           break;
3416356e834SBarry Smith         case OPTION_REAL:
3427a72a596SBarry Smith           sprintf(value,"%g",(double) *(PetscReal*)PetscOptionsObject.next->data);
3436356e834SBarry Smith           break;
3446356e834SBarry Smith         case OPTION_REAL_ARRAY:
3457a72a596SBarry Smith           sprintf(value,"%g",(double)((PetscReal*)PetscOptionsObject.next->data)[0]);
3466356e834SBarry Smith           for (j=1; j<PetscOptionsObject.next->arraylength; j++) {
3477a72a596SBarry Smith             sprintf(tmp,"%g",(double)((PetscReal*)PetscOptionsObject.next->data)[j]);
3486356e834SBarry Smith             ierr = PetscStrcat(value,",");CHKERRQ(ierr);
3496356e834SBarry Smith             ierr = PetscStrcat(value,tmp);CHKERRQ(ierr);
3506356e834SBarry Smith           }
3516356e834SBarry Smith           break;
3526356e834SBarry Smith         case OPTION_LOGICAL:
353aee2cecaSBarry Smith           ierr = PetscStrcpy(value,(char*)PetscOptionsObject.next->data);CHKERRQ(ierr);
3546356e834SBarry Smith           break;
3556356e834SBarry Smith         case OPTION_LIST:
356aee2cecaSBarry Smith           ierr = PetscStrcpy(value,(char*)PetscOptionsObject.next->data);CHKERRQ(ierr);
3576356e834SBarry Smith           break;
3586356e834SBarry Smith         case OPTION_STRING: /* also handles string arrays */
359aee2cecaSBarry Smith           ierr = PetscStrcpy(value,(char*)PetscOptionsObject.next->data);CHKERRQ(ierr);
3606356e834SBarry Smith           break;
3616356e834SBarry Smith       }
3626356e834SBarry Smith       ierr = PetscOptionsSetValue(option,value);CHKERRQ(ierr);
3636356e834SBarry Smith     }
364503cfb0cSBarry Smith     ierr   = PetscFree(PetscOptionsObject.next->text);CHKERRQ(ierr);
365503cfb0cSBarry Smith     ierr   = PetscFree(PetscOptionsObject.next->option);CHKERRQ(ierr);
3666356e834SBarry Smith     ierr   = PetscFree(PetscOptionsObject.next->man);CHKERRQ(ierr);
36705b42c5fSBarry Smith     ierr   = PetscFree(PetscOptionsObject.next->data);CHKERRQ(ierr);
3686356e834SBarry Smith     last                    = PetscOptionsObject.next;
3696356e834SBarry Smith     PetscOptionsObject.next = PetscOptionsObject.next->next;
3706356e834SBarry Smith     ierr                    = PetscFree(last);CHKERRQ(ierr);
3716356e834SBarry Smith   }
3726356e834SBarry Smith   PetscOptionsObject.next = 0;
37353acd3b1SBarry Smith   PetscFunctionReturn(0);
37453acd3b1SBarry Smith }
37553acd3b1SBarry Smith 
37653acd3b1SBarry Smith #undef __FUNCT__
37753acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsEnum"
37853acd3b1SBarry Smith /*@C
37953acd3b1SBarry Smith    PetscOptionsEnum - Gets the enum value for a particular option in the database.
38053acd3b1SBarry Smith 
38153acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
38253acd3b1SBarry Smith 
38353acd3b1SBarry Smith    Input Parameters:
38453acd3b1SBarry Smith +  opt - option name
38553acd3b1SBarry Smith .  text - short string that describes the option
38653acd3b1SBarry Smith .  man - manual page with additional information on option
38753acd3b1SBarry Smith .  list - array containing the list of choices, followed by the enum name, followed by the enum prefix, followed by a null
38853acd3b1SBarry Smith -  defaultv - the default (current) value
38953acd3b1SBarry Smith 
39053acd3b1SBarry Smith    Output Parameter:
39153acd3b1SBarry Smith +  value - the  value to return
39253acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
39353acd3b1SBarry Smith 
39453acd3b1SBarry Smith    Level: beginner
39553acd3b1SBarry Smith 
39653acd3b1SBarry Smith    Concepts: options database
39753acd3b1SBarry Smith 
39853acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
39953acd3b1SBarry Smith 
40053acd3b1SBarry Smith           list is usually something like PCASMTypes or some other predefined list of enum names
40153acd3b1SBarry Smith 
40253acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
40353acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
40453acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
40553acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
40653acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
40753acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
40853acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
40953acd3b1SBarry Smith @*/
4102ae9f97cSJed Brown PetscErrorCode PETSC_DLLEXPORT PetscOptionsEnum(const char opt[],const char text[],const char man[],const char *const*list,PetscEnum defaultv,PetscEnum *value,PetscTruth *set)
41153acd3b1SBarry Smith {
41253acd3b1SBarry Smith   PetscErrorCode ierr;
41353acd3b1SBarry Smith   PetscInt       ntext = 0;
414aa5bb8c0SSatish Balay   PetscInt       tval;
415aa5bb8c0SSatish Balay   PetscTruth     tflg;
41653acd3b1SBarry Smith 
41753acd3b1SBarry Smith   PetscFunctionBegin;
41853acd3b1SBarry Smith   while (list[ntext++]) {
419*e32f2f54SBarry Smith     if (ntext > 50) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"List argument appears to be wrong or have more than 50 entries");
42053acd3b1SBarry Smith   }
421*e32f2f54SBarry Smith   if (ntext < 3) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"List argument must have at least two entries: typename and type prefix");
42253acd3b1SBarry Smith   ntext -= 3;
423aa5bb8c0SSatish Balay   ierr = PetscOptionsEList(opt,text,man,list,ntext,list[defaultv],&tval,&tflg);CHKERRQ(ierr);
424aa5bb8c0SSatish Balay   /* with PETSC_USE_64BIT_INDICES sizeof(PetscInt) != sizeof(PetscEnum) */
425aa5bb8c0SSatish Balay   if (tflg) *value = (PetscEnum)tval;
426aa5bb8c0SSatish Balay   if (set)  *set   = tflg;
42753acd3b1SBarry Smith   PetscFunctionReturn(0);
42853acd3b1SBarry Smith }
42953acd3b1SBarry Smith 
43053acd3b1SBarry Smith /* -------------------------------------------------------------------------------------------------------------*/
43153acd3b1SBarry Smith #undef __FUNCT__
43253acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsInt"
43353acd3b1SBarry Smith /*@C
43453acd3b1SBarry Smith    PetscOptionsInt - Gets the integer value for a particular option in the database.
43553acd3b1SBarry Smith 
43653acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
43753acd3b1SBarry Smith 
43853acd3b1SBarry Smith    Input Parameters:
43953acd3b1SBarry Smith +  opt - option name
44053acd3b1SBarry Smith .  text - short string that describes the option
44153acd3b1SBarry Smith .  man - manual page with additional information on option
44253acd3b1SBarry Smith -  defaultv - the default (current) value
44353acd3b1SBarry Smith 
44453acd3b1SBarry Smith    Output Parameter:
44553acd3b1SBarry Smith +  value - the integer value to return
44653acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
44753acd3b1SBarry Smith 
44853acd3b1SBarry Smith    Level: beginner
44953acd3b1SBarry Smith 
45053acd3b1SBarry Smith    Concepts: options database^has int
45153acd3b1SBarry Smith 
45253acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
45353acd3b1SBarry Smith 
45453acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
45553acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
45653acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
45753acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
45853acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
45953acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
46053acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
46153acd3b1SBarry Smith @*/
46253acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsInt(const char opt[],const char text[],const char man[],PetscInt defaultv,PetscInt *value,PetscTruth *set)
46353acd3b1SBarry Smith {
46453acd3b1SBarry Smith   PetscErrorCode ierr;
4656356e834SBarry Smith   PetscOptions   amsopt;
46653acd3b1SBarry Smith 
46753acd3b1SBarry Smith   PetscFunctionBegin;
468aee2cecaSBarry Smith   if (PetscOptionsPublishCount == 0) {
4696356e834SBarry Smith     ierr = PetscOptionsCreate_Private(opt,text,man,OPTION_INT,&amsopt);CHKERRQ(ierr);
4706356e834SBarry Smith     ierr = PetscMalloc(sizeof(PetscInt),&amsopt->data);CHKERRQ(ierr);
4716356e834SBarry Smith     *(PetscInt*)amsopt->data = defaultv;
472af6d86caSBarry Smith   }
47353acd3b1SBarry Smith   ierr = PetscOptionsGetInt(PetscOptionsObject.prefix,opt,value,set);CHKERRQ(ierr);
47461b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
47553acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%d>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv,text,man);CHKERRQ(ierr);
47653acd3b1SBarry Smith   }
47753acd3b1SBarry Smith   PetscFunctionReturn(0);
47853acd3b1SBarry Smith }
47953acd3b1SBarry Smith 
48053acd3b1SBarry Smith #undef __FUNCT__
48153acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsString"
48253acd3b1SBarry Smith /*@C
48353acd3b1SBarry Smith    PetscOptionsString - Gets the string value for a particular option in the database.
48453acd3b1SBarry Smith 
48553acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
48653acd3b1SBarry Smith 
48753acd3b1SBarry Smith    Input Parameters:
48853acd3b1SBarry Smith +  opt - option name
48953acd3b1SBarry Smith .  text - short string that describes the option
49053acd3b1SBarry Smith .  man - manual page with additional information on option
49153acd3b1SBarry Smith -  defaultv - the default (current) value
49253acd3b1SBarry Smith 
49353acd3b1SBarry Smith    Output Parameter:
49453acd3b1SBarry Smith +  value - the value to return
49553acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
49653acd3b1SBarry Smith 
49753acd3b1SBarry Smith    Level: beginner
49853acd3b1SBarry Smith 
49953acd3b1SBarry Smith    Concepts: options database^has int
50053acd3b1SBarry Smith 
50153acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
50253acd3b1SBarry Smith 
50353acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
50453acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
50553acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
50653acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
50753acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
50853acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
50953acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
51053acd3b1SBarry Smith @*/
51153acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsString(const char opt[],const char text[],const char man[],const char defaultv[],char value[],size_t len,PetscTruth *set)
51253acd3b1SBarry Smith {
51353acd3b1SBarry Smith   PetscErrorCode ierr;
514aee2cecaSBarry Smith   PetscOptions   amsopt;
51553acd3b1SBarry Smith 
51653acd3b1SBarry Smith   PetscFunctionBegin;
517aee2cecaSBarry Smith   if (PetscOptionsPublishCount == 0) {
518aee2cecaSBarry Smith     ierr = PetscOptionsCreate_Private(opt,text,man,OPTION_STRING,&amsopt);CHKERRQ(ierr);
519aee2cecaSBarry Smith     ierr = PetscMalloc(len*sizeof(char),&amsopt->data);CHKERRQ(ierr);
520aee2cecaSBarry Smith     ierr = PetscStrcpy((char*)amsopt->data,defaultv);CHKERRQ(ierr);
521af6d86caSBarry Smith   }
52253acd3b1SBarry Smith   ierr = PetscOptionsGetString(PetscOptionsObject.prefix,opt,value,len,set);CHKERRQ(ierr);
52361b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
52453acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%s>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv,text,man);CHKERRQ(ierr);
52553acd3b1SBarry Smith   }
52653acd3b1SBarry Smith   PetscFunctionReturn(0);
52753acd3b1SBarry Smith }
52853acd3b1SBarry Smith 
52953acd3b1SBarry Smith #undef __FUNCT__
53053acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsReal"
53153acd3b1SBarry Smith /*@C
53253acd3b1SBarry Smith    PetscOptionsReal - Gets the PetscReal value for a particular option in the database.
53353acd3b1SBarry Smith 
53453acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
53553acd3b1SBarry Smith 
53653acd3b1SBarry Smith    Input Parameters:
53753acd3b1SBarry Smith +  opt - option name
53853acd3b1SBarry Smith .  text - short string that describes the option
53953acd3b1SBarry Smith .  man - manual page with additional information on option
54053acd3b1SBarry Smith -  defaultv - the default (current) value
54153acd3b1SBarry Smith 
54253acd3b1SBarry Smith    Output Parameter:
54353acd3b1SBarry Smith +  value - the value to return
54453acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
54553acd3b1SBarry Smith 
54653acd3b1SBarry Smith    Level: beginner
54753acd3b1SBarry Smith 
54853acd3b1SBarry Smith    Concepts: options database^has int
54953acd3b1SBarry Smith 
55053acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
55153acd3b1SBarry Smith 
55253acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
55353acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
55453acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
55553acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
55653acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
55753acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
55853acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
55953acd3b1SBarry Smith @*/
56053acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsReal(const char opt[],const char text[],const char man[],PetscReal defaultv,PetscReal *value,PetscTruth *set)
56153acd3b1SBarry Smith {
56253acd3b1SBarry Smith   PetscErrorCode ierr;
563538aa990SBarry Smith   PetscOptions   amsopt;
56453acd3b1SBarry Smith 
56553acd3b1SBarry Smith   PetscFunctionBegin;
566538aa990SBarry Smith   if (PetscOptionsPublishCount == 0) {
567538aa990SBarry Smith     ierr = PetscOptionsCreate_Private(opt,text,man,OPTION_REAL,&amsopt);CHKERRQ(ierr);
568538aa990SBarry Smith     ierr = PetscMalloc(sizeof(PetscReal),&amsopt->data);CHKERRQ(ierr);
569538aa990SBarry Smith     *(PetscReal*)amsopt->data = defaultv;
570538aa990SBarry Smith   }
57153acd3b1SBarry Smith   ierr = PetscOptionsGetReal(PetscOptionsObject.prefix,opt,value,set);CHKERRQ(ierr);
57261b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
573a83599f4SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%G>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv,text,man);CHKERRQ(ierr);
57453acd3b1SBarry Smith   }
57553acd3b1SBarry Smith   PetscFunctionReturn(0);
57653acd3b1SBarry Smith }
57753acd3b1SBarry Smith 
57853acd3b1SBarry Smith #undef __FUNCT__
57953acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsScalar"
58053acd3b1SBarry Smith /*@C
58153acd3b1SBarry Smith    PetscOptionsScalar - Gets the scalar value for a particular option in the database.
58253acd3b1SBarry Smith 
58353acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
58453acd3b1SBarry Smith 
58553acd3b1SBarry Smith    Input Parameters:
58653acd3b1SBarry Smith +  opt - option name
58753acd3b1SBarry Smith .  text - short string that describes the option
58853acd3b1SBarry Smith .  man - manual page with additional information on option
58953acd3b1SBarry Smith -  defaultv - the default (current) value
59053acd3b1SBarry Smith 
59153acd3b1SBarry Smith    Output Parameter:
59253acd3b1SBarry Smith +  value - the value to return
59353acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
59453acd3b1SBarry Smith 
59553acd3b1SBarry Smith    Level: beginner
59653acd3b1SBarry Smith 
59753acd3b1SBarry Smith    Concepts: options database^has int
59853acd3b1SBarry Smith 
59953acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
60053acd3b1SBarry Smith 
60153acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
60253acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
60353acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
60453acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
60553acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
60653acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
60753acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
60853acd3b1SBarry Smith @*/
60953acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsScalar(const char opt[],const char text[],const char man[],PetscScalar defaultv,PetscScalar *value,PetscTruth *set)
61053acd3b1SBarry Smith {
61153acd3b1SBarry Smith   PetscErrorCode ierr;
61253acd3b1SBarry Smith 
61353acd3b1SBarry Smith   PetscFunctionBegin;
61453acd3b1SBarry Smith #if !defined(PETSC_USE_COMPLEX)
61553acd3b1SBarry Smith   ierr = PetscOptionsReal(opt,text,man,defaultv,value,set);CHKERRQ(ierr);
61653acd3b1SBarry Smith #else
61753acd3b1SBarry Smith   ierr = PetscOptionsGetScalar(PetscOptionsObject.prefix,opt,value,set);CHKERRQ(ierr);
61853acd3b1SBarry Smith #endif
61953acd3b1SBarry Smith   PetscFunctionReturn(0);
62053acd3b1SBarry Smith }
62153acd3b1SBarry Smith 
62253acd3b1SBarry Smith #undef __FUNCT__
62353acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsName"
62453acd3b1SBarry Smith /*@C
62590d69ab7SBarry Smith    PetscOptionsName - Determines if a particular option has been set in the database. This returns true whether the option is a number, string or boolean, even
62690d69ab7SBarry Smith                       its value is set to false.
62753acd3b1SBarry Smith 
62853acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
62953acd3b1SBarry Smith 
63053acd3b1SBarry Smith    Input Parameters:
63153acd3b1SBarry Smith +  opt - option name
63253acd3b1SBarry Smith .  text - short string that describes the option
63353acd3b1SBarry Smith -  man - manual page with additional information on option
63453acd3b1SBarry Smith 
63553acd3b1SBarry Smith    Output Parameter:
63653acd3b1SBarry Smith .  flg - PETSC_TRUE if found, else PETSC_FALSE
63753acd3b1SBarry Smith 
63853acd3b1SBarry Smith    Level: beginner
63953acd3b1SBarry Smith 
64053acd3b1SBarry Smith    Concepts: options database^has int
64153acd3b1SBarry Smith 
64253acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
64353acd3b1SBarry Smith 
64453acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
64553acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
64653acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
64753acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
64853acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
64953acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
65053acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
65153acd3b1SBarry Smith @*/
65253acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsName(const char opt[],const char text[],const char man[],PetscTruth *flg)
65353acd3b1SBarry Smith {
65453acd3b1SBarry Smith   PetscErrorCode ierr;
65553acd3b1SBarry Smith 
65653acd3b1SBarry Smith   PetscFunctionBegin;
65753acd3b1SBarry Smith   ierr = PetscOptionsHasName(PetscOptionsObject.prefix,opt,flg);CHKERRQ(ierr);
65861b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
65953acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
66053acd3b1SBarry Smith   }
66153acd3b1SBarry Smith   PetscFunctionReturn(0);
66253acd3b1SBarry Smith }
66353acd3b1SBarry Smith 
66453acd3b1SBarry Smith #undef __FUNCT__
66553acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsList"
66653acd3b1SBarry Smith /*@C
66753acd3b1SBarry Smith      PetscOptionsList - Puts a list of option values that a single one may be selected from
66853acd3b1SBarry Smith 
66953acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
67053acd3b1SBarry Smith 
67153acd3b1SBarry Smith    Input Parameters:
67253acd3b1SBarry Smith +  opt - option name
67353acd3b1SBarry Smith .  text - short string that describes the option
67453acd3b1SBarry Smith .  man - manual page with additional information on option
67553acd3b1SBarry Smith .  list - the possible choices
6763cc1e11dSBarry Smith .  defaultv - the default (current) value
6773cc1e11dSBarry Smith -  len - the length of the character array value
67853acd3b1SBarry Smith 
67953acd3b1SBarry Smith    Output Parameter:
68053acd3b1SBarry Smith +  value - the value to return
68153acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
68253acd3b1SBarry Smith 
68353acd3b1SBarry Smith    Level: intermediate
68453acd3b1SBarry Smith 
68553acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
68653acd3b1SBarry Smith 
68753acd3b1SBarry Smith    See PetscOptionsEList() for when the choices are given in a string array
68853acd3b1SBarry Smith 
68953acd3b1SBarry Smith    To get a listing of all currently specified options,
69053acd3b1SBarry Smith     see PetscOptionsPrint() or PetscOptionsGetAll()
69153acd3b1SBarry Smith 
69253acd3b1SBarry Smith    Concepts: options database^list
69353acd3b1SBarry Smith 
69453acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
69553acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
69653acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
69753acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
69853acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
69953acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
70053acd3b1SBarry Smith @*/
7013cc1e11dSBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsList(const char opt[],const char ltext[],const char man[],PetscFList list,const char defaultv[],char value[],size_t len,PetscTruth *set)
70253acd3b1SBarry Smith {
70353acd3b1SBarry Smith   PetscErrorCode ierr;
7043cc1e11dSBarry Smith   PetscOptions   amsopt;
70553acd3b1SBarry Smith 
70653acd3b1SBarry Smith   PetscFunctionBegin;
7073cc1e11dSBarry Smith   if (PetscOptionsPublishCount == 0) {
7083cc1e11dSBarry Smith     ierr = PetscOptionsCreate_Private(opt,ltext,man,OPTION_LIST,&amsopt);CHKERRQ(ierr);
7093cc1e11dSBarry Smith     ierr = PetscMalloc(1024*sizeof(char),&amsopt->data);CHKERRQ(ierr);
710330cf3c9SBarry Smith     ierr = PetscStrcpy((char*)amsopt->data,defaultv);CHKERRQ(ierr);
7113cc1e11dSBarry Smith     amsopt->flist = list;
7123cc1e11dSBarry Smith   }
71353acd3b1SBarry Smith   ierr = PetscOptionsGetString(PetscOptionsObject.prefix,opt,value,len,set);CHKERRQ(ierr);
71461b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
7153cc1e11dSBarry Smith     ierr = PetscFListPrintTypes(PetscOptionsObject.comm,stdout,PetscOptionsObject.prefix,opt,ltext,man,list,defaultv);CHKERRQ(ierr);CHKERRQ(ierr);
71653acd3b1SBarry Smith   }
71753acd3b1SBarry Smith   PetscFunctionReturn(0);
71853acd3b1SBarry Smith }
71953acd3b1SBarry Smith 
72053acd3b1SBarry Smith #undef __FUNCT__
72153acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsEList"
72253acd3b1SBarry Smith /*@C
72353acd3b1SBarry Smith      PetscOptionsEList - Puts a list of option values that a single one may be selected from
72453acd3b1SBarry Smith 
72553acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
72653acd3b1SBarry Smith 
72753acd3b1SBarry Smith    Input Parameters:
72853acd3b1SBarry Smith +  opt - option name
72953acd3b1SBarry Smith .  ltext - short string that describes the option
73053acd3b1SBarry Smith .  man - manual page with additional information on option
73153acd3b1SBarry Smith .  list - the possible choices
73253acd3b1SBarry Smith .  ntext - number of choices
73353acd3b1SBarry Smith -  defaultv - the default (current) value
73453acd3b1SBarry Smith 
73553acd3b1SBarry Smith    Output Parameter:
73653acd3b1SBarry Smith +  value - the index of the value to return
73753acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
73853acd3b1SBarry Smith 
73953acd3b1SBarry Smith    Level: intermediate
74053acd3b1SBarry Smith 
74153acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
74253acd3b1SBarry Smith 
74353acd3b1SBarry Smith    See PetscOptionsList() for when the choices are given in a PetscFList()
74453acd3b1SBarry Smith 
74553acd3b1SBarry Smith    Concepts: options database^list
74653acd3b1SBarry Smith 
74753acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
74853acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
74953acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
75053acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
75153acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
75253acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
75353acd3b1SBarry Smith @*/
7542ae9f97cSJed Brown PetscErrorCode PETSC_DLLEXPORT PetscOptionsEList(const char opt[],const char ltext[],const char man[],const char *const*list,PetscInt ntext,const char defaultv[],PetscInt *value,PetscTruth *set)
75553acd3b1SBarry Smith {
75653acd3b1SBarry Smith   PetscErrorCode ierr;
75753acd3b1SBarry Smith   PetscInt       i;
75853acd3b1SBarry Smith 
75953acd3b1SBarry Smith   PetscFunctionBegin;
76053acd3b1SBarry Smith   ierr = PetscOptionsGetEList(PetscOptionsObject.prefix,opt,list,ntext,value,set);CHKERRQ(ierr);
76161b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
76253acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%s> (choose one of)",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv);CHKERRQ(ierr);
76353acd3b1SBarry Smith     for (i=0; i<ntext; i++){
76453acd3b1SBarry Smith       ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm," %s",list[i]);CHKERRQ(ierr);
76553acd3b1SBarry Smith     }
76653acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"\n");CHKERRQ(ierr);
76753acd3b1SBarry Smith   }
76853acd3b1SBarry Smith   PetscFunctionReturn(0);
76953acd3b1SBarry Smith }
77053acd3b1SBarry Smith 
77153acd3b1SBarry Smith #undef __FUNCT__
77253acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruthGroupBegin"
77353acd3b1SBarry Smith /*@C
77453acd3b1SBarry Smith      PetscOptionsTruthGroupBegin - First in a series of logical queries on the options database for
77553acd3b1SBarry Smith        which only a single value can be true.
77653acd3b1SBarry Smith 
77753acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
77853acd3b1SBarry Smith 
77953acd3b1SBarry Smith    Input Parameters:
78053acd3b1SBarry Smith +  opt - option name
78153acd3b1SBarry Smith .  text - short string that describes the option
78253acd3b1SBarry Smith -  man - manual page with additional information on option
78353acd3b1SBarry Smith 
78453acd3b1SBarry Smith    Output Parameter:
78553acd3b1SBarry Smith .  flg - whether that option was set or not
78653acd3b1SBarry Smith 
78753acd3b1SBarry Smith    Level: intermediate
78853acd3b1SBarry Smith 
78953acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
79053acd3b1SBarry Smith 
79153acd3b1SBarry Smith    Must be followed by 0 or more PetscOptionsTruthGroup()s and PetscOptionsTruthGroupEnd()
79253acd3b1SBarry Smith 
79353acd3b1SBarry Smith     Concepts: options database^logical group
79453acd3b1SBarry Smith 
79553acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
79653acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
79753acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
79853acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
79953acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
80053acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
80153acd3b1SBarry Smith @*/
80253acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruthGroupBegin(const char opt[],const char text[],const char man[],PetscTruth *flg)
80353acd3b1SBarry Smith {
80453acd3b1SBarry Smith   PetscErrorCode ierr;
80553acd3b1SBarry Smith 
80653acd3b1SBarry Smith   PetscFunctionBegin;
80717326d04SJed Brown   *flg = PETSC_FALSE;
80817326d04SJed Brown   ierr = PetscOptionsGetTruth(PetscOptionsObject.prefix,opt,flg,PETSC_NULL);CHKERRQ(ierr);
80961b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
81053acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  Pick at most one of -------------\n");CHKERRQ(ierr);
81153acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"    -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
81253acd3b1SBarry Smith   }
81353acd3b1SBarry Smith   PetscFunctionReturn(0);
81453acd3b1SBarry Smith }
81553acd3b1SBarry Smith 
81653acd3b1SBarry Smith #undef __FUNCT__
81753acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruthGroup"
81853acd3b1SBarry Smith /*@C
81953acd3b1SBarry Smith      PetscOptionsTruthGroup - One in a series of logical queries on the options database for
82053acd3b1SBarry Smith        which only a single value can be true.
82153acd3b1SBarry Smith 
82253acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
82353acd3b1SBarry Smith 
82453acd3b1SBarry Smith    Input Parameters:
82553acd3b1SBarry Smith +  opt - option name
82653acd3b1SBarry Smith .  text - short string that describes the option
82753acd3b1SBarry Smith -  man - manual page with additional information on option
82853acd3b1SBarry Smith 
82953acd3b1SBarry Smith    Output Parameter:
83053acd3b1SBarry Smith .  flg - PETSC_TRUE if found, else PETSC_FALSE
83153acd3b1SBarry Smith 
83253acd3b1SBarry Smith    Level: intermediate
83353acd3b1SBarry Smith 
83453acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
83553acd3b1SBarry Smith 
83653acd3b1SBarry Smith    Must follow a PetscOptionsTruthGroupBegin() and preceded a PetscOptionsTruthGroupEnd()
83753acd3b1SBarry Smith 
83853acd3b1SBarry Smith     Concepts: options database^logical group
83953acd3b1SBarry Smith 
84053acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
84153acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
84253acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
84353acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
84453acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
84553acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
84653acd3b1SBarry Smith @*/
84753acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruthGroup(const char opt[],const char text[],const char man[],PetscTruth *flg)
84853acd3b1SBarry Smith {
84953acd3b1SBarry Smith   PetscErrorCode ierr;
85053acd3b1SBarry Smith 
85153acd3b1SBarry Smith   PetscFunctionBegin;
85217326d04SJed Brown   *flg = PETSC_FALSE;
85317326d04SJed Brown   ierr = PetscOptionsGetTruth(PetscOptionsObject.prefix,opt,flg,PETSC_NULL);CHKERRQ(ierr);
85461b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
85553acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"    -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
85653acd3b1SBarry Smith   }
85753acd3b1SBarry Smith   PetscFunctionReturn(0);
85853acd3b1SBarry Smith }
85953acd3b1SBarry Smith 
86053acd3b1SBarry Smith #undef __FUNCT__
86153acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruthGroupEnd"
86253acd3b1SBarry Smith /*@C
86353acd3b1SBarry Smith      PetscOptionsTruthGroupEnd - Last in a series of logical queries on the options database for
86453acd3b1SBarry Smith        which only a single value can be true.
86553acd3b1SBarry Smith 
86653acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
86753acd3b1SBarry Smith 
86853acd3b1SBarry Smith    Input Parameters:
86953acd3b1SBarry Smith +  opt - option name
87053acd3b1SBarry Smith .  text - short string that describes the option
87153acd3b1SBarry Smith -  man - manual page with additional information on option
87253acd3b1SBarry Smith 
87353acd3b1SBarry Smith    Output Parameter:
87453acd3b1SBarry Smith .  flg - PETSC_TRUE if found, else PETSC_FALSE
87553acd3b1SBarry Smith 
87653acd3b1SBarry Smith    Level: intermediate
87753acd3b1SBarry Smith 
87853acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
87953acd3b1SBarry Smith 
88053acd3b1SBarry Smith    Must follow a PetscOptionsTruthGroupBegin()
88153acd3b1SBarry Smith 
88253acd3b1SBarry Smith     Concepts: options database^logical group
88353acd3b1SBarry Smith 
88453acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
88553acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
88653acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
88753acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
88853acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
88953acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
89053acd3b1SBarry Smith @*/
89153acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruthGroupEnd(const char opt[],const char text[],const char man[],PetscTruth *flg)
89253acd3b1SBarry Smith {
89353acd3b1SBarry Smith   PetscErrorCode ierr;
89453acd3b1SBarry Smith 
89553acd3b1SBarry Smith   PetscFunctionBegin;
89617326d04SJed Brown   *flg = PETSC_FALSE;
89717326d04SJed Brown   ierr = PetscOptionsGetTruth(PetscOptionsObject.prefix,opt,flg,PETSC_NULL);CHKERRQ(ierr);
89861b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
89953acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"    -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
90053acd3b1SBarry Smith   }
90153acd3b1SBarry Smith   PetscFunctionReturn(0);
90253acd3b1SBarry Smith }
90353acd3b1SBarry Smith 
90453acd3b1SBarry Smith #undef __FUNCT__
90553acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruth"
90653acd3b1SBarry Smith /*@C
90753acd3b1SBarry Smith    PetscOptionsTruth - Determines if a particular option is in the database with a true or false
90853acd3b1SBarry Smith 
90953acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
91053acd3b1SBarry Smith 
91153acd3b1SBarry Smith    Input Parameters:
91253acd3b1SBarry Smith +  opt - option name
91353acd3b1SBarry Smith .  text - short string that describes the option
91453acd3b1SBarry Smith -  man - manual page with additional information on option
91553acd3b1SBarry Smith 
91653acd3b1SBarry Smith    Output Parameter:
91753acd3b1SBarry Smith .  flg - PETSC_TRUE or PETSC_FALSE
91853acd3b1SBarry Smith .  set - PETSC_TRUE if found, else PETSC_FALSE
91953acd3b1SBarry Smith 
92053acd3b1SBarry Smith    Level: beginner
92153acd3b1SBarry Smith 
92253acd3b1SBarry Smith    Concepts: options database^logical
92353acd3b1SBarry Smith 
92453acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
92553acd3b1SBarry Smith 
92653acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
92753acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
92853acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
92953acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
93053acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
93153acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
93253acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
93353acd3b1SBarry Smith @*/
93453acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruth(const char opt[],const char text[],const char man[],PetscTruth deflt,PetscTruth *flg,PetscTruth *set)
93553acd3b1SBarry Smith {
93653acd3b1SBarry Smith   PetscErrorCode ierr;
93753acd3b1SBarry Smith   PetscTruth     iset;
938aee2cecaSBarry Smith   PetscOptions   amsopt;
93953acd3b1SBarry Smith 
94053acd3b1SBarry Smith   PetscFunctionBegin;
941aee2cecaSBarry Smith   if (PetscOptionsPublishCount == 0) {
942aee2cecaSBarry Smith     ierr = PetscOptionsCreate_Private(opt,text,man,OPTION_LOGICAL,&amsopt);CHKERRQ(ierr);
943aee2cecaSBarry Smith     ierr = PetscMalloc(16*sizeof(char),&amsopt->data);CHKERRQ(ierr);
944aee2cecaSBarry Smith     ierr = PetscStrcpy((char*)amsopt->data,deflt ? "true" : "false");CHKERRQ(ierr);
945af6d86caSBarry Smith   }
94653acd3b1SBarry Smith   ierr = PetscOptionsGetTruth(PetscOptionsObject.prefix,opt,flg,&iset);CHKERRQ(ierr);
94753acd3b1SBarry Smith   if (!iset) {
94853acd3b1SBarry Smith     if (flg) *flg = deflt;
94953acd3b1SBarry Smith   }
95053acd3b1SBarry Smith   if (set) *set = iset;
95161b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
95253acd3b1SBarry Smith     const char *v = PetscTruths[deflt];
95353acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s: <%s> %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,v,text,man);CHKERRQ(ierr);
95453acd3b1SBarry Smith   }
95553acd3b1SBarry Smith   PetscFunctionReturn(0);
95653acd3b1SBarry Smith }
95753acd3b1SBarry Smith 
95853acd3b1SBarry Smith #undef __FUNCT__
95953acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsRealArray"
96053acd3b1SBarry Smith /*@C
96153acd3b1SBarry Smith    PetscOptionsRealArray - Gets an array of double values for a particular
96253acd3b1SBarry Smith    option in the database. The values must be separated with commas with
96353acd3b1SBarry Smith    no intervening spaces.
96453acd3b1SBarry Smith 
96553acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
96653acd3b1SBarry Smith 
96753acd3b1SBarry Smith    Input Parameters:
96853acd3b1SBarry Smith +  opt - the option one is seeking
96953acd3b1SBarry Smith .  text - short string describing option
97053acd3b1SBarry Smith .  man - manual page for option
97153acd3b1SBarry Smith -  nmax - maximum number of values
97253acd3b1SBarry Smith 
97353acd3b1SBarry Smith    Output Parameter:
97453acd3b1SBarry Smith +  value - location to copy values
97553acd3b1SBarry Smith .  nmax - actual number of values found
97653acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
97753acd3b1SBarry Smith 
97853acd3b1SBarry Smith    Level: beginner
97953acd3b1SBarry Smith 
98053acd3b1SBarry Smith    Notes:
98153acd3b1SBarry Smith    The user should pass in an array of doubles
98253acd3b1SBarry Smith 
98353acd3b1SBarry Smith    Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
98453acd3b1SBarry Smith 
98553acd3b1SBarry Smith    Concepts: options database^array of strings
98653acd3b1SBarry Smith 
98753acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
98853acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
98953acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
99053acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
99153acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
99253acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
99353acd3b1SBarry Smith @*/
99453acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsRealArray(const char opt[],const char text[],const char man[],PetscReal value[],PetscInt *n,PetscTruth *set)
99553acd3b1SBarry Smith {
99653acd3b1SBarry Smith   PetscErrorCode ierr;
99753acd3b1SBarry Smith   PetscInt       i;
998e26ddf31SBarry Smith   PetscOptions   amsopt;
99953acd3b1SBarry Smith 
100053acd3b1SBarry Smith   PetscFunctionBegin;
1001e26ddf31SBarry Smith   if (PetscOptionsPublishCount == 0) {
1002e26ddf31SBarry Smith     PetscReal *vals;
1003e26ddf31SBarry Smith 
1004e26ddf31SBarry Smith     ierr = PetscOptionsCreate_Private(opt,text,man,OPTION_REAL_ARRAY,&amsopt);CHKERRQ(ierr);
1005e26ddf31SBarry Smith     ierr = PetscMalloc((*n)*sizeof(PetscReal),&amsopt->data);CHKERRQ(ierr);
1006e26ddf31SBarry Smith     vals = (PetscReal*)amsopt->data;
1007e26ddf31SBarry Smith     for (i=0; i<*n; i++) vals[i] = value[i];
1008e26ddf31SBarry Smith     amsopt->arraylength = *n;
1009e26ddf31SBarry Smith   }
101053acd3b1SBarry Smith   ierr = PetscOptionsGetRealArray(PetscOptionsObject.prefix,opt,value,n,set);CHKERRQ(ierr);
101161b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
1012a83599f4SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%G",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,value[0]);CHKERRQ(ierr);
101353acd3b1SBarry Smith     for (i=1; i<*n; i++) {
1014a83599f4SBarry Smith       ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,",%G",value[i]);CHKERRQ(ierr);
101553acd3b1SBarry Smith     }
101653acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,">: %s (%s)\n",text,man);CHKERRQ(ierr);
101753acd3b1SBarry Smith   }
101853acd3b1SBarry Smith   PetscFunctionReturn(0);
101953acd3b1SBarry Smith }
102053acd3b1SBarry Smith 
102153acd3b1SBarry Smith 
102253acd3b1SBarry Smith #undef __FUNCT__
102353acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsIntArray"
102453acd3b1SBarry Smith /*@C
102553acd3b1SBarry Smith    PetscOptionsIntArray - Gets an array of integers for a particular
102653acd3b1SBarry Smith    option in the database. The values must be separated with commas with
102753acd3b1SBarry Smith    no intervening spaces.
102853acd3b1SBarry Smith 
102953acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
103053acd3b1SBarry Smith 
103153acd3b1SBarry Smith    Input Parameters:
103253acd3b1SBarry Smith +  opt - the option one is seeking
103353acd3b1SBarry Smith .  text - short string describing option
103453acd3b1SBarry Smith .  man - manual page for option
1035f8a50e2bSBarry Smith -  n - maximum number of values
103653acd3b1SBarry Smith 
103753acd3b1SBarry Smith    Output Parameter:
103853acd3b1SBarry Smith +  value - location to copy values
1039f8a50e2bSBarry Smith .  n - actual number of values found
104053acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
104153acd3b1SBarry Smith 
104253acd3b1SBarry Smith    Level: beginner
104353acd3b1SBarry Smith 
104453acd3b1SBarry Smith    Notes:
104553acd3b1SBarry Smith    The user should pass in an array of integers
104653acd3b1SBarry Smith 
104753acd3b1SBarry Smith    Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
104853acd3b1SBarry Smith 
104953acd3b1SBarry Smith    Concepts: options database^array of strings
105053acd3b1SBarry Smith 
105153acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
105253acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
105353acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
105453acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
105553acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
105653acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList(), PetscOptionsRealArray()
105753acd3b1SBarry Smith @*/
105853acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsIntArray(const char opt[],const char text[],const char man[],PetscInt value[],PetscInt *n,PetscTruth *set)
105953acd3b1SBarry Smith {
106053acd3b1SBarry Smith   PetscErrorCode ierr;
106153acd3b1SBarry Smith   PetscInt       i;
1062e26ddf31SBarry Smith   PetscOptions   amsopt;
106353acd3b1SBarry Smith 
106453acd3b1SBarry Smith   PetscFunctionBegin;
1065e26ddf31SBarry Smith   if (PetscOptionsPublishCount == 0) {
1066e26ddf31SBarry Smith     PetscInt *vals;
1067e26ddf31SBarry Smith 
1068e26ddf31SBarry Smith     ierr = PetscOptionsCreate_Private(opt,text,man,OPTION_INT_ARRAY,&amsopt);CHKERRQ(ierr);
1069e26ddf31SBarry Smith     ierr = PetscMalloc((*n)*sizeof(PetscInt),&amsopt->data);CHKERRQ(ierr);
1070e26ddf31SBarry Smith     vals = (PetscInt*)amsopt->data;
1071e26ddf31SBarry Smith     for (i=0; i<*n; i++) vals[i] = value[i];
1072e26ddf31SBarry Smith     amsopt->arraylength = *n;
1073e26ddf31SBarry Smith   }
107453acd3b1SBarry Smith   ierr = PetscOptionsGetIntArray(PetscOptionsObject.prefix,opt,value,n,set);CHKERRQ(ierr);
107561b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
107653acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%d",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,value[0]);CHKERRQ(ierr);
107753acd3b1SBarry Smith     for (i=1; i<*n; i++) {
107853acd3b1SBarry Smith       ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,",%d",value[i]);CHKERRQ(ierr);
107953acd3b1SBarry Smith     }
108053acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,">: %s (%s)\n",text,man);CHKERRQ(ierr);
108153acd3b1SBarry Smith   }
108253acd3b1SBarry Smith   PetscFunctionReturn(0);
108353acd3b1SBarry Smith }
108453acd3b1SBarry Smith 
108553acd3b1SBarry Smith #undef __FUNCT__
108653acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsStringArray"
108753acd3b1SBarry Smith /*@C
108853acd3b1SBarry Smith    PetscOptionsStringArray - Gets an array of string values for a particular
108953acd3b1SBarry Smith    option in the database. The values must be separated with commas with
109053acd3b1SBarry Smith    no intervening spaces.
109153acd3b1SBarry Smith 
109253acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
109353acd3b1SBarry Smith 
109453acd3b1SBarry Smith    Input Parameters:
109553acd3b1SBarry Smith +  opt - the option one is seeking
109653acd3b1SBarry Smith .  text - short string describing option
109753acd3b1SBarry Smith .  man - manual page for option
109853acd3b1SBarry Smith -  nmax - maximum number of strings
109953acd3b1SBarry Smith 
110053acd3b1SBarry Smith    Output Parameter:
110153acd3b1SBarry Smith +  value - location to copy strings
110253acd3b1SBarry Smith .  nmax - actual number of strings found
110353acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
110453acd3b1SBarry Smith 
110553acd3b1SBarry Smith    Level: beginner
110653acd3b1SBarry Smith 
110753acd3b1SBarry Smith    Notes:
110853acd3b1SBarry Smith    The user should pass in an array of pointers to char, to hold all the
110953acd3b1SBarry Smith    strings returned by this function.
111053acd3b1SBarry Smith 
111153acd3b1SBarry Smith    The user is responsible for deallocating the strings that are
111253acd3b1SBarry Smith    returned. The Fortran interface for this routine is not supported.
111353acd3b1SBarry Smith 
111453acd3b1SBarry Smith    Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
111553acd3b1SBarry Smith 
111653acd3b1SBarry Smith    Concepts: options database^array of strings
111753acd3b1SBarry Smith 
111853acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
111953acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
112053acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
112153acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
112253acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
112353acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
112453acd3b1SBarry Smith @*/
112553acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsStringArray(const char opt[],const char text[],const char man[],char *value[],PetscInt *nmax,PetscTruth *set)
112653acd3b1SBarry Smith {
112753acd3b1SBarry Smith   PetscErrorCode ierr;
112853acd3b1SBarry Smith 
112953acd3b1SBarry Smith   PetscFunctionBegin;
113053acd3b1SBarry Smith   ierr = PetscOptionsGetStringArray(PetscOptionsObject.prefix,opt,value,nmax,set);CHKERRQ(ierr);
113161b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
113253acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <string1,string2,...>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
113353acd3b1SBarry Smith   }
113453acd3b1SBarry Smith   PetscFunctionReturn(0);
113553acd3b1SBarry Smith }
113653acd3b1SBarry Smith 
1137e2446a98SMatthew Knepley #undef __FUNCT__
1138e2446a98SMatthew Knepley #define __FUNCT__ "PetscOptionsTruthArray"
1139e2446a98SMatthew Knepley /*@C
1140e2446a98SMatthew Knepley    PetscOptionsTruthArray - Gets an array of logical values (true or false) for a particular
1141e2446a98SMatthew Knepley    option in the database. The values must be separated with commas with
1142e2446a98SMatthew Knepley    no intervening spaces.
1143e2446a98SMatthew Knepley 
1144e2446a98SMatthew Knepley    Collective on the communicator passed in PetscOptionsBegin()
1145e2446a98SMatthew Knepley 
1146e2446a98SMatthew Knepley    Input Parameters:
1147e2446a98SMatthew Knepley +  opt - the option one is seeking
1148e2446a98SMatthew Knepley .  text - short string describing option
1149e2446a98SMatthew Knepley .  man - manual page for option
1150e2446a98SMatthew Knepley -  nmax - maximum number of values
1151e2446a98SMatthew Knepley 
1152e2446a98SMatthew Knepley    Output Parameter:
1153e2446a98SMatthew Knepley +  value - location to copy values
1154e2446a98SMatthew Knepley .  nmax - actual number of values found
1155e2446a98SMatthew Knepley -  set - PETSC_TRUE if found, else PETSC_FALSE
1156e2446a98SMatthew Knepley 
1157e2446a98SMatthew Knepley    Level: beginner
1158e2446a98SMatthew Knepley 
1159e2446a98SMatthew Knepley    Notes:
1160e2446a98SMatthew Knepley    The user should pass in an array of doubles
1161e2446a98SMatthew Knepley 
1162e2446a98SMatthew Knepley    Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
1163e2446a98SMatthew Knepley 
1164e2446a98SMatthew Knepley    Concepts: options database^array of strings
1165e2446a98SMatthew Knepley 
1166e2446a98SMatthew Knepley .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
1167e2446a98SMatthew Knepley            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
1168e2446a98SMatthew Knepley           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
1169e2446a98SMatthew Knepley           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
1170e2446a98SMatthew Knepley           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
1171e2446a98SMatthew Knepley           PetscOptionsList(), PetscOptionsEList()
1172e2446a98SMatthew Knepley @*/
1173e2446a98SMatthew Knepley PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruthArray(const char opt[],const char text[],const char man[],PetscTruth value[],PetscInt *n,PetscTruth *set)
1174e2446a98SMatthew Knepley {
1175e2446a98SMatthew Knepley   PetscErrorCode ierr;
1176e2446a98SMatthew Knepley   PetscInt       i;
1177e2446a98SMatthew Knepley 
1178e2446a98SMatthew Knepley   PetscFunctionBegin;
1179e2446a98SMatthew Knepley   ierr = PetscOptionsGetTruthArray(PetscOptionsObject.prefix,opt,value,n,set);CHKERRQ(ierr);
1180e2446a98SMatthew Knepley   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
1181e2446a98SMatthew Knepley     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%d",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,value[0]);CHKERRQ(ierr);
1182e2446a98SMatthew Knepley     for (i=1; i<*n; i++) {
1183e2446a98SMatthew Knepley       ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,",%d",value[i]);CHKERRQ(ierr);
1184e2446a98SMatthew Knepley     }
1185e2446a98SMatthew Knepley     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,">: %s (%s)\n",text,man);CHKERRQ(ierr);
1186e2446a98SMatthew Knepley   }
1187e2446a98SMatthew Knepley   PetscFunctionReturn(0);
1188e2446a98SMatthew Knepley }
1189e2446a98SMatthew Knepley 
119053acd3b1SBarry Smith 
119153acd3b1SBarry Smith #undef __FUNCT__
119253acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsHead"
119353acd3b1SBarry Smith /*@C
1194b52f573bSBarry Smith      PetscOptionsHead - Puts a heading before listing any more published options. Used, for example,
119553acd3b1SBarry Smith             in KSPSetFromOptions_GMRES().
119653acd3b1SBarry Smith 
119753acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
119853acd3b1SBarry Smith 
119953acd3b1SBarry Smith    Input Parameter:
120053acd3b1SBarry Smith .   head - the heading text
120153acd3b1SBarry Smith 
120253acd3b1SBarry Smith 
120353acd3b1SBarry Smith    Level: intermediate
120453acd3b1SBarry Smith 
120553acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
120653acd3b1SBarry Smith 
1207b52f573bSBarry Smith           Can be followed by a call to PetscOptionsTail() in the same function.
120853acd3b1SBarry Smith 
120953acd3b1SBarry Smith    Concepts: options database^subheading
121053acd3b1SBarry Smith 
121153acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
121253acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
121353acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
121453acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
121553acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
121653acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
121753acd3b1SBarry Smith @*/
121853acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsHead(const char head[])
121953acd3b1SBarry Smith {
122053acd3b1SBarry Smith   PetscErrorCode ierr;
122153acd3b1SBarry Smith 
122253acd3b1SBarry Smith   PetscFunctionBegin;
122361b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
122453acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  %s\n",head);CHKERRQ(ierr);
122553acd3b1SBarry Smith   }
122653acd3b1SBarry Smith   PetscFunctionReturn(0);
122753acd3b1SBarry Smith }
122853acd3b1SBarry Smith 
122953acd3b1SBarry Smith 
123053acd3b1SBarry Smith 
123153acd3b1SBarry Smith 
123253acd3b1SBarry Smith 
123353acd3b1SBarry Smith 
1234