Skip to content

Commit f006d57

Browse files
committed
Don't reduce inputs
1 parent 9c79d12 commit f006d57

File tree

4 files changed

+17
-4
lines changed

4 files changed

+17
-4
lines changed

src/structural_transformation/StructuralTransformations.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ using ModelingToolkit
1616
using ModelingToolkit: ODESystem, AbstractSystem,var_from_nested_derivative, Differential,
1717
states, equations, vars, Symbolic, diff2term, value,
1818
operation, arguments, Sym, Term, simplify, solve_for,
19-
isdiffeq, isdifferential, get_structure, get_iv, independent_variables,
19+
isdiffeq, isdifferential, isinput,
20+
get_structure, get_iv, independent_variables,
2021
get_structure, defaults, InvalidSystemException,
2122
ExtraEquationsSystemException,
2223
ExtraVariablesSystemException,

src/structural_transformation/utils.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,9 @@ function find_solvables!(sys)
276276
term = value(eq.rhs - eq.lhs)
277277
for j in 𝑠neighbors(graph, i)
278278
isalgvar(s, j) || continue
279-
a, b, islinear = linear_expansion(term, fullvars[j])
279+
var = fullvars[j]
280+
isinput(var) && continue
281+
a, b, islinear = linear_expansion(term, var)
280282
a = unwrap(a)
281283
if islinear && (!(a isa Symbolic) && a isa Number && a != 0)
282284
add_edge!(solvable_graph, i, j)

src/systems/systemstructure.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ using Symbolics: linear_expansion, unwrap
55
using SymbolicUtils: istree, operation, arguments, Symbolic
66
using ..ModelingToolkit
77
import ..ModelingToolkit: isdiffeq, var_from_nested_derivative, vars!, flatten,
8-
value, InvalidSystemException, isdifferential, _iszero, isparameter, independent_variables
8+
value, InvalidSystemException, isdifferential, _iszero, isparameter,
9+
independent_variables, isinput
910
using ..BipartiteGraphs
1011
using LightGraphs
1112
using UnPack
@@ -230,7 +231,7 @@ function find_linear_equations(sys)
230231
var = fullvars[j]
231232
a, b, islinear = linear_expansion(term, var)
232233
a = unwrap(a)
233-
if islinear && !(a isa Symbolic) && a isa Number
234+
if islinear && !(a isa Symbolic) && a isa Number && !isinput(var)
234235
if a == 1 || a == -1
235236
a = convert(Integer, a)
236237
linear_term += a * var

src/variables.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,15 @@ Symbolics.option_to_metadata_type(::Val{:description}) = VariableDescriptionType
1111
Symbolics.option_to_metadata_type(::Val{:input}) = VariableInput
1212
Symbolics.option_to_metadata_type(::Val{:output}) = VariableOutput
1313

14+
function isvarkind(m, x)
15+
p = Symbolics.getparent(x, nothing)
16+
p === nothing || (x = p)
17+
getmetadata(x, m, false)
18+
end
19+
20+
isinput(x) = isvarkind(VariableInput, x)
21+
isoutput(x) = isvarkind(VariableOutput, x)
22+
1423
"""
1524
$(SIGNATURES)
1625

0 commit comments

Comments
 (0)