xref: /petsc/src/sys/objects/aoptions.c (revision e26ddf31366aa7671fd0511132724214c9f9e6e1)
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 
853acd3b1SBarry Smith #include "petsc.h"        /*I  "petsc.h"   I*/
953acd3b1SBarry Smith #include "petscsys.h"
1053acd3b1SBarry Smith #if defined(PETSC_HAVE_STDLIB_H)
1153acd3b1SBarry Smith #include <stdlib.h>
1253acd3b1SBarry Smith #endif
1353acd3b1SBarry Smith 
1453acd3b1SBarry Smith /*
1553acd3b1SBarry Smith     Keep a linked list of options that have been posted and we are waiting for
163fc1eb6aSBarry Smith    user selection. See the manual page for PetscOptionsBegin()
1753acd3b1SBarry Smith 
1853acd3b1SBarry Smith     Eventually we'll attach this beast to a MPI_Comm
1953acd3b1SBarry Smith */
20f8d0b74dSMatthew Knepley PetscOptionsObjectType PetscOptionsObject;
2153acd3b1SBarry Smith PetscInt               PetscOptionsPublishCount = 0;
2253acd3b1SBarry Smith 
2353acd3b1SBarry Smith #undef __FUNCT__
2453acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsBegin_Private"
2553acd3b1SBarry Smith /*
2653acd3b1SBarry Smith     Handles setting up the data structure in a call to PetscOptionsBegin()
2753acd3b1SBarry Smith */
2853acd3b1SBarry Smith PetscErrorCode PetscOptionsBegin_Private(MPI_Comm comm,const char prefix[],const char title[],const char mansec[])
2953acd3b1SBarry Smith {
3053acd3b1SBarry Smith   PetscErrorCode ierr;
3153acd3b1SBarry Smith 
3253acd3b1SBarry Smith   PetscFunctionBegin;
3353acd3b1SBarry Smith   PetscOptionsObject.next          = 0;
3453acd3b1SBarry Smith   PetscOptionsObject.comm          = comm;
356356e834SBarry Smith   PetscOptionsObject.changedmethod = PETSC_FALSE;
36f8d0b74dSMatthew Knepley   if (PetscOptionsObject.prefix) {
37f8d0b74dSMatthew Knepley     ierr = PetscStrfree(PetscOptionsObject.prefix);CHKERRQ(ierr); PetscOptionsObject.prefix = 0;
38f8d0b74dSMatthew Knepley   }
3953acd3b1SBarry Smith   ierr = PetscStrallocpy(prefix,&PetscOptionsObject.prefix);CHKERRQ(ierr);
40f8d0b74dSMatthew Knepley   if (PetscOptionsObject.title) {
41f8d0b74dSMatthew Knepley     ierr = PetscStrfree(PetscOptionsObject.title);CHKERRQ(ierr); PetscOptionsObject.title  = 0;
42f8d0b74dSMatthew Knepley   }
4353acd3b1SBarry Smith   ierr = PetscStrallocpy(title,&PetscOptionsObject.title);CHKERRQ(ierr);
4453acd3b1SBarry Smith 
4553acd3b1SBarry Smith   ierr = PetscOptionsHasName(PETSC_NULL,"-help",&PetscOptionsObject.printhelp);CHKERRQ(ierr);
4653acd3b1SBarry Smith   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) {
4761b37b28SSatish Balay     if (!PetscOptionsObject.alreadyprinted) {
4853acd3b1SBarry Smith       ierr = (*PetscHelpPrintf)(comm,"%s -------------------------------------------------\n",title);CHKERRQ(ierr);
4953acd3b1SBarry Smith     }
5061b37b28SSatish Balay   }
5153acd3b1SBarry Smith   PetscFunctionReturn(0);
5253acd3b1SBarry Smith }
5353acd3b1SBarry Smith 
5453acd3b1SBarry Smith /*
5553acd3b1SBarry Smith      Handles adding another option to the list of options within this particular PetscOptionsBegin() PetscOptionsEnd()
5653acd3b1SBarry Smith */
5753acd3b1SBarry Smith #undef __FUNCT__
5853acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsCreate_Private"
59e3ed6ec8SBarry Smith static int PetscOptionsCreate_Private(const char opt[],const char text[],const char man[],PetscOptionType t,PetscOptions *amsopt)
6053acd3b1SBarry Smith {
6153acd3b1SBarry Smith   int          ierr;
6253acd3b1SBarry Smith   PetscOptions next;
6353acd3b1SBarry Smith 
6453acd3b1SBarry Smith   PetscFunctionBegin;
65e3ed6ec8SBarry Smith   ierr             = PetscNew(struct _p_PetscOptions,amsopt);CHKERRQ(ierr);
6653acd3b1SBarry Smith   (*amsopt)->next  = 0;
6753acd3b1SBarry Smith   (*amsopt)->set   = PETSC_FALSE;
686356e834SBarry Smith   (*amsopt)->type  = t;
6953acd3b1SBarry Smith   (*amsopt)->data  = 0;
7053acd3b1SBarry Smith   (*amsopt)->edata = 0;
7161b37b28SSatish Balay 
7253acd3b1SBarry Smith   ierr             = PetscStrallocpy(text,&(*amsopt)->text);CHKERRQ(ierr);
7353acd3b1SBarry Smith   ierr             = PetscStrallocpy(opt,&(*amsopt)->option);CHKERRQ(ierr);
746356e834SBarry Smith   ierr             = PetscStrallocpy(man,&(*amsopt)->man);CHKERRQ(ierr);
7553acd3b1SBarry Smith 
7653acd3b1SBarry Smith   if (!PetscOptionsObject.next) {
7753acd3b1SBarry Smith     PetscOptionsObject.next = *amsopt;
7853acd3b1SBarry Smith   } else {
7953acd3b1SBarry Smith     next = PetscOptionsObject.next;
8053acd3b1SBarry Smith     while (next->next) next = next->next;
8153acd3b1SBarry Smith     next->next = *amsopt;
8253acd3b1SBarry Smith   }
8353acd3b1SBarry Smith   PetscFunctionReturn(0);
8453acd3b1SBarry Smith }
8553acd3b1SBarry Smith 
8653acd3b1SBarry Smith #undef __FUNCT__
87aee2cecaSBarry Smith #define __FUNCT__ "PetscScanString"
88aee2cecaSBarry Smith /*
893fc1eb6aSBarry Smith     PetscScanString -  Gets user input via stdin from process and broadcasts to all processes
903fc1eb6aSBarry Smith 
913fc1eb6aSBarry Smith     Collective on MPI_Comm
923fc1eb6aSBarry Smith 
933fc1eb6aSBarry Smith    Input Parameters:
943fc1eb6aSBarry Smith +     commm - communicator for the broadcast, must be PETSC_COMM_WORLD
953fc1eb6aSBarry Smith .     n - length of the string, must be the same on all processes
963fc1eb6aSBarry Smith -     str - location to store input
97aee2cecaSBarry Smith 
98aee2cecaSBarry Smith     Bugs:
99aee2cecaSBarry Smith .   Assumes process 0 of the given communicator has access to stdin
100aee2cecaSBarry Smith 
101aee2cecaSBarry Smith */
1023fc1eb6aSBarry Smith static PetscErrorCode PetscScanString(MPI_Comm comm,size_t n,char str[])
103aee2cecaSBarry Smith {
104aee2cecaSBarry Smith   PetscInt       i;
105aee2cecaSBarry Smith   char           c;
1063fc1eb6aSBarry Smith   PetscMPIInt    rank,nm;
107aee2cecaSBarry Smith   PetscErrorCode ierr;
108aee2cecaSBarry Smith 
109aee2cecaSBarry Smith   PetscFunctionBegin;
110aee2cecaSBarry Smith   ierr = MPI_Comm_rank(comm,&rank);CHKERRQ(ierr);
111aee2cecaSBarry Smith   if (!rank) {
112aee2cecaSBarry Smith     c = (char) getchar();
113aee2cecaSBarry Smith     i = 0;
114aee2cecaSBarry Smith     while ( c != '\n' && i < n-1) {
115aee2cecaSBarry Smith       str[i++] = c;
116aee2cecaSBarry Smith       c = (char) getchar();
117aee2cecaSBarry Smith     }
118aee2cecaSBarry Smith     str[i] = 0;
119aee2cecaSBarry Smith   }
1203fc1eb6aSBarry Smith   nm   = PetscMPIIntCast(n);
1213fc1eb6aSBarry Smith   ierr = MPI_Bcast(str,nm,MPI_CHAR,0,comm);CHKERRQ(ierr);
122aee2cecaSBarry Smith   PetscFunctionReturn(0);
123aee2cecaSBarry Smith }
124aee2cecaSBarry Smith 
125aee2cecaSBarry Smith #undef __FUNCT__
126aee2cecaSBarry Smith #define __FUNCT__ "PetscOptionsGetFromTextInput"
127aee2cecaSBarry Smith /*
128aee2cecaSBarry Smith     PetscOptionsGetFromTextInput
129aee2cecaSBarry Smith 
130aee2cecaSBarry Smith     Notes: this isn't really practical, it is just to demonstrate the principle
131aee2cecaSBarry Smith 
132aee2cecaSBarry Smith     Bugs:
133aee2cecaSBarry Smith +    All processes must traverse through the exact same set of option queries do to the call to PetscScanString()
134aee2cecaSBarry Smith -    Only works for PetscInt == int, PetscReal == double etc
135aee2cecaSBarry Smith 
136aee2cecaSBarry Smith */
137aee2cecaSBarry Smith PetscErrorCode PetscOptionsGetFromTextInput()
1386356e834SBarry Smith {
1396356e834SBarry Smith   PetscErrorCode ierr;
1406356e834SBarry Smith   PetscOptions   next = PetscOptionsObject.next;
1416356e834SBarry Smith   char           str[512];
142aee2cecaSBarry Smith   int            id;
143*e26ddf31SBarry Smith   double         ir,*valr;
144*e26ddf31SBarry Smith   PetscInt       i,*vald;
1456356e834SBarry Smith 
146*e26ddf31SBarry Smith   ierr = (*PetscPrintf)(PETSC_COMM_WORLD,"%s -------------------------------------------------\n",PetscOptionsObject.title);CHKERRQ(ierr);
1476356e834SBarry Smith   while (next) {
1486356e834SBarry Smith     switch (next->type) {
1496356e834SBarry Smith       case OPTION_HEAD:
1506356e834SBarry Smith         break;
151*e26ddf31SBarry Smith       case OPTION_INT_ARRAY:
152*e26ddf31SBarry Smith         ierr = PetscPrintf(PETSC_COMM_WORLD,"-%s%s <",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",next->option+1);CHKERRQ(ierr);
153*e26ddf31SBarry Smith         vald = (PetscInt*) next->data;
154*e26ddf31SBarry Smith         for (i=0; i<next->arraylength; i++) {
155*e26ddf31SBarry Smith           ierr = PetscPrintf(PETSC_COMM_WORLD,"%d",vald[i]);CHKERRQ(ierr);
156*e26ddf31SBarry Smith           if (i < next->arraylength-1) {
157*e26ddf31SBarry Smith             ierr = PetscPrintf(PETSC_COMM_WORLD,",");CHKERRQ(ierr);
158*e26ddf31SBarry Smith           }
159*e26ddf31SBarry Smith         }
160*e26ddf31SBarry Smith         ierr = PetscPrintf(PETSC_COMM_WORLD,">: %s (%s)",next->text,next->man);CHKERRQ(ierr);
161*e26ddf31SBarry Smith         ierr = PetscScanString(PETSC_COMM_WORLD,512,str);CHKERRQ(ierr);
162*e26ddf31SBarry Smith         if (str[0]) {
163*e26ddf31SBarry Smith           PetscToken token;
164*e26ddf31SBarry Smith           PetscInt   n=0,nmax = next->arraylength,*dvalue = (PetscInt*)next->data,start,end;
165*e26ddf31SBarry Smith           size_t     len;
166*e26ddf31SBarry Smith           char*      value;
167*e26ddf31SBarry Smith           PetscTruth foundrange;
168*e26ddf31SBarry Smith 
169*e26ddf31SBarry Smith           next->set = PETSC_TRUE;
170*e26ddf31SBarry Smith           value = str;
171*e26ddf31SBarry Smith 	  ierr = PetscTokenCreate(value,',',&token);CHKERRQ(ierr);
172*e26ddf31SBarry Smith 	  ierr = PetscTokenFind(token,&value);CHKERRQ(ierr);
173*e26ddf31SBarry Smith 	  while (n < nmax) {
174*e26ddf31SBarry Smith 	    if (!value) break;
175*e26ddf31SBarry Smith 
176*e26ddf31SBarry Smith 	    /* look for form  d-D where d and D are integers */
177*e26ddf31SBarry Smith 	    foundrange = PETSC_FALSE;
178*e26ddf31SBarry Smith 	    ierr      = PetscStrlen(value,&len);CHKERRQ(ierr);
179*e26ddf31SBarry Smith 	    if (value[0] == '-') i=2;
180*e26ddf31SBarry Smith 	    else i=1;
181*e26ddf31SBarry Smith 	    for (;i<(int)len; i++) {
182*e26ddf31SBarry Smith 	      if (value[i] == '-') {
183*e26ddf31SBarry Smith 		if (i == (int)len-1) SETERRQ2(PETSC_ERR_USER,"Error in %D-th array entry %s\n",n,value);
184*e26ddf31SBarry Smith 		value[i] = 0;
185*e26ddf31SBarry Smith 		ierr     = PetscOptionsAtoi(value,&start);CHKERRQ(ierr);
186*e26ddf31SBarry Smith 		ierr     = PetscOptionsAtoi(value+i+1,&end);CHKERRQ(ierr);
187*e26ddf31SBarry Smith 		if (end <= start) SETERRQ3(PETSC_ERR_USER,"Error in %D-th array entry, %s-%s cannot have decreasing list",n,value,value+i+1);
188*e26ddf31SBarry Smith 		if (n + end - start - 1 >= nmax) SETERRQ4(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);
189*e26ddf31SBarry Smith 		for (;start<end; start++) {
190*e26ddf31SBarry Smith 		  *dvalue = start; dvalue++;n++;
191*e26ddf31SBarry Smith 		}
192*e26ddf31SBarry Smith 		foundrange = PETSC_TRUE;
193*e26ddf31SBarry Smith 		break;
194*e26ddf31SBarry Smith 	      }
195*e26ddf31SBarry Smith 	    }
196*e26ddf31SBarry Smith 	    if (!foundrange) {
197*e26ddf31SBarry Smith 	      ierr      = PetscOptionsAtoi(value,dvalue);CHKERRQ(ierr);
198*e26ddf31SBarry Smith 	      dvalue++;
199*e26ddf31SBarry Smith 	      n++;
200*e26ddf31SBarry Smith 	    }
201*e26ddf31SBarry Smith 	    ierr = PetscTokenFind(token,&value);CHKERRQ(ierr);
202*e26ddf31SBarry Smith 	  }
203*e26ddf31SBarry Smith 	  ierr = PetscTokenDestroy(token);CHKERRQ(ierr);
204*e26ddf31SBarry Smith         }
205*e26ddf31SBarry Smith         break;
206*e26ddf31SBarry Smith       case OPTION_REAL_ARRAY:
207*e26ddf31SBarry Smith         ierr = PetscPrintf(PETSC_COMM_WORLD,"-%s%s <",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",next->option+1);CHKERRQ(ierr);
208*e26ddf31SBarry Smith         valr = (PetscReal*) next->data;
209*e26ddf31SBarry Smith         for (i=0; i<next->arraylength; i++) {
210*e26ddf31SBarry Smith           ierr = PetscPrintf(PETSC_COMM_WORLD,"%g",valr[i]);CHKERRQ(ierr);
211*e26ddf31SBarry Smith           if (i < next->arraylength-1) {
212*e26ddf31SBarry Smith             ierr = PetscPrintf(PETSC_COMM_WORLD,",");CHKERRQ(ierr);
213*e26ddf31SBarry Smith           }
214*e26ddf31SBarry Smith         }
215*e26ddf31SBarry Smith         ierr = PetscPrintf(PETSC_COMM_WORLD,">: %s (%s)",next->text,next->man);CHKERRQ(ierr);
216*e26ddf31SBarry Smith         ierr = PetscScanString(PETSC_COMM_WORLD,512,str);CHKERRQ(ierr);
217*e26ddf31SBarry Smith         if (str[0]) {
218*e26ddf31SBarry Smith           PetscToken token;
219*e26ddf31SBarry Smith           PetscInt   n=0,nmax = next->arraylength;
220*e26ddf31SBarry Smith           PetscReal   *dvalue = (PetscReal*)next->data;
221*e26ddf31SBarry Smith           char*      value;
222*e26ddf31SBarry Smith 
223*e26ddf31SBarry Smith           next->set = PETSC_TRUE;
224*e26ddf31SBarry Smith           value = str;
225*e26ddf31SBarry Smith 	  ierr = PetscTokenCreate(value,',',&token);CHKERRQ(ierr);
226*e26ddf31SBarry Smith 	  ierr = PetscTokenFind(token,&value);CHKERRQ(ierr);
227*e26ddf31SBarry Smith 	  while (n < nmax) {
228*e26ddf31SBarry Smith 	    if (!value) break;
229*e26ddf31SBarry Smith             ierr      = PetscOptionsAtod(value,dvalue);CHKERRQ(ierr);
230*e26ddf31SBarry Smith 	    dvalue++;
231*e26ddf31SBarry Smith 	    n++;
232*e26ddf31SBarry Smith 	    ierr = PetscTokenFind(token,&value);CHKERRQ(ierr);
233*e26ddf31SBarry Smith 	  }
234*e26ddf31SBarry Smith 	  ierr = PetscTokenDestroy(token);CHKERRQ(ierr);
235*e26ddf31SBarry Smith         }
236*e26ddf31SBarry Smith         break;
2376356e834SBarry Smith       case OPTION_INT:
238*e26ddf31SBarry 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);
2393fc1eb6aSBarry Smith         ierr = PetscScanString(PETSC_COMM_WORLD,512,str);CHKERRQ(ierr);
2403fc1eb6aSBarry Smith         if (str[0]) {
241aee2cecaSBarry Smith            sscanf(str,"%d",&id);
242aee2cecaSBarry Smith            next->set = PETSC_TRUE;
243aee2cecaSBarry Smith            *((PetscInt*)next->data) = id;
244aee2cecaSBarry Smith         }
245aee2cecaSBarry Smith         break;
246aee2cecaSBarry Smith       case OPTION_REAL:
247*e26ddf31SBarry 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);
2483fc1eb6aSBarry Smith         ierr = PetscScanString(PETSC_COMM_WORLD,512,str);CHKERRQ(ierr);
2493fc1eb6aSBarry Smith         if (str[0]) {
250aee2cecaSBarry Smith            sscanf(str,"%le",&ir);
251aee2cecaSBarry Smith            next->set = PETSC_TRUE;
252aee2cecaSBarry Smith            *((PetscReal*)next->data) = ir;
253aee2cecaSBarry Smith         }
254aee2cecaSBarry Smith         break;
255aee2cecaSBarry Smith       case OPTION_LOGICAL:
256aee2cecaSBarry Smith       case OPTION_STRING:
257*e26ddf31SBarry 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);
2583fc1eb6aSBarry Smith         ierr = PetscScanString(PETSC_COMM_WORLD,512,str);CHKERRQ(ierr);
2593fc1eb6aSBarry Smith         if (str[0]) {
260aee2cecaSBarry Smith            next->set = PETSC_TRUE;
261aee2cecaSBarry Smith            ierr = PetscStrcpy(next->data,str);CHKERRQ(ierr);
2626356e834SBarry Smith         }
2636356e834SBarry Smith         break;
264b432afdaSMatthew Knepley     default:
265b432afdaSMatthew Knepley       break;
2666356e834SBarry Smith     }
2676356e834SBarry Smith     next = next->next;
2686356e834SBarry Smith   }
2696356e834SBarry Smith   PetscFunctionReturn(0);
2706356e834SBarry Smith }
2716356e834SBarry Smith 
2726356e834SBarry Smith #undef __FUNCT__
27353acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsEnd_Private"
27453acd3b1SBarry Smith PetscErrorCode PetscOptionsEnd_Private(void)
27553acd3b1SBarry Smith {
27653acd3b1SBarry Smith   PetscErrorCode ierr;
2776356e834SBarry Smith   PetscOptions   last;
2786356e834SBarry Smith   char           option[256],value[1024],tmp[32];
2796356e834SBarry Smith   PetscInt       j;
28053acd3b1SBarry Smith 
28153acd3b1SBarry Smith   PetscFunctionBegin;
2826356e834SBarry Smith 
283aee2cecaSBarry Smith   if (PetscOptionsObject.next) {
284aee2cecaSBarry Smith     if (PetscOptionsPublishCount == 0) {
285aee2cecaSBarry Smith       ierr = PetscOptionsGetFromTextInput();
286aee2cecaSBarry Smith     }
287aee2cecaSBarry Smith   }
2886356e834SBarry Smith 
28953acd3b1SBarry Smith   ierr = PetscStrfree(PetscOptionsObject.title);CHKERRQ(ierr); PetscOptionsObject.title  = 0;
29053acd3b1SBarry Smith   ierr = PetscStrfree(PetscOptionsObject.prefix);CHKERRQ(ierr); PetscOptionsObject.prefix = 0;
2916356e834SBarry Smith 
2926356e834SBarry Smith   /* reset counter to -2; this updates the screen with the new options for the selected method */
2936356e834SBarry Smith   if (PetscOptionsObject.changedmethod) PetscOptionsPublishCount = -2;
29461b37b28SSatish Balay   /* reset alreadyprinted flag */
29561b37b28SSatish Balay   PetscOptionsObject.alreadyprinted = PETSC_FALSE;
2966356e834SBarry Smith 
2976356e834SBarry Smith   while (PetscOptionsObject.next) {
2986356e834SBarry Smith     if (PetscOptionsObject.next->set) {
2996356e834SBarry Smith       if (PetscOptionsObject.prefix) {
3006356e834SBarry Smith         ierr = PetscStrcpy(option,"-");CHKERRQ(ierr);
3016356e834SBarry Smith         ierr = PetscStrcat(option,PetscOptionsObject.prefix);CHKERRQ(ierr);
3026356e834SBarry Smith         ierr = PetscStrcat(option,PetscOptionsObject.next->option+1);CHKERRQ(ierr);
3036356e834SBarry Smith       } else {
3046356e834SBarry Smith         ierr = PetscStrcpy(option,PetscOptionsObject.next->option);CHKERRQ(ierr);
3056356e834SBarry Smith       }
3066356e834SBarry Smith 
3076356e834SBarry Smith       switch (PetscOptionsObject.next->type) {
3086356e834SBarry Smith         case OPTION_HEAD:
3096356e834SBarry Smith           break;
310*e26ddf31SBarry Smith         case OPTION_INT_ARRAY:
311*e26ddf31SBarry Smith           sprintf(value,"%d",(int)((PetscInt*)PetscOptionsObject.next->data)[0]);
312*e26ddf31SBarry Smith           for (j=1; j<PetscOptionsObject.next->arraylength; j++) {
313*e26ddf31SBarry Smith             sprintf(tmp,"%d",(int)((PetscInt*)PetscOptionsObject.next->data)[j]);
314*e26ddf31SBarry Smith             ierr = PetscStrcat(value,",");CHKERRQ(ierr);
315*e26ddf31SBarry Smith             ierr = PetscStrcat(value,tmp);CHKERRQ(ierr);
316*e26ddf31SBarry Smith           }
317*e26ddf31SBarry Smith           break;
3186356e834SBarry Smith         case OPTION_INT:
3197a72a596SBarry Smith           sprintf(value,"%d",(int) *(PetscInt*)PetscOptionsObject.next->data);
3206356e834SBarry Smith           break;
3216356e834SBarry Smith         case OPTION_REAL:
3227a72a596SBarry Smith           sprintf(value,"%g",(double) *(PetscReal*)PetscOptionsObject.next->data);
3236356e834SBarry Smith           break;
3246356e834SBarry Smith         case OPTION_REAL_ARRAY:
3257a72a596SBarry Smith           sprintf(value,"%g",(double)((PetscReal*)PetscOptionsObject.next->data)[0]);
3266356e834SBarry Smith           for (j=1; j<PetscOptionsObject.next->arraylength; j++) {
3277a72a596SBarry Smith             sprintf(tmp,"%g",(double)((PetscReal*)PetscOptionsObject.next->data)[j]);
3286356e834SBarry Smith             ierr = PetscStrcat(value,",");CHKERRQ(ierr);
3296356e834SBarry Smith             ierr = PetscStrcat(value,tmp);CHKERRQ(ierr);
3306356e834SBarry Smith           }
3316356e834SBarry Smith           break;
3326356e834SBarry Smith         case OPTION_LOGICAL:
333aee2cecaSBarry Smith           ierr = PetscStrcpy(value,(char*)PetscOptionsObject.next->data);CHKERRQ(ierr);
3346356e834SBarry Smith           break;
3356356e834SBarry Smith         case OPTION_LIST:
336aee2cecaSBarry Smith           ierr = PetscStrcpy(value,(char*)PetscOptionsObject.next->data);CHKERRQ(ierr);
3376356e834SBarry Smith           break;
3386356e834SBarry Smith         case OPTION_STRING: /* also handles string arrays */
339aee2cecaSBarry Smith           ierr = PetscStrcpy(value,(char*)PetscOptionsObject.next->data);CHKERRQ(ierr);
3406356e834SBarry Smith           break;
3416356e834SBarry Smith       }
3426356e834SBarry Smith       ierr = PetscOptionsSetValue(option,value);CHKERRQ(ierr);
3436356e834SBarry Smith     }
3446356e834SBarry Smith     ierr   = PetscStrfree(PetscOptionsObject.next->text);CHKERRQ(ierr);
3456356e834SBarry Smith     ierr   = PetscStrfree(PetscOptionsObject.next->option);CHKERRQ(ierr);
3466356e834SBarry Smith     ierr   = PetscFree(PetscOptionsObject.next->man);CHKERRQ(ierr);
34705b42c5fSBarry Smith     ierr   = PetscFree(PetscOptionsObject.next->data);CHKERRQ(ierr);
34805b42c5fSBarry Smith     ierr   = PetscFree(PetscOptionsObject.next->edata);CHKERRQ(ierr);
3496356e834SBarry Smith     last                    = PetscOptionsObject.next;
3506356e834SBarry Smith     PetscOptionsObject.next = PetscOptionsObject.next->next;
3516356e834SBarry Smith     ierr                    = PetscFree(last);CHKERRQ(ierr);
3526356e834SBarry Smith   }
3536356e834SBarry Smith   PetscOptionsObject.next = 0;
35453acd3b1SBarry Smith   PetscFunctionReturn(0);
35553acd3b1SBarry Smith }
35653acd3b1SBarry Smith 
35753acd3b1SBarry Smith #undef __FUNCT__
35853acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsEnum"
35953acd3b1SBarry Smith /*@C
36053acd3b1SBarry Smith    PetscOptionsEnum - Gets the enum value for a particular option in the database.
36153acd3b1SBarry Smith 
36253acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
36353acd3b1SBarry Smith 
36453acd3b1SBarry Smith    Input Parameters:
36553acd3b1SBarry Smith +  opt - option name
36653acd3b1SBarry Smith .  text - short string that describes the option
36753acd3b1SBarry Smith .  man - manual page with additional information on option
36853acd3b1SBarry Smith .  list - array containing the list of choices, followed by the enum name, followed by the enum prefix, followed by a null
36953acd3b1SBarry Smith -  defaultv - the default (current) value
37053acd3b1SBarry Smith 
37153acd3b1SBarry Smith    Output Parameter:
37253acd3b1SBarry Smith +  value - the  value to return
37353acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
37453acd3b1SBarry Smith 
37553acd3b1SBarry Smith    Level: beginner
37653acd3b1SBarry Smith 
37753acd3b1SBarry Smith    Concepts: options database
37853acd3b1SBarry Smith 
37953acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
38053acd3b1SBarry Smith 
38153acd3b1SBarry Smith           list is usually something like PCASMTypes or some other predefined list of enum names
38253acd3b1SBarry Smith 
38353acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
38453acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
38553acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
38653acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
38753acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
38853acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
38953acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
39053acd3b1SBarry Smith @*/
39153acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsEnum(const char opt[],const char text[],const char man[],const char **list,PetscEnum defaultv,PetscEnum *value,PetscTruth *set)
39253acd3b1SBarry Smith {
39353acd3b1SBarry Smith   PetscErrorCode ierr;
39453acd3b1SBarry Smith   PetscInt       ntext = 0;
395aa5bb8c0SSatish Balay   PetscInt       tval;
396aa5bb8c0SSatish Balay   PetscTruth     tflg;
39753acd3b1SBarry Smith 
39853acd3b1SBarry Smith   PetscFunctionBegin;
39953acd3b1SBarry Smith   while (list[ntext++]) {
40053acd3b1SBarry Smith     if (ntext > 50) SETERRQ(PETSC_ERR_ARG_WRONG,"List argument appears to be wrong or have more than 50 entries");
40153acd3b1SBarry Smith   }
40253acd3b1SBarry Smith   if (ntext < 3) SETERRQ(PETSC_ERR_ARG_WRONG,"List argument must have at least two entries: typename and type prefix");
40353acd3b1SBarry Smith   ntext -= 3;
404aa5bb8c0SSatish Balay   ierr = PetscOptionsEList(opt,text,man,list,ntext,list[defaultv],&tval,&tflg);CHKERRQ(ierr);
405aa5bb8c0SSatish Balay   /* with PETSC_USE_64BIT_INDICES sizeof(PetscInt) != sizeof(PetscEnum) */
406aa5bb8c0SSatish Balay   if (tflg) *value = (PetscEnum)tval;
407aa5bb8c0SSatish Balay   if (set)  *set   = tflg;
40853acd3b1SBarry Smith   PetscFunctionReturn(0);
40953acd3b1SBarry Smith }
41053acd3b1SBarry Smith 
41153acd3b1SBarry Smith /* -------------------------------------------------------------------------------------------------------------*/
41253acd3b1SBarry Smith #undef __FUNCT__
41353acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsInt"
41453acd3b1SBarry Smith /*@C
41553acd3b1SBarry Smith    PetscOptionsInt - Gets the integer value for a particular option in the database.
41653acd3b1SBarry Smith 
41753acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
41853acd3b1SBarry Smith 
41953acd3b1SBarry Smith    Input Parameters:
42053acd3b1SBarry Smith +  opt - option name
42153acd3b1SBarry Smith .  text - short string that describes the option
42253acd3b1SBarry Smith .  man - manual page with additional information on option
42353acd3b1SBarry Smith -  defaultv - the default (current) value
42453acd3b1SBarry Smith 
42553acd3b1SBarry Smith    Output Parameter:
42653acd3b1SBarry Smith +  value - the integer value to return
42753acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
42853acd3b1SBarry Smith 
42953acd3b1SBarry Smith    Level: beginner
43053acd3b1SBarry Smith 
43153acd3b1SBarry Smith    Concepts: options database^has int
43253acd3b1SBarry Smith 
43353acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
43453acd3b1SBarry Smith 
43553acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
43653acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
43753acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
43853acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
43953acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
44053acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
44153acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
44253acd3b1SBarry Smith @*/
44353acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsInt(const char opt[],const char text[],const char man[],PetscInt defaultv,PetscInt *value,PetscTruth *set)
44453acd3b1SBarry Smith {
44553acd3b1SBarry Smith   PetscErrorCode ierr;
4466356e834SBarry Smith   PetscOptions   amsopt;
44753acd3b1SBarry Smith 
44853acd3b1SBarry Smith   PetscFunctionBegin;
449aee2cecaSBarry Smith   if (PetscOptionsPublishCount == 0) {
4506356e834SBarry Smith     ierr = PetscOptionsCreate_Private(opt,text,man,OPTION_INT,&amsopt);CHKERRQ(ierr);
4516356e834SBarry Smith     ierr = PetscMalloc(sizeof(PetscInt),&amsopt->data);CHKERRQ(ierr);
4526356e834SBarry Smith     *(PetscInt*)amsopt->data = defaultv;
453af6d86caSBarry Smith   }
45453acd3b1SBarry Smith   ierr = PetscOptionsGetInt(PetscOptionsObject.prefix,opt,value,set);CHKERRQ(ierr);
45561b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
45653acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%d>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv,text,man);CHKERRQ(ierr);
45753acd3b1SBarry Smith   }
45853acd3b1SBarry Smith   PetscFunctionReturn(0);
45953acd3b1SBarry Smith }
46053acd3b1SBarry Smith 
46153acd3b1SBarry Smith #undef __FUNCT__
46253acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsString"
46353acd3b1SBarry Smith /*@C
46453acd3b1SBarry Smith    PetscOptionsString - Gets the string value for a particular option in the database.
46553acd3b1SBarry Smith 
46653acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
46753acd3b1SBarry Smith 
46853acd3b1SBarry Smith    Input Parameters:
46953acd3b1SBarry Smith +  opt - option name
47053acd3b1SBarry Smith .  text - short string that describes the option
47153acd3b1SBarry Smith .  man - manual page with additional information on option
47253acd3b1SBarry Smith -  defaultv - the default (current) value
47353acd3b1SBarry Smith 
47453acd3b1SBarry Smith    Output Parameter:
47553acd3b1SBarry Smith +  value - the value to return
47653acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
47753acd3b1SBarry Smith 
47853acd3b1SBarry Smith    Level: beginner
47953acd3b1SBarry Smith 
48053acd3b1SBarry Smith    Concepts: options database^has int
48153acd3b1SBarry Smith 
48253acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
48353acd3b1SBarry Smith 
48453acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
48553acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
48653acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
48753acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
48853acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
48953acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
49053acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
49153acd3b1SBarry Smith @*/
49253acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsString(const char opt[],const char text[],const char man[],const char defaultv[],char value[],size_t len,PetscTruth *set)
49353acd3b1SBarry Smith {
49453acd3b1SBarry Smith   PetscErrorCode ierr;
495aee2cecaSBarry Smith   PetscOptions   amsopt;
49653acd3b1SBarry Smith 
49753acd3b1SBarry Smith   PetscFunctionBegin;
498aee2cecaSBarry Smith   if (PetscOptionsPublishCount == 0) {
499aee2cecaSBarry Smith     ierr = PetscOptionsCreate_Private(opt,text,man,OPTION_STRING,&amsopt);CHKERRQ(ierr);
500aee2cecaSBarry Smith     ierr = PetscMalloc(len*sizeof(char),&amsopt->data);CHKERRQ(ierr);
501aee2cecaSBarry Smith     ierr = PetscStrcpy((char*)amsopt->data,defaultv);CHKERRQ(ierr);
502af6d86caSBarry Smith   }
50353acd3b1SBarry Smith   ierr = PetscOptionsGetString(PetscOptionsObject.prefix,opt,value,len,set);CHKERRQ(ierr);
50461b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
50553acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%s>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv,text,man);CHKERRQ(ierr);
50653acd3b1SBarry Smith   }
50753acd3b1SBarry Smith   PetscFunctionReturn(0);
50853acd3b1SBarry Smith }
50953acd3b1SBarry Smith 
51053acd3b1SBarry Smith #undef __FUNCT__
51153acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsReal"
51253acd3b1SBarry Smith /*@C
51353acd3b1SBarry Smith    PetscOptionsReal - Gets the PetscReal value for a particular option in the database.
51453acd3b1SBarry Smith 
51553acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
51653acd3b1SBarry Smith 
51753acd3b1SBarry Smith    Input Parameters:
51853acd3b1SBarry Smith +  opt - option name
51953acd3b1SBarry Smith .  text - short string that describes the option
52053acd3b1SBarry Smith .  man - manual page with additional information on option
52153acd3b1SBarry Smith -  defaultv - the default (current) value
52253acd3b1SBarry Smith 
52353acd3b1SBarry Smith    Output Parameter:
52453acd3b1SBarry Smith +  value - the value to return
52553acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
52653acd3b1SBarry Smith 
52753acd3b1SBarry Smith    Level: beginner
52853acd3b1SBarry Smith 
52953acd3b1SBarry Smith    Concepts: options database^has int
53053acd3b1SBarry Smith 
53153acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
53253acd3b1SBarry Smith 
53353acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
53453acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
53553acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
53653acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
53753acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
53853acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
53953acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
54053acd3b1SBarry Smith @*/
54153acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsReal(const char opt[],const char text[],const char man[],PetscReal defaultv,PetscReal *value,PetscTruth *set)
54253acd3b1SBarry Smith {
54353acd3b1SBarry Smith   PetscErrorCode ierr;
544538aa990SBarry Smith   PetscOptions   amsopt;
54553acd3b1SBarry Smith 
54653acd3b1SBarry Smith   PetscFunctionBegin;
547538aa990SBarry Smith   if (PetscOptionsPublishCount == 0) {
548538aa990SBarry Smith     ierr = PetscOptionsCreate_Private(opt,text,man,OPTION_REAL,&amsopt);CHKERRQ(ierr);
549538aa990SBarry Smith     ierr = PetscMalloc(sizeof(PetscReal),&amsopt->data);CHKERRQ(ierr);
550538aa990SBarry Smith     *(PetscReal*)amsopt->data = defaultv;
551538aa990SBarry Smith   }
55253acd3b1SBarry Smith   ierr = PetscOptionsGetReal(PetscOptionsObject.prefix,opt,value,set);CHKERRQ(ierr);
55361b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
554a83599f4SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%G>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv,text,man);CHKERRQ(ierr);
55553acd3b1SBarry Smith   }
55653acd3b1SBarry Smith   PetscFunctionReturn(0);
55753acd3b1SBarry Smith }
55853acd3b1SBarry Smith 
55953acd3b1SBarry Smith #undef __FUNCT__
56053acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsScalar"
56153acd3b1SBarry Smith /*@C
56253acd3b1SBarry Smith    PetscOptionsScalar - Gets the scalar value for a particular option in the database.
56353acd3b1SBarry Smith 
56453acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
56553acd3b1SBarry Smith 
56653acd3b1SBarry Smith    Input Parameters:
56753acd3b1SBarry Smith +  opt - option name
56853acd3b1SBarry Smith .  text - short string that describes the option
56953acd3b1SBarry Smith .  man - manual page with additional information on option
57053acd3b1SBarry Smith -  defaultv - the default (current) value
57153acd3b1SBarry Smith 
57253acd3b1SBarry Smith    Output Parameter:
57353acd3b1SBarry Smith +  value - the value to return
57453acd3b1SBarry Smith -  flg - PETSC_TRUE if found, else PETSC_FALSE
57553acd3b1SBarry Smith 
57653acd3b1SBarry Smith    Level: beginner
57753acd3b1SBarry Smith 
57853acd3b1SBarry Smith    Concepts: options database^has int
57953acd3b1SBarry Smith 
58053acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
58153acd3b1SBarry Smith 
58253acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
58353acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
58453acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
58553acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
58653acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
58753acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
58853acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
58953acd3b1SBarry Smith @*/
59053acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsScalar(const char opt[],const char text[],const char man[],PetscScalar defaultv,PetscScalar *value,PetscTruth *set)
59153acd3b1SBarry Smith {
59253acd3b1SBarry Smith   PetscErrorCode ierr;
59353acd3b1SBarry Smith 
59453acd3b1SBarry Smith   PetscFunctionBegin;
59553acd3b1SBarry Smith #if !defined(PETSC_USE_COMPLEX)
59653acd3b1SBarry Smith   ierr = PetscOptionsReal(opt,text,man,defaultv,value,set);CHKERRQ(ierr);
59753acd3b1SBarry Smith #else
59853acd3b1SBarry Smith   ierr = PetscOptionsGetScalar(PetscOptionsObject.prefix,opt,value,set);CHKERRQ(ierr);
59953acd3b1SBarry Smith #endif
60053acd3b1SBarry Smith   PetscFunctionReturn(0);
60153acd3b1SBarry Smith }
60253acd3b1SBarry Smith 
60353acd3b1SBarry Smith #undef __FUNCT__
60453acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsName"
60553acd3b1SBarry Smith /*@C
60690d69ab7SBarry 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
60790d69ab7SBarry Smith                       its value is set to false.
60853acd3b1SBarry Smith 
60953acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
61053acd3b1SBarry Smith 
61153acd3b1SBarry Smith    Input Parameters:
61253acd3b1SBarry Smith +  opt - option name
61353acd3b1SBarry Smith .  text - short string that describes the option
61453acd3b1SBarry Smith -  man - manual page with additional information on option
61553acd3b1SBarry Smith 
61653acd3b1SBarry Smith    Output Parameter:
61753acd3b1SBarry Smith .  flg - PETSC_TRUE if found, else PETSC_FALSE
61853acd3b1SBarry Smith 
61953acd3b1SBarry Smith    Level: beginner
62053acd3b1SBarry Smith 
62153acd3b1SBarry Smith    Concepts: options database^has int
62253acd3b1SBarry Smith 
62353acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
62453acd3b1SBarry Smith 
62553acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
62653acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
62753acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
62853acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
62953acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
63053acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
63153acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
63253acd3b1SBarry Smith @*/
63353acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsName(const char opt[],const char text[],const char man[],PetscTruth *flg)
63453acd3b1SBarry Smith {
63553acd3b1SBarry Smith   PetscErrorCode ierr;
63653acd3b1SBarry Smith 
63753acd3b1SBarry Smith   PetscFunctionBegin;
63853acd3b1SBarry Smith   ierr = PetscOptionsHasName(PetscOptionsObject.prefix,opt,flg);CHKERRQ(ierr);
63961b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
64053acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
64153acd3b1SBarry Smith   }
64253acd3b1SBarry Smith   PetscFunctionReturn(0);
64353acd3b1SBarry Smith }
64453acd3b1SBarry Smith 
64553acd3b1SBarry Smith #undef __FUNCT__
64653acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsList"
64753acd3b1SBarry Smith /*@C
64853acd3b1SBarry Smith      PetscOptionsList - Puts a list of option values that a single one may be selected from
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 .  list - the possible choices
65753acd3b1SBarry Smith -  defaultv - the default (current) value
65853acd3b1SBarry Smith 
65953acd3b1SBarry Smith    Output Parameter:
66053acd3b1SBarry Smith +  value - the value to return
66153acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
66253acd3b1SBarry Smith 
66353acd3b1SBarry Smith    Level: intermediate
66453acd3b1SBarry Smith 
66553acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
66653acd3b1SBarry Smith 
66753acd3b1SBarry Smith    See PetscOptionsEList() for when the choices are given in a string array
66853acd3b1SBarry Smith 
66953acd3b1SBarry Smith    To get a listing of all currently specified options,
67053acd3b1SBarry Smith     see PetscOptionsPrint() or PetscOptionsGetAll()
67153acd3b1SBarry Smith 
67253acd3b1SBarry Smith    Concepts: options database^list
67353acd3b1SBarry Smith 
67453acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
67553acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
67653acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
67753acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
67853acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
67953acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
68053acd3b1SBarry Smith @*/
68153acd3b1SBarry 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)
68253acd3b1SBarry Smith {
68353acd3b1SBarry Smith   PetscErrorCode ierr;
68453acd3b1SBarry Smith 
68553acd3b1SBarry Smith   PetscFunctionBegin;
68653acd3b1SBarry Smith   ierr = PetscOptionsGetString(PetscOptionsObject.prefix,opt,value,len,set);CHKERRQ(ierr);
68761b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
6881d280d73SBarry Smith     ierr = PetscFListPrintTypes(list,PetscOptionsObject.comm,stdout,PetscOptionsObject.prefix,opt,ltext,man);CHKERRQ(ierr);CHKERRQ(ierr);
68953acd3b1SBarry Smith   }
69053acd3b1SBarry Smith   PetscFunctionReturn(0);
69153acd3b1SBarry Smith }
69253acd3b1SBarry Smith 
69353acd3b1SBarry Smith #undef __FUNCT__
69453acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsEList"
69553acd3b1SBarry Smith /*@C
69653acd3b1SBarry Smith      PetscOptionsEList - Puts a list of option values that a single one may be selected from
69753acd3b1SBarry Smith 
69853acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
69953acd3b1SBarry Smith 
70053acd3b1SBarry Smith    Input Parameters:
70153acd3b1SBarry Smith +  opt - option name
70253acd3b1SBarry Smith .  ltext - short string that describes the option
70353acd3b1SBarry Smith .  man - manual page with additional information on option
70453acd3b1SBarry Smith .  list - the possible choices
70553acd3b1SBarry Smith .  ntext - number of choices
70653acd3b1SBarry Smith -  defaultv - the default (current) value
70753acd3b1SBarry Smith 
70853acd3b1SBarry Smith    Output Parameter:
70953acd3b1SBarry Smith +  value - the index of the value to return
71053acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
71153acd3b1SBarry Smith 
71253acd3b1SBarry Smith    Level: intermediate
71353acd3b1SBarry Smith 
71453acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
71553acd3b1SBarry Smith 
71653acd3b1SBarry Smith    See PetscOptionsList() for when the choices are given in a PetscFList()
71753acd3b1SBarry Smith 
71853acd3b1SBarry Smith    Concepts: options database^list
71953acd3b1SBarry Smith 
72053acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
72153acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
72253acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
72353acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
72453acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
72553acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
72653acd3b1SBarry Smith @*/
72753acd3b1SBarry 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)
72853acd3b1SBarry Smith {
72953acd3b1SBarry Smith   PetscErrorCode ierr;
73053acd3b1SBarry Smith   PetscInt       i;
73153acd3b1SBarry Smith 
73253acd3b1SBarry Smith   PetscFunctionBegin;
73353acd3b1SBarry Smith   ierr = PetscOptionsGetEList(PetscOptionsObject.prefix,opt,list,ntext,value,set);CHKERRQ(ierr);
73461b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
73553acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%s> (choose one of)",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,defaultv);CHKERRQ(ierr);
73653acd3b1SBarry Smith     for (i=0; i<ntext; i++){
73753acd3b1SBarry Smith       ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm," %s",list[i]);CHKERRQ(ierr);
73853acd3b1SBarry Smith     }
73953acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"\n");CHKERRQ(ierr);
74053acd3b1SBarry Smith   }
74153acd3b1SBarry Smith   PetscFunctionReturn(0);
74253acd3b1SBarry Smith }
74353acd3b1SBarry Smith 
74453acd3b1SBarry Smith #undef __FUNCT__
74553acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruthGroupBegin"
74653acd3b1SBarry Smith /*@C
74753acd3b1SBarry Smith      PetscOptionsTruthGroupBegin - First in a series of logical queries on the options database for
74853acd3b1SBarry Smith        which only a single value can be true.
74953acd3b1SBarry Smith 
75053acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
75153acd3b1SBarry Smith 
75253acd3b1SBarry Smith    Input Parameters:
75353acd3b1SBarry Smith +  opt - option name
75453acd3b1SBarry Smith .  text - short string that describes the option
75553acd3b1SBarry Smith -  man - manual page with additional information on option
75653acd3b1SBarry Smith 
75753acd3b1SBarry Smith    Output Parameter:
75853acd3b1SBarry Smith .  flg - whether that option was set or not
75953acd3b1SBarry Smith 
76053acd3b1SBarry Smith    Level: intermediate
76153acd3b1SBarry Smith 
76253acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
76353acd3b1SBarry Smith 
76453acd3b1SBarry Smith    Must be followed by 0 or more PetscOptionsTruthGroup()s and PetscOptionsTruthGroupEnd()
76553acd3b1SBarry Smith 
76653acd3b1SBarry Smith     Concepts: options database^logical group
76753acd3b1SBarry Smith 
76853acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
76953acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
77053acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
77153acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
77253acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
77353acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
77453acd3b1SBarry Smith @*/
77553acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruthGroupBegin(const char opt[],const char text[],const char man[],PetscTruth *flg)
77653acd3b1SBarry Smith {
77753acd3b1SBarry Smith   PetscErrorCode ierr;
77853acd3b1SBarry Smith 
77953acd3b1SBarry Smith   PetscFunctionBegin;
78017326d04SJed Brown   *flg = PETSC_FALSE;
78117326d04SJed Brown   ierr = PetscOptionsGetTruth(PetscOptionsObject.prefix,opt,flg,PETSC_NULL);CHKERRQ(ierr);
78261b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
78353acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  Pick at most one of -------------\n");CHKERRQ(ierr);
78453acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"    -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
78553acd3b1SBarry Smith   }
78653acd3b1SBarry Smith   PetscFunctionReturn(0);
78753acd3b1SBarry Smith }
78853acd3b1SBarry Smith 
78953acd3b1SBarry Smith #undef __FUNCT__
79053acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruthGroup"
79153acd3b1SBarry Smith /*@C
79253acd3b1SBarry Smith      PetscOptionsTruthGroup - One in a series of logical queries on the options database for
79353acd3b1SBarry Smith        which only a single value can be true.
79453acd3b1SBarry Smith 
79553acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
79653acd3b1SBarry Smith 
79753acd3b1SBarry Smith    Input Parameters:
79853acd3b1SBarry Smith +  opt - option name
79953acd3b1SBarry Smith .  text - short string that describes the option
80053acd3b1SBarry Smith -  man - manual page with additional information on option
80153acd3b1SBarry Smith 
80253acd3b1SBarry Smith    Output Parameter:
80353acd3b1SBarry Smith .  flg - PETSC_TRUE if found, else PETSC_FALSE
80453acd3b1SBarry Smith 
80553acd3b1SBarry Smith    Level: intermediate
80653acd3b1SBarry Smith 
80753acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
80853acd3b1SBarry Smith 
80953acd3b1SBarry Smith    Must follow a PetscOptionsTruthGroupBegin() and preceded a PetscOptionsTruthGroupEnd()
81053acd3b1SBarry Smith 
81153acd3b1SBarry Smith     Concepts: options database^logical group
81253acd3b1SBarry Smith 
81353acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
81453acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
81553acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
81653acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
81753acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
81853acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
81953acd3b1SBarry Smith @*/
82053acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruthGroup(const char opt[],const char text[],const char man[],PetscTruth *flg)
82153acd3b1SBarry Smith {
82253acd3b1SBarry Smith   PetscErrorCode ierr;
82353acd3b1SBarry Smith 
82453acd3b1SBarry Smith   PetscFunctionBegin;
82517326d04SJed Brown   *flg = PETSC_FALSE;
82617326d04SJed Brown   ierr = PetscOptionsGetTruth(PetscOptionsObject.prefix,opt,flg,PETSC_NULL);CHKERRQ(ierr);
82761b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
82853acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"    -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
82953acd3b1SBarry Smith   }
83053acd3b1SBarry Smith   PetscFunctionReturn(0);
83153acd3b1SBarry Smith }
83253acd3b1SBarry Smith 
83353acd3b1SBarry Smith #undef __FUNCT__
83453acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruthGroupEnd"
83553acd3b1SBarry Smith /*@C
83653acd3b1SBarry Smith      PetscOptionsTruthGroupEnd - Last in a series of logical queries on the options database for
83753acd3b1SBarry Smith        which only a single value can be true.
83853acd3b1SBarry Smith 
83953acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
84053acd3b1SBarry Smith 
84153acd3b1SBarry Smith    Input Parameters:
84253acd3b1SBarry Smith +  opt - option name
84353acd3b1SBarry Smith .  text - short string that describes the option
84453acd3b1SBarry Smith -  man - manual page with additional information on option
84553acd3b1SBarry Smith 
84653acd3b1SBarry Smith    Output Parameter:
84753acd3b1SBarry Smith .  flg - PETSC_TRUE if found, else PETSC_FALSE
84853acd3b1SBarry Smith 
84953acd3b1SBarry Smith    Level: intermediate
85053acd3b1SBarry Smith 
85153acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
85253acd3b1SBarry Smith 
85353acd3b1SBarry Smith    Must follow a PetscOptionsTruthGroupBegin()
85453acd3b1SBarry Smith 
85553acd3b1SBarry Smith     Concepts: options database^logical group
85653acd3b1SBarry Smith 
85753acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
85853acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
85953acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
86053acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
86153acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
86253acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
86353acd3b1SBarry Smith @*/
86453acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruthGroupEnd(const char opt[],const char text[],const char man[],PetscTruth *flg)
86553acd3b1SBarry Smith {
86653acd3b1SBarry Smith   PetscErrorCode ierr;
86753acd3b1SBarry Smith 
86853acd3b1SBarry Smith   PetscFunctionBegin;
86917326d04SJed Brown   *flg = PETSC_FALSE;
87017326d04SJed Brown   ierr = PetscOptionsGetTruth(PetscOptionsObject.prefix,opt,flg,PETSC_NULL);CHKERRQ(ierr);
87161b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
87253acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"    -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
87353acd3b1SBarry Smith   }
87453acd3b1SBarry Smith   PetscFunctionReturn(0);
87553acd3b1SBarry Smith }
87653acd3b1SBarry Smith 
87753acd3b1SBarry Smith #undef __FUNCT__
87853acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsTruth"
87953acd3b1SBarry Smith /*@C
88053acd3b1SBarry Smith    PetscOptionsTruth - Determines if a particular option is in the database with a true or false
88153acd3b1SBarry Smith 
88253acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
88353acd3b1SBarry Smith 
88453acd3b1SBarry Smith    Input Parameters:
88553acd3b1SBarry Smith +  opt - option name
88653acd3b1SBarry Smith .  text - short string that describes the option
88753acd3b1SBarry Smith -  man - manual page with additional information on option
88853acd3b1SBarry Smith 
88953acd3b1SBarry Smith    Output Parameter:
89053acd3b1SBarry Smith .  flg - PETSC_TRUE or PETSC_FALSE
89153acd3b1SBarry Smith .  set - PETSC_TRUE if found, else PETSC_FALSE
89253acd3b1SBarry Smith 
89353acd3b1SBarry Smith    Level: beginner
89453acd3b1SBarry Smith 
89553acd3b1SBarry Smith    Concepts: options database^logical
89653acd3b1SBarry Smith 
89753acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
89853acd3b1SBarry Smith 
89953acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(),
90053acd3b1SBarry Smith           PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth()
90153acd3b1SBarry Smith           PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsTruth(),
90253acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
90353acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
90453acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
90553acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
90653acd3b1SBarry Smith @*/
90753acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruth(const char opt[],const char text[],const char man[],PetscTruth deflt,PetscTruth *flg,PetscTruth *set)
90853acd3b1SBarry Smith {
90953acd3b1SBarry Smith   PetscErrorCode ierr;
91053acd3b1SBarry Smith   PetscTruth     iset;
911aee2cecaSBarry Smith   PetscOptions   amsopt;
91253acd3b1SBarry Smith 
91353acd3b1SBarry Smith   PetscFunctionBegin;
914aee2cecaSBarry Smith   if (PetscOptionsPublishCount == 0) {
915aee2cecaSBarry Smith     ierr = PetscOptionsCreate_Private(opt,text,man,OPTION_LOGICAL,&amsopt);CHKERRQ(ierr);
916aee2cecaSBarry Smith     ierr = PetscMalloc(16*sizeof(char),&amsopt->data);CHKERRQ(ierr);
917aee2cecaSBarry Smith     ierr = PetscStrcpy((char*)amsopt->data,deflt ? "true" : "false");CHKERRQ(ierr);
918af6d86caSBarry Smith   }
91953acd3b1SBarry Smith   ierr = PetscOptionsGetTruth(PetscOptionsObject.prefix,opt,flg,&iset);CHKERRQ(ierr);
92053acd3b1SBarry Smith   if (!iset) {
92153acd3b1SBarry Smith     if (flg) *flg = deflt;
92253acd3b1SBarry Smith   }
92353acd3b1SBarry Smith   if (set) *set = iset;
92461b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
92553acd3b1SBarry Smith     const char *v = PetscTruths[deflt];
92653acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s: <%s> %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,v,text,man);CHKERRQ(ierr);
92753acd3b1SBarry Smith   }
92853acd3b1SBarry Smith   PetscFunctionReturn(0);
92953acd3b1SBarry Smith }
93053acd3b1SBarry Smith 
93153acd3b1SBarry Smith #undef __FUNCT__
93253acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsRealArray"
93353acd3b1SBarry Smith /*@C
93453acd3b1SBarry Smith    PetscOptionsRealArray - Gets an array of double values for a particular
93553acd3b1SBarry Smith    option in the database. The values must be separated with commas with
93653acd3b1SBarry Smith    no intervening spaces.
93753acd3b1SBarry Smith 
93853acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
93953acd3b1SBarry Smith 
94053acd3b1SBarry Smith    Input Parameters:
94153acd3b1SBarry Smith +  opt - the option one is seeking
94253acd3b1SBarry Smith .  text - short string describing option
94353acd3b1SBarry Smith .  man - manual page for option
94453acd3b1SBarry Smith -  nmax - maximum number of values
94553acd3b1SBarry Smith 
94653acd3b1SBarry Smith    Output Parameter:
94753acd3b1SBarry Smith +  value - location to copy values
94853acd3b1SBarry Smith .  nmax - actual number of values found
94953acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
95053acd3b1SBarry Smith 
95153acd3b1SBarry Smith    Level: beginner
95253acd3b1SBarry Smith 
95353acd3b1SBarry Smith    Notes:
95453acd3b1SBarry Smith    The user should pass in an array of doubles
95553acd3b1SBarry Smith 
95653acd3b1SBarry Smith    Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
95753acd3b1SBarry Smith 
95853acd3b1SBarry Smith    Concepts: options database^array of strings
95953acd3b1SBarry Smith 
96053acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
96153acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
96253acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
96353acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
96453acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
96553acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
96653acd3b1SBarry Smith @*/
96753acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsRealArray(const char opt[],const char text[],const char man[],PetscReal value[],PetscInt *n,PetscTruth *set)
96853acd3b1SBarry Smith {
96953acd3b1SBarry Smith   PetscErrorCode ierr;
97053acd3b1SBarry Smith   PetscInt       i;
971*e26ddf31SBarry Smith   PetscOptions   amsopt;
97253acd3b1SBarry Smith 
97353acd3b1SBarry Smith   PetscFunctionBegin;
974*e26ddf31SBarry Smith   if (PetscOptionsPublishCount == 0) {
975*e26ddf31SBarry Smith     PetscReal *vals;
976*e26ddf31SBarry Smith 
977*e26ddf31SBarry Smith     ierr = PetscOptionsCreate_Private(opt,text,man,OPTION_REAL_ARRAY,&amsopt);CHKERRQ(ierr);
978*e26ddf31SBarry Smith     ierr = PetscMalloc((*n)*sizeof(PetscReal),&amsopt->data);CHKERRQ(ierr);
979*e26ddf31SBarry Smith     vals = (PetscReal*)amsopt->data;
980*e26ddf31SBarry Smith     for (i=0; i<*n; i++) vals[i] = value[i];
981*e26ddf31SBarry Smith     amsopt->arraylength = *n;
982*e26ddf31SBarry Smith   }
98353acd3b1SBarry Smith   ierr = PetscOptionsGetRealArray(PetscOptionsObject.prefix,opt,value,n,set);CHKERRQ(ierr);
98461b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
985a83599f4SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%G",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,value[0]);CHKERRQ(ierr);
98653acd3b1SBarry Smith     for (i=1; i<*n; i++) {
987a83599f4SBarry Smith       ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,",%G",value[i]);CHKERRQ(ierr);
98853acd3b1SBarry Smith     }
98953acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,">: %s (%s)\n",text,man);CHKERRQ(ierr);
99053acd3b1SBarry Smith   }
99153acd3b1SBarry Smith   PetscFunctionReturn(0);
99253acd3b1SBarry Smith }
99353acd3b1SBarry Smith 
99453acd3b1SBarry Smith 
99553acd3b1SBarry Smith #undef __FUNCT__
99653acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsIntArray"
99753acd3b1SBarry Smith /*@C
99853acd3b1SBarry Smith    PetscOptionsIntArray - Gets an array of integers for a particular
99953acd3b1SBarry Smith    option in the database. The values must be separated with commas with
100053acd3b1SBarry Smith    no intervening spaces.
100153acd3b1SBarry Smith 
100253acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
100353acd3b1SBarry Smith 
100453acd3b1SBarry Smith    Input Parameters:
100553acd3b1SBarry Smith +  opt - the option one is seeking
100653acd3b1SBarry Smith .  text - short string describing option
100753acd3b1SBarry Smith .  man - manual page for option
1008f8a50e2bSBarry Smith -  n - maximum number of values
100953acd3b1SBarry Smith 
101053acd3b1SBarry Smith    Output Parameter:
101153acd3b1SBarry Smith +  value - location to copy values
1012f8a50e2bSBarry Smith .  n - actual number of values found
101353acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
101453acd3b1SBarry Smith 
101553acd3b1SBarry Smith    Level: beginner
101653acd3b1SBarry Smith 
101753acd3b1SBarry Smith    Notes:
101853acd3b1SBarry Smith    The user should pass in an array of integers
101953acd3b1SBarry Smith 
102053acd3b1SBarry Smith    Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
102153acd3b1SBarry Smith 
102253acd3b1SBarry Smith    Concepts: options database^array of strings
102353acd3b1SBarry Smith 
102453acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
102553acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
102653acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
102753acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
102853acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
102953acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList(), PetscOptionsRealArray()
103053acd3b1SBarry Smith @*/
103153acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsIntArray(const char opt[],const char text[],const char man[],PetscInt value[],PetscInt *n,PetscTruth *set)
103253acd3b1SBarry Smith {
103353acd3b1SBarry Smith   PetscErrorCode ierr;
103453acd3b1SBarry Smith   PetscInt       i;
1035*e26ddf31SBarry Smith   PetscOptions   amsopt;
103653acd3b1SBarry Smith 
103753acd3b1SBarry Smith   PetscFunctionBegin;
1038*e26ddf31SBarry Smith   if (PetscOptionsPublishCount == 0) {
1039*e26ddf31SBarry Smith     PetscInt *vals;
1040*e26ddf31SBarry Smith 
1041*e26ddf31SBarry Smith     ierr = PetscOptionsCreate_Private(opt,text,man,OPTION_INT_ARRAY,&amsopt);CHKERRQ(ierr);
1042*e26ddf31SBarry Smith     ierr = PetscMalloc((*n)*sizeof(PetscInt),&amsopt->data);CHKERRQ(ierr);
1043*e26ddf31SBarry Smith     vals = (PetscInt*)amsopt->data;
1044*e26ddf31SBarry Smith     for (i=0; i<*n; i++) vals[i] = value[i];
1045*e26ddf31SBarry Smith     amsopt->arraylength = *n;
1046*e26ddf31SBarry Smith   }
104753acd3b1SBarry Smith   ierr = PetscOptionsGetIntArray(PetscOptionsObject.prefix,opt,value,n,set);CHKERRQ(ierr);
104861b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
104953acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%d",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,value[0]);CHKERRQ(ierr);
105053acd3b1SBarry Smith     for (i=1; i<*n; i++) {
105153acd3b1SBarry Smith       ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,",%d",value[i]);CHKERRQ(ierr);
105253acd3b1SBarry Smith     }
105353acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,">: %s (%s)\n",text,man);CHKERRQ(ierr);
105453acd3b1SBarry Smith   }
105553acd3b1SBarry Smith   PetscFunctionReturn(0);
105653acd3b1SBarry Smith }
105753acd3b1SBarry Smith 
105853acd3b1SBarry Smith #undef __FUNCT__
105953acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsStringArray"
106053acd3b1SBarry Smith /*@C
106153acd3b1SBarry Smith    PetscOptionsStringArray - Gets an array of string values for a particular
106253acd3b1SBarry Smith    option in the database. The values must be separated with commas with
106353acd3b1SBarry Smith    no intervening spaces.
106453acd3b1SBarry Smith 
106553acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
106653acd3b1SBarry Smith 
106753acd3b1SBarry Smith    Input Parameters:
106853acd3b1SBarry Smith +  opt - the option one is seeking
106953acd3b1SBarry Smith .  text - short string describing option
107053acd3b1SBarry Smith .  man - manual page for option
107153acd3b1SBarry Smith -  nmax - maximum number of strings
107253acd3b1SBarry Smith 
107353acd3b1SBarry Smith    Output Parameter:
107453acd3b1SBarry Smith +  value - location to copy strings
107553acd3b1SBarry Smith .  nmax - actual number of strings found
107653acd3b1SBarry Smith -  set - PETSC_TRUE if found, else PETSC_FALSE
107753acd3b1SBarry Smith 
107853acd3b1SBarry Smith    Level: beginner
107953acd3b1SBarry Smith 
108053acd3b1SBarry Smith    Notes:
108153acd3b1SBarry Smith    The user should pass in an array of pointers to char, to hold all the
108253acd3b1SBarry Smith    strings returned by this function.
108353acd3b1SBarry Smith 
108453acd3b1SBarry Smith    The user is responsible for deallocating the strings that are
108553acd3b1SBarry Smith    returned. The Fortran interface for this routine is not supported.
108653acd3b1SBarry Smith 
108753acd3b1SBarry Smith    Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
108853acd3b1SBarry Smith 
108953acd3b1SBarry Smith    Concepts: options database^array of strings
109053acd3b1SBarry Smith 
109153acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
109253acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
109353acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
109453acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
109553acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
109653acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
109753acd3b1SBarry Smith @*/
109853acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsStringArray(const char opt[],const char text[],const char man[],char *value[],PetscInt *nmax,PetscTruth *set)
109953acd3b1SBarry Smith {
110053acd3b1SBarry Smith   PetscErrorCode ierr;
110153acd3b1SBarry Smith 
110253acd3b1SBarry Smith   PetscFunctionBegin;
110353acd3b1SBarry Smith   ierr = PetscOptionsGetStringArray(PetscOptionsObject.prefix,opt,value,nmax,set);CHKERRQ(ierr);
110461b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
110553acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <string1,string2,...>: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr);
110653acd3b1SBarry Smith   }
110753acd3b1SBarry Smith   PetscFunctionReturn(0);
110853acd3b1SBarry Smith }
110953acd3b1SBarry Smith 
1110e2446a98SMatthew Knepley #undef __FUNCT__
1111e2446a98SMatthew Knepley #define __FUNCT__ "PetscOptionsTruthArray"
1112e2446a98SMatthew Knepley /*@C
1113e2446a98SMatthew Knepley    PetscOptionsTruthArray - Gets an array of logical values (true or false) for a particular
1114e2446a98SMatthew Knepley    option in the database. The values must be separated with commas with
1115e2446a98SMatthew Knepley    no intervening spaces.
1116e2446a98SMatthew Knepley 
1117e2446a98SMatthew Knepley    Collective on the communicator passed in PetscOptionsBegin()
1118e2446a98SMatthew Knepley 
1119e2446a98SMatthew Knepley    Input Parameters:
1120e2446a98SMatthew Knepley +  opt - the option one is seeking
1121e2446a98SMatthew Knepley .  text - short string describing option
1122e2446a98SMatthew Knepley .  man - manual page for option
1123e2446a98SMatthew Knepley -  nmax - maximum number of values
1124e2446a98SMatthew Knepley 
1125e2446a98SMatthew Knepley    Output Parameter:
1126e2446a98SMatthew Knepley +  value - location to copy values
1127e2446a98SMatthew Knepley .  nmax - actual number of values found
1128e2446a98SMatthew Knepley -  set - PETSC_TRUE if found, else PETSC_FALSE
1129e2446a98SMatthew Knepley 
1130e2446a98SMatthew Knepley    Level: beginner
1131e2446a98SMatthew Knepley 
1132e2446a98SMatthew Knepley    Notes:
1133e2446a98SMatthew Knepley    The user should pass in an array of doubles
1134e2446a98SMatthew Knepley 
1135e2446a98SMatthew Knepley    Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
1136e2446a98SMatthew Knepley 
1137e2446a98SMatthew Knepley    Concepts: options database^array of strings
1138e2446a98SMatthew Knepley 
1139e2446a98SMatthew Knepley .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
1140e2446a98SMatthew Knepley            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
1141e2446a98SMatthew Knepley           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
1142e2446a98SMatthew Knepley           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
1143e2446a98SMatthew Knepley           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
1144e2446a98SMatthew Knepley           PetscOptionsList(), PetscOptionsEList()
1145e2446a98SMatthew Knepley @*/
1146e2446a98SMatthew Knepley PetscErrorCode PETSC_DLLEXPORT PetscOptionsTruthArray(const char opt[],const char text[],const char man[],PetscTruth value[],PetscInt *n,PetscTruth *set)
1147e2446a98SMatthew Knepley {
1148e2446a98SMatthew Knepley   PetscErrorCode ierr;
1149e2446a98SMatthew Knepley   PetscInt       i;
1150e2446a98SMatthew Knepley 
1151e2446a98SMatthew Knepley   PetscFunctionBegin;
1152e2446a98SMatthew Knepley   ierr = PetscOptionsGetTruthArray(PetscOptionsObject.prefix,opt,value,n,set);CHKERRQ(ierr);
1153e2446a98SMatthew Knepley   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
1154e2446a98SMatthew Knepley     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  -%s%s <%d",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,value[0]);CHKERRQ(ierr);
1155e2446a98SMatthew Knepley     for (i=1; i<*n; i++) {
1156e2446a98SMatthew Knepley       ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,",%d",value[i]);CHKERRQ(ierr);
1157e2446a98SMatthew Knepley     }
1158e2446a98SMatthew Knepley     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,">: %s (%s)\n",text,man);CHKERRQ(ierr);
1159e2446a98SMatthew Knepley   }
1160e2446a98SMatthew Knepley   PetscFunctionReturn(0);
1161e2446a98SMatthew Knepley }
1162e2446a98SMatthew Knepley 
116353acd3b1SBarry Smith 
116453acd3b1SBarry Smith #undef __FUNCT__
116553acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsHead"
116653acd3b1SBarry Smith /*@C
1167b52f573bSBarry Smith      PetscOptionsHead - Puts a heading before listing any more published options. Used, for example,
116853acd3b1SBarry Smith             in KSPSetFromOptions_GMRES().
116953acd3b1SBarry Smith 
117053acd3b1SBarry Smith    Collective on the communicator passed in PetscOptionsBegin()
117153acd3b1SBarry Smith 
117253acd3b1SBarry Smith    Input Parameter:
117353acd3b1SBarry Smith .   head - the heading text
117453acd3b1SBarry Smith 
117553acd3b1SBarry Smith 
117653acd3b1SBarry Smith    Level: intermediate
117753acd3b1SBarry Smith 
117853acd3b1SBarry Smith    Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd()
117953acd3b1SBarry Smith 
1180b52f573bSBarry Smith           Can be followed by a call to PetscOptionsTail() in the same function.
118153acd3b1SBarry Smith 
118253acd3b1SBarry Smith    Concepts: options database^subheading
118353acd3b1SBarry Smith 
118453acd3b1SBarry Smith .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(),
118553acd3b1SBarry Smith            PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsTruth(),
118653acd3b1SBarry Smith           PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(),
118753acd3b1SBarry Smith           PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(),
118853acd3b1SBarry Smith           PetscOptionsTruthGroupBegin(), PetscOptionsTruthGroup(), PetscOptionsTruthGroupEnd(),
118953acd3b1SBarry Smith           PetscOptionsList(), PetscOptionsEList()
119053acd3b1SBarry Smith @*/
119153acd3b1SBarry Smith PetscErrorCode PETSC_DLLEXPORT PetscOptionsHead(const char head[])
119253acd3b1SBarry Smith {
119353acd3b1SBarry Smith   PetscErrorCode ierr;
119453acd3b1SBarry Smith 
119553acd3b1SBarry Smith   PetscFunctionBegin;
119661b37b28SSatish Balay   if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) {
119753acd3b1SBarry Smith     ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm,"  %s\n",head);CHKERRQ(ierr);
119853acd3b1SBarry Smith   }
119953acd3b1SBarry Smith   PetscFunctionReturn(0);
120053acd3b1SBarry Smith }
120153acd3b1SBarry Smith 
120253acd3b1SBarry Smith 
120353acd3b1SBarry Smith 
120453acd3b1SBarry Smith 
120553acd3b1SBarry Smith 
120653acd3b1SBarry Smith 
1207