Skip to content

Commit 7e15fad

Browse files
committed
Update tests
1 parent c2c3eeb commit 7e15fad

File tree

1 file changed

+29
-47
lines changed

1 file changed

+29
-47
lines changed

test/reduction.jl

Lines changed: 29 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,9 @@ test_equal(a, b) = @test isequal(simplify(a, polynorm=true), simplify(b, polynor
3232
eqs = [
3333
D(x) ~ σ*(y-x)
3434
D(y) ~ x*-z)-y + β
35-
0 ~ sin(z) - x + y
36-
sin(u) ~ x + y
37-
2x ~ 3a
38-
2u ~ 3x
35+
0 ~ z - x + y
36+
0 ~ a + z
37+
u ~ z + a
3938
]
4039

4140
lorenz1 = ODESystem(eqs,t,name=:lorenz1)
@@ -46,14 +45,13 @@ io = IOBuffer(); show(io, lorenz1_aliased); str = String(take!(io))
4645
reduced_eqs = [
4746
D(x) ~ σ*(y - x)
4847
D(y) ~ β + x*- z) - y
49-
0 ~ y + sin(z) - x
50-
0 ~ x + y - sin(1.5x)
48+
0 ~ y + z - x
5149
]
5250
test_equal.(equations(lorenz1_aliased), reduced_eqs)
53-
@test isempty(setdiff(states(lorenz1_aliased), [u, x, y, z]))
51+
@test isempty(setdiff(states(lorenz1_aliased), [x, y, z]))
5452
test_equal.(observed(lorenz1_aliased), [
55-
a ~ 2/3 * x,
56-
u ~ 3/2 * x,
53+
u ~ 0,
54+
a ~ -z,
5755
])
5856

5957
# Multi-System Reduction
@@ -70,8 +68,6 @@ lorenz = name -> ODESystem(eqs1,t,name=name)
7068
lorenz1 = lorenz(:lorenz1)
7169
ss = ModelingToolkit.get_structure(initialize_system_structure(lorenz1))
7270
@test isequal(ss.fullvars, [x, y, z, D(x), D(y), D(z), F, u])
73-
@test ss.solvable_graph.fadjlist == [[7], [8], [], [8]]
74-
@test ss.solvable_graph.metadata == [[1], [1], [], [1]]
7571
lorenz2 = lorenz(:lorenz2)
7672

7773
connected = ODESystem([s ~ a + lorenz1.x
@@ -81,16 +77,19 @@ connected = ODESystem([s ~ a + lorenz1.x
8177

8278
# Reduced Flattened System
8379

84-
reduced_system = alias_elimination(connected; conservative=false)
80+
reduced_system = alias_elimination(connected)
8581

8682
@test setdiff(states(reduced_system), [
83+
s
8784
a
8885
lorenz1.x
8986
lorenz1.y
9087
lorenz1.z
88+
lorenz1.u
9189
lorenz2.x
9290
lorenz2.y
9391
lorenz2.z
92+
lorenz2.u
9493
]) |> isempty
9594

9695
@test setdiff(parameters(reduced_system), [
@@ -103,21 +102,21 @@ reduced_system = alias_elimination(connected; conservative=false)
103102
]) |> isempty
104103

105104
reduced_eqs = [
106-
0 ~ a + lorenz1.x - (lorenz2.y)
107-
D(lorenz1.x) ~ lorenz2.x + lorenz2.y + lorenz1.σ*((lorenz1.y) - (lorenz1.x)) - (lorenz2.z)
108-
D(lorenz1.y) ~ lorenz1.x*(lorenz1.ρ - (lorenz1.z)) - ((lorenz1.x) + (lorenz1.y) - (lorenz1.z))
105+
0 ~ a + lorenz1.x - (s)
106+
0 ~ s - (lorenz2.y)
107+
D(lorenz1.x) ~ lorenz2.u + lorenz1.σ*((lorenz1.y) - (lorenz1.x))
108+
D(lorenz1.y) ~ lorenz1.x*(lorenz1.ρ - (lorenz1.z)) - (lorenz1.u)
109109
D(lorenz1.z) ~ lorenz1.x*lorenz1.y - (lorenz1.β*(lorenz1.z))
110-
D(lorenz2.x) ~ lorenz1.x + lorenz1.y + lorenz2.σ*((lorenz2.y) - (lorenz2.x)) - (lorenz1.z)
111-
D(lorenz2.y) ~ lorenz2.x*(lorenz2.ρ - (lorenz2.z)) - ((lorenz2.x) + (lorenz2.y) - (lorenz2.z))
110+
0 ~ lorenz1.x + lorenz1.y - (lorenz1.u) - (lorenz1.z)
111+
D(lorenz2.x) ~ lorenz1.u + lorenz2.σ*((lorenz2.y) - (lorenz2.x))
112+
D(lorenz2.y) ~ lorenz2.x*(lorenz2.ρ - (lorenz2.z)) - (lorenz2.u)
112113
D(lorenz2.z) ~ lorenz2.x*lorenz2.y - (lorenz2.β*(lorenz2.z))
114+
0 ~ lorenz2.x + lorenz2.y - (lorenz2.u) - (lorenz2.z)
113115
]
114116

115117
test_equal.(equations(reduced_system), reduced_eqs)
116118

117119
observed_eqs = [
118-
s ~ a + lorenz1.x
119-
lorenz1.u ~ lorenz1.x + lorenz1.y - lorenz1.z
120-
lorenz2.u ~ lorenz2.x + lorenz2.y - lorenz2.z
121120
lorenz2.F ~ lorenz1.u
122121
lorenz1.F ~ lorenz2.u
123122
]
@@ -133,32 +132,19 @@ pp = [
133132
]
134133
u0 = [
135134
a => 1.0
135+
s => 1.0
136136
lorenz1.x => 1.0
137137
lorenz1.y => 0.0
138138
lorenz1.z => 0.0
139+
lorenz1.u => 0.0
139140
lorenz2.x => 1.0
140141
lorenz2.y => 0.0
141142
lorenz2.z => 0.0
143+
lorenz2.u => 0.0
142144
]
143145
prob1 = ODEProblem(reduced_system, u0, (0.0, 100.0), pp)
144146
solve(prob1, Rodas5())
145147

146-
# issue #578
147-
148-
let
149-
@variables t x(t) y(t) z(t)
150-
D = Differential(t)
151-
eqs = [
152-
D(x) ~ x + y
153-
x ~ y
154-
]
155-
sys = ODESystem(eqs, t)
156-
asys = alias_elimination(sys)
157-
158-
test_equal.(equations(asys), [D(x) ~ 2x])
159-
test_equal.(observed(asys), [y ~ x])
160-
end
161-
162148
# issue #724 and #716
163149
let
164150
@parameters t
@@ -186,29 +172,25 @@ end
186172

187173
# NonlinearSystem
188174
@parameters t
189-
@variables u1(t) u2(t) u3(t) u4(t) u5(t)
175+
@variables u1(t) u2(t) u3(t)
190176
@parameters p
191177
eqs = [
192-
2u1 ~ 3u5
193-
u2 ~ u1
194-
u3 ~ 2u1 - u2
195-
u4 ~ u2 + u3^p
196-
u5 ~ u4^2 - u1
178+
u1 ~ u2
179+
u3 ~ u1 + u2 + p
180+
u3 ~ hypot(u1, u2) * p
197181
]
198-
sys = NonlinearSystem(eqs, [u1, u2, u3, u4, u5], [p])
182+
sys = NonlinearSystem(eqs, [u1, u2, u3], [p])
199183
reducedsys = alias_elimination(sys)
200-
@test observed(reducedsys) == [u1 ~ 3/2 * u5]
184+
@test observed(reducedsys) == [u1 ~ u2]
201185

202186
u0 = [
203187
u1 => 1
204188
u2 => 1
205189
u3 => 0.3
206-
u4 => 0.6
207-
u5 => 2/3
208190
]
209191
pp = [2]
210192
nlprob = NonlinearProblem(reducedsys, u0, pp)
211193
reducedsol = solve(nlprob, NewtonRaphson())
212-
residual = fill(100.0, 4)
194+
residual = fill(100.0, length(states(reducedsys)))
213195
nlprob.f(residual, reducedsol.u, pp)
214196
@test all(x->abs(x) < 1e-5, residual)

0 commit comments

Comments
 (0)