Skip to content

Commit 91ca34c

Browse files
refactor: remove old clock handling code, retain error messages
1 parent c8b98d3 commit 91ca34c

File tree

1 file changed

+21
-45
lines changed

1 file changed

+21
-45
lines changed

src/systems/systemstructure.jl

Lines changed: 21 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -634,53 +634,29 @@ end
634634
function structural_simplify!(state::TearingState, io = nothing; simplify = false,
635635
check_consistency = true, fully_determined = true, warn_initialize_determined = true,
636636
kwargs...)
637-
if state.sys isa ODESystem
638-
ci = ModelingToolkit.ClockInference(state)
639-
ci = ModelingToolkit.infer_clocks!(ci)
640-
time_domains = merge(Dict(state.fullvars .=> ci.var_domain),
641-
Dict(default_toterm.(state.fullvars) .=> ci.var_domain))
642-
tss, inputs, continuous_id, id_to_clock = ModelingToolkit.split_system(ci)
643-
cont_io = merge_io(io, inputs[continuous_id])
644-
sys, input_idxs = _structural_simplify!(tss[continuous_id], cont_io; simplify,
645-
check_consistency, fully_determined,
646-
kwargs...)
647-
if length(tss) > 1
648-
if continuous_id > 0
649-
throw(HybridSystemNotSupportedException("Hybrid continuous-discrete systems are currently not supported with the standard MTK compiler. This system requires JuliaSimCompiler.jl, see https://help.juliahub.com/juliasimcompiler/stable/"))
650-
end
651-
# TODO: rename it to something else
652-
discrete_subsystems = Vector{ODESystem}(undef, length(tss))
653-
# Note that the appended_parameters must agree with
654-
# `generate_discrete_affect`!
655-
appended_parameters = parameters(sys)
656-
for (i, state) in enumerate(tss)
657-
if i == continuous_id
658-
discrete_subsystems[i] = sys
659-
continue
660-
end
661-
dist_io = merge_io(io, inputs[i])
662-
ss, = _structural_simplify!(state, dist_io; simplify, check_consistency,
663-
fully_determined, kwargs...)
664-
append!(appended_parameters, inputs[i], unknowns(ss))
665-
discrete_subsystems[i] = ss
666-
end
667-
@set! sys.discrete_subsystems = discrete_subsystems, inputs, continuous_id,
668-
id_to_clock
669-
@set! sys.ps = appended_parameters
670-
@set! sys.defaults = merge(ModelingToolkit.defaults(sys),
671-
Dict(v => 0.0 for v in Iterators.flatten(inputs)))
637+
ci = ModelingToolkit.ClockInference(state)
638+
ci = ModelingToolkit.infer_clocks!(ci)
639+
time_domains = merge(Dict(state.fullvars .=> ci.var_domain),
640+
Dict(default_toterm.(state.fullvars) .=> ci.var_domain))
641+
tss, inputs, continuous_id, id_to_clock = ModelingToolkit.split_system(ci)
642+
if length(tss) > 1
643+
if continuous_id == 0
644+
throw(HybridSystemNotSupportedException("""
645+
Discrete systems with multiple clocks are not supported with the standard \
646+
MTK compiler.
647+
"""))
648+
else
649+
throw(HybridSystemNotSupportedException("""
650+
Hybrid continuous-discrete systems are currently not supported with \
651+
the standard MTK compiler. This system requires JuliaSimCompiler.jl, \
652+
see https://help.juliahub.com/juliasimcompiler/stable/
653+
"""))
672654
end
673-
ps = [sym isa CallWithMetadata ? sym :
674-
setmetadata(
675-
sym, VariableTimeDomain, get(time_domains, sym, ContinuousClock()))
676-
for sym in get_ps(sys)]
677-
@set! sys.ps = ps
678-
else
679-
sys, input_idxs = _structural_simplify!(state, io; simplify, check_consistency,
680-
fully_determined, kwargs...)
681655
end
682-
has_io = io !== nothing
683-
return has_io ? (sys, input_idxs) : sys
656+
657+
sys, input_idxs = _structural_simplify!(state, io; simplify, check_consistency,
658+
fully_determined, kwargs...)
659+
return io !== nothing ? (sys, input_idxs) : sys
684660
end
685661

686662
function _structural_simplify!(state::TearingState, io; simplify = false,

0 commit comments

Comments
 (0)