Skip to content

Commit ec8603f

Browse files
committed
add repack/canonicalize in vec_pjac! to support SciMLStructs
1 parent 089b41f commit ec8603f

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

src/gauss_adjoint.jl

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -494,13 +494,14 @@ function vec_pjac!(out, λ, y, t, S::GaussIntegrand)
494494
Enzyme.remake_zero!(tmp3)
495495
Enzyme.remake_zero!(out)
496496

497+
dp = isscimlstructure(p) ? repack(out) : out
497498
if SciMLBase.isinplace(sol.prob.f)
498499
Enzyme.remake_zero!(tmp6)
499500

500501
Enzyme.autodiff(
501502
Enzyme.Reverse, Enzyme.Duplicated(pf, tmp6), Enzyme.Const,
502503
Enzyme.Duplicated(tmp3, tmp4),
503-
Enzyme.Const(y), Enzyme.Duplicated(p, out), Enzyme.Const(t))
504+
Enzyme.Const(y), Enzyme.Duplicated(p, dp), Enzyme.Const(t))
504505
else
505506
function g(du, u, p, t)
506507
du .= f(u, p, t)
@@ -510,7 +511,10 @@ function vec_pjac!(out, λ, y, t, S::GaussIntegrand)
510511
Enzyme.autodiff(
511512
Enzyme.Reverse, Enzyme.Duplicated(g, tmp6), Enzyme.Const,
512513
Enzyme.Duplicated(tmp3, tmp4),
513-
Enzyme.Const(y), Enzyme.Duplicated(p, out), Enzyme.Const(t))
514+
Enzyme.Const(y), Enzyme.Duplicated(p, dp), Enzyme.Const(t))
515+
end
516+
if isscimlstructure(p)
517+
out .+= canonicalize(Tunable(), dp)[1]
514518
end
515519
elseif sensealg.autojacvec isa MooncakeVJP
516520
_, _, p_grad = mooncake_run_ad(paramjac_config, y, p, t, λ)

0 commit comments

Comments
 (0)