@@ -211,21 +211,13 @@ else
211
211
end
212
212
@register mydiv (n, d)
213
213
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 )
223
215
outer_connectors = Symbol[]
224
- for s in subsys
216
+ for s in get_systems (sys)
225
217
n = nameof (s)
226
218
isconnector (s) && push! (outer_connectors, n)
227
219
end
228
- isouter = let outer_connectors= outer_connectors
220
+ let outer_connectors= outer_connectors
229
221
function isouter (sys):: Bool
230
222
s = string (nameof (sys))
231
223
isconnector (sys) || error (" $s is not a connector!" )
@@ -234,7 +226,53 @@ function expand_connections(sys::AbstractSystem; debug=false, tol=1e-10,
234
226
parent_name in outer_connectors
235
227
end
236
228
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)
237
274
275
+ isouter = generate_isouter (sys)
238
276
sys = flatten (sys)
239
277
eqs′ = get_eqs (sys)
240
278
eqs = Equation[]
0 commit comments