Skip to content

Commit b0b2a33

Browse files
committed
Connection with domain connectors don't generate any equations
1 parent a19dd51 commit b0b2a33

File tree

1 file changed

+26
-3
lines changed

1 file changed

+26
-3
lines changed

src/systems/connectors.jl

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,27 @@ function connection2set!(connectionsets, namespace, ss, isouter)
197197
push!(regular_ss, s)
198198
end
199199
end
200+
T = ConnectionElement
200201
@assert !isempty(regular_ss)
201202
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
202221
s1 = first(ss)
203222
sts1v = states(s1)
204223
if isframe(s1) # Multibody
@@ -207,7 +226,6 @@ function connection2set!(connectionsets, namespace, ss, isouter)
207226
sts1v = [sts1v; orientation_vars]
208227
end
209228
sts1 = Set(sts1v)
210-
T = ConnectionElement
211229
num_statevars = length(sts1)
212230
csets = [T[] for _ in 1:num_statevars] # Add 9 orientation variables if connection is between multibody frames
213231
for (i, s) in enumerate(ss)
@@ -241,7 +259,11 @@ end
241259
function generate_connection_set(sys::AbstractSystem, find = nothing, replace = nothing)
242260
connectionsets = ConnectionSet[]
243261
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)
245267
end
246268

247269
function generate_connection_set!(connectionsets, sys::AbstractSystem, find, replace,
@@ -298,7 +320,7 @@ function generate_connection_set!(connectionsets, sys::AbstractSystem, find, rep
298320
@set! sys.eqs = eqs
299321
end
300322

301-
function Base.merge(csets::AbstractVector{<:ConnectionSet})
323+
function Base.merge(csets::AbstractVector{<:ConnectionSet}, domain = false)
302324
mcsets = ConnectionSet[]
303325
ele2idx = Dict{ConnectionElement, Int}()
304326
cacheset = Set{ConnectionElement}()
@@ -329,6 +351,7 @@ function Base.merge(csets::AbstractVector{<:ConnectionSet})
329351
end
330352
end
331353
csets = mcsets
354+
domain || return csets
332355
g, roots = rooted_system_domain_graph(csets)
333356
domain_csets = []
334357
root_ijs = Set(g.id2cset[r] for r in roots)

0 commit comments

Comments
 (0)