Skip to content

Commit 058a7f5

Browse files
Merge pull request #48 from JuliaComputing/as/diffcache-sccs
feat: use `DiffCache` for inline linear SCC buffers
2 parents a5c906a + 9a58403 commit 058a7f5

2 files changed

Lines changed: 20 additions & 3 deletions

File tree

lib/ModelingToolkitTearing/Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ DocStringExtensions = "0.7, 0.8, 0.9"
2929
Graphs = "1"
3030
LinearAlgebra = "1"
3131
ModelingToolkit = "11"
32-
ModelingToolkitBase = "1.13"
32+
ModelingToolkitBase = "1.23"
3333
Moshi = "0.3"
3434
OffsetArrays = "1"
3535
OrderedCollections = "1.8.1"

lib/ModelingToolkitTearing/src/reassemble.jl

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -575,8 +575,25 @@ function get_linear_scc_linsol(state::TearingState, alg_eqs::Vector{Int},
575575
lu !== nothing && return BSImpl.Const{VartypeT}((lu \ b)::Vector{SymbolicT})
576576
end
577577
# Turn into symbolic arrays
578-
A = SU.Const{VartypeT}(A)
579-
b = SU.Const{VartypeT}(b)
578+
sys = state.sys
579+
reference_idx = findfirst(!SU.isconst, A)
580+
if reference_idx === nothing
581+
reference_idx = findfirst(!SU.isconst, b)
582+
if reference_idx === nothing
583+
reference = first(A)
584+
else
585+
reference = A[reference_idx]
586+
end
587+
else
588+
reference = A[reference_idx]
589+
end
590+
sys, A_cache = MTKBase.add_diffcache(sys, length(A))
591+
A_allocator = A_cache(reference)
592+
A = SU.Code.with_allocator(A_allocator, SU.Const{VartypeT}(A))
593+
sys, b_cache = MTKBase.add_diffcache(sys, length(b))
594+
b_allocator = b_cache(reference)
595+
b = SU.Code.with_allocator(b_allocator, SU.Const{VartypeT}(b))
596+
state.sys = sys
580597
return INLINE_LINEAR_SCC_OP(A, b)
581598
end
582599

0 commit comments

Comments
 (0)