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