Skip to content

Commit 57e1a43

Browse files
Merge pull request #3216 from AayushSabharwal/as/fix-daeprob
fix: fix DAEProblem with array parameters
2 parents 37254ac + 8dccf9d commit 57e1a43

File tree

3 files changed

+13
-9
lines changed

3 files changed

+13
-9
lines changed

src/systems/diffeqs/abstractodesystem.jl

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -221,9 +221,11 @@ function generate_function(sys::AbstractODESystem, dvs = unknowns(sys),
221221
pre, sol_states = get_substitutions_and_solved_unknowns(sys)
222222

223223
if implicit_dae
224+
# inputs = [] makes `wrap_array_vars` offset by 1 since there is an extra
225+
# argument
224226
build_function(rhss, ddvs, u, p..., t; postprocess_fbody = pre,
225227
states = sol_states,
226-
wrap_code = wrap_code .∘ wrap_array_vars(sys, rhss; dvs, ps) .∘
228+
wrap_code = wrap_code .∘ wrap_array_vars(sys, rhss; dvs, ps, inputs = []) .∘
227229
wrap_parameter_dependencies(sys, false),
228230
kwargs...)
229231
else
@@ -790,12 +792,6 @@ function DiffEqBase.ODEProblem{false}(sys::AbstractODESystem, args...; kwargs...
790792
ODEProblem{false, SciMLBase.FullSpecialize}(sys, args...; kwargs...)
791793
end
792794

793-
struct DiscreteSaveAffect{F, S} <: Function
794-
f::F
795-
s::S
796-
end
797-
(d::DiscreteSaveAffect)(args...) = d.f(args..., d.s)
798-
799795
function DiffEqBase.ODEProblem{iip, specialize}(sys::AbstractODESystem, u0map = [],
800796
tspan = get_tspan(sys),
801797
parammap = DiffEqBase.NullParameters();

src/systems/problem_utils.jl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -641,8 +641,7 @@ function process_SciMLProblem(
641641
ddvs = map(Differential(iv), dvs)
642642
du0map = to_varmap(du0map, ddvs)
643643
merge!(op, du0map)
644-
645-
du0 = varmap_to_vars(du0map, ddvs; toterm = identity,
644+
du0 = varmap_to_vars(op, ddvs; toterm = identity,
646645
tofloat = true)
647646
kwargs = merge(kwargs, (; ddvs))
648647
else

test/odesystem.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1515,3 +1515,12 @@ end
15151515
sol = solve(prob, Tsit5())
15161516
@test sol[obs] 1:7
15171517
end
1518+
1519+
@testset "DAEProblem with array parameters" begin
1520+
@variables x(t)=1.0 y(t) [guess = 1.0]
1521+
@parameters p[1:2] = [1.0, 2.0]
1522+
@mtkbuild sys = ODESystem([D(x) ~ x, y^2 ~ x + sum(p)], t)
1523+
prob = DAEProblem(sys, [D(x) => x, D(y) => D(x) / 2y], [], (0.0, 1.0))
1524+
sol = solve(prob, DFBDF(), abstol=1e-8, reltol=1e-8)
1525+
@test sol[x]sol[y^2 - sum(p)] atol=1e-5
1526+
end

0 commit comments

Comments
 (0)