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