Skip to content

Commit 1edd7d5

Browse files
committed
Forward pins and add pins to the states
1 parent 32c5757 commit 1edd7d5

File tree

4 files changed

+9
-6
lines changed

4 files changed

+9
-6
lines changed

src/systems/abstractsystem.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ end
215215
independent_variable(sys::AbstractSystem) = sys.iv
216216
function states(sys::AbstractSystem)
217217
unique(isempty(sys.systems) ?
218-
setdiff(sys.states, value.(sys.pins)) :
218+
sys.states :
219219
[sys.states;reduce(vcat,namespace_variables.(sys.systems))])
220220
end
221221
parameters(sys::AbstractSystem) = isempty(sys.systems) ? sys.ps : [sys.ps;reduce(vcat,namespace_parameters.(sys.systems))]

src/systems/diffeqs/odesystem.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,12 @@ function ODESystem(deqs::AbstractVector{<:Equation}, iv, dvs, ps;
7171
iv′ = value(iv)
7272
dvs′ = value.(dvs)
7373
ps′ = value.(ps)
74+
pins′ = value.(pins)
7475
tgrad = RefValue(Vector{Num}(undef, 0))
7576
jac = RefValue{Any}(Matrix{Num}(undef, 0, 0))
7677
Wfact = RefValue(Matrix{Num}(undef, 0, 0))
7778
Wfact_t = RefValue(Matrix{Num}(undef, 0, 0))
78-
ODESystem(deqs, iv′, dvs′, ps′, pins, observed, tgrad, jac, Wfact, Wfact_t, name, systems)
79+
ODESystem(deqs, iv′, dvs′, ps′, pins, observed, tgrad, jac, Wfact, Wfact_t, name, systems)
7980
end
8081

8182
var_from_nested_derivative(x, i=0) = (missing, missing)

src/systems/nonlinear/nonlinearsystem.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ function NonlinearSystem(eqs, states, ps;
4242
observed = [],
4343
name = gensym(:NonlinearSystem),
4444
systems = NonlinearSystem[])
45-
NonlinearSystem(eqs, value.(states), value.(ps), value.(pins), observed, name, systems)
45+
NonlinearSystem(value.(eqs), value.(states), value.(ps), value.(pins), observed, name, systems)
4646
end
4747

4848
function calculate_jacobian(sys::NonlinearSystem;sparse=false,simplify=false)

src/systems/reduction.jl

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ function flatten(sys::ODESystem)
88
independent_variable(sys),
99
states(sys),
1010
parameters(sys),
11+
pins=pins(sys),
1112
observed=observed(sys))
1213
end
1314
end
@@ -56,8 +57,6 @@ end
5657

5758
function alias_elimination(sys::ODESystem)
5859
eqs = vcat(equations(sys), observed(sys))
59-
neweqs = Equation[]; sizehint!(neweqs, length(eqs))
60-
subs = Pair[]
6160
diff_vars = filter(!isnothing, map(eqs) do eq
6261
if isdiffeq(eq)
6362
arguments(eq.lhs)[1]
@@ -67,6 +66,9 @@ function alias_elimination(sys::ODESystem)
6766
end) |> Set
6867

6968
deps = Set()
69+
subs = Pair[]
70+
neweqs = Equation[]; sizehint!(neweqs, length(eqs))
71+
7072
for (i, eq) in enumerate(eqs)
7173
# only substitute when the variable is algebraic
7274
if isdiffeq(eq)
@@ -109,7 +111,7 @@ function alias_elimination(sys::ODESystem)
109111

110112
alias_vars = first.(subs)
111113
sys_states = states(sys)
112-
alias_eqs = alias_vars .~ last.(subs)
114+
alias_eqs = topsort_equations(alias_vars .~ last.(subs), sys_states)
113115

114116
newstates = setdiff(sys_states, alias_vars)
115117
ODESystem(neweqs, sys.iv, newstates, parameters(sys), observed=alias_eqs)

0 commit comments

Comments
 (0)