1
1
using ModelingToolkit
2
2
using Test
3
- using ModelingToolkit: t_nounits as t, D_nounits as D
3
+ using ModelingToolkit: t_nounits as t, D_nounits as D, SymbolicDiscreteCallback, SymbolicContinuousCallback
4
4
using OrdinaryDiffEq
5
5
using StochasticDiffEq
6
6
using JumpProcesses
@@ -10,14 +10,14 @@ using SymbolicIndexingInterface
10
10
using NonlinearSolve
11
11
12
12
@testset " ODESystem with callbacks" begin
13
- @parameters p1= 1.0 p2
13
+ @parameters p1 (t) = 1.0 p2
14
14
@variables x (t)
15
- cb1 = [x ~ 2.0 ] => [p1 ~ 2.0 ] # triggers at t=-2+√6
15
+ cb1 = SymbolicContinuousCallback ( [x ~ 2.0 ] => [p1 ~ 2.0 ], discrete_parameters = [p1]) # triggers at t=-2+√6
16
16
function affect1! (integ, u, p, ctx)
17
17
integ. ps[p[1 ]] = integ. ps[p[2 ]]
18
18
end
19
19
cb2 = [x ~ 4.0 ] => (affect1!, [], [p1, p2], [p1]) # triggers at t=-2+√7
20
- cb3 = [1.0 ] => [p1 ~ 5.0 ]
20
+ cb3 = SymbolicDiscreteCallback ( [1.0 ] => [p1 ~ 5.0 ], discrete_parameters = [p1])
21
21
22
22
@mtkbuild sys = ODESystem (
23
23
[D (x) ~ p1 * t + p2],
203
203
@testset " Clock system" begin
204
204
dt = 0.1
205
205
@variables x (t) y (t) u (t) yd (t) ud (t) r (t) z (t)
206
- @parameters kp kq
206
+ @parameters kp (t) kq
207
207
d = Clock (dt)
208
208
k = ShiftIndex (d)
209
209
225
225
@test_nowarn solve (prob, Tsit5 ())
226
226
227
227
@mtkbuild sys = ODESystem (eqs, t; parameter_dependencies = [kq => 2 kp],
228
- discrete_events = [[0.5 ] => [kp ~ 2.0 ]])
228
+ discrete_events = [SymbolicDiscreteCallback ( [0.5 ] => [kp ~ 2.0 ], discrete_parameters = [kp]) ])
229
229
prob = ODEProblem (sys, [x => 0.0 , y => 0.0 ], (0.0 , Tf),
230
230
[kp => 1.0 ; z (k - 1 ) => 3.0 ; yd (k - 1 ) => 0.0 ; z (k - 2 ) => 4.0 ;
231
231
yd (k - 2 ) => 2.0 ])
245
245
end
246
246
247
247
@testset " SDESystem" begin
248
- @parameters σ ρ β
248
+ @parameters σ (t) ρ β
249
249
@variables x (t) y (t) z (t)
250
250
251
251
eqs = [D (x) ~ σ * (y - x),
269
269
270
270
@named sys = ODESystem (eqs, t)
271
271
@named sdesys = SDESystem (sys, noiseeqs; parameter_dependencies = [ρ => 2 σ],
272
- discrete_events = [[10.0 ] => [σ ~ 15.0 ]])
272
+ discrete_events = [SymbolicDiscreteCallback ( [10.0 ] => [σ ~ 15.0 ], discrete_parameters = [σ]) ])
273
273
sdesys = complete (sdesys)
274
274
prob = SDEProblem (
275
275
sdesys, [x => 1.0 , y => 0.0 , z => 0.0 ], (0.0 , 100.0 ), [σ => 10.0 , β => 2.33 ])
283
283
284
284
@testset " JumpSystem" begin
285
285
rng = StableRNG (12345 )
286
- @parameters β γ
286
+ @parameters β γ (t)
287
287
@constants h = 1
288
288
@variables S (t) I (t) R (t)
289
289
rate₁ = β * S * I * h
308
308
309
309
@named js2 = JumpSystem (
310
310
[j₁, j₃], t, [S, I, R], [γ]; parameter_dependencies = [β => 0.01 γ],
311
- discrete_events = [[10.0 ] => [γ ~ 0.02 ]])
311
+ discrete_events = [SymbolicDiscreteCallback ( [10.0 ] => [γ ~ 0.02 ], discrete_parameters = [γ]) ])
312
312
js2 = complete (js2)
313
313
dprob = DiscreteProblem (js2, u₀map, tspan, parammap)
314
314
jprob = JumpProblem (js2, dprob, Direct (), save_positions = (false , false ), rng = rng)
0 commit comments