(Petsc SNES) Reevaluating Function right after evaluating the Jacobian

Edson Tadeu e.tadeu at gmail.com
Mon Dec 1 12:28:48 CST 2008


   I'm solving non-linear problems with Line Search, and sometimes I need to
change an entire row of the Jacobian together with the corresponding element
in the Function, but I only know which rows/elements need to be changed when
I'm computing the Jacobian. So, what I'd like to know first is:

  1) Am I allowed to change the Function vector from inside FormJacobian?
(I've looked inside SNESSolve_LS, and it seems that this is not allowed,
because "fnorm" is evaluated before SNESComputeJacobian, and if I change F
inside FormJacobian, fnorm would be wrong).


  2) Am I allowed to change the Function vector from PreCheck routine?

  If none of that is allowed, another solution that I thought was to compute
the Jacobian while computing the Function. The FAQ says that "You are free
to have your 'FormFunction' compute as much of the Jacobian at that point as
you like, keep the information in the user context (the final argument to
FormFunction and FormJacobian) and then retreive the information in your
FormJacobian() function". The problem is that FormFunction is called many
times more than FormJacobian, and Jacobian calculation is slow, so:

  3) Is there any way to know when I should really recompute the Jacobian
from inside FormFunction? (I don't think so, but...)

  Well, is there any way to solve this problem? ;)

Thanks in advance,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20081201/fe543785/attachment.htm>

More information about the petsc-users mailing list