Skip to content

erroneous cycles started appearing in simple systems #3842

@baggepinnen

Description

@baggepinnen

A recent v9 release broke several previously working linearization examples

using ModelingToolkit
using ModelingToolkitStandardLibrary.Blocks

@mtkmodel FirstOrderTest begin
    @components begin
        in = Blocks.Step()
        fb = Blocks.Feedback()
        fo = Blocks.SecondOrder(k = 1, w = 1, d = 0.1)
    end
    @equations begin
        connect(in.output, :u, fb.input1)
        connect(fb.output, :e, fo.input)
        connect(fo.output, :y, fb.input2)
    end
end

@named model = FirstOrderTest()

analysis_points = [:y]
loop_openings = Symbol[]

S = get_sensitivity(
    model, 
    analysis_points; 
    t = 0.0, 
    loop_openings = loop_openings, 
    warn_empty_op = false, 
    allow_input_derivatives = true
)
ERROR: ArgumentError: The equations have at least one cycle.
Stacktrace:
  [1] topsort_equations(eqs::Vector{Equation}, unknowns::Vector{SymbolicUtils.BasicSymbolic{Real}}; check::Bool)
    @ ModelingToolkit ~/.julia/packages/ModelingToolkit/EpUEk/src/systems/alias_elimination.jl:441
  [2] topsort_equations(eqs::Vector{Equation}, unknowns::Vector{SymbolicUtils.BasicSymbolic{Real}})
    @ ModelingToolkit ~/.julia/packages/ModelingToolkit/EpUEk/src/systems/alias_elimination.jl:409
  [3] macro expansion
    @ ~/.julia/packages/Setfield/ZezIj/src/sugar.jl:198 [inlined]
  [4] #_structural_simplify!#1666
    @ ~/.julia/packages/ModelingToolkit/EpUEk/src/systems/systemstructure.jl:876
  [5] _structural_simplify!
    @ ~/.julia/packages/ModelingToolkit/EpUEk/src/systems/systemstructure.jl:836 [inlined]
  [6] #structural_simplify!#1661
    @ ~/.julia/packages/ModelingToolkit/EpUEk/src/systems/systemstructure.jl:829 [inlined]
  [7] structural_simplify!
    @ ~/.julia/packages/ModelingToolkit/EpUEk/src/systems/systemstructure.jl:784
  [8] #__structural_simplify#1683
    @ ~/.julia/packages/ModelingToolkit/EpUEk/src/systems/systems.jl:95
  [9] __structural_simplify
    @ ~/.julia/packages/ModelingToolkit/EpUEk/src/systems/systems.jl:75 [inlined]
 [10] structural_simplify(sys::NonlinearSystem, io::Nothing; additional_passes::Vector{…}, simplify::Bool, split::Bool, allow_symbolic::Bool, allow_parameter::Bool, conservative::Bool, fully_determined::Nothing, kwargs::@Kwargs{})
    @ ModelingToolkit ~/.julia/packages/ModelingToolkit/EpUEk/src/systems/systems.jl:36
 [11] structural_simplify (repeats 2 times)
    @ ~/.julia/packages/ModelingToolkit/EpUEk/src/systems/systems.jl:31 [inlined]
 [12] ModelingToolkit.InitializationProblem{…}(sys::ODESystem, t::Float64, u0map::Dict{…}, parammap::Dict{…}; guesses::Dict{…}, check_length::Bool, warn_initialize_determined::Bool, initialization_eqs::Vector{…}, fully_determined::Nothing, check_units::Bool, use_scc::Bool, allow_incomplete::Bool, force_time_independent::Bool, algebraic_only::Bool, kwargs::@Kwargs{})
    @ ModelingToolkit ~/.julia/packages/ModelingToolkit/EpUEk/src/systems/diffeqs/abstractodesystem.jl:1482
 [13] (ModelingToolkit.InitializationProblem{})(::ODESystem, ::Float64, ::Vararg{…}; kwargs::@Kwargs{})
    @ ModelingToolkit ~/.julia/packages/ModelingToolkit/EpUEk/src/systems/diffeqs/abstractodesystem.jl:1420
 [14] maybe_build_initialization_problem(sys::ODESystem, iip::Bool, op::Dict{…}, u0map::Dict{…}, pmap::Dict{…}, t::Nothing, defs::Dict{…}, guesses::Dict{…}, missing_unknowns::Set{…}; implicit_dae::Bool, u0_constructor::Function, p_constructor::Function, floatT::Type, initialization_eqs::Vector{…}, use_scc::Bool, kwargs::@Kwargs{})
    @ ModelingToolkit ~/.julia/packages/ModelingToolkit/EpUEk/src/systems/problem_utils.jl:1070
 [15] process_SciMLProblem(constructor::Type, sys::ODESystem, u0map::Dict{…}, pmap::SciMLBase.NullParameters; build_initializeprob::Bool, implicit_dae::Bool, t::Nothing, guesses::Dict{…}, warn_initialize_determined::Bool, initialization_eqs::Vector{…}, eval_expression::Bool, eval_module::Module, fully_determined::Nothing, check_initialization_units::Bool, tofloat::Bool, u0_constructor::typeof(identity), p_constructor::typeof(identity), du0map::Nothing, check_length::Bool, symbolic_u0::Bool, warn_cyclic_dependency::Bool, circular_dependency_max_cycle_length::Int64, circular_dependency_max_cycles::Int64, substitution_limit::Int64, use_scc::Bool, force_initialization_time_independent::Bool, algebraic_only::Bool, allow_incomplete::Bool, is_initializeprob::Bool, kwargs::@Kwargs{})
    @ ModelingToolkit ~/.julia/packages/ModelingToolkit/EpUEk/src/systems/problem_utils.jl:1325
 [16] (ODEProblem{})(sys::ODESystem, u0map::Dict{…}, tspan::Tuple{…}, parammap::SciMLBase.NullParameters; allow_cost::Bool, callback::Nothing, check_length::Bool, warn_initialize_determined::Bool, eval_expression::Bool, eval_module::Module, kwargs::@Kwargs{})
    @ ModelingToolkit ~/.julia/packages/ModelingToolkit/EpUEk/src/systems/diffeqs/abstractodesystem.jl:806
 [17] linearization_function(sys::ODESystem, inputs::Vector{…}, outputs::Vector{…}; simplify::Bool, initialize::Bool, initializealg::Nothing, initialization_abstol::Float64, initialization_reltol::Float64, op::Dict{…}, p::SciMLBase.NullParameters, zero_dummy_der::Bool, initialization_solver_alg::NonlinearSolveFirstOrder.GeneralizedFirstOrderAlgorithm{…}, autodiff::ADTypes.AutoForwardDiff{…}, eval_expression::Bool, eval_module::Module, warn_initialize_determined::Bool, guesses::Dict{…}, warn_empty_op::Bool, kwargs::@Kwargs{})
    @ ModelingToolkit ~/.julia/packages/ModelingToolkit/EpUEk/src/linearization.jl:76
 [18] get_linear_analysis_function(sys::ODESystem, transform::typeof(ModelingToolkit.SensitivityTransform), aps::Vector{…}; system_modifier::typeof(identity), loop_openings::Vector{…}, kwargs::@Kwargs{})
    @ ModelingToolkit ~/.julia/packages/ModelingToolkit/EpUEk/src/systems/analysis_points.jl:849
 [19] get_linear_analysis_function
    @ ~/.julia/packages/ModelingToolkit/EpUEk/src/systems/analysis_points.jl:838 [inlined]
 [20] #get_sensitivity_function#561
    @ ~/.julia/packages/ModelingToolkit/EpUEk/src/systems/analysis_points.jl:866 [inlined]
 [21] get_sensitivity(::ODESystem, ::Vector{Symbol}; loop_openings::Vector{Symbol}, system_modifier::Function, kwargs::@Kwargs{t::Float64, warn_empty_op::Bool, allow_input_derivatives::Bool})
    @ ModelingToolkit ~/.julia/packages/ModelingToolkit/EpUEk/src/systems/analysis_points.jl:907
 [22] top-level scope
    @ REPL[17]:1
Some type information was truncated. Use `show(err)` to see complete types.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions