Skip to content

Commit eebe758

Browse files
committed
Update tests
1 parent 1edd7d5 commit eebe758

File tree

1 file changed

+37
-42
lines changed

1 file changed

+37
-42
lines changed

test/reduction.jl

Lines changed: 37 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -29,20 +29,21 @@ D = Differential(t)
2929

3030
test_equal(a, b) = @test isequal(simplify(a, polynorm=true), simplify(b, polynorm=true))
3131

32-
eqs = [D(x) ~ σ*(y-x),
33-
D(y) ~ x*-z)-y + β,
34-
0 ~ sin(z) - x + y,
35-
sin(u) ~ x + y,
36-
2β ~ 2,
37-
x ~ a,
32+
eqs = [
33+
D(x) ~ σ*(y-x)
34+
D(y) ~ x*-z)-y + β
35+
0 ~ sin(z) - x + y
36+
sin(u) ~ x + y
37+
2β ~ 2
38+
x ~ a
3839
]
3940

40-
lorenz1 = ODESystem(eqs,t,[u,x,y,z,a],[σ,ρ,β],name=:lorenz1)
41+
lorenz1 = ODESystem(eqs,t,name=:lorenz1)
4142

4243
lorenz1_aliased = alias_elimination(lorenz1)
4344
reduced_eqs = [
4445
D(x) ~ σ * (y - x),
45-
D(y) ~ x*-z)-y + 1,
46+
D(y) ~ x*-z)-y + β,
4647
0 ~ sin(z) - x + y,
4748
0 ~ x + y - sin(u),
4849
]
@@ -62,63 +63,57 @@ eqs1 = [
6263
u ~ x + y - z,
6364
]
6465

65-
lorenz1 = ODESystem(eqs1,pins=[F],name=:lorenz1)
66-
67-
eqs2 = [
68-
D(x) ~ F,
69-
D(y) ~ x*-z)-x,
70-
D(z) ~ x*y - β*z,
71-
u ~ x - y - z
72-
]
73-
74-
lorenz2 = ODESystem(eqs2,pins=[F],name=:lorenz2)
66+
lorenz = name -> ODESystem(eqs1,t,pins=[F],name=name)
67+
lorenz1 = lorenz(:lorenz1)
68+
lorenz2 = lorenz(:lorenz2)
7569

76-
connected = ODESystem([lorenz2.y ~ a + lorenz1.x,
77-
lorenz1.F ~ lorenz2.u,
78-
lorenz2.F ~ lorenz1.u],t,[a],[],systems=[lorenz1,lorenz2])
70+
connected = ODESystem([s ~ a + lorenz1.x
71+
lorenz2.y ~ s
72+
lorenz1.F ~ lorenz2.u
73+
lorenz2.F ~ lorenz1.u],t,systems=[lorenz1,lorenz2])
7974

8075
# Reduced Flattened System
8176

8277
flattened_system = ModelingToolkit.flatten(connected)
8378

8479
aliased_flattened_system = alias_elimination(flattened_system)
8580

86-
@test isequal(states(aliased_flattened_system), [
81+
@test setdiff(states(aliased_flattened_system), [
8782
a
8883
lorenz1.x
8984
lorenz1.y
9085
lorenz1.z
9186
lorenz2.x
9287
lorenz2.y
9388
lorenz2.z
94-
])
89+
]) |> isempty
9590

9691
@test setdiff(parameters(aliased_flattened_system), [
9792
lorenz1.σ
9893
lorenz1.ρ
9994
lorenz1.β
100-
lorenz1.F
101-
lorenz2.F
95+
lorenz2.σ
10296
lorenz2.ρ
10397
lorenz2.β
10498
]) |> isempty
10599

106100
reduced_eqs = [
107-
0 ~ a + lorenz1.x - lorenz2.y, # irreducible by alias elimination
108-
D(lorenz1.x) ~ lorenz1.σ*(lorenz1.y-lorenz1.x) + lorenz2.x - lorenz2.y - lorenz2.z,
109-
D(lorenz1.y) ~ lorenz1.x*(lorenz1.ρ-lorenz1.z)-(lorenz1.x + lorenz1.y - lorenz1.z),
110-
D(lorenz1.z) ~ lorenz1.x*lorenz1.y - lorenz1.β*lorenz1.z,
111-
D(lorenz2.x) ~ lorenz1.x + lorenz1.y - lorenz1.z,
112-
D(lorenz2.y) ~ lorenz2.x*(lorenz2.ρ-lorenz2.z)-lorenz2.x,
113-
D(lorenz2.z) ~ lorenz2.x*lorenz2.y - lorenz2.β*lorenz2.z
101+
0 ~ s - lorenz2.y
102+
D(lorenz1.x) ~ lorenz1.F + lorenz1.σ*(lorenz1.y + -1lorenz1.x)
103+
D(lorenz1.y) ~ -1lorenz1.u + lorenz1.x*(lorenz1.ρ + -1lorenz1.z)
104+
D(lorenz1.z) ~ lorenz1.x*lorenz1.y + -1lorenz1.β*lorenz1.z
105+
D(lorenz2.x) ~ lorenz2.F + lorenz2.σ*(lorenz2.y + -1lorenz2.x)
106+
D(lorenz2.y) ~ -1lorenz2.u + lorenz2.x*(lorenz2.ρ + -1lorenz2.z)
107+
D(lorenz2.z) ~ lorenz2.x*lorenz2.y + -1lorenz2.β*lorenz2.z
114108
]
115109
test_equal.(equations(aliased_flattened_system), reduced_eqs)
116110

117111
observed_eqs = [
118-
lorenz1.F ~ lorenz2.u,
119-
lorenz2.F ~ lorenz1.u,
120-
lorenz1.u ~ lorenz1.x + lorenz1.y - lorenz1.z,
121-
lorenz2.u ~ lorenz2.x - lorenz2.y - lorenz2.z,
112+
s ~ a + lorenz1.x
113+
lorenz1.u ~ lorenz1.x + lorenz1.y - lorenz1.z
114+
lorenz2.u ~ lorenz2.x + lorenz2.y - lorenz2.z
115+
lorenz2.F ~ lorenz1.u
116+
lorenz1.F ~ lorenz2.u
122117
]
123118
test_equal.(observed(aliased_flattened_system), observed_eqs)
124119

@@ -131,10 +126,10 @@ let
131126
D(x) ~ x + y
132127
x ~ y
133128
]
134-
sys = ODESystem(eqs, t, [x], [])
129+
sys = ODESystem(eqs, t)
135130
asys = alias_elimination(flatten(sys))
136131

137-
test_equal.(asys.eqs, [D(x) ~ 2x])
132+
test_equal.(asys.eqs, [D(x) ~ x + y])
138133
test_equal.(asys.observed, [y ~ x])
139134
end
140135

@@ -149,17 +144,17 @@ let
149144
@parameters k_P
150145
pc = ODESystem(Equation[u_c ~ k_P * y_c], t, pins=[y_c], name=:pc)
151146
connections = [
152-
ol.u ~ pc.u_c,
147+
ol.u ~ pc.u_c
153148
pc.y_c ~ ol.y
154149
]
155150
connected = ODESystem(connections, t, systems=[ol, pc])
156151
@test equations(connected) isa Vector{Equation}
157152
sys = flatten(connected)
158153
reduced_sys = alias_elimination(sys)
159154
ref_eqs = [
160-
D(ol.x) ~ ol.a*ol.x + ol.b*pc.u_c
161-
0 ~ ol.c*ol.x + ol.d*pc.u_c - ol.y
162-
0 ~ pc.k_P*ol.y - pc.u_c
155+
D(ol.x) ~ ol.a*ol.x + ol.b*ol.u
156+
0 ~ ol.c*ol.x + ol.d*ol.u + -1ol.y
157+
0 ~ pc.k_P*pc.y_c + -1pc.u_c
163158
]
164159
@test ref_eqs == equations(reduced_sys)
165160
end

0 commit comments

Comments
 (0)