@@ -25,15 +25,15 @@ D = Differential(t)
25
25
26
26
prob = ODEProblem (sys, Pair[], (0 , 10.0 ))
27
27
sol = solve (prob, Rodas4 ())
28
- @test sol . retcode == Success
28
+ @test SciMLBase . successful_retcode (sol)
29
29
30
30
prob = ODAEProblem (sys, Pair[], (0 , 10.0 ))
31
31
sol = solve (prob, Rodas4 ())
32
- @test sol . retcode == Success
32
+ @test SciMLBase . successful_retcode (sol)
33
33
34
34
prob = DAEProblem (sys, D .(states (sys)) .=> 0.0 , Pair[], (0 , 10.0 ))
35
35
sol = solve (prob, DFBDF ())
36
- @test sol . retcode == Success
36
+ @test SciMLBase . successful_retcode (sol)
37
37
@test all (sol[inertia1. w] .== 0 )
38
38
@test sol[inertia2. w][end ]≈ 0 atol= 1e-3 # all energy has dissipated
39
39
48
48
@named fixed = Fixed ()
49
49
@named torque = Torque (use_support = true )
50
50
@named inertia1 = Inertia (J = 2 , phi_start = pi / 2 )
51
- @named spring = Spring (c = 1e4 )
51
+ @named spring = Rotational . Spring (c = 1e4 )
52
52
@named damper = Damper (d = 10 )
53
53
@named inertia2 = Inertia (J = 4 )
54
54
@named sine = Blocks. Sine (amplitude = amplitude, frequency = frequency)
73
73
prob = DAEProblem (sys, D .(states (sys)) .=> 0.0 ,
74
74
[D (D (inertia2. phi)) => 1.0 ; D .(states (model)) .=> 0.0 ], (0 , 10.0 ))
75
75
sol = solve (prob, DFBDF ())
76
- @test sol . retcode == Success
76
+ @test SciMLBase . successful_retcode (sol)
77
77
78
78
prob = ODAEProblem (sys, Pair[], (0 , 1.0 ))
79
79
sol = solve (prob, Rodas4 ())
80
- @test sol . retcode == Success
80
+ @test SciMLBase . successful_retcode (sol)
81
81
82
- @test_skip begin
83
- @test sol. retcode == Success
84
- @test all (isapprox .(sol[inertia1. w], - sol[inertia2. w] * 2 , atol = 1 )) # exact opposite oscillation with smaller amplitude J2 = 2*J1
85
- @test_broken all (sol[torque. flange. tau] .== - sol[sine. output. u]) # torque source is equal to negative sine
86
- end
82
+ @test all (isapprox .(sol[inertia1. w], - sol[inertia2. w] * 2 , atol = 1 )) # exact opposite oscillation with smaller amplitude J2 = 2*J1
83
+ @test all (sol[torque. flange. tau] .== - sol[sine. output. u]) # torque source is equal to negative sine
84
+
85
+ # # Test with constant torque source
86
+ @named torque = ConstantTorque (use_support = true , tau_constant = 1 )
87
+ connections = [connect (torque. support, fixed. flange)
88
+ connect (torque. flange, inertia1. flange_a)
89
+ connect (inertia1. flange_b, spring. flange_a, damper. flange_a)
90
+ connect (spring. flange_b, damper. flange_b, inertia2. flange_a)]
91
+
92
+ @named model = ODESystem (connections, t,
93
+ systems = [
94
+ fixed,
95
+ torque,
96
+ inertia1,
97
+ inertia2,
98
+ spring,
99
+ damper,
100
+ ])
101
+ sys = structural_simplify (model)
102
+
103
+ prob = ODEProblem (sys, Pair[], (0 , 10.0 ))
104
+ sol = solve (prob, Rodas4 ())
105
+ @test SciMLBase. successful_retcode (sol)
106
+ @test sol (sol. t[end ], idxs = inertia1. w)≈ sol (sol. t[end ], idxs = inertia2. w) rtol= 0.1 # both inertias have same angular velocity after initial transient
87
107
end
88
108
89
109
# see: https://doc.modelica.org/Modelica%204.0.0/Resources/helpWSM/Modelica/Modelica.Mechanics.Rotational.Examples.First.html
132
152
sys = structural_simplify (model) # key 7 not found
133
153
prob = ODAEProblem (sys, Pair[], (0 , 1.0 ))
134
154
sol = solve (prob, Rodas4 ())
135
- @test sol . retcode == Success
155
+ @test SciMLBase . successful_retcode (sol)
136
156
end
137
157
# Plots.plot(sol; vars=[inertia2.w, inertia3.w])
138
158
end
181
201
prob = DAEProblem (sys, D .(states (sys)) .=> 0.0 , Pair[], (0 , 10.0 ))
182
202
183
203
sol = solve (prob, DFBDF ())
184
- @test sol . retcode == Success
204
+ @test SciMLBase . successful_retcode (sol)
185
205
@test sol[angle_sensor. phi. u] == sol[inertia. flange_a. phi]
186
206
187
207
# p1 = Plots.plot(sol; vars=[inertia.flange_a.phi, source.phi], title="Angular Position", labels=["Inertia" "Source"], ylabel="Angle in rad")
218
238
219
239
prob = ODEProblem (sys, Pair[], (0 , 10.0 ))
220
240
sol = solve (prob, Rodas4 ())
221
- @test sol . retcode == Success
241
+ @test SciMLBase . successful_retcode (sol)
222
242
@test all (sol[inertia1. w] .== 0 )
223
243
@test all (sol[inertia1. w] .== sol[speed_sensor. w. u])
224
244
@test sol[inertia2. w][end ]≈ 0 atol= 1e-3 # all energy has dissipated
227
247
228
248
prob = DAEProblem (sys, D .(states (sys)) .=> 0.0 , Pair[], (0 , 10.0 ))
229
249
sol = solve (prob, DFBDF ())
230
- @test sol . retcode == Success
250
+ @test SciMLBase . successful_retcode (sol)
231
251
@test all (sol[inertia1. w] .== 0 )
232
252
@test all (sol[inertia1. w] .== sol[speed_sensor. w. u])
233
253
@test sol[inertia2. w][end ]≈ 0 atol= 1e-3 # all energy has dissipated
0 commit comments