[petsc-dev] is this wrong?
Mark Adams
mfadams at lbl.gov
Mon Nov 6 10:02:01 CST 2017
On Mon, Nov 6, 2017 at 9:54 AM, Smith, Barry F. <bsmith at mcs.anl.gov> wrote:
>
> 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.
>
This seems bad/wrong, if I have
*flg = PETSC_TRUE
PetscOptionsBool(...,PETSC_FALSE, flg, ..)
and the option is NOT set then *flg == PETSC_TRUE, but my code and -help (I
assume) say the default is false.
Am I missing something? Not a big deal, I assume there was a good reason to
split the default value into a new argument.
>
> 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,ma
> n,OPTION_BOOL,&amsopt);CHKERRQ(ierr);
> > ierr = PetscMalloc(sizeof(PetscBool),&amsopt->data);CHKERRQ(ierr);
> >
> > *(PetscBool*)amsopt->data = currentvalue;
> > }
> > flg = currentvalue;
> > ierr = PetscOptionsGetBool(PetscOptionsObject->options,PetscOptions
> Object->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->prefi
> x:"",opt+1,v,text,ManSection(man));CHKERRQ(ierr);
> > }
> > PetscFunctionReturn(0);
> > }
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20171106/40eba5e7/attachment.html>
More information about the petsc-dev
mailing list