On Fri, Dec 9, 2016 at 2:10 PM, Barry Smith <[email protected]> wrote:
> > > On Dec 9, 2016, at 1:50 PM, Derek Gaston <[email protected]> wrote: > > > > Oh man! Sorry Barry! I swear I looked around before I sent the email. > I should have checked the FAQ a little more closely! > > > > I can understand the reasoning in the FAQ... but I still wonder if it > might not be useful to provide all three options (Function, Jacobian, > FunctionJacobian). In my case I could fill in each one to do the right > thing. That way PETSc could call the "FunctionJacobian" one when it knew > it needed both > > Derek, > > The code literally never knows if it will need a Jacobian following > the function evaluation, yes at the first function evaluation it will need > the Jacobian unless the function norm is sufficiently small but after that > it is only a question of probabilities (which it can't know) whether it > will need the Jacobian. > > > (by default that could just farm out to the individual calls). But you > guys have definitely thought a lot more about this than I have. > > > > So, do you still recommend what's suggested in the FAQ? Save off the > Jacobian computation during the residual computation and then use that when > SNES asks for a Jacobian? > > Yes, try it. I think you can get away with simply putting the new > Jacobian matrix values into the same Jacobian matrix that is regularly used > so there is no need to "stash the values" somewhere else and copy them over > later. > > I'd be interested in hearing how the performance works out, compute > always or compute only when requested. Can anyone write down a simple model for a concrete algorithm where this is more efficient? I would like to see the high level reasoning. Thanks, Matt > > Barry > > > In the case of automatic differentiation this could make a pretty huge > difference in time... > > > > Derek > > > > On Fri, Dec 9, 2016 at 1:49 PM Barry Smith <[email protected]> wrote: > > > > Sorry the title in the FAQ is a bit tongue-in-check. > > > > http://www.mcs.anl.gov/petsc/documentation/faq.html#functionjacobian > > > > > > > On Dec 9, 2016, at 12:45 PM, Derek Gaston <[email protected]> wrote: > > > > > > Is there a way to tell SNES to simultaneously compute both the > residual and the Jacobian in one callback? > > > > > > My code can compute both simultaneously and it will be more efficient > (think FE where you can reuse the shape-functions, variables, material > properties, etc. for both residual and Jacobian computation). In addition, > I also have automatic differentiation as an option which _definitely_ > computes both efficiently (and actually computes residuals, by themselves, > much slower). > > > > > > I was thinking that I may just save off the Jacobian whenever the > initial residual computation is asked for by SNES... and then just return > that Jacobian when SNES asks for it. This may be a bit dicey though as > SNES can ask for residual computations at many different points during the > solve. > > > > > > Thanks for any help! > > > > > > Derek > > > > -- 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
