Skip to content

Commit 3080ee7

Browse files
fixup! refactor: store parameters from different clock partitions separately
1 parent 15bdea4 commit 3080ee7

File tree

2 files changed

+20
-18
lines changed

2 files changed

+20
-18
lines changed

src/systems/index_cache.jl

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -91,32 +91,32 @@ function IndexCache(sys::AbstractSystem)
9191

9292
for (i, (inps, disc_sys)) in enumerate(zip(inputs, syss))
9393
i == continuous_id && continue
94-
disc_buffers[i - 1] = Dict{Any, Set{BasicSymbolic}}()
94+
disc_buffers[i] = Dict{Any, Set{BasicSymbolic}}()
9595

9696
for inp in inps
9797
inp = unwrap(inp)
9898
is_parameter(sys, inp) ||
9999
error("Discrete subsystem $i input $inp is not a parameter")
100-
disc_clocks[inp] = i - 1
101-
disc_clocks[default_toterm(inp)] = i - 1
100+
disc_clocks[inp] = i
101+
disc_clocks[default_toterm(inp)] = i
102102
if hasname(inp) && (!istree(inp) || operation(inp) !== getindex)
103-
disc_clocks[getname(inp)] = i - 1
104-
disc_clocks[default_toterm(inp)] = i - 1
103+
disc_clocks[getname(inp)] = i
104+
disc_clocks[default_toterm(inp)] = i
105105
end
106-
insert_by_type!(disc_buffers[i - 1], inp)
106+
insert_by_type!(disc_buffers[i], inp)
107107
end
108108

109109
for sym in unknowns(disc_sys)
110110
sym = unwrap(sym)
111111
is_parameter(sys, sym) ||
112112
error("Discrete subsystem $i unknown $sym is not a parameter")
113-
disc_clocks[sym] = i - 1
114-
disc_clocks[default_toterm(sym)] = i - 1
113+
disc_clocks[sym] = i
114+
disc_clocks[default_toterm(sym)] = i
115115
if hasname(sym) && (!istree(sym) || operation(sym) !== getindex)
116-
disc_clocks[getname(sym)] = i - 1
117-
disc_clocks[getname(default_toterm(sym))] = i - 1
116+
disc_clocks[getname(sym)] = i
117+
disc_clocks[getname(default_toterm(sym))] = i
118118
end
119-
insert_by_type!(disc_buffers[i - 1], sym)
119+
insert_by_type!(disc_buffers[i], sym)
120120
end
121121
t = get_iv(sys)
122122
for eq in observed(disc_sys)
@@ -127,12 +127,12 @@ function IndexCache(sys::AbstractSystem)
127127
if istree(sym) && operation(sym) == Shift(t, 1)
128128
sym = only(arguments(sym))
129129
end
130-
disc_clocks[sym] = i - 1
131-
disc_clocks[sym] = i - 1
132-
disc_clocks[default_toterm(sym)] = i - 1
130+
disc_clocks[sym] = i
131+
disc_clocks[sym] = i
132+
disc_clocks[default_toterm(sym)] = i
133133
if hasname(sym) && (!istree(sym) || operation(sym) !== getindex)
134-
disc_clocks[getname(sym)] = i - 1
135-
disc_clocks[getname(default_toterm(sym))] = i - 1
134+
disc_clocks[getname(sym)] = i
135+
disc_clocks[getname(default_toterm(sym))] = i
136136
end
137137
end
138138
end
@@ -154,7 +154,7 @@ function IndexCache(sys::AbstractSystem)
154154
end
155155

156156
affs = vcat(affects(continuous_events(sys)), affects(discrete_events(sys)))
157-
user_affect_clock = maximum(values(disc_clocks); init = 1)
157+
user_affect_clock = maximum(values(disc_clocks); init = 0) + 1
158158
for affect in affs
159159
if affect isa Equation
160160
is_parameter(sys, affect.lhs) || continue

src/systems/parameter_buffer.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -449,13 +449,15 @@ function SciMLBase.create_parameter_timeseries_collection(
449449
buffers = []
450450

451451
for (i, partition) in enumerate(ps.discrete)
452-
clock = id_to_clock[i + 1]
452+
clock = id_to_clock[i]
453453
if clock isa Clock
454454
ts = tspan[1]:(clock.dt):tspan[2]
455455
push!(buffers, DiffEqArray(NestedGetIndex{typeof(partition)}[], ts, (1, 1)))
456456
elseif clock isa SolverStepClock
457457
push!(buffers,
458458
DiffEqArray(NestedGetIndex{typeof(partition)}[], eltype(tspan)[], (1, 1)))
459+
elseif clock isa Continuous
460+
continue
459461
else
460462
error("Unhandled clock $clock")
461463
end

0 commit comments

Comments
 (0)