Skip to content

Commit ed0f8c1

Browse files
committed
Fix some minor issues
1 parent 1d34c07 commit ed0f8c1

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

src/systems/connectors.jl

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ function connect(c::Connection; check=true)
118118
end
119119

120120
instream(a) = term(instream, unwrap(a), type=symtype(a))
121+
SymbolicUtils.promote_symtype(::typeof(instream), _) = Real
121122

122123
isconnector(s::AbstractSystem) = has_connector_type(s) && get_connector_type(s) !== nothing
123124
isstreamconnector(s::AbstractSystem) = isconnector(s) && get_connector_type(s) isa StreamConnector
@@ -383,7 +384,7 @@ function expand_connections(sys::AbstractSystem; debug=false)
383384
return sys
384385
end
385386

386-
function collect_connections(sys::AbstractSystem; debug=false)
387+
function collect_connections(sys::AbstractSystem; debug=false, tol=1e-10)
387388
subsys = get_systems(sys)
388389
isempty(subsys) && return sys
389390

@@ -494,13 +495,13 @@ function collect_connections(sys::AbstractSystem; debug=false)
494495
# stream variables
495496
stream_connects = filter(isstreamconnection, narg_connects)
496497
@show length(stream_connects)
497-
instream_eqs, additional_eqs = expand_instream(instream_eqs, instream_exprs, stream_connects; debug=debug)
498+
instream_eqs, additional_eqs = expand_instream(instream_eqs, instream_exprs, stream_connects; debug=debug, tol=tol)
498499

499500
@set! sys.eqs = [eqs; instream_eqs; additional_eqs]
500501
return sys
501502
end
502503

503-
function expand_instream(instream_eqs, instream_exprs, connects; debug=false)
504+
function expand_instream(instream_eqs, instream_exprs, connects; debug=false, tol)
504505
sub = Dict()
505506
seen = Set()
506507
for ex in instream_exprs
@@ -535,7 +536,6 @@ function expand_instream(instream_eqs, instream_exprs, connects; debug=false)
535536
connector_name === only(inner_names) || error("$var is not in any stream connector of $(nameof(ogsys))")
536537
sub[ex] = var
537538
elseif n_inners == 2 && n_outers == 0
538-
@info connector_name collect(inner_names) length(inner_sc)
539539
connector_name in inner_names || error("$var is not in any stream connector of $(nameof(ogsys))")
540540
idx = findfirst(c->nameof(c) === connector_name, inner_sc)
541541
other = idx == 1 ? 2 : 1
@@ -550,9 +550,9 @@ function expand_instream(instream_eqs, instream_exprs, connects; debug=false)
550550
end
551551
else
552552
fv = flowvar(first(connectors))
553-
idx = findfirst(c->nameof(c) === connector_name, inner_sc)
554-
if idx !== nothing
555-
si = sum(s->max(states(s, fv), 0), outer_sc)
553+
i = findfirst(c->nameof(c) === connector_name, inner_sc)
554+
if i !== nothing
555+
si = isempty(outer_sc) ? 0 : sum(s->max(states(s, fv), 0), outer_sc)
556556
for j in 1:n_inners; j == i && continue
557557
f = states(inner_sc[j], fv)
558558
si += max(-f, 0)
@@ -586,7 +586,9 @@ function expand_instream(instream_eqs, instream_exprs, connects; debug=false)
586586
inner_sc = c.inners
587587
n_outers = length(outer_sc)
588588
n_inners = length(inner_sc)
589-
for sv in get_states(first(outer_sc))
589+
connector_representative = first(outer_sc)
590+
fv = flowvar(connector_representative)
591+
for sv in get_states(connector_representative)
590592
vtype = getmetadata(sv, ModelingToolkit.VariableConnectType, nothing)
591593
vtype === Stream || continue
592594
if n_inners == 1 && n_outers == 1
@@ -600,11 +602,12 @@ function expand_instream(instream_eqs, instream_exprs, connects; debug=false)
600602
push!(additional_eqs, v1 ~ instream(v2))
601603
push!(additional_eqs, v2 ~ instream(v1))
602604
else
605+
sq = 0
603606
for q in 1:n_outers
604607
sq += sum(s->max(-states(s, fv), 0), inner_sc)
605608
for k in 1:n_outers; k == q && continue
606-
f = states(outer_sc[j], fv)
607-
si += max(f, 0)
609+
f = states(outer_sc[k], fv)
610+
sq += max(f, 0)
608611
end
609612

610613
num = 0
@@ -629,6 +632,7 @@ function expand_instream(instream_eqs, instream_exprs, connects; debug=false)
629632

630633
instream_eqs = map(Base.Fix2(substitute, sub), instream_eqs)
631634
if debug
635+
println("===========BEGIN=============")
632636
println("Expanded equations:")
633637
for eq in instream_eqs
634638
print_with_indent(4, eq)
@@ -639,6 +643,7 @@ function expand_instream(instream_eqs, instream_exprs, connects; debug=false)
639643
print_with_indent(4, eq)
640644
end
641645
end
646+
println("============END==============")
642647
end
643648
return instream_eqs, additional_eqs
644649
end

0 commit comments

Comments
 (0)