Skip to content

Commit 4733f28

Browse files
committed
fix: fix accessing discrete index
1 parent 4afaebb commit 4733f28

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

src/systems/abstractsystem.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ function SymbolicIndexingInterface.parameter_index(sys::AbstractSystem, sym::Sym
235235
if has_index_cache(sys) && (ic = get_index_cache(sys)) !== nothing
236236
idx = parameter_index(ic, sym)
237237
if idx === nothing ||
238-
idx.portion isa SciMLStructures.Discrete && idx.idx[2] == idx.idx[3] == 0
238+
idx.portion isa SciMLStructures.Discrete && idx.idx[1] == idx.idx[2] == 0
239239
return nothing
240240
else
241241
return idx

test/symbolic_indexing_interface.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,3 +236,14 @@ end
236236
@test timeseries_parameter_index(sys, p[1, 1]) ===
237237
ParameterTimeseriesIndex(1, (1, 1, 1, 1))
238238
end
239+
240+
@testset "Indexing with symbols work for discrete parameters" begin
241+
t = ModelingToolkit.t_nounits; D = ModelingToolkit.D_nounits
242+
@variables x(t) = 1.
243+
@parameters p(t) = 1.
244+
ev = ModelingToolkit.SymbolicDiscreteCallback((t == 1) => [p ~ Pre(p)*2], discrete_parameters = p)
245+
@mtkcompile sys = System([D(x) ~ p], t; discrete_events = ev)
246+
prob = ODEProblem(sys, [], (0., 2.))
247+
sol = solve(prob, Tsit5())
248+
@test sol[p] == sol[:p] == sol.ps[p] == sol.ps[:p]
249+
end

0 commit comments

Comments
 (0)