Description
As mentioned in the OP of SciML/DifferentialEquations.jl#261 , it would be nice to be able to support Component
s. An AbstractComponent
is a miniature system, and then you can compose components to build complicated systems. The Modelica example is that you can build components for things like Resistor
and Capacitor
, and then piece these together to build a circuit really easily. We would like to have something like that.
I am thinking that the base form could be:
struct Lorenz <: AbstractComponent
x::Variable
y::Variable
z::Variable
eqs::Vector{Expression}
flags::Vector{:Symbol}
end
lorenz_eqs = [D*x == σ*(y-x)
D*y == x*(ρ-z)-y
D*z == x*y - β*z]
Lorenz() = Lorenz(@Var(x),@Var(y),@Var(z),lorenz_eqs,[:none,:none,:flow])
which could then have a macro form:
@component struct Lorenz
x
y
z::Flow
end begin
D*x = σ*(y-x)
D*y = x*(ρ-z)-y
D*z = x*y - β*z
end
I'm not so familiar with Modelica so I am hoping that someone like @tshort or @smldis could help bikeshed this to make sure this could be feature-complete with it. Here's the Modia paper for reference.
Then of course we'd define some functions on AbstractComponent
, but I'd need to find out what that connect
stuff is supposed to be doing...