Skip to content

Commit d096482

Browse files
committed
Call flatten before alias_elimination
1 parent 404ef9e commit d096482

File tree

3 files changed

+11
-13
lines changed

3 files changed

+11
-13
lines changed

src/systems/reduction.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ function maybe_alias(lhs, rhs, diff_vars, iv, conservative)
7171
end
7272

7373
function alias_elimination(sys; conservative=true)
74+
sys = flatten(sys)
7475
iv = independent_variable(sys)
7576
eqs = equations(sys)
7677
diff_vars = filter(!isnothing, map(eqs) do eq

test/nonlinearsystem.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,4 +90,4 @@ connected = NonlinearSystem([s ~ a + lorenz1.x
9090
lorenz2.y ~ s
9191
lorenz1.F ~ lorenz2.u
9292
lorenz2.F ~ lorenz1.u], [s, a], [], systems=[lorenz1,lorenz2])
93-
@test_nowarn alias_elimination(flatten(connected))
93+
@test_nowarn alias_elimination(connected)

test/reduction.jl

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,9 @@ connected = ODESystem([s ~ a + lorenz1.x
7575

7676
# Reduced Flattened System
7777

78-
flattened_system = ModelingToolkit.flatten(connected)
78+
reduced_system = alias_elimination(connected; conservative=false)
7979

80-
aliased_flattened_system = alias_elimination(flattened_system; conservative=false)
81-
82-
@test setdiff(states(aliased_flattened_system), [
80+
@test setdiff(states(reduced_system), [
8381
a
8482
lorenz1.x
8583
lorenz1.y
@@ -89,7 +87,7 @@ aliased_flattened_system = alias_elimination(flattened_system; conservative=fals
8987
lorenz2.z
9088
]) |> isempty
9189

92-
@test setdiff(parameters(aliased_flattened_system), [
90+
@test setdiff(parameters(reduced_system), [
9391
lorenz1.σ
9492
lorenz1.ρ
9593
lorenz1.β
@@ -108,9 +106,9 @@ reduced_eqs = [
108106
0 ~ a + lorenz1.x - lorenz2.y
109107
]
110108
# SymbolicUtils bug
111-
# equations(aliased_flattened_system)[2] - (lorenz1.x*(lorenz1.ρ - (lorenz1.z)) - lorenz1.x + lorenz1.y - lorenz1.z)
109+
# equations(reduced_system)[2] - (lorenz1.x*(lorenz1.ρ - (lorenz1.z)) - lorenz1.x + lorenz1.y - lorenz1.z)
112110
# is not simplifed.
113-
@test_skip test_equal.(equations(aliased_flattened_system), reduced_eqs)
111+
@test_skip test_equal.(equations(reduced_system), reduced_eqs)
114112

115113
observed_eqs = [
116114
s ~ a + lorenz1.x
@@ -119,7 +117,7 @@ observed_eqs = [
119117
lorenz2.F ~ lorenz1.u
120118
lorenz1.F ~ lorenz2.u
121119
]
122-
test_equal.(observed(aliased_flattened_system), observed_eqs)
120+
test_equal.(observed(reduced_system), observed_eqs)
123121

124122
pp = [
125123
lorenz1.σ => 10
@@ -138,7 +136,7 @@ u0 = [
138136
lorenz2.y => 0.0
139137
lorenz2.z => 0.0
140138
]
141-
prob1 = ODEProblem(aliased_flattened_system, u0, (0.0, 100.0), pp)
139+
prob1 = ODEProblem(reduced_system, u0, (0.0, 100.0), pp)
142140
solve(prob1, Rodas5())
143141

144142
# issue #578
@@ -151,7 +149,7 @@ let
151149
x ~ y
152150
]
153151
sys = ODESystem(eqs, t)
154-
asys = alias_elimination(flatten(sys))
152+
asys = alias_elimination(sys)
155153

156154
test_equal.(asys.eqs, [D(x) ~ 2x])
157155
test_equal.(asys.observed, [y ~ x])
@@ -173,8 +171,7 @@ let
173171
]
174172
connected = ODESystem(connections, t, systems=[ol, pc])
175173
@test equations(connected) isa Vector{Equation}
176-
sys = flatten(connected)
177-
reduced_sys = alias_elimination(sys)
174+
reduced_sys = alias_elimination(connected)
178175
ref_eqs = [
179176
D(ol.x) ~ ol.a*ol.x + ol.b*pc.u_c
180177
0 ~ ol.c*ol.x + ol.d*pc.u_c - ol.y

0 commit comments

Comments
 (0)