@@ -117,37 +117,37 @@ if VERSION >= v"1.7"
117
117
prob = ODEProblem (ss, [x => 0.0 , y => 0.0 ], (0.0 , 1.0 ),
118
118
[kp => 1.0 ; z => 0.0 ; z (k + 1 ) => 0.0 ])
119
119
sol = solve (prob, Tsit5 (), kwargshandle = KeywordArgSilent)
120
+ # For all inputs in parameters, just initialize them to 0.0, and then set them
121
+ # in the callback.
122
+
123
+ # kp is the only real parameter
124
+ function foo! (du, u, p, t)
125
+ x = u[1 ]
126
+ ud = p[2 ]
127
+ du[1 ] = - x + ud
128
+ end
129
+ function affect! (integrator, saved_values)
130
+ kp = integrator. p[1 ]
131
+ yd = integrator. u[1 ]
132
+ z_t = integrator. p[3 ]
133
+ z = integrator. p[4 ]
134
+ r = 1.0
135
+ ud = kp * (r - yd) + z
136
+ push! (saved_values. t, integrator. t)
137
+ push! (saved_values. saveval, [integrator. p[4 ], integrator. p[3 ]])
138
+ integrator. p[2 ] = ud
139
+ integrator. p[3 ] = z + yd
140
+ integrator. p[4 ] = z_t
141
+ nothing
142
+ end
143
+ saved_values = SavedValues (Float64, Vector{Float64})
144
+ cb = PeriodicCallback (Base. Fix2 (affect!, saved_values), 0.1 )
145
+ prob = ODEProblem (foo!, [0.0 ], (0.0 , 1.0 ), [1.0 , 0.0 , 0.0 , 0.0 ], callback = cb)
146
+ sol2 = solve (prob, Tsit5 ())
147
+ @test sol. u == sol2. u
148
+ @test saved_values. t == sol. prob. kwargs[:disc_saved_values ][1 ]. t
149
+ @test saved_values. saveval == sol. prob. kwargs[:disc_saved_values ][1 ]. saveval
120
150
end
121
- # For all inputs in parameters, just initialize them to 0.0, and then set them
122
- # in the callback.
123
-
124
- # kp is the only real parameter
125
- function foo! (du, u, p, t)
126
- x = u[1 ]
127
- ud = p[2 ]
128
- du[1 ] = - x + ud
129
- end
130
- function affect! (integrator, saved_values)
131
- kp = integrator. p[1 ]
132
- yd = integrator. u[1 ]
133
- z_t = integrator. p[3 ]
134
- z = integrator. p[4 ]
135
- r = 1.0
136
- ud = kp * (r - yd) + z
137
- push! (saved_values. t, integrator. t)
138
- push! (saved_values. saveval, [integrator. p[4 ], integrator. p[3 ]])
139
- integrator. p[2 ] = ud
140
- integrator. p[3 ] = z + yd
141
- integrator. p[4 ] = z_t
142
- nothing
143
- end
144
- saved_values = SavedValues (Float64, Vector{Float64});
145
- cb = PeriodicCallback (Base. Fix2 (affect!, saved_values), 0.1 )
146
- prob = ODEProblem (foo!, [0.0 ], (0.0 , 1.0 ), [1.0 , 0.0 , 0.0 , 0.0 ], callback = cb)
147
- sol2 = solve (prob, Tsit5 ())
148
- @test sol. u == sol2. u
149
- @test saved_values. t == sol. prob. kwargs[:disc_saved_values ][1 ]. t
150
- @test saved_values. saveval == sol. prob. kwargs[:disc_saved_values ][1 ]. saveval
151
151
152
152
@info " Testing multi-rate hybrid system"
153
153
dt = 0.1
0 commit comments