Skip to content

Commit daeb7d7

Browse files
feat: implement new trivial_tearing! interface for MTK
1 parent af4af69 commit daeb7d7

File tree

2 files changed

+37
-15
lines changed

2 files changed

+37
-15
lines changed

lib/ModelingToolkitTearing/src/stateselection_interface.jl

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,3 +326,38 @@ function manual_dispatch_is_small_int(@nospecialize(x::Number))::Int
326326
end
327327
end
328328
end
329+
330+
function StateSelection.rm_eqs_vars!(
331+
structure::SystemStructure, eqs_to_rm::Vector{Int}, vars_to_rm::Vector{Int};
332+
eqs_sorted_and_uniqued::Bool = false, vars_sorted_and_uniqued::Bool = false
333+
)
334+
old_to_new_eq, old_to_new_var = StateSelection.default_rm_eqs_vars!(
335+
structure, eqs_to_rm, vars_to_rm; eqs_sorted_and_uniqued, vars_sorted_and_uniqued
336+
)
337+
deleteat!(structure.state_priorities, vars_to_rm)
338+
deleteat!(structure.var_types, vars_to_rm)
339+
return old_to_new_eq, old_to_new_var
340+
end
341+
342+
function StateSelection.rm_eqs_vars!(
343+
state::TearingState, eqs_to_rm::Vector{Int}, vars_to_rm::Vector{Int};
344+
eqs_sorted_and_uniqued::Bool = false, vars_sorted_and_uniqued::Bool = false
345+
)
346+
(; structure, sys) = state
347+
old_to_new_eq, old_to_new_var = StateSelection.rm_eqs_vars!(
348+
structure, eqs_to_rm, vars_to_rm; eqs_sorted_and_uniqued, vars_sorted_and_uniqued
349+
)
350+
deleteat!(state.fullvars, vars_to_rm)
351+
eqs = copy(MTKBase.get_eqs(state.sys))
352+
deleteat!(eqs, eqs_to_rm)
353+
deleteat!(state.original_eqs, eqs_to_rm)
354+
if !isempty(state.eqs_source)
355+
deleteat!(state.eqs_source, eqs_to_rm)
356+
end
357+
358+
@set! sys.eqs = eqs
359+
state.sys = sys
360+
361+
return old_to_new_eq, old_to_new_var
362+
end
363+

lib/ModelingToolkitTearing/src/trivial_tearing_interface.jl

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,8 @@ function StateSelection.possibly_explicit_equations(state::TearingState)
2323
return Iterators.map(mapfn, Iterators.filter(filterfn, eachindex(state.original_eqs)))
2424
end
2525

26-
function StateSelection.trivial_tearing_postprocess!(ts::TearingState, torn_eqs::OrderedSet{Int}, torn_vars::OrderedSet{Int})
27-
append!(ts.additional_observed, @view ts.original_eqs[collect(torn_eqs)])
28-
sort!(torn_vars)
29-
sort!(torn_eqs)
30-
if ts.structure.var_types !== nothing
31-
deleteat!(ts.structure.var_types, torn_vars)
32-
end
33-
deleteat!(ts.fullvars, torn_vars)
34-
deleteat!(ts.structure.state_priorities, torn_vars)
35-
deleteat!(ts.original_eqs, torn_eqs)
36-
sys = ts.sys
37-
eqs = copy(MTKBase.get_eqs(sys))
38-
deleteat!(eqs, torn_eqs)
39-
@set! sys.eqs = eqs
40-
ts.sys = sys
26+
function StateSelection.trivial_tearing_postprocess!(ts::TearingState, torn_eqs::Vector{Int}, torn_vars::Vector{Int})
27+
append!(ts.additional_observed, @view ts.original_eqs[torn_eqs])
4128
return ts
4229
end
4330

0 commit comments

Comments
 (0)