[petsc-dev] is this wrong?
Smith, Barry F.
bsmith at mcs.anl.gov
Mon Nov 6 08:54:36 CST 2017
Hmm, I think this perhaps an issue of documentation.
It seems the various PetscOptionsGetXXX() DO NOT set the value unless the options database indicates it should be set (and when the options database does indicate it has been set the set flag is set).
But this is only documented for PetscOptionsGetBool()
The PetscOptionsXXX() also do not set the value unless the options database indicates it should be set.
So my conclusion is that the code is correct but the documentation needs work. I will make a pull request where I "fix" the documentation.
Barry
> On Nov 6, 2017, at 8:25 AM, Mark Adams <mfadams at lbl.gov> wrote:
>
> This code looks wrong. I get a valgrind warning if the option is not set. I think this code should be added.
>
> PetscErrorCode PetscOptionsBool_Private(PetscOptionItems *PetscOptionsObject,const char opt[],const char text[],const char man[],PetscBool currentvalue,PetscBool *flg,PetscBool *set)
> {
> PetscErrorCode ierr;
> PetscBool iset;
> PetscOptionItem amsopt;
>
> PetscFunctionBegin;
> if (!PetscOptionsObject->count) {
> ierr = PetscOptionItemCreate_Private(PetscOptionsObject,opt,text,man,OPTION_BOOL,&amsopt);CHKERRQ(ierr);
> ierr = PetscMalloc(sizeof(PetscBool),&amsopt->data);CHKERRQ(ierr);
>
> *(PetscBool*)amsopt->data = currentvalue;
> }
> flg = currentvalue;
> ierr = PetscOptionsGetBool(PetscOptionsObject->options,PetscOptionsObject->prefix,opt,flg,&iset);CHKERRQ(ierr);
> if (set) *set = iset;
> if (PetscOptionsObject->printhelp && PetscOptionsObject->count == 1 && !PetscOptionsObject->alreadyprinted) {
> const char *v = PetscBools[currentvalue];
> ierr = (*PetscHelpPrintf)(PetscOptionsObject->comm," -%s%s: <%s> %s (%s)\n",PetscOptionsObject->prefix?PetscOptionsObject->prefix:"",opt+1,v,text,ManSection(man));CHKERRQ(ierr);
> }
> PetscFunctionReturn(0);
> }
>
More information about the petsc-dev
mailing list