diff --git a/src/Thermal/HeatTransfer/ideal_components.jl b/src/Thermal/HeatTransfer/ideal_components.jl index 70dfe446..890382ca 100644 --- a/src/Thermal/HeatTransfer/ideal_components.jl +++ b/src/Thermal/HeatTransfer/ideal_components.jl @@ -201,13 +201,19 @@ This is a model to collect the heat flows from `m` heatports to one single heatp - `m`: Number of heat ports (e.g. m=2: `port_a1`, `port_a2`) """ -@component function ThermalCollector(; name, m::Integer = 1) - port_a = [HeatPort(name = Symbol(:port_a, i)) for i in 1:m] - @named port_b = HeatPort() - eqs = [port_b.Q_flow + sum(k -> k.Q_flow, port_a) ~ 0 - port_b.T ~ port_a[1].T] - for i in 1:(m - 1) - push!(eqs, port_a[i].T ~ port_a[i + 1].T) - end - ODESystem(eqs, t, [], []; systems = [port_a..., port_b], name = name) +@mtkmodel ThermalCollector begin + @structural_parameters begin + m::Integer = 1 + end + + @components begin + port_a = [HeatPort(name = Symbol(:port_a, i)) for i in 1:m] + port_b = HeatPort() + end + + @equations begin + port_b.Q_flow + sum(k -> k.Q_flow, port_a) ~ 0 + port_b.T ~ port_a[1].T + [port_a[i].T ~ port_a[i + 1].T for i in 1:(m - 1)] + end end diff --git a/src/Thermal/utils.jl b/src/Thermal/utils.jl index 22c379a0..74e9f3b4 100644 --- a/src/Thermal/utils.jl +++ b/src/Thermal/utils.jl @@ -1,14 +1,13 @@ -@connector function HeatPort(; - T = nothing, T_guess = 273.15 + 20, Q_flow = nothing, Q_flow_guess = 0.0, name) - pars = @parameters begin - T_guess = T_guess - Q_flow_guess = Q_flow_guess +@connector HeatPort begin + @parameters begin + T_guess = 273.15 + 20 + Q_flow_guess = 0.0 end - vars = @variables begin - T(t) = T, [guess = T_guess] - Q_flow(t) = Q_flow, [guess = Q_flow_guess, connect = Flow] + + @variables begin + T(t), [guess = T_guess] + Q_flow(t), [guess = Q_flow_guess, connect = Flow] end - return ODESystem(Equation[], t, vars, pars; name) end Base.@doc """ HeatPort(; T = nothing, T_guess = 273.15 + 20, Q_flow = nothing, Q_flow_guess = 0.0, name)