[petsc-users] C++ wrapper for petsc vector

Matthew Knepley knepley at gmail.com
Tue Aug 4 12:34:01 CDT 2015


On Tue, Aug 4, 2015 at 12:30 PM, Martin Vymazal <martin.vymazal at vki.ac.be>
wrote:

> Hello,
>
>  1) thank you for the suggestion.
>  2) suppose you want to be able to switch between solver implementations
> provided by different libraries (e.g. petsc/trilinos). One obvious
> approach is
> through inheritance, but in order to keep child interfaces conforming to
> base
> class signatures, I need to wrap the solvers. If you can think of a better
> approach that would keep switching between solvers easy, I'm open to
> suggestions. I don't really need both trilinos and petsc, this is just a
> matter of curiosity.
>

I think this is a bad way of doing that. You would introduce a whole bunch
of types
at the top level which are meaningless (just like Trilinos). If you want
another solver,
just wrap it up in the PETSc PCShell object (two calls at most). Its an
easier to write
wrapper, which also fits in with all the debugging and profiling. We wrap a
bunch of
things this way like Hypre (70+ packages last time I checked).

   Matt


> Best regards,
>
>  Martin Vymazal
>
>
> On Tuesday, August 04, 2015 12:24:14 PM Matthew Knepley wrote:
> > On Tue, Aug 4, 2015 at 12:15 PM, Martin Vymazal <
> martin.vymazal at vki.ac.be>
> >
> > wrote:
> > > Hello,
> > >
> > >  I'm trying to create a small C++ class to wrap the 'Vec' object. This
> > >
> > > class
> > > has an internal pointer to a member variable of type Vec, and in its
> > > destructor, it calls VecDestroy. Unfortunately, my test program
> segfaults
> > > and
> > > this seems to be due to the fact that the destructor of the wrapper
> class
> > > is
> > > called after main() calls PetscFinalize(). Apparently VecDestroy
> performs
> > > some
> > > collective communication, so calling it after PetscFinalize() is too
> late.
> > > How
> > > can I fix this?
> >
> > 1) Declare your C++ in a scope, so that it goes out of scope before
> > PetscFinalize()
> >
> > 2) Is there any utility to this wrapper since everything can be called
> > directly from C++?
> >
> >   Thanks,
> >
> >      Matt
> >
> > > Thank you,
> > >
> > >  Martin Vymazal
>
>


-- 
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20150804/e274775a/attachment-0001.html>


More information about the petsc-users mailing list