<div dir="ltr"><div dir="ltr">On Tue, May 28, 2019 at 11:36 AM Hapla  Vaclav via petsc-dev <<a href="mailto:petsc-dev@mcs.anl.gov">petsc-dev@mcs.anl.gov</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">



<div style="word-wrap:break-word">
<div dir="auto" style="word-wrap:break-word">
<div>Let me follow up discussion on creating/controlling viewers from options.</div>
<div><br>
</div>
<div>Barry agrees to rename PetscOptionsGetViewer() to PetscViewerCreateFromOptions() in <a href="https://bitbucket.org/petsc/petsc/issues/291/" target="_blank">Issue #291</a>.</div>
<div><br>
</div>
<div>But now I can see a problem: it mixes Get and Create behavior, as it returns the singleton provided by PETSC_VIEWER_*_() if possible, otherwise creates a new viewer using PetscViewerCreate(). So actually both names PetscOptionsGetViewer() and
 PetscViewerCreateFromOptions() are confusing.</div>
<div><br>
</div>
<div>I think this design is unnecessarily complicated and not really useful.</div>
<div>I don't see any advantage of reusing the singleton in this context.</div>
<div>And leads to some IMHO unexpected behavior:</div>
<div>* -myviewer hdf5:: and -myviewer hdf5 is not the same! I didn't know that but hdf5:: creates a new viewer and hdf5 reuses the singleton.</div>
<div>* Any properties (including options prefix) set to the viewer returned by PetscOptionsGetViewer() actually affect the singleton and vice versa.</div>
<div>  (See <a href="https://bitbucket.org/petsc/petsc/commits/324f959" target="_blank">https://bitbucket.org/petsc/petsc/commits/324f959</a>)</div>
<div><br>
</div>
<div>So in my opinion PetscOptionsGetViewer()</div>
<div>* should really be renamed PetscViewerCreateFromOptions(),</div>
<div>* should _always_ return a new instance and call PetscViewerSetFromOptions() on it,</div>
<div>* could also set the passed prefix to the viewer, i.e. PetscViewerCreateFromOptions(comm, options, "pre_", ...) would result in the viewer having prefix pre_ </div></div></div></blockquote><div><br></div><div>I like this.</div><div><br></div><div>One thing also wanted was the ability to give several formats.</div><div><br></div><div>   Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div dir="auto" style="word-wrap:break-word">
<div>Do you think it would break anything?</div>
<div><br>
</div>
<div>Thanks,</div>
<div>Vaclav</div>
<div><br>
</div>
<div>BTW all PETSC_VIEWER_XXX_() manpages say "Creates a XXX PetscViewer shared by all processors in a communicator."</div>
<div>This is apparently not true - they are singletons stashed to the communicator by MPI_Comm_set_attr() and next time reused if found using MPI_Comm_get_attr(), right?</div>
<div>So it should be Returns, not Creates.</div>
</div>
</div>

</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>