[petsc-users] Changing the jacobian matrix during SNES iterations

David Knezevic david.knezevic at akselos.com
Wed Jul 18 14:25:23 CDT 2018

On Wed, Jul 18, 2018 at 1:59 PM, Matthew Knepley <knepley at gmail.com> wrote:

> On Wed, Jul 18, 2018 at 1:31 PM David Knezevic <david.knezevic at akselos.com>
> wrote:
>> I'm using SNES for a finite element contact solve, in which the sparsity
>> pattern of the jacobian can change from one Newton iteration to the next
>> (since the nodes on the contact surface move).
>> In order to handle this I figured the best way would be to destroy the
>> jacobian matrix and re-allocate it with a new sparsity pattern inside each
>> call to FormJacobian, does that seem like a reasonable approach in this
>> context?
> Yes.
>> Also, I recall from an earlier discussion that this matrix re-allocation
>> inside FormJacobian is supported by SNES, but I just wanted to confirm that?
> Yes.
>> Also, I was wondering if there is any example where the matrix is
>> re-allocated inside SNES iterations so that I can make sure that I do it
>> correctly?
> No, unfortunately. Contributions always welcome :)

OK, as a test case I'd like to modify snes/tutorials/ex1.c to destroy and
reallocate the jacobian matrix with the same sparsity pattern
inside FormJacobian1 (once I can do that with the same sparsity pattern,
then it should be straightforward to do the same thing with a modified
sparsity pattern). To do that, I tried adding the following code inside

  ierr = MatDestroy(&B);
  ierr = MatCreate(PETSC_COMM_WORLD,&B);CHKERRQ(ierr);
  ierr = MatSetSizes(B,PETSC_DECIDE,PETSC_DECIDE,2,2);CHKERRQ(ierr);
  ierr = MatSetFromOptions(B);CHKERRQ(ierr);
  ierr = MatSetUp(B);CHKERRQ(ierr);

That gives a segfault, so I gather something else is needed here, any
suggestions on what I need to do? I guess I need to do something else in
order to make sure that the SNES uses the newly created matrix (e.g. update
the original Mat J)?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20180718/53236954/attachment.html>

More information about the petsc-users mailing list