Skip to content

Commit ab1c411

Browse files
committed
add reused_jacobian function
1 parent 7a298cf commit ab1c411

File tree

7 files changed

+10
-7
lines changed

7 files changed

+10
-7
lines changed

lib/NonlinearSolveBase/src/NonlinearSolveBase.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ include("forward_diff.jl")
7575
# public for NonlinearSolve.jl and subpackages to use
7676
@compat(public, (InternalAPI, supports_line_search, supports_trust_region, set_du!))
7777
@compat(public, (construct_linear_solver, needs_square_A, needs_concrete_A))
78-
@compat(public, (construct_jacobian_cache,))
78+
@compat(public, (construct_jacobian_cache, reused_jacobian))
7979
@compat(public,
8080
(assert_extension_supported_termination_condition,
8181
construct_extension_function_wrapper, construct_extension_jac))

lib/NonlinearSolveBase/src/jacobian.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,9 @@ end
129129
(cache::JacobianCache{<:JacobianOperator})(::Nothing) = error("Please report a bug to NonlinearSolve.jl")
130130
(cache::JacobianCache)(::Nothing) = error("Please report a bug to NonlinearSolve.jl")
131131

132+
reused_jacobian(cache::JacobianCache, u) = cache.J
133+
reused_jacobian(cache::JacobianCache{<:JacobianOperator}, u) = StatefulJacobianOperator(cache.J, u, cache.p)
134+
132135
# Core Computation
133136
## Numbers
134137
function (cache::JacobianCache{<:Number})(u)

lib/NonlinearSolveBase/src/wrappers.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,5 +106,5 @@ function construct_extension_jac(
106106

107107
initial_jacobian isa Val{false} && return J_final
108108

109-
return J_final, Jₚ(u0)
109+
return J_final, J = reused_jacobian(Jₚ, u0)
110110
end

lib/NonlinearSolveFirstOrder/src/NonlinearSolveFirstOrder.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ using NonlinearSolveBase: NonlinearSolveBase, AbstractNonlinearSolveAlgorithm,
2121
Utils, InternalAPI, get_timer_output, @static_timeit,
2222
update_trace!, L2_NORM, NonlinearSolvePolyAlgorithm,
2323
NewtonDescent, DampedNewtonDescent, GeodesicAcceleration,
24-
Dogleg, NonlinearSolveForwardDiffCache
24+
Dogleg, NonlinearSolveForwardDiffCache, reused_jacobian
2525
using SciMLBase: SciMLBase, AbstractNonlinearProblem, NLStats, ReturnCode,
2626
NonlinearFunction,
2727
NonlinearLeastSquaresProblem, NonlinearProblem, NoSpecialize

lib/NonlinearSolveFirstOrder/src/solve.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ function SciMLBase.__init(
170170
prob, alg, prob.f, fu, u, prob.p;
171171
stats, alg.autodiff, linsolve, alg.jvp_autodiff, alg.vjp_autodiff
172172
)
173-
J = jac_cache(u)
173+
J = reused_jacobian(cache.jac_cache, cache.u)
174174

175175
descent_cache = InternalAPI.init(
176176
prob, alg.descent, J, fu, u; stats, abstol, reltol, internalnorm,
@@ -238,7 +238,7 @@ function InternalAPI.step!(
238238
J = cache.jac_cache(cache.u)
239239
new_jacobian = true
240240
else
241-
J = cache.jac_cache(cache.u)
241+
J = reused_jacobian(cache.jac_cache, cache.u)
242242
new_jacobian = false
243243
end
244244
end

lib/NonlinearSolveQuasiNewton/src/NonlinearSolveQuasiNewton.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ using NonlinearSolveBase: NonlinearSolveBase, AbstractNonlinearSolveAlgorithm,
1818
AbstractApproximateJacobianUpdateRule, AbstractDescentDirection,
1919
AbstractApproximateJacobianUpdateRuleCache,
2020
Utils, InternalAPI, get_timer_output, @static_timeit,
21-
update_trace!, L2_NORM, NewtonDescent
21+
update_trace!, L2_NORM, NewtonDescent, reused_jacobian
2222
using SciMLBase: SciMLBase, AbstractNonlinearProblem, NLStats, ReturnCode,
2323
NonlinearProblem, NonlinearFunction, NoSpecialize
2424
using SciMLOperators: AbstractSciMLOperator

lib/NonlinearSolveQuasiNewton/src/initialization.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ function InternalAPI.init(
125125
jac_cache = NonlinearSolveBase.construct_jacobian_cache(
126126
prob, solver, prob.f, fu, u, p; stats, autodiff, linsolve
127127
)
128-
J = alg.structure(jac_cache(u))
128+
J = alg.structure(reused_jacobian(jac_cache, u))
129129
return InitializedApproximateJacobianCache(
130130
J, alg.structure, alg, jac_cache, false, internalnorm
131131
)

0 commit comments

Comments
 (0)