[petsc-dev] PETSC_VIEWER_*_() vs PetscOptionsGetViewer()

Hapla Vaclav vaclav.hapla at erdw.ethz.ch
Tue May 28 10:35:38 CDT 2019


Let me follow up discussion on creating/controlling viewers from options.

Barry agrees to rename PetscOptionsGetViewer() to PetscViewerCreateFromOptions() in Issue #291<https://bitbucket.org/petsc/petsc/issues/291/>.

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.

I think this design is unnecessarily complicated and not really useful.
I don't see any advantage of reusing the singleton in this context.
And leads to some IMHO unexpected behavior:
* -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.
* Any properties (including options prefix) set to the viewer returned by PetscOptionsGetViewer() actually affect the singleton and vice versa.
  (See https://bitbucket.org/petsc/petsc/commits/324f959)

So in my opinion PetscOptionsGetViewer()
* should really be renamed PetscViewerCreateFromOptions(),
* should _always_ return a new instance and call PetscViewerSetFromOptions() on it,
* could also set the passed prefix to the viewer, i.e. PetscViewerCreateFromOptions(comm, options, "pre_", ...) would result in the viewer having prefix pre_

Do you think it would break anything?

Thanks,
Vaclav

BTW all PETSC_VIEWER_XXX_() manpages say "Creates a XXX PetscViewer shared by all processors in a communicator."
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?
So it should be Returns, not Creates.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20190528/4ede5901/attachment.html>


More information about the petsc-dev mailing list