Skip to content

flatten(sys) and namespace_equations do not handle connect correctly #1826

Closed
@baggepinnen

Description

@baggepinnen

Flattening a system that contains connect statements produces an invalid system

julia> structural_simplify(sys_outer)
Model outer with 7 equations
...

julia> structural_simplify(ModelingToolkit.flatten(sys_outer))
ERROR: ExtraVariablesSystemException: The system is unbalanced. There are 19 highest order derivative variables and 13 equations.
More variables than equations, here are the potential extra variable(s):
 F₊x(t)
 inner₊P₊x(t)
 inner₊P₊input₊u(t)
 inner₊C₊input₊u(t)
 inner₊add₊input2₊u(t)
 add₊input2₊u(t)
 C₊input₊u(t)
 P₊input₊u(t)
Stacktrace:

Connections like connect(P.output, add.input2) should have been turned into connect(inner.P.output, inner.add.input2)

julia> equations(ModelingToolkit.flatten(sys_outer))
18-element Vector{Equation}:
 connect(r.output, F.input)
 connect(F.output, inner.add.input1)
 F₊u(t) ~ F₊input₊u(t)
 F₊y(t) ~ F₊output₊u(t)
 Differential(t)(F₊x(t)) ~ (F₊k*F₊u(t) - F₊x(t)) / F₊T
 F₊y(t) ~ F₊x(t)
 connect(P.output, add.input2)
 connect(add.output, C.input)
 connect(C.output, P.input)
 inner₊P₊u(t) ~ inner₊P₊input₊u(t)
 inner₊P₊y(t) ~ inner₊P₊output₊u(t)
 Differential(t)(inner₊P₊x(t)) ~ (inner₊P₊k*inner₊P₊u(t) - inner₊P₊x(t)) / inner₊P₊T
 inner₊P₊y(t) ~ inner₊P₊x(t)
 inner₊C₊u(t) ~ inner₊C₊input₊u(t)
 inner₊C₊y(t) ~ inner₊C₊output₊u(t)
 inner₊C₊y(t) ~ inner₊C₊k*inner₊C₊u(t)
 inner₊add₊output₊u(t) ~ inner₊add₊k1*inner₊add₊input1₊u(t) + inner₊add₊k2*inner₊add₊input2₊u(t)
 r₊output₊u(t) ~ r₊k

This also applies to namespace_equations(sys)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions