Skip to content

Commit a12ce10

Browse files
committed
WIP
1 parent 8c2e426 commit a12ce10

File tree

3 files changed

+53
-1
lines changed

3 files changed

+53
-1
lines changed

src/systems/clock_inference.jl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@ function split_system(ci::ClockInference)
130130
fadj = Vector{Int}[]
131131
eqs_i = Equation[]
132132
eq_to_diff = DiffGraph(length(ieqs))
133-
var_set_i = BitSet(vars)
134133
ne = 0
135134
for (j, eq_i) in enumerate(ieqs)
136135
vars = copy(graph.fadjlist[eq_i])

src/systems/systemstructure.jl

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,30 @@ function TearingState(sys; quick_cancel = false, check = true)
258258
idx = addvar!(dvar)
259259
end
260260

261+
dvar = var
262+
idx = varidx
263+
if ModelingToolkit.isoperator(dvar, ModelingToolkit.Shift)
264+
if !(idx in dervaridxs)
265+
push!(dervaridxs, idx)
266+
end
267+
op = operation(dvar)
268+
tt = op.t
269+
steps = op.steps
270+
v = arguments(dvar)[1]
271+
for s in (steps - 1):-1:1
272+
sf = Shift(tt, s)
273+
dvar = sf(v)
274+
idx = addvar!(dvar)
275+
if !(idx in dervaridxs)
276+
push!(dervaridxs, idx)
277+
end
278+
end
279+
idx = addvar!(v)
280+
#if !(idx in dervaridxs)
281+
# push!(dervaridxs, idx)
282+
#end
283+
end
284+
261285
if istree(var) && operation(var) isa Symbolics.Operator &&
262286
!isdifferential(var) && (it = input_timedomain(var)) !== nothing
263287
set_incidence = false

test/clock.jl

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ dt = 0.1
1111
@variables t x(t) y(t) u(t) yd(t) ud(t) r(t)
1212
@parameters kp
1313
D = Differential(t)
14+
# u(n + 1) := f(u(n))
1415

1516
eqs = [yd ~ Sample(t, dt)(y)
1617
ud ~ kp * (r - yd)
@@ -85,6 +86,34 @@ d = Clock(t, dt)
8586
@test varmap[y] == Continuous()
8687
@test varmap[u] == Continuous()
8788

89+
@info "Testing shift normalization"
90+
dt = 0.1
91+
@variables t x(t) y(t) u(t) yd(t) ud(t) r(t) z(t)
92+
@parameters kp
93+
D = Differential(t)
94+
d = Clock(t, dt)
95+
k = ShiftIndex(d)
96+
97+
eqs = [yd ~ Sample(t, dt)(y)
98+
ud ~ kp * (r - yd)
99+
r ~ 1.0
100+
101+
# plant (time continuous part)
102+
u ~ Hold(ud)
103+
D(x) ~ -x + u
104+
y ~ x
105+
z(k + 2) ~ z(k) + yd
106+
#=
107+
z(k + 2) ~ z(k)
108+
=>
109+
z′(k + 1) ~ z(k)
110+
z(k + 1) ~ z′(k)
111+
=#
112+
]
113+
@named sys = ODESystem(eqs)
114+
ci, varmap = infer_clocks(sys)
115+
tss, inputs = ModelingToolkit.split_system(deepcopy(ci))
116+
88117
@info "Testing multi-rate hybrid system"
89118
dt = 0.1
90119
dt2 = 0.2

0 commit comments

Comments
 (0)