Skip to content

Commit 169d91b

Browse files
committed
Make sure equations returns Vector{Equation}
Fix #716
1 parent 0c5e6a3 commit 169d91b

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

src/systems/abstractsystem.jl

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,11 @@ function namespace_pins(sys::AbstractSystem)
176176
[renamespace(sys.name,x) for x in pins(sys)]
177177
end
178178

179-
namespace_equations(sys::AbstractSystem) = namespace_equation.(equations(sys),sys.name,sys.iv.name)
179+
function namespace_equations(sys::AbstractSystem)
180+
eqs = equations(sys)
181+
isempty(eqs) && return Equation[]
182+
map(eq->namespace_equation(eq,sys.name,sys.iv.name), eqs)
183+
end
180184

181185
function namespace_equation(eq::Equation,name,ivname)
182186
_lhs = namespace_expr(eq.lhs,name,ivname)
@@ -236,11 +240,10 @@ function equations(sys::ModelingToolkit.AbstractSystem)
236240
if isempty(sys.systems)
237241
return sys.eqs
238242
else
239-
eqs = [sys.eqs;
243+
eqs = Equation[sys.eqs;
240244
reduce(vcat,
241245
namespace_equations.(sys.systems);
242246
init=Equation[])]
243-
244247
return eqs
245248
end
246249
end

test/reduction.jl

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,32 @@ let
114114
test_equal.(asys.eqs, [D(x) ~ 2x])
115115
test_equal.(asys.observed, [y ~ x])
116116
end
117+
118+
# issue #716
119+
let
120+
@parameters t
121+
@derivatives D'~t
122+
123+
## Define a system
124+
125+
@variables x(t), u(t), y(t)
126+
@parameters a, b, c, d
127+
ol = ODESystem([D(x) ~ a * x + b * u, y ~ c * x], t, name=:ol)
128+
129+
## Define another system that is purely observing
130+
131+
@variables u_c(t), y_c(t)
132+
@parameters k_P
133+
pc = ODESystem(Equation[], t, pins=[y_c], observed = [u_c ~ k_P * y_c], name=:pc)
134+
135+
## Connect them
136+
137+
connections = [
138+
ol.u ~ pc.u_c,
139+
y_c ~ ol.y
140+
]
141+
142+
connected = MTK.ODESystem(connections, t, systems=[ol, pc])
143+
144+
@test_nowarn MTK.flatten(connected)
145+
end

0 commit comments

Comments
 (0)