Skip to content

Commit fdb147f

Browse files
authored
Optimize jac_coord! and jac_structure! (#495)
* Optimize jac_coord! and jac_structure! * Update breakage.yml * Update .github/workflows/breakage.yml * Update .github/workflows/breakage.yml
1 parent d701db0 commit fdb147f

File tree

1 file changed

+35
-13
lines changed

1 file changed

+35
-13
lines changed

src/nlp/api.jl

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -194,15 +194,25 @@ function jac_structure!(
194194
) where {T}
195195
@lencheck nlp.meta.nnzj rows cols
196196
lin_ind = 1:(nlp.meta.lin_nnzj)
197-
nlp.meta.nlin > 0 && jac_lin_structure!(nlp, view(rows, lin_ind), view(cols, lin_ind))
198-
for i in lin_ind
199-
rows[i] += count(x < nlp.meta.lin[rows[i]] for x in nlp.meta.nln)
197+
if nlp.meta.nlin > 0
198+
if nlp.meta.nnln == 0
199+
jac_lin_structure!(nlp, rows, cols)
200+
else
201+
jac_lin_structure!(nlp, view(rows, lin_ind), view(cols, lin_ind))
202+
for i in lin_ind
203+
rows[i] += count(x < nlp.meta.lin[rows[i]] for x in nlp.meta.nln)
204+
end
205+
end
200206
end
201207
if nlp.meta.nnln > 0
202-
nln_ind = (nlp.meta.lin_nnzj + 1):(nlp.meta.lin_nnzj + nlp.meta.nln_nnzj)
203-
jac_nln_structure!(nlp, view(rows, nln_ind), view(cols, nln_ind))
204-
for i in nln_ind
205-
rows[i] += count(x < nlp.meta.nln[rows[i]] for x in nlp.meta.lin)
208+
if nlp.meta.nlin == 0
209+
jac_nln_structure!(nlp, rows, cols)
210+
else
211+
nln_ind = (nlp.meta.lin_nnzj + 1):(nlp.meta.lin_nnzj + nlp.meta.nln_nnzj)
212+
jac_nln_structure!(nlp, view(rows, nln_ind), view(cols, nln_ind))
213+
for i in nln_ind
214+
rows[i] += count(x < nlp.meta.nln[rows[i]] for x in nlp.meta.lin)
215+
end
206216
end
207217
end
208218
return rows, cols
@@ -254,10 +264,22 @@ function jac_coord!(nlp::AbstractNLPModel, x::AbstractVector, vals::AbstractVect
254264
@lencheck nlp.meta.nvar x
255265
@lencheck nlp.meta.nnzj vals
256266
increment!(nlp, :neval_jac)
257-
lin_ind = 1:(nlp.meta.lin_nnzj)
258-
nlp.meta.nlin > 0 && jac_lin_coord!(nlp, x, view(vals, lin_ind))
259-
nln_ind = (nlp.meta.lin_nnzj + 1):(nlp.meta.lin_nnzj + nlp.meta.nln_nnzj)
260-
nlp.meta.nnln > 0 && jac_nln_coord!(nlp, x, view(vals, nln_ind))
267+
if nlp.meta.nlin > 0
268+
if nlp.meta.nnln == 0
269+
jac_lin_coord!(nlp, x, vals)
270+
else
271+
lin_ind = 1:(nlp.meta.lin_nnzj)
272+
jac_lin_coord!(nlp, x, view(vals, lin_ind))
273+
end
274+
end
275+
if nlp.meta.nnln > 0
276+
if nlp.meta.nlin == 0
277+
jac_nln_coord!(nlp, x, vals)
278+
else
279+
nln_ind = (nlp.meta.lin_nnzj + 1):(nlp.meta.lin_nnzj + nlp.meta.nln_nnzj)
280+
jac_nln_coord!(nlp, x, view(vals, nln_ind))
281+
end
282+
end
261283
return vals
262284
end
263285

@@ -505,9 +527,9 @@ function jtprod!(nlp::AbstractNLPModel, x::AbstractVector, v::AbstractVector, Jt
505527
@lencheck nlp.meta.ncon v
506528
increment!(nlp, :neval_jtprod)
507529
if nlp.meta.nnln == 0
508-
jtprod_lin!(nlp, x, v, Jtv)
530+
(nlp.meta.nlin > 0) && jtprod_lin!(nlp, x, v, Jtv)
509531
elseif nlp.meta.nlin == 0
510-
jtprod_nln!(nlp, x, v, Jtv)
532+
(nlp.meta.nnln > 0) && jtprod_nln!(nlp, x, v, Jtv)
511533
elseif nlp.meta.nlin >= nlp.meta.nnln
512534
jtprod_lin!(nlp, x, view(v, nlp.meta.lin), Jtv)
513535
if nlp.meta.nnln > 0

0 commit comments

Comments
 (0)