@@ -138,7 +138,7 @@ function NLPModels.cons!(nlp::MathOptNLPModel, x::AbstractVector, c::AbstractVec
138138 end
139139 end
140140 if nlp. meta. nnln > nlp. quadcon. nquad
141- MOI. eval_constraint (nlp. eval, view (c, (nlp. meta. nlin + nlp. quadcon. nquad + 1 ): (nlp. meta. nlin + nlp . meta . nnln) ), x)
141+ MOI. eval_constraint (nlp. eval, view (c, (nlp. meta. nlin + nlp. quadcon. nquad + 1 ): (nlp. meta. ncon ), x)
142142 end
143143 end
144144 return c
@@ -192,14 +192,14 @@ function NLPModels.jac_structure!(
192192 for i = 1 : (nlp. quadcon. nquad)
193193 qcon = nlp. quadcon. constraints[i]
194194 ind_quad = (nlp. lincon. nnzj + index + 1 ): (nlp. lincon. nnzj + index + qcon. nnzg)
195- view (rows, ind_quad) .= i
195+ view (rows, ind_quad) .= nlp . meta . nlin .+ i
196196 view (cols, ind_quad) .= qcon. g
197197 index += qcon. nnzg
198198 end
199199 end
200200 if nlp. meta. nnln > nlp. quadcon. nquad
201- ind_nnln = (nlp. lincon. nnzj + nlp. quadcon. nnzj + 1 ): (nlp. lincon . nnzj + nlp . quadcon . nnzj + nlp . nlcon . nnzj)
202- view (rows, ind_nnln) .= nlp. quadcon. nquad .+ nlp. nlcon. jac_rows
201+ ind_nnln = (nlp. lincon. nnzj + nlp. quadcon. nnzj + 1 ): (nlp. meta . nnzj)
202+ view (rows, ind_nnln) .= nlp. meta . nlin .+ nlp . quadcon. nquad .+ nlp. nlcon. jac_rows
203203 view (cols, ind_nnln) .= nlp. nlcon. jac_cols
204204 end
205205 end
@@ -275,7 +275,7 @@ function NLPModels.jac_coord!(nlp::MathOptNLPModel, x::AbstractVector, vals::Abs
275275 end
276276 end
277277 if nlp. meta. nnln > nlp. quadcon. nquad
278- ind_nnln = (nlp. lincon. nnzj + nlp. quadcon. nnzj + 1 ): (nlp. lincon . nnzj + nlp . quadcon . nnzj + nlp . nlcon . nnzj)
278+ ind_nnln = (nlp. lincon. nnzj + nlp. quadcon. nnzj + 1 ): (nlp. meta . nnzj)
279279 MOI. eval_constraint_jacobian (nlp. eval, view (vals, ind_nnln), x)
280280 end
281281 end
@@ -306,16 +306,41 @@ function NLPModels.jprod_nln!(
306306 Jv:: AbstractVector ,
307307)
308308 increment! (nlp, :neval_jprod_nln )
309- if nlp. meta. nnln > nlp. quadcon. nquad
310- ind_nnln = (nlp. quadcon. nquad + 1 ): (nlp. meta. nnln)
311- MOI. eval_constraint_jacobian_product (nlp. eval, view (Jv, ind_nnln), x, v)
312- end
313- (nlp. meta. nnln == nlp. quadcon. nquad) && (Jv .= 0.0 )
314309 if nlp. quadcon. nquad > 0
315310 for i = 1 : (nlp. quadcon. nquad)
316311 # Jv[i] = (Aᵢ * x + bᵢ)ᵀ * v
317312 qcon = nlp. quadcon. constraints[i]
318- Jv[i] += coo_sym_dot (qcon. A. rows, qcon. A. cols, qcon. A. vals, x, v) + dot (qcon. b, v)
313+ Jv[i] = coo_sym_dot (qcon. A. rows, qcon. A. cols, qcon. A. vals, x, v) + dot (qcon. b, v)
314+ end
315+ end
316+ if nlp. meta. nnln > nlp. quadcon. nquad
317+ ind_nnln = (nlp. quadcon. nquad + 1 ): (nlp. meta. nnln)
318+ MOI. eval_constraint_jacobian_product (nlp. eval, view (Jv, ind_nnln), x, v)
319+ end
320+ return Jv
321+ end
322+
323+ function NLPModels. jprod! (
324+ nlp:: MathOptNLPModel ,
325+ x:: AbstractVector ,
326+ v:: AbstractVector ,
327+ Jv:: AbstractVector ,
328+ )
329+ increment! (nlp, :neval_jprod )
330+ if nlp. meta. nlin > 0
331+ jprod_lin! (nlp, nlp. lincon. jacobian. rows, nlp. lincon. jacobian. cols, nlp. lincon. jacobian. vals, v, Jv)
332+ end
333+ if nlp. meta. nnln > 0
334+ if nlp. quadcon. nquad > 0
335+ for i = (nlp. meta. nlin + 1 ): (nlp. meta. nlin + nlp. quadcon. nquad)
336+ # Jv[i] = (Aᵢ * x + bᵢ)ᵀ * v
337+ qcon = nlp. quadcon. constraints[i]
338+ Jv[i] = coo_sym_dot (qcon. A. rows, qcon. A. cols, qcon. A. vals, x, v) + dot (qcon. b, v)
339+ end
340+ end
341+ if nlp. meta. nnln > nlp. quadcon. nquad
342+ ind_nnln = (nlp. meta. nlin + nlp. quadcon. nquad + 1 ): (nlp. meta. ncon)
343+ MOI. eval_constraint_jacobian_product (nlp. eval, view (Jv, ind_nnln), x, v)
319344 end
320345 end
321346 return Jv
0 commit comments