diff --git a/lib/ModelingToolkitTearing/Project.toml b/lib/ModelingToolkitTearing/Project.toml index 0a06142..f6dbdf8 100644 --- a/lib/ModelingToolkitTearing/Project.toml +++ b/lib/ModelingToolkitTearing/Project.toml @@ -29,7 +29,7 @@ DocStringExtensions = "0.7, 0.8, 0.9" Graphs = "1" LinearAlgebra = "1" ModelingToolkit = "11" -ModelingToolkitBase = "1.13" +ModelingToolkitBase = "1.23" Moshi = "0.3" OffsetArrays = "1" OrderedCollections = "1.8.1" diff --git a/lib/ModelingToolkitTearing/src/reassemble.jl b/lib/ModelingToolkitTearing/src/reassemble.jl index 82c3850..27fd719 100644 --- a/lib/ModelingToolkitTearing/src/reassemble.jl +++ b/lib/ModelingToolkitTearing/src/reassemble.jl @@ -575,8 +575,25 @@ function get_linear_scc_linsol(state::TearingState, alg_eqs::Vector{Int}, lu !== nothing && return BSImpl.Const{VartypeT}((lu \ b)::Vector{SymbolicT}) end # Turn into symbolic arrays - A = SU.Const{VartypeT}(A) - b = SU.Const{VartypeT}(b) + sys = state.sys + reference_idx = findfirst(!SU.isconst, A) + if reference_idx === nothing + reference_idx = findfirst(!SU.isconst, b) + if reference_idx === nothing + reference = first(A) + else + reference = A[reference_idx] + end + else + reference = A[reference_idx] + end + sys, A_cache = MTKBase.add_diffcache(sys, length(A)) + A_allocator = A_cache(reference) + A = SU.Code.with_allocator(A_allocator, SU.Const{VartypeT}(A)) + sys, b_cache = MTKBase.add_diffcache(sys, length(b)) + b_allocator = b_cache(reference) + b = SU.Code.with_allocator(b_allocator, SU.Const{VartypeT}(b)) + state.sys = sys return INLINE_LINEAR_SCC_OP(A, b) end