@@ -266,6 +266,19 @@ function dummy_derivative_graph!(structure::SystemStructure, var_eq_matching, ja
266
266
@warn " The number of dummy derivatives ($n_dummys ) does not match the number of differentiated equations ($n_diff_eqs )."
267
267
end
268
268
dummy_derivatives_set = BitSet (dummy_derivatives)
269
+
270
+ # Derivatives that are either in the dummy derivatives set or ended up not
271
+ # participating in the system at all are not considered differential
272
+ is_some_diff (v) = ! (v in dummy_derivatives_set) && ! (var_to_diff[v] === nothing && isempty (𝑑neighbors (graph, v)))
273
+
274
+ # We don't want tearing to give us `y_t ~ D(y)`, so we skip equations with
275
+ # actually differentiated variables.
276
+ isdiffed = let diff_to_var = diff_to_var, dummy_derivatives_set = dummy_derivatives_set
277
+ function (v)
278
+ diff_to_var[v] != = nothing && is_some_diff (v)
279
+ end
280
+ end
281
+
269
282
# We can eliminate variables that are not a selected state (differential
270
283
# variables). Selected states are differentiated variables that are not
271
284
# dummy derivatives.
@@ -277,16 +290,12 @@ function dummy_derivative_graph!(structure::SystemStructure, var_eq_matching, ja
277
290
haskey (ag, v) && return false
278
291
end
279
292
dv = var_to_diff[v]
280
- dv === nothing || dv in dummy_derivatives_set
293
+ dv === nothing && return true
294
+ is_some_diff (dv) || return true
295
+ return false
281
296
end
282
297
end
283
298
284
- # We don't want tearing to give us `y_t ~ D(y)`, so we skip equations with
285
- # actually differentiated variables.
286
- isdiffed = let diff_to_var = diff_to_var, dummy_derivatives_set = dummy_derivatives_set
287
- v -> diff_to_var[v] != = nothing && ! (v in dummy_derivatives_set)
288
- end
289
-
290
299
var_eq_matching = tear_graph_modia (structure, isdiffed,
291
300
Union{Unassigned, SelectedState};
292
301
varfilter = can_eliminate)
@@ -295,7 +304,7 @@ function dummy_derivative_graph!(structure::SystemStructure, var_eq_matching, ja
295
304
continue
296
305
end
297
306
dv = var_to_diff[v]
298
- (dv === nothing || dv in dummy_derivatives_set ) && continue
307
+ (dv === nothing || ! is_some_diff (dv) ) && continue
299
308
var_eq_matching[v] = SelectedState ()
300
309
end
301
310
0 commit comments