Skip to content

Commit 417530b

Browse files
committed
WIP generate_connection_set
1 parent e47fb18 commit 417530b

File tree

1 file changed

+49
-11
lines changed

1 file changed

+49
-11
lines changed

src/systems/connectors.jl

Lines changed: 49 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -211,21 +211,13 @@ else
211211
end
212212
@register mydiv(n, d)
213213

214-
function expand_connections(sys::AbstractSystem; debug=false, tol=1e-10,
215-
rename=Ref{Union{Nothing,Tuple{Symbol,Int}}}(nothing), stream_connects=[])
216-
subsys = get_systems(sys)
217-
isempty(subsys) && return sys
218-
219-
# post order traversal
220-
@set! sys.systems = map(s->expand_connections(s, debug=debug, tol=tol,
221-
rename=rename, stream_connects=stream_connects), subsys)
222-
214+
function generate_isouter(sys::AbstractSystem)
223215
outer_connectors = Symbol[]
224-
for s in subsys
216+
for s in get_systems(sys)
225217
n = nameof(s)
226218
isconnector(s) && push!(outer_connectors, n)
227219
end
228-
isouter = let outer_connectors=outer_connectors
220+
let outer_connectors=outer_connectors
229221
function isouter(sys)::Bool
230222
s = string(nameof(sys))
231223
isconnector(sys) || error("$s is not a connector!")
@@ -234,7 +226,53 @@ function expand_connections(sys::AbstractSystem; debug=false, tol=1e-10,
234226
parent_name in outer_connectors
235227
end
236228
end
229+
end
230+
231+
struct ConnectionSet
232+
set::Vector{Pair{Any, Bool}} # var => isouter
233+
end
234+
235+
function generate_connection_set(sys::AbstractSystem, namespace=nothing)
236+
subsys = get_systems(sys)
237+
isempty(subsys) && return sys
238+
239+
isouter = generate_isouter(sys)
240+
eqs′ = get_eqs(sys)
241+
eqs = Equation[]
242+
#instream_eqs = Equation[]
243+
#instream_exprs = []
244+
cts = [] # connections
245+
for eq in eqs′
246+
if eq.lhs isa Connection
247+
push!(cts, get_systems(eq.rhs))
248+
#elseif collect_instream!(instream_exprs, eq)
249+
# push!(instream_eqs, eq)
250+
else
251+
push!(eqs, eq) # split connections and equations
252+
end
253+
end
254+
255+
# if there are no connections, we are done
256+
isempty(cts) && return sys
257+
258+
set = Pair{Any, Bool}[]
259+
260+
261+
# pre order traversal
262+
namespace = renamespace(nameof(sys), namespace)
263+
@set! sys.systems = map(Base.Fix2(generate_connection_set, namespace), subsys)
264+
end
265+
266+
function expand_connections(sys::AbstractSystem; debug=false, tol=1e-10,
267+
rename=Ref{Union{Nothing,Tuple{Symbol,Int}}}(nothing), stream_connects=[])
268+
subsys = get_systems(sys)
269+
isempty(subsys) && return sys
270+
271+
# post order traversal
272+
@set! sys.systems = map(s->expand_connections(s, debug=debug, tol=tol,
273+
rename=rename, stream_connects=stream_connects), subsys)
237274

275+
isouter = generate_isouter(sys)
238276
sys = flatten(sys)
239277
eqs′ = get_eqs(sys)
240278
eqs = Equation[]

0 commit comments

Comments
 (0)