Skip to content

Commit 415f62e

Browse files
Merge pull request #2978 from SebastianM-C/smc/quick_fix
Fix parameter dependencies across model hierarchy
2 parents f2aebd4 + 861511e commit 415f62e

File tree

2 files changed

+30
-11
lines changed

2 files changed

+30
-11
lines changed

src/systems/abstractsystem.jl

+6-11
Original file line numberDiff line numberDiff line change
@@ -1240,7 +1240,7 @@ function namespace_equation(eq::Equation,
12401240
ivs = independent_variables(sys))
12411241
_lhs = namespace_expr(eq.lhs, sys, n; ivs)
12421242
_rhs = namespace_expr(eq.rhs, sys, n; ivs)
1243-
_lhs ~ _rhs
1243+
(_lhs ~ _rhs)::Equation
12441244
end
12451245

12461246
function namespace_assignment(eq::Assignment, sys)
@@ -1346,16 +1346,11 @@ function parameter_dependencies(sys::AbstractSystem)
13461346
pdeps = get_parameter_dependencies(sys)
13471347
systems = get_systems(sys)
13481348
# put pdeps after those of subsystems to maintain topological sorted order
1349-
if isempty(systems)
1350-
return pdeps
1351-
else
1352-
return vcat(
1353-
reduce(vcat,
1354-
[map(eq -> namespace_equation(eq, s), parameter_dependencies(s))
1355-
for s in systems]),
1356-
pdeps
1357-
)
1358-
end
1349+
namespaced_deps = mapreduce(
1350+
s -> map(eq -> namespace_equation(eq, s), parameter_dependencies(s)), vcat,
1351+
systems; init = Equation[])
1352+
1353+
return vcat(namespaced_deps, pdeps)
13591354
end
13601355

13611356
function full_parameters(sys::AbstractSystem)

test/parameter_dependencies.jl

+24
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,30 @@ end
153153
@test new_prob.ps[sys2.p2] == 3.0
154154
end
155155

156+
@testset "parameter dependencies across model hierarchy" begin
157+
sys2 = let name = :sys2
158+
@parameters p2
159+
@variables x(t) = 1.0
160+
eqs = [D(x) ~ p2]
161+
ODESystem(eqs, t, [x], [p2]; name)
162+
end
163+
164+
@parameters p1 = 1.0
165+
parameter_dependencies = [sys2.p2 ~ p1 * 2.0]
166+
sys1 = ODESystem(
167+
Equation[], t, [], [p1]; parameter_dependencies, name = :sys1, systems = [sys2])
168+
169+
# ensure that parameter_dependencies is type stable
170+
# (https://github.com/SciML/ModelingToolkit.jl/pull/2978)
171+
@inferred ModelingToolkit.parameter_dependencies(sys1)
172+
173+
sys = structural_simplify(sys1)
174+
175+
prob = ODEProblem(sys, [], (0.0, 1.0))
176+
sol = solve(prob)
177+
@test SciMLBase.successful_retcode(sol)
178+
end
179+
156180
@testset "Clock system" begin
157181
dt = 0.1
158182
@variables x(t) y(t) u(t) yd(t) ud(t) r(t) z(t)

0 commit comments

Comments
 (0)