Skip to content

Commit 15bdea4

Browse files
fixup! refactor: continuous system is always first discrete subsystem
1 parent c2b2b95 commit 15bdea4

File tree

2 files changed

+15
-10
lines changed

2 files changed

+15
-10
lines changed

src/systems/clock_inference.jl

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -186,10 +186,13 @@ function split_system(ci::ClockInference{S}) where {S}
186186
end
187187
tss[id] = ts_i
188188
end
189-
tss[continuous_id], tss[1] = tss[1], tss[continuous_id]
190-
inputs[continuous_id], inputs[1] = inputs[1], inputs[continuous_id]
191-
id_to_clock[continuous_id], id_to_clock[1] = id_to_clock[1], id_to_clock[continuous_id]
192-
continuous_id = 1
189+
if continuous_id !== 0
190+
tss[continuous_id], tss[end] = tss[end], tss[continuous_id]
191+
inputs[continuous_id], inputs[end] = inputs[end], inputs[continuous_id]
192+
id_to_clock[continuous_id], id_to_clock[end] = id_to_clock[end],
193+
id_to_clock[continuous_id]
194+
continuous_id = lastindex(tss)
195+
end
193196
return tss, inputs, continuous_id, id_to_clock
194197
end
195198

@@ -267,7 +270,7 @@ function generate_discrete_affect(
267270
let_block) |> toexpr
268271
cont_to_disc_idxs = [parameter_index(osys, sym) for sym in input]
269272
disc_range = [parameter_index(osys, sym) for sym in unknowns(sys)]
270-
save_expr = :($(SciMLBase.save_discretes!)(integrator, $(i - 1)))
273+
save_expr = :($(SciMLBase.save_discretes!)(integrator, $i))
271274
empty_disc = isempty(disc_range)
272275

273276
# @show disc_to_cont_idxs
@@ -290,13 +293,13 @@ function generate_discrete_affect(
290293
# d2c comes last
291294
# @show t
292295
# @show "incoming", p
293-
result = c2d_obs(integrator.u, p..., t)
296+
result = c2d_obs(u, p..., t)
294297
for (val, i) in zip(result, $cont_to_disc_idxs)
295298
$(_set_parameter_unchecked!)(p, val, i; update_dependent = false)
296299
end
297300
$(if !empty_disc
298301
quote
299-
disc(disc_unknowns, integrator.u, p..., t)
302+
disc(disc_unknowns, u, p..., t)
300303
for (val, i) in zip(disc_unknowns, $disc_range)
301304
$(_set_parameter_unchecked!)(p, val, i; update_dependent = false)
302305
end
@@ -316,6 +319,7 @@ function generate_discrete_affect(
316319
$(SciMLStructures.Discrete()), p)
317320
repack(discretes)
318321
end)
322+
319323
push!(affect_funs, affect!)
320324
end
321325
if eval_expression

test/clock.jl

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,11 @@ By inference:
6464

6565
ci, varmap = infer_clocks(sys)
6666
eqmap = ci.eq_domain
67-
tss, inputs = ModelingToolkit.split_system(deepcopy(ci))
68-
sss, = ModelingToolkit._structural_simplify!(deepcopy(tss[1]), (inputs[1], ()))
67+
tss, inputs, continuous_id = ModelingToolkit.split_system(deepcopy(ci))
68+
sss, = ModelingToolkit._structural_simplify!(
69+
deepcopy(tss[continuous_id]), (inputs[continuous_id], ()))
6970
@test equations(sss) == [D(x) ~ u - x]
70-
sss, = ModelingToolkit._structural_simplify!(deepcopy(tss[2]), (inputs[2], ()))
71+
sss, = ModelingToolkit._structural_simplify!(deepcopy(tss[1]), (inputs[1], ()))
7172
@test isempty(equations(sss))
7273
d = Clock(t, dt)
7374
k = ShiftIndex(d)

0 commit comments

Comments
 (0)