@@ -197,8 +197,27 @@ function connection2set!(connectionsets, namespace, ss, isouter)
197
197
push! (regular_ss, s)
198
198
end
199
199
end
200
+ T = ConnectionElement
200
201
@assert ! isempty (regular_ss)
201
202
ss = regular_ss
203
+ # domain connections don't generate any equations
204
+ if domain_ss != = nothing
205
+ cset = ConnectionElement[]
206
+ dv = only (states (domain_ss))
207
+ for (i, s) in enumerate (ss)
208
+ sts = states (s)
209
+ io = isouter (s)
210
+ for (j, v) in enumerate (sts)
211
+ vtype = get_connection_type (v)
212
+ (vtype === Flow && isequal (v, dv)) || continue
213
+ push! (cset, T (LazyNamespace (namespace, domain_ss), dv, false ))
214
+ push! (cset, T (LazyNamespace (namespace, s), v, io))
215
+ end
216
+ end
217
+ @assert length (cset) > 0
218
+ push! (connectionsets, ConnectionSet (cset))
219
+ return connectionsets
220
+ end
202
221
s1 = first (ss)
203
222
sts1v = states (s1)
204
223
if isframe (s1) # Multibody
@@ -207,7 +226,6 @@ function connection2set!(connectionsets, namespace, ss, isouter)
207
226
sts1v = [sts1v; orientation_vars]
208
227
end
209
228
sts1 = Set (sts1v)
210
- T = ConnectionElement
211
229
num_statevars = length (sts1)
212
230
csets = [T[] for _ in 1 : num_statevars] # Add 9 orientation variables if connection is between multibody frames
213
231
for (i, s) in enumerate (ss)
241
259
function generate_connection_set (sys:: AbstractSystem , find = nothing , replace = nothing )
242
260
connectionsets = ConnectionSet[]
243
261
sys = generate_connection_set! (connectionsets, sys, find, replace)
244
- sys, merge (connectionsets)
262
+ domain_free_connectionsets = filter (connectionsets) do cset
263
+ ! any (s -> is_domain_connector (s. sys. sys), cset. set)
264
+ end
265
+ _, domainset = merge (connectionsets, true )
266
+ sys, (merge (domain_free_connectionsets), domainset)
245
267
end
246
268
247
269
function generate_connection_set! (connectionsets, sys:: AbstractSystem , find, replace,
@@ -298,7 +320,7 @@ function generate_connection_set!(connectionsets, sys::AbstractSystem, find, rep
298
320
@set! sys. eqs = eqs
299
321
end
300
322
301
- function Base. merge (csets:: AbstractVector{<:ConnectionSet} )
323
+ function Base. merge (csets:: AbstractVector{<:ConnectionSet} , domain = false )
302
324
mcsets = ConnectionSet[]
303
325
ele2idx = Dict {ConnectionElement, Int} ()
304
326
cacheset = Set {ConnectionElement} ()
@@ -329,6 +351,7 @@ function Base.merge(csets::AbstractVector{<:ConnectionSet})
329
351
end
330
352
end
331
353
csets = mcsets
354
+ domain || return csets
332
355
g, roots = rooted_system_domain_graph (csets)
333
356
domain_csets = []
334
357
root_ijs = Set (g. id2cset[r] for r in roots)
0 commit comments