1
1
using ModelingToolkit, ModelingToolkitStandardLibrary, OrdinaryDiffEq
2
2
using ModelingToolkitStandardLibrary. Blocks
3
+ using OrdinaryDiffEq: ReturnCode. Success
3
4
4
5
@parameters t
5
6
6
7
#=
7
8
Testing strategy:
8
9
The general strategy is to test systems using simple intputs where the solution
9
10
is known on closed form. For algebraic systems (without differential variables),
10
- an integrator with a constant input is often used together with the system under test.
11
+ an integrator with a constant input is often used together with the system under test.
11
12
=#
12
13
13
14
@testset " Constant" begin
@@ -17,9 +18,9 @@ an integrator with a constant input is often used together with the system under
17
18
sys = structural_simplify (iosys)
18
19
prob = ODEProblem (sys, Pair[int. x => 1.0 ], (0.0 , 1.0 ))
19
20
sol = solve (prob, Rodas4 ())
20
- @test sol. retcode == : Success
21
+ @test sol. retcode == Success
21
22
@test all (sol[c. output. u] .≈ 1 )
22
- @test sol[int. output. u][end ] .≈ 2 # expected solution
23
+ @test sol[int. output. u][end ] .≈ 2 # expected solution
23
24
end
24
25
25
26
@testset " Derivative" begin
35
36
sys = structural_simplify (iosys)
36
37
prob = ODEProblem (sys, Pair[int. x => 0.0 ], (0.0 , 10.0 ))
37
38
sol = solve (prob, Rodas4 ())
38
- @test sol. retcode == : Success
39
+ @test sol. retcode == Success
39
40
@test all (isapprox .(sol[source. output. u], sol[int. output. u], atol = 1e-1 ))
40
41
end
41
42
49
50
sys = structural_simplify (iosys)
50
51
prob = ODEProblem (sys, Pair[], (0.0 , 100.0 ))
51
52
sol = solve (prob, Rodas4 ())
52
- @test sol. retcode == : Success
53
+ @test sol. retcode == Success
53
54
@test sol[pt1. output. u]≈ pt1_func .(sol. t, k, T) atol= 1e-3
54
55
55
56
# Test highpass feature
58
59
sys = structural_simplify (iosys)
59
60
prob = ODEProblem (sys, Pair[], (0.0 , 100.0 ))
60
61
sol = solve (prob, Rodas4 ())
61
- @test sol. retcode == : Success
62
+ @test sol. retcode == Success
62
63
@test sol[pt1. output. u]≈ k .- pt1_func .(sol. t, k, T) atol= 1e-3
63
64
end
64
65
82
83
sys = structural_simplify (iosys)
83
84
prob = ODEProblem (sys, Pair[], (0.0 , 100.0 ))
84
85
sol = solve (prob, Rodas4 ())
85
- @test sol. retcode == : Success
86
+ @test sol. retcode == Success
86
87
@test sol[pt2. output. u]≈ pt2_func .(sol. t, k, w, d) atol= 1e-3
87
88
end
88
89
101
102
sys = structural_simplify (model)
102
103
prob = ODEProblem (sys, Pair[], (0.0 , 100.0 ))
103
104
sol = solve (prob, Rodas4 ())
104
- @test sol. retcode == : Success
105
+ @test sol. retcode == Success
105
106
# initial condition
106
107
@test sol[ss. x[1 ]][1 ]≈ 0 atol= 1e-3
107
108
@test sol[ss. x[2 ]][1 ]≈ 0 atol= 1e-3
121
122
sys = structural_simplify (model)
122
123
prob = ODEProblem (sys, Pair[], (0.0 , 100.0 ))
123
124
sol = solve (prob, Rodas4 ())
124
- @test sol. retcode == : Success
125
+ @test sol. retcode == Success
125
126
126
127
@test sol[ss. x[1 ]][end ÷ 2 ]≈ 0 atol= 1e-3 # Test that x did not move
127
128
@test sol[ss. x[1 ]][end ]≈ 0 atol= 1e-3 # Test that x did not move
158
159
sys = structural_simplify (model)
159
160
prob = ODEProblem (sys, Pair[], (0.0 , 100.0 ))
160
161
sol = solve (prob, Rodas4 ())
161
- @test sol. retcode == : Success
162
+ @test sol. retcode == Success
162
163
@test all (isapprox .(sol[ref. output. u], re_val, atol = 1e-3 )) # check reference
163
164
@test sol[plant. output. u][end ]≈ re_val atol= 1e-3 # zero control error after 100s
164
165
end
180
181
sys = structural_simplify (model)
181
182
prob = ODEProblem (sys, Pair[], (0.0 , 100.0 ))
182
183
sol = solve (prob, Rodas4 ())
183
- @test sol. retcode == : Success
184
+ @test sol. retcode == Success
184
185
@test all (isapprox .(sol[ref. output. u], re_val, atol = 1e-3 )) # check reference
185
186
@test sol[plant. output. u][end ]≈ re_val atol= 1e-3 # zero control error after 100s
186
187
197
198
sys = structural_simplify (model)
198
199
prob = ODEProblem (sys, Pair[], (0.0 , 100.0 ))
199
200
sol = solve (prob, Rodas4 ())
200
- @test sol. retcode == : Success
201
+ @test sol. retcode == Success
201
202
@test all (isapprox .(sol[ref. output. u], re_val, atol = 1e-3 )) # check reference
202
203
@test sol[plant. output. u][end ]≈ re_val atol= 1e-3 # zero control error after 100s
203
204
end
215
216
sys = structural_simplify (model)
216
217
prob = ODEProblem (sys, Pair[], (0.0 , 100.0 ))
217
218
sol = solve (prob, Rodas4 ())
218
- @test sol. retcode == : Success
219
+ @test sol. retcode == Success
219
220
@test all (isapprox .(sol[ref. output. u], re_val, atol = 1e-3 )) # check reference
220
221
@test sol[plant. output. u][end ] > 1 # without I there will be a steady-state error
221
222
end
262
263
sol = solve (prob, Rodas4 ())
263
264
end
264
265
265
- @test sol. retcode == : Success
266
- @test sol_lim. retcode == : Success
266
+ @test sol. retcode == Success
267
+ @test sol_lim. retcode == ReturnCode . Success
267
268
@test all (isapprox .(sol[ref. output. u], re_val, atol = 1e-3 )) # check reference
268
269
@test all (isapprox .(sol_lim[ref. output. u], re_val, atol = 1e-3 )) # check reference
269
270
@test sol[plant. output. u][end ]≈ re_val atol= 1e-3 # zero control error after 100s
292
293
sol = solve (prob, Rodas4 ())
293
294
294
295
# Plots.plot(sol, vars=[plant.output.u, plant.input.u])
295
- @test sol. retcode == : Success
296
+ @test sol. retcode == Success
296
297
@test all (isapprox .(sol[ref. output. u], re_val, atol = 1e-3 )) # check reference
297
298
@test sol[plant. output. u][end ]≈ re_val atol= 1e-3 # zero control error after 100s
298
299
@test all (- 1.5 .<= sol[pid_controller. ctr_output. u] .<= 1.5 ) # test limit
312
313
sol = solve (prob, Rodas4 ())
313
314
314
315
# Plots.plot(sol, vars=[plant.output.u, plant.input.u])
315
- @test sol. retcode == : Success
316
+ @test sol. retcode == Success
316
317
@test all (isapprox .(sol[ref. output. u], re_val, atol = 1e-3 )) # check reference
317
318
@test sol[plant. output. u][end ]≈ re_val atol= 1e-3 # zero control error after 100s
318
319
@test all (- 1.5 .<= sol[pid_controller. ctr_output. u] .<= 1.5 ) # test limit
332
333
sol = solve (prob, Rodas4 ())
333
334
334
335
# Plots.plot(sol, vars=[plant.output.u, plant.input.u])
335
- @test sol. retcode == : Success
336
+ @test sol. retcode == Success
336
337
@test all (isapprox .(sol[ref. output. u], re_val, atol = 1e-3 )) # check reference
337
338
@test sol[plant. output. u][end ] > 0.5 # without I there will be a steady-state error
338
339
@test all (- 1.5 .<= sol[pid_controller. ctr_output. u] .<= 1.5 ) # test limit
353
354
sol = solve (prob, Rodas4 ())
354
355
355
356
# Plots.plot(sol, vars=[plant.output.u, plant.input.u])
356
- @test sol. retcode == : Success
357
+ @test sol. retcode == Success
357
358
@test all (isapprox .(sol[ref. output. u], re_val, atol = 1e-3 )) # check reference
358
359
sol[pid_controller. addP. output. u] == - sol[pid_controller. measurement. u]
359
360
@test sol[plant. output. u][end ]≈ re_val atol= 1e-3 # zero control error after 100s
374
375
sol = solve (prob, Rodas4 ())
375
376
376
377
# Plots.plot(sol, vars=[plant.output.u, plant.input.u])
377
- @test sol. retcode == : Success
378
+ @test sol. retcode == Success
378
379
@test all (isapprox .(sol[ref. output. u], re_val, atol = 1e-3 )) # check reference
379
380
@test sol[plant. output. u][end ]≈ re_val atol= 1e-3 # zero control error after 100s
380
381
sol[pid_controller. addD. output. u] == - sol[pid_controller. measurement. u]
396
397
sol = solve (prob, Rodas4 ())
397
398
398
399
# Plots.plot(sol, vars=[plant.output.u, plant.input.u])
399
- @test sol. retcode == : Success
400
+ @test sol. retcode == Success
400
401
@test all (isapprox .(sol[ref. output. u], re_val, atol = 1e-3 )) # check reference
401
402
@test sol[plant. output. u][end ]≈ re_val atol= 1e-3 # zero control error after 100s
402
403
@test all (- 1.5 .<= sol[pid_controller. ctr_output. u] .<= 1.5 ) # test limit
0 commit comments