Wonderful thank you! This is exactly what I was looking for. — Jacob Merson
> On Jun 27, 2022, at 6:17 AM, Barry Smith <[email protected]> wrote: > > > 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. > > Barry > >> On Jun 27, 2022, at 1:20 AM, Merson, Jacob Simon <[email protected]> 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 >
