On Thu, Aug 21, 2008 at 11:58 AM, Boyce Griffith <griffith at courant.nyu.edu> wrote: > > > On Thu, 21 Aug 2008, Lisandro Dalcin wrote: > >> On Thu, Aug 21, 2008 at 1:23 PM, Boyce Griffith >> <griffith at courant.nyu.edu> 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. Matt > 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
