# Using DiffEqBase.NLSolveTerminationCondition in NonlinearSolve.jl

**URL:** https://discourse.julialang.org/t/using-diffeqbase-nlsolveterminationcondition-in-nonlinearsolve-jl/97873
**Category:** Optimization (Mathematical)
**Tags:** question, nlsolve, nonlinearsolve
**Created:** [April 24, 2023, 6:59pm UTC](https://discourse.julialang.org/t/using-diffeqbase-nlsolveterminationcondition-in-nonlinearsolve-jl/97873 "2023-04-24T18:59:11Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![psterzinger](https://avatars.discourse-cdn.com/v4/letter/p/df705f/32.png) [@psterzinger](https://discourse.julialang.org/u/psterzinger)
#### Post date: [April 24, 2023, 6:59pm UTC](https://discourse.julialang.org/t/using-diffeqbase-nlsolveterminationcondition-in-nonlinearsolve-jl/97873/1 "2023-04-24T18:59:11Z")

</div>

I am trying to solve a system of three nonlinear equations and would like to use the termination conditions provided by DiffEqBase.NLSolveTerminationCondition (see the [documentation](https://docs.sciml.ai/NonlinearSolve/stable/basics/TerminationCondition/) of NonlinearSolve.jl.

The function definitions in my problem are of the form

```julia
f!(r,param,a) = eq_bin!(r, param, kappa, gamma, a; verbose = verbose::Bool)

J!(J,param,a) = eq_bin_jac!(J, param, kappa, gamma, a, v) 
   

function Jv!(Jv,vec,param,a) 
        eq_bin_jac!(J, param, kappa, gamma, a, v) 
        mul!(Jv,J,vec) 
        return nothing 
end 

function Jvt!(Jv,vec,param,a) 
    eq_bin_jac!(J, param, kappa, gamma, a, v) 
    mul!(Jv,J',vec)  
    return nothing 
end

NF = NonlinearFunction{true, specialize}(f!; 
    jac = J!, 
    jvp = Jv!, 
    vjp = Jvt!, 
    jac_prototype = jp
)

```

which I want to solve using

```julia
probN = NonlinearProblem(NF, x_init, a)
sol = solve(probN, method, reltol = reltol, abstol = abstol, maxiters = maxiters)

```

Now it sometimes happens with unfortunate starting values, that my system blows up, or that I do not get an improvement over a series of iterations of my system. Hence, I would like to use  
`NLSolveTerminationCondition(NLSolveTerminationMode.AbsSafeBest)`.

However, I do not understand where I should put this termination condtion in my solver setup. solve does not have an obvious suitable kwarg and nor does NonlinearProblem from what I saw.

Any help as to how to use the termination condition funcitonality is greatly appreciated.

---

<div class="post-metadata">

### Author: ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)
#### Post date: [April 25, 2023, 5:34am UTC](https://discourse.julialang.org/t/using-diffeqbase-nlsolveterminationcondition-in-nonlinearsolve-jl/97873/2 "2023-04-25T05:34:49Z")

</div>

What method are you using?

---

<div class="post-metadata">

### Author: ![psterzinger](https://avatars.discourse-cdn.com/v4/letter/p/df705f/32.png) [@psterzinger](https://discourse.julialang.org/u/psterzinger)
#### Post date: [April 25, 2023, 6:21am UTC](https://discourse.julialang.org/t/using-diffeqbase-nlsolveterminationcondition-in-nonlinearsolve-jl/97873/4 "2023-04-25T06:21:27Z")

</div>

`TrustRegion()` and `NewtonRaphson()` from `NonlinearSolve`. The fromer has a tendency to get stuck, while the latterr often blows up.

---

<div class="post-metadata">

### Author: ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)
#### Post date: [April 25, 2023, 6:50am UTC](https://discourse.julialang.org/t/using-diffeqbase-nlsolveterminationcondition-in-nonlinearsolve-jl/97873/5 "2023-04-25T06:50:47Z")

</div>

> [@psterzinger](#):
>
> NLSolveTerminationCondition

They aren’t using the new termination conditions quite yet. @Oscar_Smith probably a good time to finish [add TerminationCondition support to NewtonRaphson by oscardssmith · Pull Request #162 · SciML/NonlinearSolve.jl · GitHub](https://github.com/SciML/NonlinearSolve.jl/pull/162) ?

---

<div class="post-metadata">

### Author: ![psterzinger](https://avatars.discourse-cdn.com/v4/letter/p/df705f/32.png) [@psterzinger](https://discourse.julialang.org/u/psterzinger)
#### Post date: [April 25, 2023, 7:10am UTC](https://discourse.julialang.org/t/using-diffeqbase-nlsolveterminationcondition-in-nonlinearsolve-jl/97873/6 "2023-04-25T07:10:16Z")

</div>

That is unfortunate, so my best shot is to mimick the behaviour using callbacks I suppose?

I was just trying to use `isoutofdomain` to reject steps wehre the solution blows up or is negative using  
`isoutofdomain = (u,p,t)->any(x -> (x < 0 || abs(x) > 1e4), u)` but I still get the same negative values and solutions that blow up as if I was using no `isoutofdomain`. Also tried the ` callback = PositiveDomain()` which did not do anything for me either. Solver was again `NewtonRaphson()`. Any ideas on how to make this work?
