[petsc-users] SNESSetJacobian

Barry Smith bsmith at mcs.anl.gov
Wed Sep 24 06:52:18 CDT 2014


On Sep 24, 2014, at 5:21 AM, anton <popov at uni-mainz.de> wrote:

> 
> On 09/23/2014 06:11 PM, Barry Smith wrote:
>> On Sep 23, 2014, at 9:50 AM, anton <popov at uni-mainz.de> wrote:
>> 
>>> Starting from version 3.5 the matrix parameters in SNESSetJacobian are no longer pointers, hence my question:
>>> What is the most appropriate place to call SNESSetJacobian if I need  to change the Jacobian during solution?
>>> What about FormFunction?
>>    Could you please explain why you need to change the Mat? Our hope was that people would not need to change it. Note that you can change the type of a matrix at any time. So for example inside your FormJacobian you can have code like MatSetType(J,MATAIJ) this wipes out the old matrix data structure and gives you an empty matrix of the new type ready to be preallocated and then filled. Let us know what you need.
> 
> 
> How should a user switch from assembled to a matrix-free Jacobian (for example) within one run? Simplest is resetting SNES altogether, I guess.

   So you want to run, say, three steps of Newton “matrix-free” and then four steps with an explicit matrix? Then I guess you could call SNESSetJacobian() inside a SNES monitor routine, or even in your compute Jacobian routine. Calling it within FormFunction would not be a good idea since FormFunction is called in a variety of places.

  Barry

> 
> Anton
> 
>>   Barry
>> 
>>> Thanks,
>>> Anton
> 



More information about the petsc-users mailing list