Thanks for the help !
Indeed there is no error if I supress the output in the REPL with a ;. However, if I try to simplify the system including a semicolon:
using ModelingToolkit
@variables t
@connector function PipeNode(; name)
states = @variables Ṁ(t) = 1.0 [connect = Flow]
ODESystem(Equation[], t, states, []; name = name)
end
@component function Source(; name, feed = 1.0)
@named outlet = PipeNode()
params = @parameters feed = feed
eqs = [
outlet.Ṁ ~ feed
]
compose(ODESystem(eqs, t, [], params; name = name), outlet)
end
@component function Sink(; name, product = 1.0)
@named inlet = PipeNode()
params = @parameters product = product
eqs = [
product ~ inlet.Ṁ
]
compose(ODESystem(eqs, t, [], params; name = name), inlet)
end
@component function Silo(; name)
@named inlet1 = PipeNode()
@named inlet2 = PipeNode()
@named outlet = PipeNode()
eqs = [
outlet.Ṁ ~ inlet1.Ṁ + inlet2.Ṁ
]
compose(ODESystem(eqs, t, [], []; name = name), inlet1, inlet2, outlet)
end
@named silo = Silo()
@named feed_circuit = Source()
@named feed_screen = Source()
@named prod_circuit = Sink()
circuit_eqs = [
connect(feed_circuit.outlet, silo.inlet1)
connect(feed_screen.outlet, silo.inlet2)
connect(silo.outlet, prod_circuit.inlet)
]
@named _circuit_model = ODESystem(circuit_eqs, t);
@named circuit_model = compose(_circuit_model,
[silo, feed_circuit, feed_screen, prod_circuit]);
sys = structural_simplify(circuit_model);
I get a similar error:
ERROR: UndefVarError: `name` not defined
Stacktrace:
[1] connection2set!(connectionsets::Vector{ModelingToolkit.ConnectionSet}, namespace::Nothing, ss::Tuple{ODESystem, ODESystem}, isouter::ModelingToolkit.var"#isouter#221"{Vector{Symbol}})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/MDLZQ/src/systems/connectors.jl:195
[2] generate_connection_set!(connectionsets::Vector{ModelingToolkit.ConnectionSet}, sys::ODESystem, find::Nothing, replace::Nothing, namespace::Nothing)
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/MDLZQ/src/systems/connectors.jl:312
[3] generate_connection_set!
@ ~/.julia/packages/ModelingToolkit/MDLZQ/src/systems/connectors.jl:273 [inlined]
[4] generate_connection_set
@ ~/.julia/packages/ModelingToolkit/MDLZQ/src/systems/connectors.jl:263 [inlined]
[5] expand_connections(sys::ODESystem, find::Nothing, replace::Nothing; debug::Bool, tol::Float64)
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/MDLZQ/src/systems/connectors.jl:512
[6] expand_connections (repeats 2 times)
@ ~/.julia/packages/ModelingToolkit/MDLZQ/src/systems/connectors.jl:510 [inlined]
[7] structural_simplify(sys::ODESystem, io::Nothing; simplify::Bool, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/MDLZQ/src/systems/systems.jl:21
[8] structural_simplify
@ ~/.julia/packages/ModelingToolkit/MDLZQ/src/systems/systems.jl:19 [inlined]
[9] structural_simplify(sys::ODESystem)
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/MDLZQ/src/systems/systems.jl:19
[10] top-level scope
@ ~/Documents/Code/SimHPGR/src/mdltk_silo.jl:60
Any idea why ? Acausal compopnent-based modeling is not easy.
Francis