[petsc-users] Fail function evaluation with SNES

Barry Smith bsmith at petsc.dev
Mon Jun 27 05:17:00 CDT 2022

  You would call SNESSetFunctionDomainError() or SNESSetJacobianDomainError() from within your function or Jacobian evaluation and then return from the function. This notifies SNES that the step it attempted is not acceptable to your functions.

  SNES may not be able to recover from its bad step. The simplest attempt to recover is to have SNES try a shorter step. If the bad steps come from, for example, negative pressures or other non-physical locations of the step you can try using SNESVISetVariableBounds()  and friends to tell SNES what steps to avoid.

   If you have particular cases where SNES cannot recover and you can share your code we can investigate improving the handling of this feature in SNES. 


> On Jun 27, 2022, at 1:20 AM, Merson, Jacob Simon <mersoj2 at rpi.edu> wrote:
> Hi All,
> I’m attempting to use the SNES solver with the finite element method. When I use the trust region or line search algorithms I’m not currently running into any problems and the solution matches a hand-coded newton solver. However, when I use other methods like quasi-newton, or newton-conjugate-graduent I end up with a guess that makes the element Jacobian negative causing issues with the residual (and Jacobian) evaluation.
> For this circumstance is it possible to set an error code that specifies that the function evaluation has failed and have SNES try a different step?
> Thanks for the help!
> Jacob

More information about the petsc-users mailing list