<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Oct 22, 2015 at 9:20 AM, Marco Zocca <span dir="ltr"><<a href="mailto:zocca.marco@gmail.com" target="_blank">zocca.marco@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>The signature of SNESSetJacobian is </div><div><br></div>PetscErrorCode  SNESSetJacobian(SNES snes,Mat Amat,Mat Pmat,PetscErrorCode (*J)(SNES,Vec,Mat,Mat,void*),void *ctx)         <div><br></div><div>however it would seem redundant to supply both a constant matrix and a function to compute the Jacobian.</div><div>The manual says of J "(if NULL then SNES retains any previously set value": this would only apply to linear functions, is this correct?</div></div></blockquote><div><br></div><div>It means, if you give NULL, but have previously called SetJacobian() then it uses the function pointer previously passed</div><div>rather than setting it to NULL.</div><div><br></div><div>  Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Why then are there not two monomorphic "SetJacobian" functions, one for linear maps that wouldn't require recomputation and one for every other case ? </div><div><br></div><div>Coming from a functional background, I find reasoning with "NULL" to be very error-prone.</div><div><br></div><div>Thank you,</div><div>Marco</div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div>
</div></div>