[petsc-users] Setting/creating Mats for SNES use

Justin Chang jychang48 at gmail.com
Mon Nov 2 14:49:18 CST 2015


So when would I use one over the other?

- If I wanted to solve a problem using a direct solver or an iterative
solver without a preconditioner, I would use A = J?

- The documentation for SNESSetJacobian() says that AMat and PMat are
usually the same, but if I used something like GAMG would I need to create
two different objects/Mats?

Thanks,
Justin

On Mon, Nov 2, 2015 at 1:39 PM, Jed Brown <jed at jedbrown.org> wrote:

> Justin Chang <jychang48 at gmail.com> writes:
>
> > Hi all,
> >
> > In my DMPlex program, I have these lines:
> >
> > Mat A,J;
> >
> > ...
> >
> > ierr = DMSetMatType(dm, MATAIJ); CHKERRQ(ierr);
> > ierr = DMCreateMatrix(dm, &J); CHKERRQ(ierr);
> > A = J;
> >
> > ierr = DMSNESSetFunctionLocal(dm, ...); CHKERRQ(ierr);
> > ierr = DMSNESSetJacobianLocal(dm, ...); CHKERRQ(ierr);
> > ierr = SNESSetJacobian(snes, A, J, NULL, NULL); CHKERRQ(ierr);
> > ierr = SNESSetFromOptions(snes); CHKERRQ(ierr);
> >
> > ...
> >
> > ierr = SNESSolve(snes, NULL, x); CHKERRQ(ierr);
> >
> > ...
> > ierr = MatDestroy(&J); CHKERRQ(ierr);
> >
> >
> > For the line "A = J;",
>
> This means you have two handles referring to the same object.
>
> > what exactly is the difference, if any, between that and "ierr =
> > MatDuplicate(...)"
>
> This creates a new object.
>
> > or "ierr = MatCopy(...)"?
>
> The second argument needs to be a valid Mat to call this function.
>
> > Do these different options somehow affect memory usage/performance?
>
> Yes.
>
> > Say I am solving a standard poisson equation using either GAMG and/or
> > HYPRE.
> >
> > Thanks,
> > Justin
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20151102/19ea5696/attachment.html>


More information about the petsc-users mailing list