MatGetVecs and MATMFFD

Matthew Knepley knepley at
Thu Aug 21 12:09:16 CDT 2008

On Thu, Aug 21, 2008 at 11:58 AM, Boyce Griffith
<griffith at> wrote:
> On Thu, 21 Aug 2008, Lisandro Dalcin wrote:
>> On Thu, Aug 21, 2008 at 1:23 PM, Boyce Griffith
>> <griffith at> wrote:
>>> Is there any way to associate a context with a MFFD matrix?  It seems
>>> like
>>> the Otherwise, it seems like the implementation of MatGetVecs would need
>>> to
>>> use global variables in order to create the appropriate vectors.
>> You can use a PetscContainer (see PetscContainerCreate() and friends)
>> to save your user data and then you can set put that container in any
>> PETSc object with PetscObjectCompose(), and next retrieve the
>> container with PetscObjectQuery(), and finally recover your user data
>> with PetscContainerGetPointer().
> Sounds like that should do the trick.
>>> Or is it possible to get access to the solution and right-hand-side
>>> vectors
>>> used by an associated SNES and use VecDuplicate on them?
>> You can use SNESGetRhs() and SNESGetSolution(). At least in petsc-dev
>> (not so sure in last public release, I do not remember), you will get
>> back a reference to the 'b' and 'x' Vec's you passed to
>> 'SNESSolve(snes, b, x)'. You can even SNESGetSolutionUpdate() for
>> getting the Vec where the solution update for the Newton step is
>> formed.
> Right, but if all I have is the Mat, is there a userland function which will
> return the corresponding SNES?

There is no SNES that corresponds to a Mat, rather the SNES holds a Mat,
which is oblivious. The MatGetVecs() routine is there to provide vectors
which have a layout that matches the Mat. This is done by using the same
PetscMap as the matrix rows.


> Thanks,
> -- Boyce
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

More information about the petsc-users mailing list