# Stream Connections of Subsystems

**URL:** <https://discourse.julialang.org/t/stream-connections-of-subsystems/121279>\
**Category:** Modelling & Simulations\
**Tags:** sciml\
**Created:** [October 14, 2024, 10:09am UTC](https://discourse.julialang.org/t/stream-connections-of-subsystems/121279 "2024-10-14T10:09:08Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Sebastian\_Schmitt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sebastian_schmitt/32/210190_2.png) [@Sebastian\_Schmitt](https://discourse.julialang.org/u/Sebastian_Schmitt)\
**Post date:** [October 14, 2024, 10:09am UTC](https://discourse.julialang.org/t/stream-connections-of-subsystems/121279/1 "2024-10-14T10:09:08Z")

</div>

Hi, I have a system with two subsystems (which themself have two connectors with stream variables). I want to connect the connectors of the subsystem in the main system

```julia
using ModelingToolkit
using ModelingToolkit: t_nounits as t, scalarize

@connector TwoPhaseFluidPort begin
    @variables begin
        (h_outflow(t) = 0.0), [connect = Stream]
        (m_flow(t) = 0.0), [connect = Flow]
        P(t) = 0.0
    end
end

@mtkmodel SubSys begin
    @components begin
        sp1 = TwoPhaseFluidPort()
        sp2 = TwoPhaseFluidPort()
    end
end

@mtkmodel Sys begin
    @components begin
        subsys = SubSys()
    end
    @equations begin
        connect(subsys.sp1, subsys.sp2)
    end
end

@named sys = Sys()

sys_exp = expand_connections(sys)
eqs = equations(sys_exp)

# Output:
# 2-element Vector{Equation}:
# 0 ~ subsys₊sp1₊m_flow(t) + subsys₊sp2₊m_flow(t)
# subsys₊sp1₊P(t) ~ subsys₊sp2₊P(t)

```

The stream equations are missing. They appear when I don’t use subsystems:

```julia
 @mtkmodel Sys2 begin
    @components begin
        sp1 = TwoPhaseFluidPort()
        sp2 = TwoPhaseFluidPort()
    end
    @equations begin
        connect(sp1, sp2)
    end
end

@named sys2 = Sys2()

sys2_exp = expand_connections(sys2)
eqs2 = equations(sys2_exp)

# Output:
# 6-element Vector{Equation}:
# sp1₊h_outflow(t) ~ ModelingToolkit.instream(sp2₊h_outflow(t))
# sp2₊h_outflow(t) ~ ModelingToolkit.instream(sp1₊h_outflow(t))
# 0 ~ sp1₊m_flow(t)
# 0 ~ sp2₊m_flow(t)
# 0 ~ -sp1₊m_flow(t) - sp2₊m_flow(t)
# sp1₊P(t) ~ sp2₊P(t)

```

Is this a bug or do I have to do sth differently?

I’m using Julia 1.10.5 with following package versions:

```julia
[961ee093] ModelingToolkit v9.46.1

```

---

<div class="post-metadata">

**Author:** ![R.T.A.M](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/r.t.a.m/32/22289_2.png) [@R.T.A.M](https://discourse.julialang.org/u/R.T.A.M)\
**Post date:** [October 14, 2024, 11:58am UTC](https://discourse.julialang.org/t/stream-connections-of-subsystems/121279/2 "2024-10-14T11:58:16Z")

</div>

I tried the first code snippet. Did you get and error complaining about use of Keyword Sys at line: @mtkmodel Sys begin ?  
ERROR: cannot assign a value to imported variable Base.Sys from module Main

---

<div class="post-metadata">

**Author:** ![Sebastian\_Schmitt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sebastian_schmitt/32/210190_2.png) [@Sebastian\_Schmitt](https://discourse.julialang.org/u/Sebastian_Schmitt)\
**Post date:** [October 14, 2024, 1:20pm UTC](https://discourse.julialang.org/t/stream-connections-of-subsystems/121279/3 "2024-10-14T13:20:48Z")

</div>

No, the code worked for me as given above. However, I renamed the models in the example to avoid this:

```julia
using ModelingToolkit
using ModelingToolkit: t_nounits as t, scalarize

@connector TwoPhaseFluidPort begin
    @variables begin
        (h_outflow(t) = 0.0), [connect = Stream]
        (m_flow(t) = 0.0), [connect = Flow]
        P(t) = 0.0
    end
end

@mtkmodel SubModel begin
    @components begin
        sp1 = TwoPhaseFluidPort()
        sp2 = TwoPhaseFluidPort()
    end
end

@mtkmodel Model begin
    @components begin
        subsys = SubModel()
    end
    @equations begin
        connect(subsys.sp1, subsys.sp2)
    end
end

@named model = Model()

model_exp = expand_connections(model)
eqs = equations(model_exp)

# Output:
# 2-element Vector{Equation}:
# 0 ~ subsys₊sp1₊m_flow(t) + subsys₊sp2₊m_flow(t)
# subsys₊sp1₊P(t) ~ subsys₊sp2₊P(t)
 
@mtkmodel Model2 begin
   @components begin
        sp1 = TwoPhaseFluidPort()
        sp2 = TwoPhaseFluidPort()
    end
    @equations begin
        connect(sp1, sp2)
    end
end

@named model2 = Model2()

model2_exp = expand_connections(model2)
eqs2 = equations(model2_exp)

# Output:
# 6-element Vector{Equation}:
# sp1₊h_outflow(t) ~ ModelingToolkit.instream(sp2₊h_outflow(t))
# sp2₊h_outflow(t) ~ ModelingToolkit.instream(sp1₊h_outflow(t))
# 0 ~ sp1₊m_flow(t)
# 0 ~ sp2₊m_flow(t)
# 0 ~ -sp1₊m_flow(t) - sp2₊m_flow(t)
# sp1₊P(t) ~ sp2₊P(t)

```
