@@ -36,6 +36,7 @@ function TRSolver(
3636 χ:: X = NormLinf (one (T)),
3737 subsolver = R2Solver,
3838 m_monotone:: Int = 1 ,
39+ sparse:: Bool = false ,
3940) where {T, V, X}
4041 x0 = reg_nlp. model. meta. x0
4142 l_bound = reg_nlp. model. meta. lvar
@@ -69,8 +70,9 @@ function TRSolver(
6970 shifted (reg_nlp. h, xk, l_bound_m_x, u_bound_m_x, reg_nlp. selected) :
7071 shifted (reg_nlp. h, xk, T (1 ), χ)
7172
72- Bk = hess_op (reg_nlp, xk)
73- sub_nlp = QuadraticModel (∇fk, Bk, x0 = x0)
73+ sparse = isa (reg_nlp. model, QuasiNewtonModel) ? false : sparse
74+ Bk = sparse ? hess (reg_nlp, xk) : hess_op (reg_nlp, xk)
75+ sub_nlp = QuadraticModel (∇fk, Bk, σ = T (1 ), x0 = x0)
7476 subpb = RegularizedNLPModel (sub_nlp, ψ)
7577 substats = RegularizedExecutionStats (subpb)
7678 subsolver = subsolver (subpb)
@@ -468,6 +470,8 @@ function SolverCore.solve!(
468470 if quasiNewtTest
469471 @. ∇fk⁻ = ∇fk - ∇fk⁻
470472 push! (nlp, s, ∇fk⁻) # update QN operator
473+ elseif isa (solver. subpb. model. data. H, AbstractMatrix)
474+ hess_coord! (reg_nlp, xk, solver. subpb. model. data. H. nzval)
471475 end
472476
473477 if opnorm_maxiter ≤ 0
0 commit comments