From b4d18fb6aace04df4e854b0947457fbfcb4f6083 Mon Sep 17 00:00:00 2001 From: Aayush Sabharwal Date: Fri, 3 Jul 2026 17:59:08 +0530 Subject: [PATCH] feat: add `analytical_derivatives` field to `TearingState` --- lib/ModelingToolkitTearing/src/reassemble.jl | 1 + lib/ModelingToolkitTearing/src/tearingstate.jl | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/ModelingToolkitTearing/src/reassemble.jl b/lib/ModelingToolkitTearing/src/reassemble.jl index 6739636..d0d85cb 100644 --- a/lib/ModelingToolkitTearing/src/reassemble.jl +++ b/lib/ModelingToolkitTearing/src/reassemble.jl @@ -1283,6 +1283,7 @@ function update_simplified_system!( intersect!(scc, unknowns_set) end filter!(!isempty, var_sccs) + merge!(dummy_sub, state.analytical_derivatives) @set! sys.schedule = MTKBase.Schedule(var_sccs, dummy_sub) end if MTKBase.has_isscheduled(sys) diff --git a/lib/ModelingToolkitTearing/src/tearingstate.jl b/lib/ModelingToolkitTearing/src/tearingstate.jl index e923dc7..ac37575 100644 --- a/lib/ModelingToolkitTearing/src/tearingstate.jl +++ b/lib/ModelingToolkitTearing/src/tearingstate.jl @@ -103,6 +103,14 @@ mutable struct TearingState <: StateSelection.TransformationState{System} combinations of variables. """ mm::Union{Nothing, CLIL.SparseMatrixCLIL{Int, Int}} + """ + A mapping from `D(x)` (not the `toterm` variant) to its derivative expression for + analytically eliminated differential variables. No integrated or differentiated form + of `x` should be present in the equations if its derivative specified here. Effectively, + `x` along with all its integrated and differentiated forms must be eliminated as observed + and put into `additional_observed`. + """ + analytical_derivatives::Dict{SymbolicT, SymbolicT} end function Base.show(io::IO, state::TearingState) @@ -445,7 +453,7 @@ function TearingState(sys::System, source_info::Union{Nothing, MTKBase.EquationS canonical_ranks, false) return TearingState(sys, fullvars, structure, Equation[], param_derivative_map, no_deriv_params, original_eqs, Equation[], falses(length(fullvars)), - typeof(sys)[], sources, nothing) + typeof(sys)[], sources, nothing, Dict{SymbolicT, SymbolicT}()) end """