@@ -634,53 +634,29 @@ end
634634function 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
684660end
685661
686662function _structural_simplify! (state:: TearingState , io; simplify = false ,
0 commit comments