17d0a6c19SBarry Smith 21a1499c8SBarry Smith 353acd3b1SBarry Smith /* 43fc1eb6aSBarry Smith Implements the higher-level options database querying methods. These are self-documenting and can attach at runtime to 53fc1eb6aSBarry Smith GUI code to display the options and get values from the users. 653acd3b1SBarry Smith 753acd3b1SBarry Smith */ 853acd3b1SBarry Smith 9af0996ceSBarry Smith #include <petsc/private/petscimpl.h> /*I "petscsys.h" I*/ 10665c2dedSJed Brown #include <petscviewer.h> 1153acd3b1SBarry Smith 122aa6d131SJed Brown #define ManSection(str) ((str) ? (str) : "None") 132aa6d131SJed Brown 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 */ 20e55864a3SBarry Smith 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 */ 274416b707SBarry Smith PetscErrorCode PetscOptionsBegin_Private(PetscOptionItems *PetscOptionsObject,MPI_Comm comm,const char prefix[],const char title[],const char mansec[]) 2853acd3b1SBarry Smith { 2953acd3b1SBarry Smith PetscErrorCode ierr; 3053acd3b1SBarry Smith 3153acd3b1SBarry Smith PetscFunctionBegin; 320eb63584SBarry Smith if (!PetscOptionsObject->alreadyprinted) { 339de0f6ecSBarry Smith if (!PetscOptionsHelpPrintedSingleton) { 349de0f6ecSBarry Smith ierr = PetscOptionsHelpPrintedCreate(&PetscOptionsHelpPrintedSingleton);CHKERRQ(ierr); 359de0f6ecSBarry Smith } 369de0f6ecSBarry Smith ierr = PetscOptionsHelpPrintedCheck(PetscOptionsHelpPrintedSingleton,prefix,title,&PetscOptionsObject->alreadyprinted);CHKERRQ(ierr); 370eb63584SBarry Smith } 38e55864a3SBarry Smith PetscOptionsObject->next = 0; 39e55864a3SBarry Smith PetscOptionsObject->comm = comm; 40e55864a3SBarry Smith PetscOptionsObject->changedmethod = PETSC_FALSE; 41a297a907SKarl Rupp 42e55864a3SBarry Smith ierr = PetscStrallocpy(prefix,&PetscOptionsObject->prefix);CHKERRQ(ierr); 43e55864a3SBarry Smith ierr = PetscStrallocpy(title,&PetscOptionsObject->title);CHKERRQ(ierr); 4453acd3b1SBarry Smith 45c5929fdfSBarry Smith ierr = PetscOptionsHasName(PetscOptionsObject->options,NULL,"-help",&PetscOptionsObject->printhelp);CHKERRQ(ierr); 46e55864a3SBarry Smith if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1) { 47e55864a3SBarry Smith 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 543194b578SJed Brown #undef __FUNCT__ 553194b578SJed Brown #define __FUNCT__ "PetscObjectOptionsBegin_Private" 563194b578SJed Brown /* 573194b578SJed Brown Handles setting up the data structure in a call to PetscObjectOptionsBegin() 583194b578SJed Brown */ 594416b707SBarry Smith PetscErrorCode PetscObjectOptionsBegin_Private(PetscOptionItems *PetscOptionsObject,PetscObject obj) 603194b578SJed Brown { 613194b578SJed Brown PetscErrorCode ierr; 623194b578SJed Brown char title[256]; 633194b578SJed Brown PetscBool flg; 643194b578SJed Brown 653194b578SJed Brown PetscFunctionBegin; 663194b578SJed Brown PetscValidHeader(obj,1); 67e55864a3SBarry Smith PetscOptionsObject->object = obj; 68e55864a3SBarry Smith PetscOptionsObject->alreadyprinted = obj->optionsprinted; 69a297a907SKarl Rupp 703194b578SJed Brown ierr = PetscStrcmp(obj->description,obj->class_name,&flg);CHKERRQ(ierr); 713194b578SJed Brown if (flg) { 728caf3d72SBarry Smith ierr = PetscSNPrintf(title,sizeof(title),"%s options",obj->class_name);CHKERRQ(ierr); 733194b578SJed Brown } else { 748caf3d72SBarry Smith ierr = PetscSNPrintf(title,sizeof(title),"%s (%s) options",obj->description,obj->class_name);CHKERRQ(ierr); 753194b578SJed Brown } 76e55864a3SBarry Smith ierr = PetscOptionsBegin_Private(PetscOptionsObject,obj->comm,obj->prefix,title,obj->mansec);CHKERRQ(ierr); 773194b578SJed Brown PetscFunctionReturn(0); 783194b578SJed Brown } 793194b578SJed Brown 8053acd3b1SBarry Smith /* 8153acd3b1SBarry Smith Handles adding another option to the list of options within this particular PetscOptionsBegin() PetscOptionsEnd() 8253acd3b1SBarry Smith */ 8353acd3b1SBarry Smith #undef __FUNCT__ 848a19d54fSBarry Smith #define __FUNCT__ "PetscOptionItemCreate_Private" 854416b707SBarry Smith static int PetscOptionItemCreate_Private(PetscOptionItems *PetscOptionsObject,const char opt[],const char text[],const char man[],PetscOptionType t,PetscOptionItem *amsopt) 8653acd3b1SBarry Smith { 8753acd3b1SBarry Smith int ierr; 884416b707SBarry Smith PetscOptionItem next; 893be6e4c3SJed Brown PetscBool valid; 9053acd3b1SBarry Smith 9153acd3b1SBarry Smith PetscFunctionBegin; 923be6e4c3SJed Brown ierr = PetscOptionsValidKey(opt,&valid);CHKERRQ(ierr); 933be6e4c3SJed Brown if (!valid) SETERRQ1(PETSC_COMM_WORLD,PETSC_ERR_ARG_INCOMP,"The option '%s' is not a valid key",opt); 943be6e4c3SJed Brown 95b00a9115SJed Brown ierr = PetscNew(amsopt);CHKERRQ(ierr); 9653acd3b1SBarry Smith (*amsopt)->next = 0; 9753acd3b1SBarry Smith (*amsopt)->set = PETSC_FALSE; 986356e834SBarry Smith (*amsopt)->type = t; 9953acd3b1SBarry Smith (*amsopt)->data = 0; 10061b37b28SSatish Balay 10153acd3b1SBarry Smith ierr = PetscStrallocpy(text,&(*amsopt)->text);CHKERRQ(ierr); 10253acd3b1SBarry Smith ierr = PetscStrallocpy(opt,&(*amsopt)->option);CHKERRQ(ierr); 1036356e834SBarry Smith ierr = PetscStrallocpy(man,&(*amsopt)->man);CHKERRQ(ierr); 10453acd3b1SBarry Smith 105e55864a3SBarry Smith if (!PetscOptionsObject->next) PetscOptionsObject->next = *amsopt; 106a297a907SKarl Rupp else { 107e55864a3SBarry Smith next = PetscOptionsObject->next; 10853acd3b1SBarry Smith while (next->next) next = next->next; 10953acd3b1SBarry Smith next->next = *amsopt; 11053acd3b1SBarry Smith } 11153acd3b1SBarry Smith PetscFunctionReturn(0); 11253acd3b1SBarry Smith } 11353acd3b1SBarry Smith 11453acd3b1SBarry Smith #undef __FUNCT__ 115aee2cecaSBarry Smith #define __FUNCT__ "PetscScanString" 116aee2cecaSBarry Smith /* 1173fc1eb6aSBarry Smith PetscScanString - Gets user input via stdin from process and broadcasts to all processes 1183fc1eb6aSBarry Smith 1193fc1eb6aSBarry Smith Collective on MPI_Comm 1203fc1eb6aSBarry Smith 1213fc1eb6aSBarry Smith Input Parameters: 1223fc1eb6aSBarry Smith + commm - communicator for the broadcast, must be PETSC_COMM_WORLD 1233fc1eb6aSBarry Smith . n - length of the string, must be the same on all processes 1243fc1eb6aSBarry Smith - str - location to store input 125aee2cecaSBarry Smith 126aee2cecaSBarry Smith Bugs: 127aee2cecaSBarry Smith . Assumes process 0 of the given communicator has access to stdin 128aee2cecaSBarry Smith 129aee2cecaSBarry Smith */ 1303fc1eb6aSBarry Smith static PetscErrorCode PetscScanString(MPI_Comm comm,size_t n,char str[]) 131aee2cecaSBarry Smith { 132330cf3c9SBarry Smith size_t i; 133aee2cecaSBarry Smith char c; 1343fc1eb6aSBarry Smith PetscMPIInt rank,nm; 135aee2cecaSBarry Smith PetscErrorCode ierr; 136aee2cecaSBarry Smith 137aee2cecaSBarry Smith PetscFunctionBegin; 138aee2cecaSBarry Smith ierr = MPI_Comm_rank(comm,&rank);CHKERRQ(ierr); 139aee2cecaSBarry Smith if (!rank) { 140aee2cecaSBarry Smith c = (char) getchar(); 141aee2cecaSBarry Smith i = 0; 142aee2cecaSBarry Smith while (c != '\n' && i < n-1) { 143aee2cecaSBarry Smith str[i++] = c; 144aee2cecaSBarry Smith c = (char)getchar(); 145aee2cecaSBarry Smith } 146aee2cecaSBarry Smith str[i] = 0; 147aee2cecaSBarry Smith } 1484dc2109aSBarry Smith ierr = PetscMPIIntCast(n,&nm);CHKERRQ(ierr); 1493fc1eb6aSBarry Smith ierr = MPI_Bcast(str,nm,MPI_CHAR,0,comm);CHKERRQ(ierr); 150aee2cecaSBarry Smith PetscFunctionReturn(0); 151aee2cecaSBarry Smith } 152aee2cecaSBarry Smith 153ead66b60SBarry Smith #undef __FUNCT__ 154ead66b60SBarry Smith #define __FUNCT__ "PetscStrdup" 1555b02f95dSBarry Smith /* 1565b02f95dSBarry Smith This is needed because certain strings may be freed by SAWs, hence we cannot use PetscStrallocpy() 1575b02f95dSBarry Smith */ 1585b02f95dSBarry Smith static PetscErrorCode PetscStrdup(const char s[],char *t[]) 1595b02f95dSBarry Smith { 1605b02f95dSBarry Smith PetscErrorCode ierr; 1615b02f95dSBarry Smith size_t len; 1625b02f95dSBarry Smith char *tmp = 0; 1635b02f95dSBarry Smith 1645b02f95dSBarry Smith PetscFunctionBegin; 1655b02f95dSBarry Smith if (s) { 1665b02f95dSBarry Smith ierr = PetscStrlen(s,&len);CHKERRQ(ierr); 167f416af30SBarry Smith tmp = (char*) malloc((len+1)*sizeof(char)); 1685b02f95dSBarry Smith if (!tmp) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_MEM,"No memory to duplicate string"); 1695b02f95dSBarry Smith ierr = PetscStrcpy(tmp,s);CHKERRQ(ierr); 1705b02f95dSBarry Smith } 1715b02f95dSBarry Smith *t = tmp; 1725b02f95dSBarry Smith PetscFunctionReturn(0); 1735b02f95dSBarry Smith } 1745b02f95dSBarry Smith 1755b02f95dSBarry Smith 176aee2cecaSBarry Smith #undef __FUNCT__ 177aee2cecaSBarry Smith #define __FUNCT__ "PetscOptionsGetFromTextInput" 178aee2cecaSBarry Smith /* 1793cc1e11dSBarry Smith PetscOptionsGetFromTextInput - Presents all the PETSc Options processed by the program so the user may change them at runtime 180aee2cecaSBarry Smith 181aee2cecaSBarry Smith Notes: this isn't really practical, it is just to demonstrate the principle 182aee2cecaSBarry Smith 1837781c08eSBarry Smith A carriage return indicates no change from the default; but this like -ksp_monitor <stdout> the default is actually not stdout the default 1847781c08eSBarry Smith is to do nothing so to get it to use stdout you need to type stdout. This is kind of bug? 1857781c08eSBarry Smith 186aee2cecaSBarry Smith Bugs: 1877781c08eSBarry Smith + All processes must traverse through the exact same set of option queries due to the call to PetscScanString() 1883cc1e11dSBarry Smith . Internal strings have arbitrary length and string copies are not checked that they fit into string space 189aee2cecaSBarry Smith - Only works for PetscInt == int, PetscReal == double etc 190aee2cecaSBarry Smith 1913cc1e11dSBarry Smith Developer Notes: Normally the GUI that presents the options the user and retrieves the values would be running in a different 1923cc1e11dSBarry Smith address space and communicating with the PETSc program 1933cc1e11dSBarry Smith 194aee2cecaSBarry Smith */ 1954416b707SBarry Smith PetscErrorCode PetscOptionsGetFromTextInput(PetscOptionItems *PetscOptionsObject) 1966356e834SBarry Smith { 1976356e834SBarry Smith PetscErrorCode ierr; 1984416b707SBarry Smith PetscOptionItem next = PetscOptionsObject->next; 1996356e834SBarry Smith char str[512]; 2007781c08eSBarry Smith PetscBool bid; 201a4404d99SBarry Smith PetscReal ir,*valr; 202330cf3c9SBarry Smith PetscInt *vald; 203330cf3c9SBarry Smith size_t i; 2046356e834SBarry Smith 2052a409bb0SBarry Smith PetscFunctionBegin; 206e55864a3SBarry Smith ierr = (*PetscPrintf)(PETSC_COMM_WORLD,"%s -------------------------------------------------\n",PetscOptionsObject->title);CHKERRQ(ierr); 2076356e834SBarry Smith while (next) { 2086356e834SBarry Smith switch (next->type) { 2096356e834SBarry Smith case OPTION_HEAD: 2106356e834SBarry Smith break; 211e26ddf31SBarry Smith case OPTION_INT_ARRAY: 212e55864a3SBarry Smith ierr = PetscPrintf(PETSC_COMM_WORLD,"-%s%s <",PetscOptionsObject->prefix ? PetscOptionsObject->prefix : "",next->option+1);CHKERRQ(ierr); 213e26ddf31SBarry Smith vald = (PetscInt*) next->data; 214e26ddf31SBarry Smith for (i=0; i<next->arraylength; i++) { 215e26ddf31SBarry Smith ierr = PetscPrintf(PETSC_COMM_WORLD,"%d",vald[i]);CHKERRQ(ierr); 216e26ddf31SBarry Smith if (i < next->arraylength-1) { 217e26ddf31SBarry Smith ierr = PetscPrintf(PETSC_COMM_WORLD,",");CHKERRQ(ierr); 218e26ddf31SBarry Smith } 219e26ddf31SBarry Smith } 220e26ddf31SBarry Smith ierr = PetscPrintf(PETSC_COMM_WORLD,">: %s (%s) ",next->text,next->man);CHKERRQ(ierr); 221e26ddf31SBarry Smith ierr = PetscScanString(PETSC_COMM_WORLD,512,str);CHKERRQ(ierr); 222e26ddf31SBarry Smith if (str[0]) { 223e26ddf31SBarry Smith PetscToken token; 224e26ddf31SBarry Smith PetscInt n=0,nmax = next->arraylength,*dvalue = (PetscInt*)next->data,start,end; 225e26ddf31SBarry Smith size_t len; 226e26ddf31SBarry Smith char *value; 227ace3abfcSBarry Smith PetscBool foundrange; 228e26ddf31SBarry Smith 229e26ddf31SBarry Smith next->set = PETSC_TRUE; 230e26ddf31SBarry Smith value = str; 231e26ddf31SBarry Smith ierr = PetscTokenCreate(value,',',&token);CHKERRQ(ierr); 232e26ddf31SBarry Smith ierr = PetscTokenFind(token,&value);CHKERRQ(ierr); 233e26ddf31SBarry Smith while (n < nmax) { 234e26ddf31SBarry Smith if (!value) break; 235e26ddf31SBarry Smith 236e26ddf31SBarry Smith /* look for form d-D where d and D are integers */ 237e26ddf31SBarry Smith foundrange = PETSC_FALSE; 238e26ddf31SBarry Smith ierr = PetscStrlen(value,&len);CHKERRQ(ierr); 239e26ddf31SBarry Smith if (value[0] == '-') i=2; 240e26ddf31SBarry Smith else i=1; 241330cf3c9SBarry Smith for (;i<len; i++) { 242e26ddf31SBarry Smith if (value[i] == '-') { 243e32f2f54SBarry Smith if (i == len-1) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_USER,"Error in %D-th array entry %s\n",n,value); 244e26ddf31SBarry Smith value[i] = 0; 245cfbddea1SSatish Balay ierr = PetscOptionsStringToInt(value,&start);CHKERRQ(ierr); 246cfbddea1SSatish Balay ierr = PetscOptionsStringToInt(value+i+1,&end);CHKERRQ(ierr); 247e32f2f54SBarry 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); 248e32f2f54SBarry 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); 249e26ddf31SBarry Smith for (; start<end; start++) { 250e26ddf31SBarry Smith *dvalue = start; dvalue++;n++; 251e26ddf31SBarry Smith } 252e26ddf31SBarry Smith foundrange = PETSC_TRUE; 253e26ddf31SBarry Smith break; 254e26ddf31SBarry Smith } 255e26ddf31SBarry Smith } 256e26ddf31SBarry Smith if (!foundrange) { 257cfbddea1SSatish Balay ierr = PetscOptionsStringToInt(value,dvalue);CHKERRQ(ierr); 258e26ddf31SBarry Smith dvalue++; 259e26ddf31SBarry Smith n++; 260e26ddf31SBarry Smith } 261e26ddf31SBarry Smith ierr = PetscTokenFind(token,&value);CHKERRQ(ierr); 262e26ddf31SBarry Smith } 2638c74ee41SBarry Smith ierr = PetscTokenDestroy(&token);CHKERRQ(ierr); 264e26ddf31SBarry Smith } 265e26ddf31SBarry Smith break; 266e26ddf31SBarry Smith case OPTION_REAL_ARRAY: 267e55864a3SBarry Smith ierr = PetscPrintf(PETSC_COMM_WORLD,"-%s%s <",PetscOptionsObject->prefix ? PetscOptionsObject->prefix : "",next->option+1);CHKERRQ(ierr); 268e26ddf31SBarry Smith valr = (PetscReal*) next->data; 269e26ddf31SBarry Smith for (i=0; i<next->arraylength; i++) { 270e26ddf31SBarry Smith ierr = PetscPrintf(PETSC_COMM_WORLD,"%g",valr[i]);CHKERRQ(ierr); 271e26ddf31SBarry Smith if (i < next->arraylength-1) { 272e26ddf31SBarry Smith ierr = PetscPrintf(PETSC_COMM_WORLD,",");CHKERRQ(ierr); 273e26ddf31SBarry Smith } 274e26ddf31SBarry Smith } 275e26ddf31SBarry Smith ierr = PetscPrintf(PETSC_COMM_WORLD,">: %s (%s) ",next->text,next->man);CHKERRQ(ierr); 276e26ddf31SBarry Smith ierr = PetscScanString(PETSC_COMM_WORLD,512,str);CHKERRQ(ierr); 277e26ddf31SBarry Smith if (str[0]) { 278e26ddf31SBarry Smith PetscToken token; 279e26ddf31SBarry Smith PetscInt n = 0,nmax = next->arraylength; 280e26ddf31SBarry Smith PetscReal *dvalue = (PetscReal*)next->data; 281e26ddf31SBarry Smith char *value; 282e26ddf31SBarry Smith 283e26ddf31SBarry Smith next->set = PETSC_TRUE; 284e26ddf31SBarry Smith value = str; 285e26ddf31SBarry Smith ierr = PetscTokenCreate(value,',',&token);CHKERRQ(ierr); 286e26ddf31SBarry Smith ierr = PetscTokenFind(token,&value);CHKERRQ(ierr); 287e26ddf31SBarry Smith while (n < nmax) { 288e26ddf31SBarry Smith if (!value) break; 289cfbddea1SSatish Balay ierr = PetscOptionsStringToReal(value,dvalue);CHKERRQ(ierr); 290e26ddf31SBarry Smith dvalue++; 291e26ddf31SBarry Smith n++; 292e26ddf31SBarry Smith ierr = PetscTokenFind(token,&value);CHKERRQ(ierr); 293e26ddf31SBarry Smith } 2948c74ee41SBarry Smith ierr = PetscTokenDestroy(&token);CHKERRQ(ierr); 295e26ddf31SBarry Smith } 296e26ddf31SBarry Smith break; 2976356e834SBarry Smith case OPTION_INT: 298e55864a3SBarry 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); 2993fc1eb6aSBarry Smith ierr = PetscScanString(PETSC_COMM_WORLD,512,str);CHKERRQ(ierr); 3003fc1eb6aSBarry Smith if (str[0]) { 301d25d7f95SJed Brown #if defined(PETSC_SIZEOF_LONG_LONG) 302d25d7f95SJed Brown long long lid; 303d25d7f95SJed Brown sscanf(str,"%lld",&lid); 3041a1499c8SBarry Smith if (lid > PETSC_MAX_INT || lid < PETSC_MIN_INT) SETERRQ3(PETSC_COMM_WORLD,PETSC_ERR_ARG_OUTOFRANGE,"Argument: -%s%s %lld",PetscOptionsObject->prefix ? PetscOptionsObject->prefix : "",next->option+1,lid); 305c272547aSJed Brown #else 306d25d7f95SJed Brown long lid; 307d25d7f95SJed Brown sscanf(str,"%ld",&lid); 3081a1499c8SBarry Smith if (lid > PETSC_MAX_INT || lid < PETSC_MIN_INT) SETERRQ3(PETSC_COMM_WORLD,PETSC_ERR_ARG_OUTOFRANGE,"Argument: -%s%s %ld",PetscOptionsObject->prefix ? PetscOptionsObject->prefix : "",next->option+1,lid); 309c272547aSJed Brown #endif 310a297a907SKarl Rupp 311d25d7f95SJed Brown next->set = PETSC_TRUE; 312d25d7f95SJed Brown *((PetscInt*)next->data) = (PetscInt)lid; 313aee2cecaSBarry Smith } 314aee2cecaSBarry Smith break; 315aee2cecaSBarry Smith case OPTION_REAL: 316e55864a3SBarry 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); 3173fc1eb6aSBarry Smith ierr = PetscScanString(PETSC_COMM_WORLD,512,str);CHKERRQ(ierr); 3183fc1eb6aSBarry Smith if (str[0]) { 319ce63c4c1SBarry Smith #if defined(PETSC_USE_REAL_SINGLE) 320a4404d99SBarry Smith sscanf(str,"%e",&ir); 321ce63c4c1SBarry Smith #elif defined(PETSC_USE_REAL_DOUBLE) 322aee2cecaSBarry Smith sscanf(str,"%le",&ir); 323ce63c4c1SBarry Smith #elif defined(PETSC_USE_REAL___FLOAT128) 324d9822059SBarry Smith ir = strtoflt128(str,0); 325d9822059SBarry Smith #else 326513dbe71SLisandro Dalcin SETERRQ(PETSC_COMM_SELF,PETSC_ERR_LIB,"Unknown scalar type"); 327a4404d99SBarry Smith #endif 328aee2cecaSBarry Smith next->set = PETSC_TRUE; 329aee2cecaSBarry Smith *((PetscReal*)next->data) = ir; 330aee2cecaSBarry Smith } 331aee2cecaSBarry Smith break; 3327781c08eSBarry Smith case OPTION_BOOL: 33383355fc5SBarry Smith ierr = PetscPrintf(PETSC_COMM_WORLD,"-%s%s <%s>: %s (%s) ",PetscOptionsObject->prefix ? PetscOptionsObject->prefix : "",next->option+1,*(PetscBool*)next->data ? "true": "false",next->text,next->man);CHKERRQ(ierr); 3347781c08eSBarry Smith ierr = PetscScanString(PETSC_COMM_WORLD,512,str);CHKERRQ(ierr); 3357781c08eSBarry Smith if (str[0]) { 3367781c08eSBarry Smith ierr = PetscOptionsStringToBool(str,&bid);CHKERRQ(ierr); 3377781c08eSBarry Smith next->set = PETSC_TRUE; 3387781c08eSBarry Smith *((PetscBool*)next->data) = bid; 3397781c08eSBarry Smith } 3407781c08eSBarry Smith break; 341aee2cecaSBarry Smith case OPTION_STRING: 342e55864a3SBarry 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); 3433fc1eb6aSBarry Smith ierr = PetscScanString(PETSC_COMM_WORLD,512,str);CHKERRQ(ierr); 3443fc1eb6aSBarry Smith if (str[0]) { 345aee2cecaSBarry Smith next->set = PETSC_TRUE; 34664facd6cSBarry Smith /* must use system malloc since SAWs may free this */ 3475b02f95dSBarry Smith ierr = PetscStrdup(str,(char**)&next->data);CHKERRQ(ierr); 3486356e834SBarry Smith } 3496356e834SBarry Smith break; 350a264d7a6SBarry Smith case OPTION_FLIST: 351e55864a3SBarry Smith ierr = PetscFunctionListPrintTypes(PETSC_COMM_WORLD,stdout,PetscOptionsObject->prefix,next->option,next->text,next->man,next->flist,(char*)next->data);CHKERRQ(ierr); 3523cc1e11dSBarry Smith ierr = PetscScanString(PETSC_COMM_WORLD,512,str);CHKERRQ(ierr); 3533cc1e11dSBarry Smith if (str[0]) { 354e55864a3SBarry Smith PetscOptionsObject->changedmethod = PETSC_TRUE; 3553cc1e11dSBarry Smith next->set = PETSC_TRUE; 35664facd6cSBarry Smith /* must use system malloc since SAWs may free this */ 3575b02f95dSBarry Smith ierr = PetscStrdup(str,(char**)&next->data);CHKERRQ(ierr); 3583cc1e11dSBarry Smith } 3593cc1e11dSBarry Smith break; 360b432afdaSMatthew Knepley default: 361b432afdaSMatthew Knepley break; 3626356e834SBarry Smith } 3636356e834SBarry Smith next = next->next; 3646356e834SBarry Smith } 3656356e834SBarry Smith PetscFunctionReturn(0); 3666356e834SBarry Smith } 3676356e834SBarry Smith 368e04113cfSBarry Smith #if defined(PETSC_HAVE_SAWS) 369e04113cfSBarry Smith #include <petscviewersaws.h> 370d5649816SBarry Smith 371d5649816SBarry Smith static int count = 0; 372d5649816SBarry Smith 373b3506946SBarry Smith #undef __FUNCT__ 374e04113cfSBarry Smith #define __FUNCT__ "PetscOptionsSAWsDestroy" 375e04113cfSBarry Smith PetscErrorCode PetscOptionsSAWsDestroy(void) 376d5649816SBarry Smith { 3772657e9d9SBarry Smith PetscFunctionBegin; 378d5649816SBarry Smith PetscFunctionReturn(0); 379d5649816SBarry Smith } 380d5649816SBarry Smith 3819c1e0ce8SBarry Smith static const char *OptionsHeader = "<head>\n" 38223a1ff79SBarry Smith "<script type=\"text/javascript\" src=\"http://www.mcs.anl.gov/research/projects/saws/js/jquery-1.9.1.js\"></script>\n" 38323a1ff79SBarry Smith "<script type=\"text/javascript\" src=\"http://www.mcs.anl.gov/research/projects/saws/js/SAWs.js\"></script>\n" 384d1fc0251SBarry Smith "<script type=\"text/javascript\" src=\"js/PETSc.js\"></script>\n" 38564bbc9efSBarry Smith "<script>\n" 38664bbc9efSBarry Smith "jQuery(document).ready(function() {\n" 38764bbc9efSBarry Smith "PETSc.getAndDisplayDirectory(null,\"#variablesInfo\")\n" 38864bbc9efSBarry Smith "})\n" 38964bbc9efSBarry Smith "</script>\n" 39064bbc9efSBarry Smith "</head>\n"; 3911423471aSBarry Smith 3921423471aSBarry Smith /* Determines the size and style of the scroll region where PETSc options selectable from users are displayed */ 3931423471aSBarry Smith static const char *OptionsBodyBottom = "<div id=\"variablesInfo\" style=\"background-color:lightblue;height:auto;max-height:500px;overflow:scroll;\"></div>\n<br>\n</body>"; 39464bbc9efSBarry Smith 395d5649816SBarry Smith #undef __FUNCT__ 3967781c08eSBarry Smith #define __FUNCT__ "PetscOptionsSAWsInput" 397b3506946SBarry Smith /* 3987781c08eSBarry Smith PetscOptionsSAWsInput - Presents all the PETSc Options processed by the program so the user may change them at runtime using the SAWs 399b3506946SBarry Smith 400b3506946SBarry Smith Bugs: 401b3506946SBarry Smith + All processes must traverse through the exact same set of option queries do to the call to PetscScanString() 402b3506946SBarry Smith . Internal strings have arbitrary length and string copies are not checked that they fit into string space 403b3506946SBarry Smith - Only works for PetscInt == int, PetscReal == double etc 404b3506946SBarry Smith 405b3506946SBarry Smith 406b3506946SBarry Smith */ 4074416b707SBarry Smith PetscErrorCode PetscOptionsSAWsInput(PetscOptionItems *PetscOptionsObject) 408b3506946SBarry Smith { 409b3506946SBarry Smith PetscErrorCode ierr; 4104416b707SBarry Smith PetscOptionItem next = PetscOptionsObject->next; 411d5649816SBarry Smith static int mancount = 0; 412b3506946SBarry Smith char options[16]; 4137aab2a10SBarry Smith PetscBool changedmethod = PETSC_FALSE; 414a23eb982SSurtai Han PetscBool stopasking = PETSC_FALSE; 41588a9752cSBarry Smith char manname[16],textname[16]; 4162657e9d9SBarry Smith char dir[1024]; 417b3506946SBarry Smith 4182a409bb0SBarry Smith PetscFunctionBegin; 419b3506946SBarry Smith /* the next line is a bug, this will only work if all processors are here, the comm passed in is ignored!!! */ 420b3506946SBarry Smith sprintf(options,"Options_%d",count++); 421a297a907SKarl Rupp 4227325c4a4SBarry Smith PetscOptionsObject->pprefix = PetscOptionsObject->prefix; /* SAWs will change this, so cannot pass prefix directly */ 4231bc75a8dSBarry Smith 424d50831c4SBarry Smith ierr = PetscSNPrintf(dir,1024,"/PETSc/Options/%s","_title");CHKERRQ(ierr); 42583355fc5SBarry Smith PetscStackCallSAWs(SAWs_Register,(dir,&PetscOptionsObject->title,1,SAWs_READ,SAWs_STRING)); 4267781c08eSBarry Smith ierr = PetscSNPrintf(dir,1024,"/PETSc/Options/%s","prefix");CHKERRQ(ierr); 42783355fc5SBarry Smith PetscStackCallSAWs(SAWs_Register,(dir,&PetscOptionsObject->pprefix,1,SAWs_READ,SAWs_STRING)); 4282657e9d9SBarry Smith PetscStackCallSAWs(SAWs_Register,("/PETSc/Options/ChangedMethod",&changedmethod,1,SAWs_WRITE,SAWs_BOOLEAN)); 429a23eb982SSurtai Han PetscStackCallSAWs(SAWs_Register,("/PETSc/Options/StopAsking",&stopasking,1,SAWs_WRITE,SAWs_BOOLEAN)); 430b3506946SBarry Smith 431b3506946SBarry Smith while (next) { 432d50831c4SBarry Smith sprintf(manname,"_man_%d",mancount); 4332657e9d9SBarry Smith ierr = PetscSNPrintf(dir,1024,"/PETSc/Options/%s",manname);CHKERRQ(ierr); 4347781c08eSBarry Smith PetscStackCallSAWs(SAWs_Register,(dir,&next->man,1,SAWs_READ,SAWs_STRING)); 435d50831c4SBarry Smith sprintf(textname,"_text_%d",mancount++); 4367781c08eSBarry Smith ierr = PetscSNPrintf(dir,1024,"/PETSc/Options/%s",textname);CHKERRQ(ierr); 4377781c08eSBarry Smith PetscStackCallSAWs(SAWs_Register,(dir,&next->text,1,SAWs_READ,SAWs_STRING)); 4389f32e415SBarry Smith 439b3506946SBarry Smith switch (next->type) { 440b3506946SBarry Smith case OPTION_HEAD: 441b3506946SBarry Smith break; 442b3506946SBarry Smith case OPTION_INT_ARRAY: 4437781c08eSBarry Smith ierr = PetscSNPrintf(dir,1024,"/PETSc/Options/%s",next->option);CHKERRQ(ierr); 4442657e9d9SBarry Smith PetscStackCallSAWs(SAWs_Register,(dir,next->data,next->arraylength,SAWs_WRITE,SAWs_INT)); 445b3506946SBarry Smith break; 446b3506946SBarry Smith case OPTION_REAL_ARRAY: 4477781c08eSBarry Smith ierr = PetscSNPrintf(dir,1024,"/PETSc/Options/%s",next->option);CHKERRQ(ierr); 4482657e9d9SBarry Smith PetscStackCallSAWs(SAWs_Register,(dir,next->data,next->arraylength,SAWs_WRITE,SAWs_DOUBLE)); 449b3506946SBarry Smith break; 450b3506946SBarry Smith case OPTION_INT: 4517781c08eSBarry Smith ierr = PetscSNPrintf(dir,1024,"/PETSc/Options/%s",next->option);CHKERRQ(ierr); 4522657e9d9SBarry Smith PetscStackCallSAWs(SAWs_Register,(dir,next->data,1,SAWs_WRITE,SAWs_INT)); 453b3506946SBarry Smith break; 454b3506946SBarry Smith case OPTION_REAL: 4557781c08eSBarry Smith ierr = PetscSNPrintf(dir,1024,"/PETSc/Options/%s",next->option);CHKERRQ(ierr); 4562657e9d9SBarry Smith PetscStackCallSAWs(SAWs_Register,(dir,next->data,1,SAWs_WRITE,SAWs_DOUBLE)); 457b3506946SBarry Smith break; 4587781c08eSBarry Smith case OPTION_BOOL: 4597781c08eSBarry Smith ierr = PetscSNPrintf(dir,1024,"/PETSc/Options/%s",next->option);CHKERRQ(ierr); 4602657e9d9SBarry Smith PetscStackCallSAWs(SAWs_Register,(dir,next->data,1,SAWs_WRITE,SAWs_BOOLEAN)); 4611ae3d29cSBarry Smith break; 4627781c08eSBarry Smith case OPTION_BOOL_ARRAY: 4637781c08eSBarry Smith ierr = PetscSNPrintf(dir,1024,"/PETSc/Options/%s",next->option);CHKERRQ(ierr); 4642657e9d9SBarry Smith PetscStackCallSAWs(SAWs_Register,(dir,next->data,next->arraylength,SAWs_WRITE,SAWs_BOOLEAN)); 46571f08665SBarry Smith break; 466b3506946SBarry Smith case OPTION_STRING: 4677781c08eSBarry Smith ierr = PetscSNPrintf(dir,1024,"/PETSc/Options/%s",next->option);CHKERRQ(ierr); 4687781c08eSBarry Smith PetscStackCallSAWs(SAWs_Register,(dir,&next->data,1,SAWs_WRITE,SAWs_STRING)); 4691ae3d29cSBarry Smith break; 4701ae3d29cSBarry Smith case OPTION_STRING_ARRAY: 4717781c08eSBarry Smith ierr = PetscSNPrintf(dir,1024,"/PETSc/Options/%s",next->option);CHKERRQ(ierr); 4722657e9d9SBarry Smith PetscStackCallSAWs(SAWs_Register,(dir,next->data,next->arraylength,SAWs_WRITE,SAWs_STRING)); 473b3506946SBarry Smith break; 474a264d7a6SBarry Smith case OPTION_FLIST: 475a264d7a6SBarry Smith { 476a264d7a6SBarry Smith PetscInt ntext; 4777781c08eSBarry Smith ierr = PetscSNPrintf(dir,1024,"/PETSc/Options/%s",next->option);CHKERRQ(ierr); 4787781c08eSBarry Smith PetscStackCallSAWs(SAWs_Register,(dir,&next->data,1,SAWs_WRITE,SAWs_STRING)); 479a264d7a6SBarry Smith ierr = PetscFunctionListGet(next->flist,(const char***)&next->edata,&ntext);CHKERRQ(ierr); 480a264d7a6SBarry Smith PetscStackCallSAWs(SAWs_Set_Legal_Variable_Values,(dir,ntext,next->edata)); 481a264d7a6SBarry Smith } 482a264d7a6SBarry Smith break; 4831ae3d29cSBarry Smith case OPTION_ELIST: 484a264d7a6SBarry Smith { 485a264d7a6SBarry Smith PetscInt ntext = next->nlist; 4867781c08eSBarry Smith ierr = PetscSNPrintf(dir,1024,"/PETSc/Options/%s",next->option);CHKERRQ(ierr); 4877781c08eSBarry Smith PetscStackCallSAWs(SAWs_Register,(dir,&next->data,1,SAWs_WRITE,SAWs_STRING)); 488ead66b60SBarry Smith ierr = PetscMalloc1((ntext+1),(char***)&next->edata);CHKERRQ(ierr); 4891ae3d29cSBarry Smith ierr = PetscMemcpy(next->edata,next->list,ntext*sizeof(char*));CHKERRQ(ierr); 490a264d7a6SBarry Smith PetscStackCallSAWs(SAWs_Set_Legal_Variable_Values,(dir,ntext,next->edata)); 491a264d7a6SBarry Smith } 492a264d7a6SBarry Smith break; 493b3506946SBarry Smith default: 494b3506946SBarry Smith break; 495b3506946SBarry Smith } 496b3506946SBarry Smith next = next->next; 497b3506946SBarry Smith } 498b3506946SBarry Smith 499b3506946SBarry Smith /* wait until accessor has unlocked the memory */ 50064bbc9efSBarry Smith PetscStackCallSAWs(SAWs_Push_Header,("index.html",OptionsHeader)); 50164bbc9efSBarry Smith PetscStackCallSAWs(SAWs_Push_Body,("index.html",2,OptionsBodyBottom)); 5027aab2a10SBarry Smith ierr = PetscSAWsBlock();CHKERRQ(ierr); 50364bbc9efSBarry Smith PetscStackCallSAWs(SAWs_Pop_Header,("index.html")); 50464bbc9efSBarry Smith PetscStackCallSAWs(SAWs_Pop_Body,("index.html",2)); 505b3506946SBarry Smith 50688a9752cSBarry Smith /* determine if any values have been set in GUI */ 50783355fc5SBarry Smith next = PetscOptionsObject->next; 50888a9752cSBarry Smith while (next) { 50988a9752cSBarry Smith ierr = PetscSNPrintf(dir,1024,"/PETSc/Options/%s",next->option);CHKERRQ(ierr); 510f7b25cf6SBarry Smith PetscStackCallSAWs(SAWs_Selected,(dir,(int*)&next->set)); 51188a9752cSBarry Smith next = next->next; 51288a9752cSBarry Smith } 51388a9752cSBarry Smith 514b3506946SBarry Smith /* reset counter to -2; this updates the screen with the new options for the selected method */ 515f7b25cf6SBarry Smith if (changedmethod) PetscOptionsObject->count = -2; 516b3506946SBarry Smith 517a23eb982SSurtai Han if (stopasking) { 518a23eb982SSurtai Han PetscOptionsPublish = PETSC_FALSE; 51912655325SBarry Smith PetscOptionsObject->count = 0;//do not ask for same thing again 520a23eb982SSurtai Han } 521a23eb982SSurtai Han 5229a492a5cSBarry Smith PetscStackCallSAWs(SAWs_Delete,("/PETSc/Options")); 523b3506946SBarry Smith PetscFunctionReturn(0); 524b3506946SBarry Smith } 525b3506946SBarry Smith #endif 526b3506946SBarry Smith 5276356e834SBarry Smith #undef __FUNCT__ 52853acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsEnd_Private" 5294416b707SBarry Smith PetscErrorCode PetscOptionsEnd_Private(PetscOptionItems *PetscOptionsObject) 53053acd3b1SBarry Smith { 53153acd3b1SBarry Smith PetscErrorCode ierr; 5324416b707SBarry Smith PetscOptionItem last; 5336356e834SBarry Smith char option[256],value[1024],tmp[32]; 534330cf3c9SBarry Smith size_t j; 53553acd3b1SBarry Smith 53653acd3b1SBarry Smith PetscFunctionBegin; 53783355fc5SBarry Smith if (PetscOptionsObject->next) { 53883355fc5SBarry Smith if (!PetscOptionsObject->count) { 539a264d7a6SBarry Smith #if defined(PETSC_HAVE_SAWS) 540f7b25cf6SBarry Smith ierr = PetscOptionsSAWsInput(PetscOptionsObject);CHKERRQ(ierr); 541b3506946SBarry Smith #else 542e55864a3SBarry Smith ierr = PetscOptionsGetFromTextInput(PetscOptionsObject);CHKERRQ(ierr); 543b3506946SBarry Smith #endif 544aee2cecaSBarry Smith } 545aee2cecaSBarry Smith } 5466356e834SBarry Smith 547e55864a3SBarry Smith ierr = PetscFree(PetscOptionsObject->title);CHKERRQ(ierr); 5486356e834SBarry Smith 549e26ddf31SBarry Smith /* reset counter to -2; this updates the screen with the new options for the selected method */ 550e55864a3SBarry Smith if (PetscOptionsObject->changedmethod) PetscOptionsObject->count = -2; 5517a72a596SBarry Smith /* reset alreadyprinted flag */ 552e55864a3SBarry Smith PetscOptionsObject->alreadyprinted = PETSC_FALSE; 553e55864a3SBarry Smith if (PetscOptionsObject->object) PetscOptionsObject->object->optionsprinted = PETSC_TRUE; 554e55864a3SBarry Smith PetscOptionsObject->object = NULL; 55553acd3b1SBarry Smith 556e55864a3SBarry Smith while (PetscOptionsObject->next) { 557e55864a3SBarry Smith if (PetscOptionsObject->next->set) { 558e55864a3SBarry Smith if (PetscOptionsObject->prefix) { 55953acd3b1SBarry Smith ierr = PetscStrcpy(option,"-");CHKERRQ(ierr); 560e55864a3SBarry Smith ierr = PetscStrcat(option,PetscOptionsObject->prefix);CHKERRQ(ierr); 561e55864a3SBarry Smith ierr = PetscStrcat(option,PetscOptionsObject->next->option+1);CHKERRQ(ierr); 5626356e834SBarry Smith } else { 563e55864a3SBarry Smith ierr = PetscStrcpy(option,PetscOptionsObject->next->option);CHKERRQ(ierr); 5646356e834SBarry Smith } 5656356e834SBarry Smith 566e55864a3SBarry Smith switch (PetscOptionsObject->next->type) { 5676356e834SBarry Smith case OPTION_HEAD: 5686356e834SBarry Smith break; 5696356e834SBarry Smith case OPTION_INT_ARRAY: 570e55864a3SBarry Smith sprintf(value,"%d",(int)((PetscInt*)PetscOptionsObject->next->data)[0]); 571e55864a3SBarry Smith for (j=1; j<PetscOptionsObject->next->arraylength; j++) { 572e55864a3SBarry Smith sprintf(tmp,"%d",(int)((PetscInt*)PetscOptionsObject->next->data)[j]); 5736356e834SBarry Smith ierr = PetscStrcat(value,",");CHKERRQ(ierr); 5746356e834SBarry Smith ierr = PetscStrcat(value,tmp);CHKERRQ(ierr); 5756356e834SBarry Smith } 5766356e834SBarry Smith break; 5776356e834SBarry Smith case OPTION_INT: 578e55864a3SBarry Smith sprintf(value,"%d",(int) *(PetscInt*)PetscOptionsObject->next->data); 5796356e834SBarry Smith break; 5806356e834SBarry Smith case OPTION_REAL: 581e55864a3SBarry Smith sprintf(value,"%g",(double) *(PetscReal*)PetscOptionsObject->next->data); 5826356e834SBarry Smith break; 5836356e834SBarry Smith case OPTION_REAL_ARRAY: 584e55864a3SBarry Smith sprintf(value,"%g",(double)((PetscReal*)PetscOptionsObject->next->data)[0]); 585e55864a3SBarry Smith for (j=1; j<PetscOptionsObject->next->arraylength; j++) { 586e55864a3SBarry Smith sprintf(tmp,"%g",(double)((PetscReal*)PetscOptionsObject->next->data)[j]); 5876356e834SBarry Smith ierr = PetscStrcat(value,",");CHKERRQ(ierr); 5886356e834SBarry Smith ierr = PetscStrcat(value,tmp);CHKERRQ(ierr); 5896356e834SBarry Smith } 5906356e834SBarry Smith break; 591050cccc3SHong Zhang case OPTION_SCALAR_ARRAY: 59295f3a755SJose E. Roman sprintf(value,"%g+%gi",(double)PetscRealPart(((PetscScalar*)PetscOptionsObject->next->data)[0]),(double)PetscImaginaryPart(((PetscScalar*)PetscOptionsObject->next->data)[0])); 593050cccc3SHong Zhang for (j=1; j<PetscOptionsObject->next->arraylength; j++) { 59495f3a755SJose E. Roman sprintf(tmp,"%g+%gi",(double)PetscRealPart(((PetscScalar*)PetscOptionsObject->next->data)[j]),(double)PetscImaginaryPart(((PetscScalar*)PetscOptionsObject->next->data)[j])); 595050cccc3SHong Zhang ierr = PetscStrcat(value,",");CHKERRQ(ierr); 596050cccc3SHong Zhang ierr = PetscStrcat(value,tmp);CHKERRQ(ierr); 597050cccc3SHong Zhang } 598050cccc3SHong Zhang break; 5997781c08eSBarry Smith case OPTION_BOOL: 600e55864a3SBarry Smith sprintf(value,"%d",*(int*)PetscOptionsObject->next->data); 6016356e834SBarry Smith break; 6027781c08eSBarry Smith case OPTION_BOOL_ARRAY: 603e55864a3SBarry Smith sprintf(value,"%d",(int)((PetscBool*)PetscOptionsObject->next->data)[0]); 604e55864a3SBarry Smith for (j=1; j<PetscOptionsObject->next->arraylength; j++) { 605e55864a3SBarry Smith sprintf(tmp,"%d",(int)((PetscBool*)PetscOptionsObject->next->data)[j]); 6061ae3d29cSBarry Smith ierr = PetscStrcat(value,",");CHKERRQ(ierr); 6071ae3d29cSBarry Smith ierr = PetscStrcat(value,tmp);CHKERRQ(ierr); 6081ae3d29cSBarry Smith } 6091ae3d29cSBarry Smith break; 610a264d7a6SBarry Smith case OPTION_FLIST: 6116991f827SBarry Smith ierr = PetscStrcpy(value,(char*)PetscOptionsObject->next->data);CHKERRQ(ierr); 6126991f827SBarry Smith break; 6131ae3d29cSBarry Smith case OPTION_ELIST: 614e55864a3SBarry Smith ierr = PetscStrcpy(value,(char*)PetscOptionsObject->next->data);CHKERRQ(ierr); 6156356e834SBarry Smith break; 6161ae3d29cSBarry Smith case OPTION_STRING: 617e55864a3SBarry Smith ierr = PetscStrcpy(value,(char*)PetscOptionsObject->next->data);CHKERRQ(ierr); 618d51da6bfSBarry Smith break; 6191ae3d29cSBarry Smith case OPTION_STRING_ARRAY: 620e55864a3SBarry Smith sprintf(value,"%s",((char**)PetscOptionsObject->next->data)[0]); 621e55864a3SBarry Smith for (j=1; j<PetscOptionsObject->next->arraylength; j++) { 622e55864a3SBarry Smith sprintf(tmp,"%s",((char**)PetscOptionsObject->next->data)[j]); 6231ae3d29cSBarry Smith ierr = PetscStrcat(value,",");CHKERRQ(ierr); 6241ae3d29cSBarry Smith ierr = PetscStrcat(value,tmp);CHKERRQ(ierr); 6251ae3d29cSBarry Smith } 6266356e834SBarry Smith break; 6276356e834SBarry Smith } 628c5929fdfSBarry Smith ierr = PetscOptionsSetValue(PetscOptionsObject->options,option,value);CHKERRQ(ierr); 6296356e834SBarry Smith } 6306991f827SBarry Smith if (PetscOptionsObject->next->type == OPTION_ELIST) { 6316991f827SBarry Smith ierr = PetscStrNArrayDestroy(PetscOptionsObject->next->nlist,(char ***)&PetscOptionsObject->next->list);CHKERRQ(ierr); 6326991f827SBarry Smith } 633e55864a3SBarry Smith ierr = PetscFree(PetscOptionsObject->next->text);CHKERRQ(ierr); 634e55864a3SBarry Smith ierr = PetscFree(PetscOptionsObject->next->option);CHKERRQ(ierr); 635e55864a3SBarry Smith ierr = PetscFree(PetscOptionsObject->next->man);CHKERRQ(ierr); 636e55864a3SBarry Smith ierr = PetscFree(PetscOptionsObject->next->edata);CHKERRQ(ierr); 637c979a496SBarry Smith 63883355fc5SBarry Smith if ((PetscOptionsObject->next->type == OPTION_STRING) || (PetscOptionsObject->next->type == OPTION_FLIST) || (PetscOptionsObject->next->type == OPTION_ELIST)){ 63983355fc5SBarry Smith free(PetscOptionsObject->next->data); 640c979a496SBarry Smith } else { 64183355fc5SBarry Smith ierr = PetscFree(PetscOptionsObject->next->data);CHKERRQ(ierr); 642c979a496SBarry Smith } 6437781c08eSBarry Smith 64483355fc5SBarry Smith last = PetscOptionsObject->next; 64583355fc5SBarry Smith PetscOptionsObject->next = PetscOptionsObject->next->next; 6466356e834SBarry Smith ierr = PetscFree(last);CHKERRQ(ierr); 6476356e834SBarry Smith } 648f59f755dSBarry Smith ierr = PetscFree(PetscOptionsObject->prefix);CHKERRQ(ierr); 649e55864a3SBarry Smith PetscOptionsObject->next = 0; 65053acd3b1SBarry Smith PetscFunctionReturn(0); 65153acd3b1SBarry Smith } 65253acd3b1SBarry Smith 65353acd3b1SBarry Smith #undef __FUNCT__ 654e55864a3SBarry Smith #define __FUNCT__ "PetscOptionsEnum_Private" 65553acd3b1SBarry Smith /*@C 65653acd3b1SBarry Smith PetscOptionsEnum - Gets the enum value for a particular option in the database. 65753acd3b1SBarry Smith 6583f9fe445SBarry Smith Logically Collective on the communicator passed in PetscOptionsBegin() 65953acd3b1SBarry Smith 66053acd3b1SBarry Smith Input Parameters: 66153acd3b1SBarry Smith + opt - option name 66253acd3b1SBarry Smith . text - short string that describes the option 66353acd3b1SBarry Smith . man - manual page with additional information on option 66453acd3b1SBarry Smith . list - array containing the list of choices, followed by the enum name, followed by the enum prefix, followed by a null 6650fdccdaeSBarry Smith - currentvalue - the current value; caller is responsible for setting this value correctly. Normally this is done with either 6660fdccdaeSBarry Smith $ PetscOptionsEnum(..., obj->value,&object->value,...) or 6670fdccdaeSBarry Smith $ value = defaultvalue 6680fdccdaeSBarry Smith $ PetscOptionsEnum(..., value,&value,&flg); 6690fdccdaeSBarry Smith $ if (flg) { 67053acd3b1SBarry Smith 67153acd3b1SBarry Smith Output Parameter: 67253acd3b1SBarry Smith + value - the value to return 673b32e0204SMatthew G Knepley - set - PETSC_TRUE if found, else PETSC_FALSE 67453acd3b1SBarry Smith 67553acd3b1SBarry Smith Level: beginner 67653acd3b1SBarry Smith 67753acd3b1SBarry Smith Concepts: options database 67853acd3b1SBarry Smith 67953acd3b1SBarry Smith Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd() 68053acd3b1SBarry Smith 68153acd3b1SBarry Smith list is usually something like PCASMTypes or some other predefined list of enum names 68253acd3b1SBarry Smith 68353acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(), 684acfcf0e5SJed Brown PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsBool() 685acfcf0e5SJed Brown PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsBool(), 68653acd3b1SBarry Smith PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 68753acd3b1SBarry Smith PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 688acfcf0e5SJed Brown PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 689a264d7a6SBarry Smith PetscOptionsFList(), PetscOptionsEList() 69053acd3b1SBarry Smith @*/ 6914416b707SBarry Smith PetscErrorCode PetscOptionsEnum_Private(PetscOptionItems *PetscOptionsObject,const char opt[],const char text[],const char man[],const char *const *list,PetscEnum currentvalue,PetscEnum *value,PetscBool *set) 69253acd3b1SBarry Smith { 69353acd3b1SBarry Smith PetscErrorCode ierr; 69453acd3b1SBarry Smith PetscInt ntext = 0; 695aa5bb8c0SSatish Balay PetscInt tval; 696ace3abfcSBarry Smith PetscBool tflg; 69753acd3b1SBarry Smith 69853acd3b1SBarry Smith PetscFunctionBegin; 69953acd3b1SBarry Smith while (list[ntext++]) { 700e32f2f54SBarry Smith if (ntext > 50) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"List argument appears to be wrong or have more than 50 entries"); 70153acd3b1SBarry Smith } 702e32f2f54SBarry Smith if (ntext < 3) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"List argument must have at least two entries: typename and type prefix"); 70353acd3b1SBarry Smith ntext -= 3; 704e55864a3SBarry Smith ierr = PetscOptionsEList_Private(PetscOptionsObject,opt,text,man,list,ntext,list[currentvalue],&tval,&tflg);CHKERRQ(ierr); 705aa5bb8c0SSatish Balay /* with PETSC_USE_64BIT_INDICES sizeof(PetscInt) != sizeof(PetscEnum) */ 706aa5bb8c0SSatish Balay if (tflg) *value = (PetscEnum)tval; 707aa5bb8c0SSatish Balay if (set) *set = tflg; 70853acd3b1SBarry Smith PetscFunctionReturn(0); 70953acd3b1SBarry Smith } 71053acd3b1SBarry Smith 711d3e47460SLisandro Dalcin #undef __FUNCT__ 712d3e47460SLisandro Dalcin #define __FUNCT__ "PetscOptionsEnumArray_Private" 713d3e47460SLisandro Dalcin /*@C 714d3e47460SLisandro Dalcin PetscOptionsEnumArray - Gets an array of enum values for a particular 715d3e47460SLisandro Dalcin option in the database. 716d3e47460SLisandro Dalcin 717d3e47460SLisandro Dalcin Logically Collective on the communicator passed in PetscOptionsBegin() 718d3e47460SLisandro Dalcin 719d3e47460SLisandro Dalcin Input Parameters: 720d3e47460SLisandro Dalcin + opt - the option one is seeking 721d3e47460SLisandro Dalcin . text - short string describing option 722d3e47460SLisandro Dalcin . man - manual page for option 723d3e47460SLisandro Dalcin - n - maximum number of values 724d3e47460SLisandro Dalcin 725d3e47460SLisandro Dalcin Output Parameter: 726d3e47460SLisandro Dalcin + value - location to copy values 727d3e47460SLisandro Dalcin . n - actual number of values found 728d3e47460SLisandro Dalcin - set - PETSC_TRUE if found, else PETSC_FALSE 729d3e47460SLisandro Dalcin 730d3e47460SLisandro Dalcin Level: beginner 731d3e47460SLisandro Dalcin 732d3e47460SLisandro Dalcin Notes: 733d3e47460SLisandro Dalcin The array must be passed as a comma separated list. 734d3e47460SLisandro Dalcin 735d3e47460SLisandro Dalcin There must be no intervening spaces between the values. 736d3e47460SLisandro Dalcin 737d3e47460SLisandro Dalcin Must be between a PetscOptionsBegin() and a PetscOptionsEnd() 738d3e47460SLisandro Dalcin 739d3e47460SLisandro Dalcin Concepts: options database^array of enums 740d3e47460SLisandro Dalcin 741d3e47460SLisandro Dalcin .seealso: PetscOptionsGetInt(), PetscOptionsGetReal(), 742d3e47460SLisandro Dalcin PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsBool(), 743d3e47460SLisandro Dalcin PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 744d3e47460SLisandro Dalcin PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 745d3e47460SLisandro Dalcin PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 746d3e47460SLisandro Dalcin PetscOptionsFList(), PetscOptionsEList(), PetscOptionsRealArray() 747d3e47460SLisandro Dalcin @*/ 7484416b707SBarry Smith PetscErrorCode PetscOptionsEnumArray_Private(PetscOptionItems *PetscOptionsObject,const char opt[],const char text[],const char man[],const char *const *list,PetscEnum value[],PetscInt *n,PetscBool *set) 749d3e47460SLisandro Dalcin { 750d3e47460SLisandro Dalcin PetscInt i,nlist = 0; 7514416b707SBarry Smith PetscOptionItem amsopt; 752d3e47460SLisandro Dalcin PetscErrorCode ierr; 753d3e47460SLisandro Dalcin 754d3e47460SLisandro Dalcin PetscFunctionBegin; 755d3e47460SLisandro Dalcin while (list[nlist++]) if (nlist > 50) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"List argument appears to be wrong or have more than 50 entries"); 756d3e47460SLisandro Dalcin if (nlist < 3) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"List argument must have at least two entries: typename and type prefix"); 757d3e47460SLisandro Dalcin nlist -= 3; /* drop enum name, prefix, and null termination */ 758d3e47460SLisandro Dalcin if (0 && !PetscOptionsObject->count) { /* XXX Requires additional support */ 759d3e47460SLisandro Dalcin PetscEnum *vals; 7604416b707SBarry Smith ierr = PetscOptionItemCreate_Private(PetscOptionsObject,opt,text,man,OPTION_INT_ARRAY/*XXX OPTION_ENUM_ARRAY*/,&amsopt);CHKERRQ(ierr); 761d3e47460SLisandro Dalcin ierr = PetscStrNArrayallocpy(nlist,list,(char***)&amsopt->list);CHKERRQ(ierr); 762d3e47460SLisandro Dalcin amsopt->nlist = nlist; 763d3e47460SLisandro Dalcin ierr = PetscMalloc1(*n,(PetscEnum**)&amsopt->data);CHKERRQ(ierr); 764d3e47460SLisandro Dalcin amsopt->arraylength = *n; 765d3e47460SLisandro Dalcin vals = (PetscEnum*)amsopt->data; 766d3e47460SLisandro Dalcin for (i=0; i<*n; i++) vals[i] = value[i]; 767d3e47460SLisandro Dalcin } 768c5929fdfSBarry Smith ierr = PetscOptionsGetEnumArray(PetscOptionsObject->options,PetscOptionsObject->prefix,opt,list,value,n,set);CHKERRQ(ierr); 769d3e47460SLisandro Dalcin if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) { 770d3e47460SLisandro Dalcin ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," -%s%s <%s",PetscOptionsObject->prefix ? PetscOptionsObject->prefix : "",opt+1,list[value[0]]);CHKERRQ(ierr); 771d3e47460SLisandro Dalcin for (i=1; i<*n; i++) {ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm,",%s",list[value[i]]);CHKERRQ(ierr);} 772d3e47460SLisandro Dalcin ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm,">: %s (choose from)",text);CHKERRQ(ierr); 773d3e47460SLisandro Dalcin for (i=0; i<nlist; i++) {ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," %s",list[i]);CHKERRQ(ierr);} 774d3e47460SLisandro Dalcin ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," (%s)\n",ManSection(man));CHKERRQ(ierr); 775d3e47460SLisandro Dalcin } 776d3e47460SLisandro Dalcin PetscFunctionReturn(0); 777d3e47460SLisandro Dalcin } 778d3e47460SLisandro Dalcin 77953acd3b1SBarry Smith /* -------------------------------------------------------------------------------------------------------------*/ 78053acd3b1SBarry Smith #undef __FUNCT__ 781e55864a3SBarry Smith #define __FUNCT__ "PetscOptionsInt_Private" 78253acd3b1SBarry Smith /*@C 78353acd3b1SBarry Smith PetscOptionsInt - Gets the integer value for a particular option in the database. 78453acd3b1SBarry Smith 7853f9fe445SBarry Smith Logically Collective on the communicator passed in PetscOptionsBegin() 78653acd3b1SBarry Smith 78753acd3b1SBarry Smith Input Parameters: 78853acd3b1SBarry Smith + opt - option name 78953acd3b1SBarry Smith . text - short string that describes the option 79053acd3b1SBarry Smith . man - manual page with additional information on option 7910fdccdaeSBarry Smith - currentvalue - the current value; caller is responsible for setting this value correctly. Normally this is done with either 7920fdccdaeSBarry Smith $ PetscOptionsInt(..., obj->value,&object->value,...) or 7930fdccdaeSBarry Smith $ value = defaultvalue 7940fdccdaeSBarry Smith $ PetscOptionsInt(..., value,&value,&flg); 7950fdccdaeSBarry Smith $ if (flg) { 79653acd3b1SBarry Smith 79753acd3b1SBarry Smith Output Parameter: 79853acd3b1SBarry Smith + value - the integer value to return 79953acd3b1SBarry Smith - flg - PETSC_TRUE if found, else PETSC_FALSE 80053acd3b1SBarry Smith 80153acd3b1SBarry Smith Level: beginner 80253acd3b1SBarry Smith 80353acd3b1SBarry Smith Concepts: options database^has int 80453acd3b1SBarry Smith 80553acd3b1SBarry Smith Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd() 80653acd3b1SBarry Smith 80753acd3b1SBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(), 808acfcf0e5SJed Brown PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsBool() 809acfcf0e5SJed Brown PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsBool(), 81053acd3b1SBarry Smith PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 81153acd3b1SBarry Smith PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 812acfcf0e5SJed Brown PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 813a264d7a6SBarry Smith PetscOptionsFList(), PetscOptionsEList() 81453acd3b1SBarry Smith @*/ 8154416b707SBarry Smith PetscErrorCode PetscOptionsInt_Private(PetscOptionItems *PetscOptionsObject,const char opt[],const char text[],const char man[],PetscInt currentvalue,PetscInt *value,PetscBool *set) 81653acd3b1SBarry Smith { 81753acd3b1SBarry Smith PetscErrorCode ierr; 8184416b707SBarry Smith PetscOptionItem amsopt; 81912655325SBarry Smith PetscBool wasset; 82053acd3b1SBarry Smith 82153acd3b1SBarry Smith PetscFunctionBegin; 822e55864a3SBarry Smith if (!PetscOptionsObject->count) { 8234416b707SBarry Smith ierr = PetscOptionItemCreate_Private(PetscOptionsObject,opt,text,man,OPTION_INT,&amsopt);CHKERRQ(ierr); 8246356e834SBarry Smith ierr = PetscMalloc(sizeof(PetscInt),&amsopt->data);CHKERRQ(ierr); 82512655325SBarry Smith *(PetscInt*)amsopt->data = currentvalue; 8263e211508SBarry Smith 827c5929fdfSBarry Smith ierr = PetscOptionsGetInt(PetscOptionsObject->options,PetscOptionsObject->prefix,opt,¤tvalue,&wasset);CHKERRQ(ierr); 8283e211508SBarry Smith if (wasset) { 82912655325SBarry Smith *(PetscInt*)amsopt->data = currentvalue; 8303e211508SBarry Smith } 831af6d86caSBarry Smith } 832c5929fdfSBarry Smith ierr = PetscOptionsGetInt(NULL,PetscOptionsObject->prefix,opt,value,set);CHKERRQ(ierr); 833e55864a3SBarry Smith if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) { 8341a1499c8SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," -%s%s <%d>: %s (%s)\n",PetscOptionsObject->prefix ? PetscOptionsObject->prefix : "",opt+1,currentvalue,text,ManSection(man));CHKERRQ(ierr); 83553acd3b1SBarry Smith } 83653acd3b1SBarry Smith PetscFunctionReturn(0); 83753acd3b1SBarry Smith } 83853acd3b1SBarry Smith 83953acd3b1SBarry Smith #undef __FUNCT__ 840e55864a3SBarry Smith #define __FUNCT__ "PetscOptionsString_Private" 84153acd3b1SBarry Smith /*@C 84253acd3b1SBarry Smith PetscOptionsString - Gets the string value for a particular option in the database. 84353acd3b1SBarry Smith 8443f9fe445SBarry Smith Logically Collective on the communicator passed in PetscOptionsBegin() 84553acd3b1SBarry Smith 84653acd3b1SBarry Smith Input Parameters: 84753acd3b1SBarry Smith + opt - option name 84853acd3b1SBarry Smith . text - short string that describes the option 84953acd3b1SBarry Smith . man - manual page with additional information on option 8500fdccdaeSBarry Smith . currentvalue - the current value; caller is responsible for setting this value correctly. This is not used to set value 851bcbf2dc5SJed Brown - len - length of the result string including null terminator 85253acd3b1SBarry Smith 85353acd3b1SBarry Smith Output Parameter: 85453acd3b1SBarry Smith + value - the value to return 85553acd3b1SBarry Smith - flg - PETSC_TRUE if found, else PETSC_FALSE 85653acd3b1SBarry Smith 85753acd3b1SBarry Smith Level: beginner 85853acd3b1SBarry Smith 85953acd3b1SBarry Smith Concepts: options database^has int 86053acd3b1SBarry Smith 86153acd3b1SBarry Smith Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd() 86253acd3b1SBarry Smith 8637fccdfe4SBarry Smith Even if the user provided no string (for example -optionname -someotheroption) the flag is set to PETSC_TRUE (and the string is fulled with nulls). 8647fccdfe4SBarry Smith 865c5929fdfSBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(NULL,), 866acfcf0e5SJed Brown PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsBool() 867acfcf0e5SJed Brown PetscOptionsInt(), PetscOptionsReal(), PetscOptionsBool(), 86853acd3b1SBarry Smith PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 86953acd3b1SBarry Smith PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 870acfcf0e5SJed Brown PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 871a264d7a6SBarry Smith PetscOptionsFList(), PetscOptionsEList() 87253acd3b1SBarry Smith @*/ 8734416b707SBarry Smith PetscErrorCode PetscOptionsString_Private(PetscOptionItems *PetscOptionsObject,const char opt[],const char text[],const char man[],const char currentvalue[],char value[],size_t len,PetscBool *set) 87453acd3b1SBarry Smith { 87553acd3b1SBarry Smith PetscErrorCode ierr; 8764416b707SBarry Smith PetscOptionItem amsopt; 87753acd3b1SBarry Smith 87853acd3b1SBarry Smith PetscFunctionBegin; 8791a1499c8SBarry Smith if (!PetscOptionsObject->count) { 8804416b707SBarry Smith ierr = PetscOptionItemCreate_Private(PetscOptionsObject,opt,text,man,OPTION_STRING,&amsopt);CHKERRQ(ierr); 88164facd6cSBarry Smith /* must use system malloc since SAWs may free this */ 8820fdccdaeSBarry Smith ierr = PetscStrdup(currentvalue ? currentvalue : "",(char**)&amsopt->data);CHKERRQ(ierr); 883af6d86caSBarry Smith } 884c5929fdfSBarry Smith ierr = PetscOptionsGetString(PetscOptionsObject->options,PetscOptionsObject->prefix,opt,value,len,set);CHKERRQ(ierr); 885e55864a3SBarry Smith if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) { 8861a1499c8SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," -%s%s <%s>: %s (%s)\n",PetscOptionsObject->prefix ? PetscOptionsObject->prefix : "",opt+1,currentvalue,text,ManSection(man));CHKERRQ(ierr); 88753acd3b1SBarry Smith } 88853acd3b1SBarry Smith PetscFunctionReturn(0); 88953acd3b1SBarry Smith } 89053acd3b1SBarry Smith 89153acd3b1SBarry Smith #undef __FUNCT__ 892e55864a3SBarry Smith #define __FUNCT__ "PetscOptionsReal_Private" 89353acd3b1SBarry Smith /*@C 89453acd3b1SBarry Smith PetscOptionsReal - Gets the PetscReal value for a particular option in the database. 89553acd3b1SBarry Smith 8963f9fe445SBarry Smith Logically Collective on the communicator passed in PetscOptionsBegin() 89753acd3b1SBarry Smith 89853acd3b1SBarry Smith Input Parameters: 89953acd3b1SBarry Smith + opt - option name 90053acd3b1SBarry Smith . text - short string that describes the option 90153acd3b1SBarry Smith . man - manual page with additional information on option 9020fdccdaeSBarry Smith - currentvalue - the current value; caller is responsible for setting this value correctly. Normally this is done with either 9030fdccdaeSBarry Smith $ PetscOptionsReal(..., obj->value,&object->value,...) or 9040fdccdaeSBarry Smith $ value = defaultvalue 9050fdccdaeSBarry Smith $ PetscOptionsReal(..., value,&value,&flg); 9060fdccdaeSBarry Smith $ if (flg) { 90753acd3b1SBarry Smith 90853acd3b1SBarry Smith Output Parameter: 90953acd3b1SBarry Smith + value - the value to return 91053acd3b1SBarry Smith - flg - PETSC_TRUE if found, else PETSC_FALSE 91153acd3b1SBarry Smith 91253acd3b1SBarry Smith Level: beginner 91353acd3b1SBarry Smith 91453acd3b1SBarry Smith Concepts: options database^has int 91553acd3b1SBarry Smith 91653acd3b1SBarry Smith Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd() 91753acd3b1SBarry Smith 918c5929fdfSBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(NULL,), 919acfcf0e5SJed Brown PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsBool() 920acfcf0e5SJed Brown PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsBool(), 92153acd3b1SBarry Smith PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 92253acd3b1SBarry Smith PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 923acfcf0e5SJed Brown PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 924a264d7a6SBarry Smith PetscOptionsFList(), PetscOptionsEList() 92553acd3b1SBarry Smith @*/ 9264416b707SBarry Smith PetscErrorCode PetscOptionsReal_Private(PetscOptionItems *PetscOptionsObject,const char opt[],const char text[],const char man[],PetscReal currentvalue,PetscReal *value,PetscBool *set) 92753acd3b1SBarry Smith { 92853acd3b1SBarry Smith PetscErrorCode ierr; 9294416b707SBarry Smith PetscOptionItem amsopt; 93053acd3b1SBarry Smith 93153acd3b1SBarry Smith PetscFunctionBegin; 932e55864a3SBarry Smith if (!PetscOptionsObject->count) { 9334416b707SBarry Smith ierr = PetscOptionItemCreate_Private(PetscOptionsObject,opt,text,man,OPTION_REAL,&amsopt);CHKERRQ(ierr); 934538aa990SBarry Smith ierr = PetscMalloc(sizeof(PetscReal),&amsopt->data);CHKERRQ(ierr); 935a297a907SKarl Rupp 9360fdccdaeSBarry Smith *(PetscReal*)amsopt->data = currentvalue; 937538aa990SBarry Smith } 938c5929fdfSBarry Smith ierr = PetscOptionsGetReal(PetscOptionsObject->options,PetscOptionsObject->prefix,opt,value,set);CHKERRQ(ierr); 9391a1499c8SBarry Smith if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) { 9401a1499c8SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," -%s%s <%g>: %s (%s)\n",PetscOptionsObject->prefix ? PetscOptionsObject->prefix : "",opt+1,(double)currentvalue,text,ManSection(man));CHKERRQ(ierr); 94153acd3b1SBarry Smith } 94253acd3b1SBarry Smith PetscFunctionReturn(0); 94353acd3b1SBarry Smith } 94453acd3b1SBarry Smith 94553acd3b1SBarry Smith #undef __FUNCT__ 946e55864a3SBarry Smith #define __FUNCT__ "PetscOptionsScalar_Private" 94753acd3b1SBarry Smith /*@C 94853acd3b1SBarry Smith PetscOptionsScalar - Gets the scalar value for a particular option in the database. 94953acd3b1SBarry Smith 9503f9fe445SBarry Smith Logically Collective on the communicator passed in PetscOptionsBegin() 95153acd3b1SBarry Smith 95253acd3b1SBarry Smith Input Parameters: 95353acd3b1SBarry Smith + opt - option name 95453acd3b1SBarry Smith . text - short string that describes the option 95553acd3b1SBarry Smith . man - manual page with additional information on option 9560fdccdaeSBarry Smith - currentvalue - the current value; caller is responsible for setting this value correctly. Normally this is done with either 9570fdccdaeSBarry Smith $ PetscOptionsScalar(..., obj->value,&object->value,...) or 9580fdccdaeSBarry Smith $ value = defaultvalue 9590fdccdaeSBarry Smith $ PetscOptionsScalar(..., value,&value,&flg); 9600fdccdaeSBarry Smith $ if (flg) { 9610fdccdaeSBarry Smith 96253acd3b1SBarry Smith 96353acd3b1SBarry Smith Output Parameter: 96453acd3b1SBarry Smith + value - the value to return 96553acd3b1SBarry Smith - flg - PETSC_TRUE if found, else PETSC_FALSE 96653acd3b1SBarry Smith 96753acd3b1SBarry Smith Level: beginner 96853acd3b1SBarry Smith 96953acd3b1SBarry Smith Concepts: options database^has int 97053acd3b1SBarry Smith 97153acd3b1SBarry Smith Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd() 97253acd3b1SBarry Smith 973c5929fdfSBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(NULL,), 974acfcf0e5SJed Brown PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsBool() 975acfcf0e5SJed Brown PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsBool(), 97653acd3b1SBarry Smith PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 97753acd3b1SBarry Smith PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 978acfcf0e5SJed Brown PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 979a264d7a6SBarry Smith PetscOptionsFList(), PetscOptionsEList() 98053acd3b1SBarry Smith @*/ 9814416b707SBarry Smith PetscErrorCode PetscOptionsScalar_Private(PetscOptionItems *PetscOptionsObject,const char opt[],const char text[],const char man[],PetscScalar currentvalue,PetscScalar *value,PetscBool *set) 98253acd3b1SBarry Smith { 98353acd3b1SBarry Smith PetscErrorCode ierr; 98453acd3b1SBarry Smith 98553acd3b1SBarry Smith PetscFunctionBegin; 98653acd3b1SBarry Smith #if !defined(PETSC_USE_COMPLEX) 9870fdccdaeSBarry Smith ierr = PetscOptionsReal(opt,text,man,currentvalue,value,set);CHKERRQ(ierr); 98853acd3b1SBarry Smith #else 989c5929fdfSBarry Smith ierr = PetscOptionsGetScalar(PetscOptionsObject->options,PetscOptionsObject->prefix,opt,value,set);CHKERRQ(ierr); 99053acd3b1SBarry Smith #endif 99153acd3b1SBarry Smith PetscFunctionReturn(0); 99253acd3b1SBarry Smith } 99353acd3b1SBarry Smith 99453acd3b1SBarry Smith #undef __FUNCT__ 995e55864a3SBarry Smith #define __FUNCT__ "PetscOptionsName_Private" 99653acd3b1SBarry Smith /*@C 99790d69ab7SBarry 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 99890d69ab7SBarry Smith its value is set to false. 99953acd3b1SBarry Smith 10003f9fe445SBarry Smith Logically Collective on the communicator passed in PetscOptionsBegin() 100153acd3b1SBarry Smith 100253acd3b1SBarry Smith Input Parameters: 100353acd3b1SBarry Smith + opt - option name 100453acd3b1SBarry Smith . text - short string that describes the option 100553acd3b1SBarry Smith - man - manual page with additional information on option 100653acd3b1SBarry Smith 100753acd3b1SBarry Smith Output Parameter: 100853acd3b1SBarry Smith . flg - PETSC_TRUE if found, else PETSC_FALSE 100953acd3b1SBarry Smith 101053acd3b1SBarry Smith Level: beginner 101153acd3b1SBarry Smith 101253acd3b1SBarry Smith Concepts: options database^has int 101353acd3b1SBarry Smith 101453acd3b1SBarry Smith Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd() 101553acd3b1SBarry Smith 1016c5929fdfSBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(NULL,), 1017acfcf0e5SJed Brown PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsBool() 1018acfcf0e5SJed Brown PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsBool(), 101953acd3b1SBarry Smith PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 102053acd3b1SBarry Smith PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 1021acfcf0e5SJed Brown PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 1022a264d7a6SBarry Smith PetscOptionsFList(), PetscOptionsEList() 102353acd3b1SBarry Smith @*/ 10244416b707SBarry Smith PetscErrorCode PetscOptionsName_Private(PetscOptionItems *PetscOptionsObject,const char opt[],const char text[],const char man[],PetscBool *flg) 102553acd3b1SBarry Smith { 102653acd3b1SBarry Smith PetscErrorCode ierr; 10274416b707SBarry Smith PetscOptionItem amsopt; 102853acd3b1SBarry Smith 102953acd3b1SBarry Smith PetscFunctionBegin; 1030e55864a3SBarry Smith if (!PetscOptionsObject->count) { 10314416b707SBarry Smith ierr = PetscOptionItemCreate_Private(PetscOptionsObject,opt,text,man,OPTION_BOOL,&amsopt);CHKERRQ(ierr); 1032ace3abfcSBarry Smith ierr = PetscMalloc(sizeof(PetscBool),&amsopt->data);CHKERRQ(ierr); 1033a297a907SKarl Rupp 1034ace3abfcSBarry Smith *(PetscBool*)amsopt->data = PETSC_FALSE; 10351ae3d29cSBarry Smith } 1036c5929fdfSBarry Smith ierr = PetscOptionsHasName(PetscOptionsObject->options,PetscOptionsObject->prefix,opt,flg);CHKERRQ(ierr); 1037e55864a3SBarry Smith if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) { 1038e55864a3SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," -%s%s: %s (%s)\n",PetscOptionsObject->prefix ? PetscOptionsObject->prefix : "",opt+1,text,ManSection(man));CHKERRQ(ierr); 103953acd3b1SBarry Smith } 104053acd3b1SBarry Smith PetscFunctionReturn(0); 104153acd3b1SBarry Smith } 104253acd3b1SBarry Smith 104353acd3b1SBarry Smith #undef __FUNCT__ 1044e55864a3SBarry Smith #define __FUNCT__ "PetscOptionsFList_Private" 104553acd3b1SBarry Smith /*@C 1046a264d7a6SBarry Smith PetscOptionsFList - Puts a list of option values that a single one may be selected from 104753acd3b1SBarry Smith 10483f9fe445SBarry Smith Logically Collective on the communicator passed in PetscOptionsBegin() 104953acd3b1SBarry Smith 105053acd3b1SBarry Smith Input Parameters: 105153acd3b1SBarry Smith + opt - option name 105253acd3b1SBarry Smith . text - short string that describes the option 105353acd3b1SBarry Smith . man - manual page with additional information on option 105453acd3b1SBarry Smith . list - the possible choices 10550fdccdaeSBarry Smith . currentvalue - the current value; caller is responsible for setting this value correctly. Normally this is done with 10560fdccdaeSBarry Smith $ PetscOptionsFlist(..., obj->value,value,len,&flg); 10570fdccdaeSBarry Smith $ if (flg) { 10583cc1e11dSBarry Smith - len - the length of the character array value 105953acd3b1SBarry Smith 106053acd3b1SBarry Smith Output Parameter: 106153acd3b1SBarry Smith + value - the value to return 106253acd3b1SBarry Smith - set - PETSC_TRUE if found, else PETSC_FALSE 106353acd3b1SBarry Smith 106453acd3b1SBarry Smith Level: intermediate 106553acd3b1SBarry Smith 106653acd3b1SBarry Smith Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd() 106753acd3b1SBarry Smith 106853acd3b1SBarry Smith See PetscOptionsEList() for when the choices are given in a string array 106953acd3b1SBarry Smith 107053acd3b1SBarry Smith To get a listing of all currently specified options, 107188c29154SBarry Smith see PetscOptionsView() or PetscOptionsGetAll() 107253acd3b1SBarry Smith 1073eabe10d7SBarry Smith Developer Note: This cannot check for invalid selection because of things like MATAIJ that are not included in the list 1074eabe10d7SBarry Smith 107553acd3b1SBarry Smith Concepts: options database^list 107653acd3b1SBarry Smith 1077c5929fdfSBarry Smith .seealso: PetscOptionsGetInt(NULL,), PetscOptionsGetReal(), 1078acfcf0e5SJed Brown PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsBool(), 107953acd3b1SBarry Smith PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 108053acd3b1SBarry Smith PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 1081acfcf0e5SJed Brown PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 1082a264d7a6SBarry Smith PetscOptionsFList(), PetscOptionsEList(), PetscOptionsEnum() 108353acd3b1SBarry Smith @*/ 10844416b707SBarry Smith PetscErrorCode PetscOptionsFList_Private(PetscOptionItems *PetscOptionsObject,const char opt[],const char ltext[],const char man[],PetscFunctionList list,const char currentvalue[],char value[],size_t len,PetscBool *set) 108553acd3b1SBarry Smith { 108653acd3b1SBarry Smith PetscErrorCode ierr; 10874416b707SBarry Smith PetscOptionItem amsopt; 108853acd3b1SBarry Smith 108953acd3b1SBarry Smith PetscFunctionBegin; 10901a1499c8SBarry Smith if (!PetscOptionsObject->count) { 10914416b707SBarry Smith ierr = PetscOptionItemCreate_Private(PetscOptionsObject,opt,ltext,man,OPTION_FLIST,&amsopt);CHKERRQ(ierr); 109264facd6cSBarry Smith /* must use system malloc since SAWs may free this */ 10930fdccdaeSBarry Smith ierr = PetscStrdup(currentvalue ? currentvalue : "",(char**)&amsopt->data);CHKERRQ(ierr); 10943cc1e11dSBarry Smith amsopt->flist = list; 10953cc1e11dSBarry Smith } 1096c5929fdfSBarry Smith ierr = PetscOptionsGetString(PetscOptionsObject->options,PetscOptionsObject->prefix,opt,value,len,set);CHKERRQ(ierr); 10971a1499c8SBarry Smith if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) { 10981a1499c8SBarry Smith ierr = PetscFunctionListPrintTypes(PetscOptionsObject->comm,stdout,PetscOptionsObject->prefix,opt,ltext,man,list,currentvalue);CHKERRQ(ierr);CHKERRQ(ierr); 109953acd3b1SBarry Smith } 110053acd3b1SBarry Smith PetscFunctionReturn(0); 110153acd3b1SBarry Smith } 110253acd3b1SBarry Smith 110353acd3b1SBarry Smith #undef __FUNCT__ 1104e55864a3SBarry Smith #define __FUNCT__ "PetscOptionsEList_Private" 110553acd3b1SBarry Smith /*@C 110653acd3b1SBarry Smith PetscOptionsEList - Puts a list of option values that a single one may be selected from 110753acd3b1SBarry Smith 11083f9fe445SBarry Smith Logically Collective on the communicator passed in PetscOptionsBegin() 110953acd3b1SBarry Smith 111053acd3b1SBarry Smith Input Parameters: 111153acd3b1SBarry Smith + opt - option name 111253acd3b1SBarry Smith . ltext - short string that describes the option 111353acd3b1SBarry Smith . man - manual page with additional information on option 1114a264d7a6SBarry Smith . list - the possible choices (one of these must be selected, anything else is invalid) 111553acd3b1SBarry Smith . ntext - number of choices 11160fdccdaeSBarry Smith - currentvalue - the current value; caller is responsible for setting this value correctly. Normally this is done with 11170fdccdaeSBarry Smith $ PetscOptionsElist(..., obj->value,&value,&flg); 11180fdccdaeSBarry Smith $ if (flg) { 11190fdccdaeSBarry Smith 112053acd3b1SBarry Smith 112153acd3b1SBarry Smith Output Parameter: 112253acd3b1SBarry Smith + value - the index of the value to return 112353acd3b1SBarry Smith - set - PETSC_TRUE if found, else PETSC_FALSE 112453acd3b1SBarry Smith 112553acd3b1SBarry Smith Level: intermediate 112653acd3b1SBarry Smith 112753acd3b1SBarry Smith Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd() 112853acd3b1SBarry Smith 1129a264d7a6SBarry Smith See PetscOptionsFList() for when the choices are given in a PetscFunctionList() 113053acd3b1SBarry Smith 113153acd3b1SBarry Smith Concepts: options database^list 113253acd3b1SBarry Smith 1133c5929fdfSBarry Smith .seealso: PetscOptionsGetInt(NULL,), PetscOptionsGetReal(), 1134acfcf0e5SJed Brown PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsBool(), 113553acd3b1SBarry Smith PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 113653acd3b1SBarry Smith PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 1137acfcf0e5SJed Brown PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 1138a264d7a6SBarry Smith PetscOptionsFList(), PetscOptionsEnum() 113953acd3b1SBarry Smith @*/ 11404416b707SBarry Smith PetscErrorCode PetscOptionsEList_Private(PetscOptionItems *PetscOptionsObject,const char opt[],const char ltext[],const char man[],const char *const *list,PetscInt ntext,const char currentvalue[],PetscInt *value,PetscBool *set) 114153acd3b1SBarry Smith { 114253acd3b1SBarry Smith PetscErrorCode ierr; 114353acd3b1SBarry Smith PetscInt i; 11444416b707SBarry Smith PetscOptionItem amsopt; 114553acd3b1SBarry Smith 114653acd3b1SBarry Smith PetscFunctionBegin; 11471a1499c8SBarry Smith if (!PetscOptionsObject->count) { 11484416b707SBarry Smith ierr = PetscOptionItemCreate_Private(PetscOptionsObject,opt,ltext,man,OPTION_ELIST,&amsopt);CHKERRQ(ierr); 114964facd6cSBarry Smith /* must use system malloc since SAWs may free this */ 11500fdccdaeSBarry Smith ierr = PetscStrdup(currentvalue ? currentvalue : "",(char**)&amsopt->data);CHKERRQ(ierr); 11516991f827SBarry Smith ierr = PetscStrNArrayallocpy(ntext,list,(char***)&amsopt->list);CHKERRQ(ierr); 11521ae3d29cSBarry Smith amsopt->nlist = ntext; 11531ae3d29cSBarry Smith } 1154c5929fdfSBarry Smith ierr = PetscOptionsGetEList(PetscOptionsObject->options,PetscOptionsObject->prefix,opt,list,ntext,value,set);CHKERRQ(ierr); 11551a1499c8SBarry Smith if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) { 1156*e3f729a5SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," -%s%s <%s> %s (choose one of)",PetscOptionsObject->prefix?PetscOptionsObject->prefix:"",opt+1,currentvalue,ltext);CHKERRQ(ierr); 115753acd3b1SBarry Smith for (i=0; i<ntext; i++) { 1158e55864a3SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," %s",list[i]);CHKERRQ(ierr); 115953acd3b1SBarry Smith } 1160e55864a3SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," (%s)\n",ManSection(man));CHKERRQ(ierr); 116153acd3b1SBarry Smith } 116253acd3b1SBarry Smith PetscFunctionReturn(0); 116353acd3b1SBarry Smith } 116453acd3b1SBarry Smith 116553acd3b1SBarry Smith #undef __FUNCT__ 1166e55864a3SBarry Smith #define __FUNCT__ "PetscOptionsBoolGroupBegin_Private" 116753acd3b1SBarry Smith /*@C 1168acfcf0e5SJed Brown PetscOptionsBoolGroupBegin - First in a series of logical queries on the options database for 1169d5649816SBarry Smith which at most a single value can be true. 117053acd3b1SBarry Smith 11713f9fe445SBarry Smith Logically Collective on the communicator passed in PetscOptionsBegin() 117253acd3b1SBarry Smith 117353acd3b1SBarry Smith Input Parameters: 117453acd3b1SBarry Smith + opt - option name 117553acd3b1SBarry Smith . text - short string that describes the option 117653acd3b1SBarry Smith - man - manual page with additional information on option 117753acd3b1SBarry Smith 117853acd3b1SBarry Smith Output Parameter: 117953acd3b1SBarry Smith . flg - whether that option was set or not 118053acd3b1SBarry Smith 118153acd3b1SBarry Smith Level: intermediate 118253acd3b1SBarry Smith 118353acd3b1SBarry Smith Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd() 118453acd3b1SBarry Smith 1185acfcf0e5SJed Brown Must be followed by 0 or more PetscOptionsBoolGroup()s and PetscOptionsBoolGroupEnd() 118653acd3b1SBarry Smith 118753acd3b1SBarry Smith Concepts: options database^logical group 118853acd3b1SBarry Smith 1189c5929fdfSBarry Smith .seealso: PetscOptionsGetInt(NULL,), PetscOptionsGetReal(), 1190acfcf0e5SJed Brown PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsBool(), 119153acd3b1SBarry Smith PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 119253acd3b1SBarry Smith PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 1193acfcf0e5SJed Brown PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 1194a264d7a6SBarry Smith PetscOptionsFList(), PetscOptionsEList() 119553acd3b1SBarry Smith @*/ 11964416b707SBarry Smith PetscErrorCode PetscOptionsBoolGroupBegin_Private(PetscOptionItems *PetscOptionsObject,const char opt[],const char text[],const char man[],PetscBool *flg) 119753acd3b1SBarry Smith { 119853acd3b1SBarry Smith PetscErrorCode ierr; 11994416b707SBarry Smith PetscOptionItem amsopt; 120053acd3b1SBarry Smith 120153acd3b1SBarry Smith PetscFunctionBegin; 1202e55864a3SBarry Smith if (!PetscOptionsObject->count) { 12034416b707SBarry Smith ierr = PetscOptionItemCreate_Private(PetscOptionsObject,opt,text,man,OPTION_BOOL,&amsopt);CHKERRQ(ierr); 1204ace3abfcSBarry Smith ierr = PetscMalloc(sizeof(PetscBool),&amsopt->data);CHKERRQ(ierr); 1205a297a907SKarl Rupp 1206ace3abfcSBarry Smith *(PetscBool*)amsopt->data = PETSC_FALSE; 12071ae3d29cSBarry Smith } 120868b16fdaSBarry Smith *flg = PETSC_FALSE; 1209c5929fdfSBarry Smith ierr = PetscOptionsGetBool(PetscOptionsObject->options,PetscOptionsObject->prefix,opt,flg,NULL);CHKERRQ(ierr); 1210e55864a3SBarry Smith if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) { 1211e55864a3SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," Pick at most one of -------------\n");CHKERRQ(ierr); 1212e55864a3SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," -%s%s: %s (%s)\n",PetscOptionsObject->prefix ? PetscOptionsObject->prefix : "",opt+1,text,ManSection(man));CHKERRQ(ierr); 121353acd3b1SBarry Smith } 121453acd3b1SBarry Smith PetscFunctionReturn(0); 121553acd3b1SBarry Smith } 121653acd3b1SBarry Smith 121753acd3b1SBarry Smith #undef __FUNCT__ 1218e55864a3SBarry Smith #define __FUNCT__ "PetscOptionsBoolGroup_Private" 121953acd3b1SBarry Smith /*@C 1220acfcf0e5SJed Brown PetscOptionsBoolGroup - One in a series of logical queries on the options database for 1221d5649816SBarry Smith which at most a single value can be true. 122253acd3b1SBarry Smith 12233f9fe445SBarry Smith Logically Collective on the communicator passed in PetscOptionsBegin() 122453acd3b1SBarry Smith 122553acd3b1SBarry Smith Input Parameters: 122653acd3b1SBarry Smith + opt - option name 122753acd3b1SBarry Smith . text - short string that describes the option 122853acd3b1SBarry Smith - man - manual page with additional information on option 122953acd3b1SBarry Smith 123053acd3b1SBarry Smith Output Parameter: 123153acd3b1SBarry Smith . flg - PETSC_TRUE if found, else PETSC_FALSE 123253acd3b1SBarry Smith 123353acd3b1SBarry Smith Level: intermediate 123453acd3b1SBarry Smith 123553acd3b1SBarry Smith Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd() 123653acd3b1SBarry Smith 1237acfcf0e5SJed Brown Must follow a PetscOptionsBoolGroupBegin() and preceded a PetscOptionsBoolGroupEnd() 123853acd3b1SBarry Smith 123953acd3b1SBarry Smith Concepts: options database^logical group 124053acd3b1SBarry Smith 1241c5929fdfSBarry Smith .seealso: PetscOptionsGetInt(NULL,), PetscOptionsGetReal(), 1242acfcf0e5SJed Brown PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsBool(), 124353acd3b1SBarry Smith PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 124453acd3b1SBarry Smith PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 1245acfcf0e5SJed Brown PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 1246a264d7a6SBarry Smith PetscOptionsFList(), PetscOptionsEList() 124753acd3b1SBarry Smith @*/ 12484416b707SBarry Smith PetscErrorCode PetscOptionsBoolGroup_Private(PetscOptionItems *PetscOptionsObject,const char opt[],const char text[],const char man[],PetscBool *flg) 124953acd3b1SBarry Smith { 125053acd3b1SBarry Smith PetscErrorCode ierr; 12514416b707SBarry Smith PetscOptionItem amsopt; 125253acd3b1SBarry Smith 125353acd3b1SBarry Smith PetscFunctionBegin; 1254e55864a3SBarry Smith if (!PetscOptionsObject->count) { 12554416b707SBarry Smith ierr = PetscOptionItemCreate_Private(PetscOptionsObject,opt,text,man,OPTION_BOOL,&amsopt);CHKERRQ(ierr); 1256ace3abfcSBarry Smith ierr = PetscMalloc(sizeof(PetscBool),&amsopt->data);CHKERRQ(ierr); 1257a297a907SKarl Rupp 1258ace3abfcSBarry Smith *(PetscBool*)amsopt->data = PETSC_FALSE; 12591ae3d29cSBarry Smith } 126017326d04SJed Brown *flg = PETSC_FALSE; 1261c5929fdfSBarry Smith ierr = PetscOptionsGetBool(PetscOptionsObject->options,PetscOptionsObject->prefix,opt,flg,NULL);CHKERRQ(ierr); 1262e55864a3SBarry Smith if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) { 1263e55864a3SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," -%s%s: %s (%s)\n",PetscOptionsObject->prefix ? PetscOptionsObject->prefix : "",opt+1,text,ManSection(man));CHKERRQ(ierr); 126453acd3b1SBarry Smith } 126553acd3b1SBarry Smith PetscFunctionReturn(0); 126653acd3b1SBarry Smith } 126753acd3b1SBarry Smith 126853acd3b1SBarry Smith #undef __FUNCT__ 1269e55864a3SBarry Smith #define __FUNCT__ "PetscOptionsBoolGroupEnd_Private" 127053acd3b1SBarry Smith /*@C 1271acfcf0e5SJed Brown PetscOptionsBoolGroupEnd - Last in a series of logical queries on the options database for 1272d5649816SBarry Smith which at most a single value can be true. 127353acd3b1SBarry Smith 12743f9fe445SBarry Smith Logically Collective on the communicator passed in PetscOptionsBegin() 127553acd3b1SBarry Smith 127653acd3b1SBarry Smith Input Parameters: 127753acd3b1SBarry Smith + opt - option name 127853acd3b1SBarry Smith . text - short string that describes the option 127953acd3b1SBarry Smith - man - manual page with additional information on option 128053acd3b1SBarry Smith 128153acd3b1SBarry Smith Output Parameter: 128253acd3b1SBarry Smith . flg - PETSC_TRUE if found, else PETSC_FALSE 128353acd3b1SBarry Smith 128453acd3b1SBarry Smith Level: intermediate 128553acd3b1SBarry Smith 128653acd3b1SBarry Smith Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd() 128753acd3b1SBarry Smith 1288acfcf0e5SJed Brown Must follow a PetscOptionsBoolGroupBegin() 128953acd3b1SBarry Smith 129053acd3b1SBarry Smith Concepts: options database^logical group 129153acd3b1SBarry Smith 1292c5929fdfSBarry Smith .seealso: PetscOptionsGetInt(NULL,), PetscOptionsGetReal(), 1293acfcf0e5SJed Brown PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsBool(), 129453acd3b1SBarry Smith PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 129553acd3b1SBarry Smith PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 1296acfcf0e5SJed Brown PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 1297a264d7a6SBarry Smith PetscOptionsFList(), PetscOptionsEList() 129853acd3b1SBarry Smith @*/ 12994416b707SBarry Smith PetscErrorCode PetscOptionsBoolGroupEnd_Private(PetscOptionItems *PetscOptionsObject,const char opt[],const char text[],const char man[],PetscBool *flg) 130053acd3b1SBarry Smith { 130153acd3b1SBarry Smith PetscErrorCode ierr; 13024416b707SBarry Smith PetscOptionItem amsopt; 130353acd3b1SBarry Smith 130453acd3b1SBarry Smith PetscFunctionBegin; 1305e55864a3SBarry Smith if (!PetscOptionsObject->count) { 13064416b707SBarry Smith ierr = PetscOptionItemCreate_Private(PetscOptionsObject,opt,text,man,OPTION_BOOL,&amsopt);CHKERRQ(ierr); 1307ace3abfcSBarry Smith ierr = PetscMalloc(sizeof(PetscBool),&amsopt->data);CHKERRQ(ierr); 1308a297a907SKarl Rupp 1309ace3abfcSBarry Smith *(PetscBool*)amsopt->data = PETSC_FALSE; 13101ae3d29cSBarry Smith } 131117326d04SJed Brown *flg = PETSC_FALSE; 1312c5929fdfSBarry Smith ierr = PetscOptionsGetBool(PetscOptionsObject->options,PetscOptionsObject->prefix,opt,flg,NULL);CHKERRQ(ierr); 1313e55864a3SBarry Smith if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) { 1314e55864a3SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," -%s%s: %s (%s)\n",PetscOptionsObject->prefix ? PetscOptionsObject->prefix : "",opt+1,text,ManSection(man));CHKERRQ(ierr); 131553acd3b1SBarry Smith } 131653acd3b1SBarry Smith PetscFunctionReturn(0); 131753acd3b1SBarry Smith } 131853acd3b1SBarry Smith 131953acd3b1SBarry Smith #undef __FUNCT__ 1320e55864a3SBarry Smith #define __FUNCT__ "PetscOptionsBool_Private" 132153acd3b1SBarry Smith /*@C 1322acfcf0e5SJed Brown PetscOptionsBool - Determines if a particular option is in the database with a true or false 132353acd3b1SBarry Smith 13243f9fe445SBarry Smith Logically Collective on the communicator passed in PetscOptionsBegin() 132553acd3b1SBarry Smith 132653acd3b1SBarry Smith Input Parameters: 132753acd3b1SBarry Smith + opt - option name 132853acd3b1SBarry Smith . text - short string that describes the option 1329868c398cSBarry Smith . man - manual page with additional information on option 133094ae4db5SBarry Smith - currentvalue - the current value 133153acd3b1SBarry Smith 133253acd3b1SBarry Smith Output Parameter: 133353acd3b1SBarry Smith . flg - PETSC_TRUE or PETSC_FALSE 133453acd3b1SBarry Smith . set - PETSC_TRUE if found, else PETSC_FALSE 133553acd3b1SBarry Smith 133653acd3b1SBarry Smith Level: beginner 133753acd3b1SBarry Smith 133853acd3b1SBarry Smith Concepts: options database^logical 133953acd3b1SBarry Smith 134053acd3b1SBarry Smith Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd() 134153acd3b1SBarry Smith 1342c5929fdfSBarry Smith .seealso: PetscOptionsGetReal(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(NULL,), 1343acfcf0e5SJed Brown PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsBool() 1344acfcf0e5SJed Brown PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsBool(), 134553acd3b1SBarry Smith PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 134653acd3b1SBarry Smith PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 1347acfcf0e5SJed Brown PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 1348a264d7a6SBarry Smith PetscOptionsFList(), PetscOptionsEList() 134953acd3b1SBarry Smith @*/ 13504416b707SBarry Smith PetscErrorCode PetscOptionsBool_Private(PetscOptionItems *PetscOptionsObject,const char opt[],const char text[],const char man[],PetscBool currentvalue,PetscBool *flg,PetscBool *set) 135153acd3b1SBarry Smith { 135253acd3b1SBarry Smith PetscErrorCode ierr; 1353ace3abfcSBarry Smith PetscBool iset; 13544416b707SBarry Smith PetscOptionItem amsopt; 135553acd3b1SBarry Smith 135653acd3b1SBarry Smith PetscFunctionBegin; 1357e55864a3SBarry Smith if (!PetscOptionsObject->count) { 13584416b707SBarry Smith ierr = PetscOptionItemCreate_Private(PetscOptionsObject,opt,text,man,OPTION_BOOL,&amsopt);CHKERRQ(ierr); 1359ace3abfcSBarry Smith ierr = PetscMalloc(sizeof(PetscBool),&amsopt->data);CHKERRQ(ierr); 1360a297a907SKarl Rupp 136194ae4db5SBarry Smith *(PetscBool*)amsopt->data = currentvalue; 1362af6d86caSBarry Smith } 1363c5929fdfSBarry Smith ierr = PetscOptionsGetBool(PetscOptionsObject->options,PetscOptionsObject->prefix,opt,flg,&iset);CHKERRQ(ierr); 136453acd3b1SBarry Smith if (set) *set = iset; 13651a1499c8SBarry Smith if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) { 136694ae4db5SBarry Smith const char *v = PetscBools[currentvalue]; 13671a1499c8SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," -%s%s: <%s> %s (%s)\n",PetscOptionsObject->prefix?PetscOptionsObject->prefix:"",opt+1,v,text,ManSection(man));CHKERRQ(ierr); 136853acd3b1SBarry Smith } 136953acd3b1SBarry Smith PetscFunctionReturn(0); 137053acd3b1SBarry Smith } 137153acd3b1SBarry Smith 137253acd3b1SBarry Smith #undef __FUNCT__ 1373e55864a3SBarry Smith #define __FUNCT__ "PetscOptionsRealArray_Private" 137453acd3b1SBarry Smith /*@C 137553acd3b1SBarry Smith PetscOptionsRealArray - Gets an array of double values for a particular 137653acd3b1SBarry Smith option in the database. The values must be separated with commas with 137753acd3b1SBarry Smith no intervening spaces. 137853acd3b1SBarry Smith 13793f9fe445SBarry Smith Logically Collective on the communicator passed in PetscOptionsBegin() 138053acd3b1SBarry Smith 138153acd3b1SBarry Smith Input Parameters: 138253acd3b1SBarry Smith + opt - the option one is seeking 138353acd3b1SBarry Smith . text - short string describing option 138453acd3b1SBarry Smith . man - manual page for option 138553acd3b1SBarry Smith - nmax - maximum number of values 138653acd3b1SBarry Smith 138753acd3b1SBarry Smith Output Parameter: 138853acd3b1SBarry Smith + value - location to copy values 138953acd3b1SBarry Smith . nmax - actual number of values found 139053acd3b1SBarry Smith - set - PETSC_TRUE if found, else PETSC_FALSE 139153acd3b1SBarry Smith 139253acd3b1SBarry Smith Level: beginner 139353acd3b1SBarry Smith 139453acd3b1SBarry Smith Notes: 139553acd3b1SBarry Smith The user should pass in an array of doubles 139653acd3b1SBarry Smith 139753acd3b1SBarry Smith Must be between a PetscOptionsBegin() and a PetscOptionsEnd() 139853acd3b1SBarry Smith 139953acd3b1SBarry Smith Concepts: options database^array of strings 140053acd3b1SBarry Smith 1401c5929fdfSBarry Smith .seealso: PetscOptionsGetInt(NULL,), PetscOptionsGetReal(), 1402acfcf0e5SJed Brown PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsBool(), 140353acd3b1SBarry Smith PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 140453acd3b1SBarry Smith PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 1405acfcf0e5SJed Brown PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 1406a264d7a6SBarry Smith PetscOptionsFList(), PetscOptionsEList() 140753acd3b1SBarry Smith @*/ 14084416b707SBarry Smith PetscErrorCode PetscOptionsRealArray_Private(PetscOptionItems *PetscOptionsObject,const char opt[],const char text[],const char man[],PetscReal value[],PetscInt *n,PetscBool *set) 140953acd3b1SBarry Smith { 141053acd3b1SBarry Smith PetscErrorCode ierr; 141153acd3b1SBarry Smith PetscInt i; 14124416b707SBarry Smith PetscOptionItem amsopt; 141353acd3b1SBarry Smith 141453acd3b1SBarry Smith PetscFunctionBegin; 1415e55864a3SBarry Smith if (!PetscOptionsObject->count) { 1416e26ddf31SBarry Smith PetscReal *vals; 1417e26ddf31SBarry Smith 14184416b707SBarry Smith ierr = PetscOptionItemCreate_Private(PetscOptionsObject,opt,text,man,OPTION_REAL_ARRAY,&amsopt);CHKERRQ(ierr); 1419e55864a3SBarry Smith ierr = PetscMalloc((*n)*sizeof(PetscReal),&amsopt->data);CHKERRQ(ierr); 1420e26ddf31SBarry Smith vals = (PetscReal*)amsopt->data; 1421e26ddf31SBarry Smith for (i=0; i<*n; i++) vals[i] = value[i]; 1422e26ddf31SBarry Smith amsopt->arraylength = *n; 1423e26ddf31SBarry Smith } 1424c5929fdfSBarry Smith ierr = PetscOptionsGetRealArray(PetscOptionsObject->options,PetscOptionsObject->prefix,opt,value,n,set);CHKERRQ(ierr); 1425e55864a3SBarry Smith if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) { 1426a519f713SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," -%s%s <%g",PetscOptionsObject->prefix?PetscOptionsObject->prefix:"",opt+1,(double)value[0]);CHKERRQ(ierr); 142753acd3b1SBarry Smith for (i=1; i<*n; i++) { 1428e55864a3SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm,",%g",(double)value[i]);CHKERRQ(ierr); 142953acd3b1SBarry Smith } 1430e55864a3SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm,">: %s (%s)\n",text,ManSection(man));CHKERRQ(ierr); 143153acd3b1SBarry Smith } 143253acd3b1SBarry Smith PetscFunctionReturn(0); 143353acd3b1SBarry Smith } 143453acd3b1SBarry Smith 1435050cccc3SHong Zhang #undef __FUNCT__ 1436050cccc3SHong Zhang #define __FUNCT__ "PetscOptionsScalarArray_Private" 1437050cccc3SHong Zhang /*@C 1438050cccc3SHong Zhang PetscOptionsScalarArray - Gets an array of Scalar values for a particular 1439050cccc3SHong Zhang option in the database. The values must be separated with commas with 1440050cccc3SHong Zhang no intervening spaces. 1441050cccc3SHong Zhang 1442050cccc3SHong Zhang Logically Collective on the communicator passed in PetscOptionsBegin() 1443050cccc3SHong Zhang 1444050cccc3SHong Zhang Input Parameters: 1445050cccc3SHong Zhang + opt - the option one is seeking 1446050cccc3SHong Zhang . text - short string describing option 1447050cccc3SHong Zhang . man - manual page for option 1448050cccc3SHong Zhang - nmax - maximum number of values 1449050cccc3SHong Zhang 1450050cccc3SHong Zhang Output Parameter: 1451050cccc3SHong Zhang + value - location to copy values 1452050cccc3SHong Zhang . nmax - actual number of values found 1453050cccc3SHong Zhang - set - PETSC_TRUE if found, else PETSC_FALSE 1454050cccc3SHong Zhang 1455050cccc3SHong Zhang Level: beginner 1456050cccc3SHong Zhang 1457050cccc3SHong Zhang Notes: 1458050cccc3SHong Zhang The user should pass in an array of doubles 1459050cccc3SHong Zhang 1460050cccc3SHong Zhang Must be between a PetscOptionsBegin() and a PetscOptionsEnd() 1461050cccc3SHong Zhang 1462050cccc3SHong Zhang Concepts: options database^array of strings 1463050cccc3SHong Zhang 1464c5929fdfSBarry Smith .seealso: PetscOptionsGetInt(NULL,), PetscOptionsGetReal(), 1465050cccc3SHong Zhang PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsBool(), 1466050cccc3SHong Zhang PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 1467050cccc3SHong Zhang PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 1468050cccc3SHong Zhang PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 1469050cccc3SHong Zhang PetscOptionsFList(), PetscOptionsEList() 1470050cccc3SHong Zhang @*/ 14714416b707SBarry Smith PetscErrorCode PetscOptionsScalarArray_Private(PetscOptionItems *PetscOptionsObject,const char opt[],const char text[],const char man[],PetscScalar value[],PetscInt *n,PetscBool *set) 1472050cccc3SHong Zhang { 1473050cccc3SHong Zhang PetscErrorCode ierr; 1474050cccc3SHong Zhang PetscInt i; 14754416b707SBarry Smith PetscOptionItem amsopt; 1476050cccc3SHong Zhang 1477050cccc3SHong Zhang PetscFunctionBegin; 1478050cccc3SHong Zhang if (!PetscOptionsObject->count) { 1479050cccc3SHong Zhang PetscScalar *vals; 1480050cccc3SHong Zhang 14814416b707SBarry Smith ierr = PetscOptionItemCreate_Private(PetscOptionsObject,opt,text,man,OPTION_SCALAR_ARRAY,&amsopt);CHKERRQ(ierr); 1482050cccc3SHong Zhang ierr = PetscMalloc((*n)*sizeof(PetscScalar),&amsopt->data);CHKERRQ(ierr); 1483050cccc3SHong Zhang vals = (PetscScalar*)amsopt->data; 1484050cccc3SHong Zhang for (i=0; i<*n; i++) vals[i] = value[i]; 1485050cccc3SHong Zhang amsopt->arraylength = *n; 1486050cccc3SHong Zhang } 1487c5929fdfSBarry Smith ierr = PetscOptionsGetScalarArray(PetscOptionsObject->options,PetscOptionsObject->prefix,opt,value,n,set);CHKERRQ(ierr); 1488050cccc3SHong Zhang if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) { 148995f3a755SJose E. Roman ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," -%s%s <%g+%gi",PetscOptionsObject->prefix?PetscOptionsObject->prefix:"",opt+1,(double)PetscRealPart(value[0]),(double)PetscImaginaryPart(value[0]));CHKERRQ(ierr); 1490050cccc3SHong Zhang for (i=1; i<*n; i++) { 149195f3a755SJose E. Roman ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm,",%g+%gi",(double)PetscRealPart(value[i]),(double)PetscImaginaryPart(value[i]));CHKERRQ(ierr); 1492050cccc3SHong Zhang } 1493050cccc3SHong Zhang ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm,">: %s (%s)\n",text,ManSection(man));CHKERRQ(ierr); 1494050cccc3SHong Zhang } 1495050cccc3SHong Zhang PetscFunctionReturn(0); 1496050cccc3SHong Zhang } 149753acd3b1SBarry Smith 149853acd3b1SBarry Smith #undef __FUNCT__ 1499e55864a3SBarry Smith #define __FUNCT__ "PetscOptionsIntArray_Private" 150053acd3b1SBarry Smith /*@C 150153acd3b1SBarry Smith PetscOptionsIntArray - Gets an array of integers for a particular 1502b32a342fSShri Abhyankar option in the database. 150353acd3b1SBarry Smith 15043f9fe445SBarry Smith Logically Collective on the communicator passed in PetscOptionsBegin() 150553acd3b1SBarry Smith 150653acd3b1SBarry Smith Input Parameters: 150753acd3b1SBarry Smith + opt - the option one is seeking 150853acd3b1SBarry Smith . text - short string describing option 150953acd3b1SBarry Smith . man - manual page for option 1510f8a50e2bSBarry Smith - n - maximum number of values 151153acd3b1SBarry Smith 151253acd3b1SBarry Smith Output Parameter: 151353acd3b1SBarry Smith + value - location to copy values 1514f8a50e2bSBarry Smith . n - actual number of values found 151553acd3b1SBarry Smith - set - PETSC_TRUE if found, else PETSC_FALSE 151653acd3b1SBarry Smith 151753acd3b1SBarry Smith Level: beginner 151853acd3b1SBarry Smith 151953acd3b1SBarry Smith Notes: 1520b32a342fSShri Abhyankar The array can be passed as 1521bebe2cf6SSatish Balay a comma separated list: 0,1,2,3,4,5,6,7 15220fd488f5SShri Abhyankar a range (start-end+1): 0-8 15230fd488f5SShri Abhyankar a range with given increment (start-end+1:inc): 0-7:2 1524bebe2cf6SSatish Balay a combination of values and ranges separated by commas: 0,1-8,8-15:2 1525b32a342fSShri Abhyankar 1526b32a342fSShri Abhyankar There must be no intervening spaces between the values. 152753acd3b1SBarry Smith 152853acd3b1SBarry Smith Must be between a PetscOptionsBegin() and a PetscOptionsEnd() 152953acd3b1SBarry Smith 1530b32a342fSShri Abhyankar Concepts: options database^array of ints 153153acd3b1SBarry Smith 1532c5929fdfSBarry Smith .seealso: PetscOptionsGetInt(NULL,), PetscOptionsGetReal(), 1533acfcf0e5SJed Brown PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsBool(), 153453acd3b1SBarry Smith PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 153553acd3b1SBarry Smith PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 1536acfcf0e5SJed Brown PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 1537a264d7a6SBarry Smith PetscOptionsFList(), PetscOptionsEList(), PetscOptionsRealArray() 153853acd3b1SBarry Smith @*/ 15394416b707SBarry Smith PetscErrorCode PetscOptionsIntArray_Private(PetscOptionItems *PetscOptionsObject,const char opt[],const char text[],const char man[],PetscInt value[],PetscInt *n,PetscBool *set) 154053acd3b1SBarry Smith { 154153acd3b1SBarry Smith PetscErrorCode ierr; 154253acd3b1SBarry Smith PetscInt i; 15434416b707SBarry Smith PetscOptionItem amsopt; 154453acd3b1SBarry Smith 154553acd3b1SBarry Smith PetscFunctionBegin; 1546e55864a3SBarry Smith if (!PetscOptionsObject->count) { 1547e26ddf31SBarry Smith PetscInt *vals; 1548e26ddf31SBarry Smith 15494416b707SBarry Smith ierr = PetscOptionItemCreate_Private(PetscOptionsObject,opt,text,man,OPTION_INT_ARRAY,&amsopt);CHKERRQ(ierr); 1550854ce69bSBarry Smith ierr = PetscMalloc1(*n,(PetscInt**)&amsopt->data);CHKERRQ(ierr); 1551e26ddf31SBarry Smith vals = (PetscInt*)amsopt->data; 1552e26ddf31SBarry Smith for (i=0; i<*n; i++) vals[i] = value[i]; 1553e26ddf31SBarry Smith amsopt->arraylength = *n; 1554e26ddf31SBarry Smith } 1555c5929fdfSBarry Smith ierr = PetscOptionsGetIntArray(PetscOptionsObject->options,PetscOptionsObject->prefix,opt,value,n,set);CHKERRQ(ierr); 1556e55864a3SBarry Smith if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) { 1557e55864a3SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," -%s%s <%d",PetscOptionsObject->prefix ? PetscOptionsObject->prefix : "",opt+1,value[0]);CHKERRQ(ierr); 155853acd3b1SBarry Smith for (i=1; i<*n; i++) { 1559e55864a3SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm,",%d",value[i]);CHKERRQ(ierr); 156053acd3b1SBarry Smith } 1561e55864a3SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm,">: %s (%s)\n",text,ManSection(man));CHKERRQ(ierr); 156253acd3b1SBarry Smith } 156353acd3b1SBarry Smith PetscFunctionReturn(0); 156453acd3b1SBarry Smith } 156553acd3b1SBarry Smith 156653acd3b1SBarry Smith #undef __FUNCT__ 1567e55864a3SBarry Smith #define __FUNCT__ "PetscOptionsStringArray_Private" 156853acd3b1SBarry Smith /*@C 156953acd3b1SBarry Smith PetscOptionsStringArray - Gets an array of string values for a particular 157053acd3b1SBarry Smith option in the database. The values must be separated with commas with 157153acd3b1SBarry Smith no intervening spaces. 157253acd3b1SBarry Smith 15733f9fe445SBarry Smith Logically Collective on the communicator passed in PetscOptionsBegin() 157453acd3b1SBarry Smith 157553acd3b1SBarry Smith Input Parameters: 157653acd3b1SBarry Smith + opt - the option one is seeking 157753acd3b1SBarry Smith . text - short string describing option 157853acd3b1SBarry Smith . man - manual page for option 157953acd3b1SBarry Smith - nmax - maximum number of strings 158053acd3b1SBarry Smith 158153acd3b1SBarry Smith Output Parameter: 158253acd3b1SBarry Smith + value - location to copy strings 158353acd3b1SBarry Smith . nmax - actual number of strings found 158453acd3b1SBarry Smith - set - PETSC_TRUE if found, else PETSC_FALSE 158553acd3b1SBarry Smith 158653acd3b1SBarry Smith Level: beginner 158753acd3b1SBarry Smith 158853acd3b1SBarry Smith Notes: 158953acd3b1SBarry Smith The user should pass in an array of pointers to char, to hold all the 159053acd3b1SBarry Smith strings returned by this function. 159153acd3b1SBarry Smith 159253acd3b1SBarry Smith The user is responsible for deallocating the strings that are 159353acd3b1SBarry Smith returned. The Fortran interface for this routine is not supported. 159453acd3b1SBarry Smith 159553acd3b1SBarry Smith Must be between a PetscOptionsBegin() and a PetscOptionsEnd() 159653acd3b1SBarry Smith 159753acd3b1SBarry Smith Concepts: options database^array of strings 159853acd3b1SBarry Smith 1599c5929fdfSBarry Smith .seealso: PetscOptionsGetInt(NULL,), PetscOptionsGetReal(), 1600acfcf0e5SJed Brown PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsBool(), 160153acd3b1SBarry Smith PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 160253acd3b1SBarry Smith PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 1603acfcf0e5SJed Brown PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 1604a264d7a6SBarry Smith PetscOptionsFList(), PetscOptionsEList() 160553acd3b1SBarry Smith @*/ 16064416b707SBarry Smith PetscErrorCode PetscOptionsStringArray_Private(PetscOptionItems *PetscOptionsObject,const char opt[],const char text[],const char man[],char *value[],PetscInt *nmax,PetscBool *set) 160753acd3b1SBarry Smith { 160853acd3b1SBarry Smith PetscErrorCode ierr; 16094416b707SBarry Smith PetscOptionItem amsopt; 161053acd3b1SBarry Smith 161153acd3b1SBarry Smith PetscFunctionBegin; 1612e55864a3SBarry Smith if (!PetscOptionsObject->count) { 16134416b707SBarry Smith ierr = PetscOptionItemCreate_Private(PetscOptionsObject,opt,text,man,OPTION_STRING_ARRAY,&amsopt);CHKERRQ(ierr); 1614854ce69bSBarry Smith ierr = PetscMalloc1(*nmax,(char**)&amsopt->data);CHKERRQ(ierr); 1615a297a907SKarl Rupp 16161ae3d29cSBarry Smith amsopt->arraylength = *nmax; 16171ae3d29cSBarry Smith } 1618c5929fdfSBarry Smith ierr = PetscOptionsGetStringArray(PetscOptionsObject->options,PetscOptionsObject->prefix,opt,value,nmax,set);CHKERRQ(ierr); 1619e55864a3SBarry Smith if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) { 1620e55864a3SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," -%s%s <string1,string2,...>: %s (%s)\n",PetscOptionsObject->prefix ? PetscOptionsObject->prefix : "",opt+1,text,ManSection(man));CHKERRQ(ierr); 162153acd3b1SBarry Smith } 162253acd3b1SBarry Smith PetscFunctionReturn(0); 162353acd3b1SBarry Smith } 162453acd3b1SBarry Smith 1625e2446a98SMatthew Knepley #undef __FUNCT__ 1626e55864a3SBarry Smith #define __FUNCT__ "PetscOptionsBoolArray_Private" 1627e2446a98SMatthew Knepley /*@C 1628acfcf0e5SJed Brown PetscOptionsBoolArray - Gets an array of logical values (true or false) for a particular 1629e2446a98SMatthew Knepley option in the database. The values must be separated with commas with 1630e2446a98SMatthew Knepley no intervening spaces. 1631e2446a98SMatthew Knepley 16323f9fe445SBarry Smith Logically Collective on the communicator passed in PetscOptionsBegin() 1633e2446a98SMatthew Knepley 1634e2446a98SMatthew Knepley Input Parameters: 1635e2446a98SMatthew Knepley + opt - the option one is seeking 1636e2446a98SMatthew Knepley . text - short string describing option 1637e2446a98SMatthew Knepley . man - manual page for option 1638e2446a98SMatthew Knepley - nmax - maximum number of values 1639e2446a98SMatthew Knepley 1640e2446a98SMatthew Knepley Output Parameter: 1641e2446a98SMatthew Knepley + value - location to copy values 1642e2446a98SMatthew Knepley . nmax - actual number of values found 1643e2446a98SMatthew Knepley - set - PETSC_TRUE if found, else PETSC_FALSE 1644e2446a98SMatthew Knepley 1645e2446a98SMatthew Knepley Level: beginner 1646e2446a98SMatthew Knepley 1647e2446a98SMatthew Knepley Notes: 1648e2446a98SMatthew Knepley The user should pass in an array of doubles 1649e2446a98SMatthew Knepley 1650e2446a98SMatthew Knepley Must be between a PetscOptionsBegin() and a PetscOptionsEnd() 1651e2446a98SMatthew Knepley 1652e2446a98SMatthew Knepley Concepts: options database^array of strings 1653e2446a98SMatthew Knepley 1654c5929fdfSBarry Smith .seealso: PetscOptionsGetInt(NULL,), PetscOptionsGetReal(), 1655acfcf0e5SJed Brown PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsBool(), 1656e2446a98SMatthew Knepley PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 1657e2446a98SMatthew Knepley PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 1658acfcf0e5SJed Brown PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 1659a264d7a6SBarry Smith PetscOptionsFList(), PetscOptionsEList() 1660e2446a98SMatthew Knepley @*/ 16614416b707SBarry Smith PetscErrorCode PetscOptionsBoolArray_Private(PetscOptionItems *PetscOptionsObject,const char opt[],const char text[],const char man[],PetscBool value[],PetscInt *n,PetscBool *set) 1662e2446a98SMatthew Knepley { 1663e2446a98SMatthew Knepley PetscErrorCode ierr; 1664e2446a98SMatthew Knepley PetscInt i; 16654416b707SBarry Smith PetscOptionItem amsopt; 1666e2446a98SMatthew Knepley 1667e2446a98SMatthew Knepley PetscFunctionBegin; 1668e55864a3SBarry Smith if (!PetscOptionsObject->count) { 1669ace3abfcSBarry Smith PetscBool *vals; 16701ae3d29cSBarry Smith 16714416b707SBarry Smith ierr = PetscOptionItemCreate_Private(PetscOptionsObject,opt,text,man,OPTION_BOOL_ARRAY,&amsopt);CHKERRQ(ierr); 16721a1499c8SBarry Smith ierr = PetscMalloc1(*n,(PetscBool**)&amsopt->data);CHKERRQ(ierr); 1673ace3abfcSBarry Smith vals = (PetscBool*)amsopt->data; 16741ae3d29cSBarry Smith for (i=0; i<*n; i++) vals[i] = value[i]; 16751ae3d29cSBarry Smith amsopt->arraylength = *n; 16761ae3d29cSBarry Smith } 1677c5929fdfSBarry Smith ierr = PetscOptionsGetBoolArray(PetscOptionsObject->options,PetscOptionsObject->prefix,opt,value,n,set);CHKERRQ(ierr); 1678e55864a3SBarry Smith if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) { 1679e55864a3SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," -%s%s <%d",PetscOptionsObject->prefix ? PetscOptionsObject->prefix : "",opt+1,value[0]);CHKERRQ(ierr); 1680e2446a98SMatthew Knepley for (i=1; i<*n; i++) { 1681e55864a3SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm,",%d",value[i]);CHKERRQ(ierr); 1682e2446a98SMatthew Knepley } 1683e55864a3SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm,">: %s (%s)\n",text,ManSection(man));CHKERRQ(ierr); 1684e2446a98SMatthew Knepley } 1685e2446a98SMatthew Knepley PetscFunctionReturn(0); 1686e2446a98SMatthew Knepley } 1687e2446a98SMatthew Knepley 16888cc676e6SMatthew G Knepley #undef __FUNCT__ 1689e55864a3SBarry Smith #define __FUNCT__ "PetscOptionsViewer_Private" 16908cc676e6SMatthew G Knepley /*@C 1691d1da0b69SBarry Smith PetscOptionsViewer - Gets a viewer appropriate for the type indicated by the user 16928cc676e6SMatthew G Knepley 16938cc676e6SMatthew G Knepley Logically Collective on the communicator passed in PetscOptionsBegin() 16948cc676e6SMatthew G Knepley 16958cc676e6SMatthew G Knepley Input Parameters: 16968cc676e6SMatthew G Knepley + opt - option name 16978cc676e6SMatthew G Knepley . text - short string that describes the option 16988cc676e6SMatthew G Knepley - man - manual page with additional information on option 16998cc676e6SMatthew G Knepley 17008cc676e6SMatthew G Knepley Output Parameter: 17018cc676e6SMatthew G Knepley + viewer - the viewer 17028cc676e6SMatthew G Knepley - set - PETSC_TRUE if found, else PETSC_FALSE 17038cc676e6SMatthew G Knepley 17048cc676e6SMatthew G Knepley Level: beginner 17058cc676e6SMatthew G Knepley 17068cc676e6SMatthew G Knepley Concepts: options database^has int 17078cc676e6SMatthew G Knepley 17088cc676e6SMatthew G Knepley Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd() 17098cc676e6SMatthew G Knepley 17105a7113b9SPatrick Sanan See PetscOptionsGetViewer() for the format of the supplied viewer and its options 17118cc676e6SMatthew G Knepley 1712c5929fdfSBarry Smith .seealso: PetscOptionsGetViewer(), PetscOptionsHasName(), PetscOptionsGetString(), PetscOptionsGetInt(NULL,), 17138cc676e6SMatthew G Knepley PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsBool() 17148cc676e6SMatthew G Knepley PetscOptionsInt(), PetscOptionsString(), PetscOptionsReal(), PetscOptionsBool(), 17158cc676e6SMatthew G Knepley PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 17168cc676e6SMatthew G Knepley PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 17178cc676e6SMatthew G Knepley PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 1718a264d7a6SBarry Smith PetscOptionsFList(), PetscOptionsEList() 17198cc676e6SMatthew G Knepley @*/ 17204416b707SBarry Smith PetscErrorCode PetscOptionsViewer_Private(PetscOptionItems *PetscOptionsObject,const char opt[],const char text[],const char man[],PetscViewer *viewer,PetscViewerFormat *format,PetscBool *set) 17218cc676e6SMatthew G Knepley { 17228cc676e6SMatthew G Knepley PetscErrorCode ierr; 17234416b707SBarry Smith PetscOptionItem amsopt; 17248cc676e6SMatthew G Knepley 17258cc676e6SMatthew G Knepley PetscFunctionBegin; 17261a1499c8SBarry Smith if (!PetscOptionsObject->count) { 17274416b707SBarry Smith ierr = PetscOptionItemCreate_Private(PetscOptionsObject,opt,text,man,OPTION_STRING,&amsopt);CHKERRQ(ierr); 172864facd6cSBarry Smith /* must use system malloc since SAWs may free this */ 17295b02f95dSBarry Smith ierr = PetscStrdup("",(char**)&amsopt->data);CHKERRQ(ierr); 17308cc676e6SMatthew G Knepley } 1731e55864a3SBarry Smith ierr = PetscOptionsGetViewer(PetscOptionsObject->comm,PetscOptionsObject->prefix,opt,viewer,format,set);CHKERRQ(ierr); 1732e55864a3SBarry Smith if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) { 1733e55864a3SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," -%s%s <%s>: %s (%s)\n",PetscOptionsObject->prefix ? PetscOptionsObject->prefix : "",opt+1,"",text,ManSection(man));CHKERRQ(ierr); 17348cc676e6SMatthew G Knepley } 17358cc676e6SMatthew G Knepley PetscFunctionReturn(0); 17368cc676e6SMatthew G Knepley } 17378cc676e6SMatthew G Knepley 173853acd3b1SBarry Smith 173953acd3b1SBarry Smith #undef __FUNCT__ 174053acd3b1SBarry Smith #define __FUNCT__ "PetscOptionsHead" 174153acd3b1SBarry Smith /*@C 1742b52f573bSBarry Smith PetscOptionsHead - Puts a heading before listing any more published options. Used, for example, 174353acd3b1SBarry Smith in KSPSetFromOptions_GMRES(). 174453acd3b1SBarry Smith 17453f9fe445SBarry Smith Logically Collective on the communicator passed in PetscOptionsBegin() 174653acd3b1SBarry Smith 174753acd3b1SBarry Smith Input Parameter: 174853acd3b1SBarry Smith . head - the heading text 174953acd3b1SBarry Smith 175053acd3b1SBarry Smith 175153acd3b1SBarry Smith Level: intermediate 175253acd3b1SBarry Smith 175353acd3b1SBarry Smith Notes: Must be between a PetscOptionsBegin() and a PetscOptionsEnd() 175453acd3b1SBarry Smith 1755b52f573bSBarry Smith Can be followed by a call to PetscOptionsTail() in the same function. 175653acd3b1SBarry Smith 175753acd3b1SBarry Smith Concepts: options database^subheading 175853acd3b1SBarry Smith 1759c5929fdfSBarry Smith .seealso: PetscOptionsGetInt(NULL,), PetscOptionsGetReal(), 1760acfcf0e5SJed Brown PetscOptionsHasName(), PetscOptionsGetIntArray(), PetscOptionsGetRealArray(), PetscOptionsBool(), 176153acd3b1SBarry Smith PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 176253acd3b1SBarry Smith PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 1763acfcf0e5SJed Brown PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 1764a264d7a6SBarry Smith PetscOptionsFList(), PetscOptionsEList() 176553acd3b1SBarry Smith @*/ 17664416b707SBarry Smith PetscErrorCode PetscOptionsHead(PetscOptionItems *PetscOptionsObject,const char head[]) 176753acd3b1SBarry Smith { 176853acd3b1SBarry Smith PetscErrorCode ierr; 176953acd3b1SBarry Smith 177053acd3b1SBarry Smith PetscFunctionBegin; 1771e55864a3SBarry Smith if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) { 1772e55864a3SBarry Smith ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," %s\n",head);CHKERRQ(ierr); 177353acd3b1SBarry Smith } 177453acd3b1SBarry Smith PetscFunctionReturn(0); 177553acd3b1SBarry Smith } 177653acd3b1SBarry Smith 177753acd3b1SBarry Smith 177853acd3b1SBarry Smith 177953acd3b1SBarry Smith 178053acd3b1SBarry Smith 178153acd3b1SBarry Smith 1782