Skip to content

Commit 13487d1

Browse files
committed
Make sure differentiated variables don't appear in observed equations
1 parent d14dfa6 commit 13487d1

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

src/structural_transformation/symbolics_tearing.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,16 @@ function tearing_reassemble(state::TearingState, var_eq_matching; simplify = fal
552552
sys = state.sys
553553
@set! sys.eqs = neweqs
554554
@set! sys.states = [v for (i, v) in enumerate(fullvars) if diff_to_var[i] === nothing]
555+
removed_obs_set = BitSet(removed_obs)
556+
var_to_idx = Dict(reverse(en) for en in enumerate(fullvars))
557+
# Make sure differentiated variables don't appear in observed equations
558+
for (dx, (idx, lhs)) in possible_x_t
559+
idx in removed_obs_set && continue
560+
# Because it's a differential variable, and by sorting, its
561+
# corresponding differential equation would have the same index.
562+
eqidx = diff_to_var[var_to_idx[dx]]
563+
oldobs[idx] = (lhs ~ neweqs[eqidx].rhs)
564+
end
555565
deleteat!(oldobs, sort!(removed_obs))
556566
@set! sys.observed = [oldobs; subeqs]
557567
@set! sys.substitutions = Substitutions(subeqs, deps)

0 commit comments

Comments
 (0)