Skip to content

Commit 4376882

Browse files
committed
Add SparseEnzymeADHessian
1 parent d5fd76d commit 4376882

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

src/enzyme.jl

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ function SparseEnzymeADJacobian(
145145
)
146146
end
147147

148-
struct SparseEnzymeADHessian{R, C, S} <: ADNLPModels.ADBackend
148+
struct SparseEnzymeADHessian{R, C, S, L} <: ADNLPModels.ADBackend
149149
nvar::Int
150150
rowval::Vector{Int}
151151
colptr::Vector{Int}
@@ -156,6 +156,8 @@ struct SparseEnzymeADHessian{R, C, S} <: ADNLPModels.ADBackend
156156
v::Vector{R}
157157
y::Vector{R}
158158
grad::Vector{R}
159+
buffer::Vector{R}
160+
::L
159161
end
160162

161163
function SparseEnzymeADHessian(
@@ -200,7 +202,9 @@ function SparseEnzymeADHessian(
200202
end
201203
v = similar(x0)
202204
y = similar(x0, ncon)
205+
buffer = similar(x0, ncon)
203206
grad = similar(x0)
207+
ℓ(x, y, obj_weight, buffer) = obj_weight * nlp.f(x) + dot(c!(buffer, x), y)
204208

205209
return SparseEnzymeADHessian(
206210
nvar,
@@ -213,6 +217,8 @@ function SparseEnzymeADHessian(
213217
v,
214218
y,
215219
grad,
220+
buffer,
221+
ℓ,
216222
)
217223
end
218224

@@ -423,18 +429,17 @@ end
423429
compressed_hessian_icol =
424430
(b.coloring_mode == :direct) ? b.compressed_hessian : view(b.compressed_hessian, :, icol)
425431

426-
# Lagrangian
427-
= get_lag(nlp, b, obj_weight, y)
428-
429432
# AD with Enzyme.jl
430433
Enzyme.autodiff(
431434
Enzyme.Forward,
432435
Enzyme.Const(Enzyme.gradient!),
433436
Enzyme.Const(Enzyme.Reverse),
434437
Enzyme.DuplicatedNoNeed(b.grad, compressed_hessian_icol),
435-
Enzyme.Const(ℓ),
438+
Enzyme.Const(b.ℓ),
436439
Enzyme.Duplicated(x, b.v),
437440
Enzyme.Const(y),
441+
Enzyme.Const(obj_weight),
442+
Enzyme.Const(buffer),
438443
)
439444

440445
if b.coloring_mode == :direct

0 commit comments

Comments
 (0)