On Sep 24, 2014, at 5:21 AM, anton <[email protected]> wrote: > > On 09/23/2014 06:11 PM, Barry Smith wrote: >> On Sep 23, 2014, at 9:50 AM, anton <[email protected]> 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 >
