@@ -143,67 +143,43 @@ end
143143function NLPModels. jprod_residual! (
144144 nls:: MathOptNLSModel ,
145145 x:: AbstractVector ,
146- rows:: AbstractVector{<:Integer} ,
147- cols:: AbstractVector{<:Integer} ,
148146 v:: AbstractVector ,
149147 Jv:: AbstractVector ,
150148)
151- vals = jac_coord_residual (nls, x)
152- decrement! (nls, :neval_jac_residual )
153- jprod_residual! (nls, rows, cols, vals, v, Jv)
154- return Jv
155- end
156-
157- function NLPModels. jprod_residual! (
158- nls:: MathOptNLSModel ,
159- x:: AbstractVector ,
160- v:: AbstractVector ,
161- Jv:: AbstractVector ,
162- )
163- rows, cols = jac_structure_residual (nls)
164- jprod_residual! (nls, x, rows, cols, v, Jv)
149+ increment! (nls, :neval_jprod_residual )
150+ nls. nls_meta. nlin > 0 && (Jv .= 0.0 )
151+ if nls. nls_meta. nnln > 0
152+ MOI. eval_constraint_jacobian_product (nls. Feval, view (Jv, nls. nls_meta. nln), x, v)
153+ end
154+ if nls. nls_meta. nlin > 0
155+ for k = 1 : nls. linequ. nnzj
156+ row, col, val = nls. linequ. jacobian. rows[k], nls. linequ. jacobian. cols[k], nls. linequ. jacobian. vals[k]
157+ Jv[row] += v[col] * val
158+ end
159+ end
165160 return Jv
166161end
167162
168- function NLPModels. jtprod_residual! (
169- nls:: MathOptNLSModel ,
170- x:: AbstractVector ,
171- rows:: AbstractVector{<:Integer} ,
172- cols:: AbstractVector{<:Integer} ,
173- v:: AbstractVector ,
174- Jtv:: AbstractVector ,
175- )
176- vals = jac_coord_residual (nls, x)
177- decrement! (nls, :neval_jac_residual )
178- jtprod_residual! (nls, rows, cols, vals, v, Jtv)
179- return Jtv
180- end
181-
182163function NLPModels. jtprod_residual! (
183164 nls:: MathOptNLSModel ,
184165 x:: AbstractVector ,
185166 v:: AbstractVector ,
186167 Jtv:: AbstractVector ,
187168)
188- rows, cols = jac_structure_residual (nls)
189- jtprod_residual! (nls, x, rows, cols, v, Jtv)
169+ increment! (nls, :neval_jtprod_residual )
170+ nls. nls_meta. nlin > 0 && (Jtv .= 0.0 )
171+ if nls. nls_meta. nnln > 0
172+ MOI. eval_constraint_jacobian_transpose_product (nls. Feval, Jtv, x, view (v, nls. nls_meta. nln))
173+ end
174+ if nls. nls_meta. nlin > 0
175+ for k = 1 : nls. linequ. nnzj
176+ row, col, val = nls. linequ. jacobian. rows[k], nls. linequ. jacobian. cols[k], nls. linequ. jacobian. vals[k]
177+ Jtv[col] += v[row] * val
178+ end
179+ end
190180 return Jtv
191181end
192182
193- # Uncomment when :JacVec becomes available in MOI.
194- #
195- # function NLPModels.jprod_residual!(nls :: MathOptNLSModel, x :: AbstractVector, v :: AbstractVector, Jv :: AbstractVector)
196- # increment!(nls, :neval_jprod_residual)
197- # MOI.eval_constraint_jacobian_product(nls.Feval, Jv, x, v)
198- # return Jv
199- # end
200- #
201- # function NLPModels.jtprod_residual!(nls :: MathOptNLSModel, x :: AbstractVector, v :: AbstractVector, Jtv :: AbstractVector)
202- # increment!(nls, :neval_jtprod_residual)
203- # MOI.eval_constraint_jacobian_transpose_product(nls.Feval, Jtv, x, v)
204- # return Jtv
205- # end
206-
207183function NLPModels. hess_structure_residual! (
208184 nls:: MathOptNLSModel ,
209185 rows:: AbstractVector{<:Integer} ,
0 commit comments