diff --git a/lib/OrdinaryDiffEqNonlinearSolve/src/newton.jl b/lib/OrdinaryDiffEqNonlinearSolve/src/newton.jl index c1c8f67db7..d9692406b6 100644 --- a/lib/OrdinaryDiffEqNonlinearSolve/src/newton.jl +++ b/lib/OrdinaryDiffEqNonlinearSolve/src/newton.jl @@ -456,8 +456,11 @@ function relax!(dz, nlsolver::AbstractNLSolver, integrator::DEIntegrator, f::TF, end α0 = one(eltype(ustep)) ϕ0, dϕ0 = ϕdϕ(zero(α0)) - α, _ = linesearch(ϕ, dϕ, ϕdϕ, α0, ϕ0, dϕ0) - @.. dz = dz * α + α, ϕα = linesearch(ϕ, dϕ, ϕdϕ, α0, ϕ0, dϕ0) + # Check whether relaxation is better than the full step + if ϕα < ϕ(1) + @.. dz = dz * α + end return dz end end @@ -510,8 +513,11 @@ function relax(dz, nlsolver::AbstractNLSolver, integrator::DEIntegrator, f::TF, end α0 = one(eltype(dz)) ϕ0, dϕ0 = ϕdϕ(zero(α0)) - α, _ = linesearch(ϕ, dϕ, ϕdϕ, α0, ϕ0, dϕ0) - dz = dz * α + α, ϕα = linesearch(ϕ, dϕ, ϕdϕ, α0, ϕ0, dϕ0) + # Check whether relaxation is better than the full step + if ϕα < ϕ(1) + dz = dz * α + end return dz end end