Skip to content

Commit 4e32749

Browse files
committed
fix: use discrete_parameters in tests
1 parent c1b3cbd commit 4e32749

File tree

6 files changed

+385
-381
lines changed

6 files changed

+385
-381
lines changed

src/systems/callbacks.jl

+3-3
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,7 @@ struct SymbolicDiscreteCallback <: AbstractCallback
444444
c = is_timed_condition(condition) ? condition : value(scalarize(condition))
445445

446446
if isnothing(reinitializealg)
447-
any(a -> (a isa FunctionalAffect || a isa ImperativeAffect), [affect, affect_neg, initialize, finalize]) ?
447+
any(a -> (a isa FunctionalAffect || a isa ImperativeAffect), [affect, initialize, finalize]) ?
448448
reinitializealg = SciMLBase.CheckInit() :
449449
reinitializealg = SciMLBase.NoInit()
450450
end
@@ -682,14 +682,14 @@ function generate_continuous_callbacks(sys::AbstractSystem, dvs = unknowns(sys),
682682
ps = parameters(sys; initial_parameters = true); kwargs...)
683683
cbs = continuous_events(sys)
684684
isempty(cbs) && return nothing
685-
cb_classes = Dict{Tuple{SciMLBase.RootfindOpt, SciMLBase.DAEReinitializationAlg}, Vector{SymbolicContinuousCallback}}()
685+
cb_classes = Dict{Tuple{SciMLBase.RootfindOpt, SciMLBase.DAEInitializationAlgorithm}, Vector{SymbolicContinuousCallback}}()
686686

687687
# Sort the callbacks by their rootfinding method
688688
for cb in cbs
689689
_cbs = get!(() -> SymbolicContinuousCallback[], cb_classes, (cb.rootfind, cb.reinitializealg))
690690
push!(_cbs, cb)
691691
end
692-
sort!(OrderedDict(cb_classes), by = cb -> cb.rootfind)
692+
sort!(OrderedDict(cb_classes), by = cb -> cb[1])
693693
compiled_callbacks = [generate_callback(cb, sys; kwargs...) for ((rf, reinit), cb) in cb_classes]
694694
if length(compiled_callbacks) == 1
695695
return only(compiled_callbacks)

src/systems/index_cache.jl

+6-1
Original file line numberDiff line numberDiff line change
@@ -345,8 +345,13 @@ function IndexCache(sys::AbstractSystem)
345345
vs = vars(eq.rhs; op = Nothing)
346346
timeseries = TimeseriesSetType()
347347
if is_time_dependent(sys)
348+
unknown_set = Set(unknowns(sys))
348349
for v in vs
349-
if (idx = get(disc_idxs, v, nothing)) !== nothing
350+
if in(v, unknown_set)
351+
empty!(timeseries)
352+
push!(timeseries, ContinuousTimeseries())
353+
break
354+
elseif (idx = get(disc_idxs, v, nothing)) !== nothing
350355
push!(timeseries, idx.clock_idx)
351356
elseif iscall(v) && operation(v) === getindex &&
352357
(idx = get(disc_idxs, arguments(v)[1], nothing)) !== nothing

src/systems/model_parsing.jl

-1
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,6 @@ function _model_macro(mod, name, expr, isconnector)
132132
$(c_evts...)
133133
]))))
134134

135-
@show d_evts
136135
!isempty(d_evts) && push!(exprs.args,
137136
:($Setfield.@set!(var"#___sys___".discrete_events=$SymbolicDiscreteCallback.([
138137
$(d_evts...)

test/parameter_dependencies.jl

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using ModelingToolkit
22
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
44
using OrdinaryDiffEq
55
using StochasticDiffEq
66
using JumpProcesses
@@ -10,14 +10,14 @@ using SymbolicIndexingInterface
1010
using NonlinearSolve
1111

1212
@testset "ODESystem with callbacks" begin
13-
@parameters p1=1.0 p2
13+
@parameters p1(t)=1.0 p2
1414
@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
1616
function affect1!(integ, u, p, ctx)
1717
integ.ps[p[1]] = integ.ps[p[2]]
1818
end
1919
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])
2121

2222
@mtkbuild sys = ODESystem(
2323
[D(x) ~ p1 * t + p2],
@@ -203,7 +203,7 @@ end
203203
@testset "Clock system" begin
204204
dt = 0.1
205205
@variables x(t) y(t) u(t) yd(t) ud(t) r(t) z(t)
206-
@parameters kp kq
206+
@parameters kp(t) kq
207207
d = Clock(dt)
208208
k = ShiftIndex(d)
209209

@@ -225,7 +225,7 @@ end
225225
@test_nowarn solve(prob, Tsit5())
226226

227227
@mtkbuild sys = ODESystem(eqs, t; parameter_dependencies = [kq => 2kp],
228-
discrete_events = [[0.5] => [kp ~ 2.0]])
228+
discrete_events = [SymbolicDiscreteCallback([0.5] => [kp ~ 2.0], discrete_parameters = [kp])])
229229
prob = ODEProblem(sys, [x => 0.0, y => 0.0], (0.0, Tf),
230230
[kp => 1.0; z(k - 1) => 3.0; yd(k - 1) => 0.0; z(k - 2) => 4.0;
231231
yd(k - 2) => 2.0])
@@ -245,7 +245,7 @@ end
245245
end
246246

247247
@testset "SDESystem" begin
248-
@parameters σ ρ β
248+
@parameters σ(t) ρ β
249249
@variables x(t) y(t) z(t)
250250

251251
eqs = [D(x) ~ σ * (y - x),
@@ -269,7 +269,7 @@ end
269269

270270
@named sys = ODESystem(eqs, t)
271271
@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 = [σ])])
273273
sdesys = complete(sdesys)
274274
prob = SDEProblem(
275275
sdesys, [x => 1.0, y => 0.0, z => 0.0], (0.0, 100.0), [σ => 10.0, β => 2.33])
@@ -283,7 +283,7 @@ end
283283

284284
@testset "JumpSystem" begin
285285
rng = StableRNG(12345)
286-
@parameters β γ
286+
@parameters β γ(t)
287287
@constants h = 1
288288
@variables S(t) I(t) R(t)
289289
rate₁ = β * S * I * h
@@ -308,7 +308,7 @@ end
308308

309309
@named js2 = JumpSystem(
310310
[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 = [γ])])
312312
js2 = complete(js2)
313313
dprob = DiscreteProblem(js2, u₀map, tspan, parammap)
314314
jprob = JumpProblem(js2, dprob, Direct(), save_positions = (false, false), rng = rng)

0 commit comments

Comments
 (0)