1
1
module LinearSolveCliqueTreesExt
2
2
3
- using CliqueTrees: EliminationAlgorithm, SupernodeType, DEFAULT_ELIMINATION_ALGORITHM,
4
- DEFAULT_SUPERNODE_TYPE, symbolic, cholinit, lininit, cholesky!, linsolve!
3
+ using CliqueTrees: symbolic, cholinit, lininit, cholesky!, linsolve!
5
4
using LinearSolve
6
5
using SparseArrays
7
6
8
- function LinearSolve. CliqueTreesFactorization (;
9
- alg:: A = DEFAULT_ELIMINATION_ALGORITHM,
10
- snd:: S = DEFAULT_SUPERNODE_TYPE,
11
- reuse_symbolic:: Bool = true ,
12
- ) where {A <: EliminationAlgorithm , S <: SupernodeType }
13
- return CliqueTreesFactorization {A, S} (alg, snd, reuse_symbolic)
7
+ function _symbolic (A:: AbstractMatrix , alg:: CliqueTreesFactorization )
8
+ return symbolic (A; alg= alg. alg, snd= alg. snd)
9
+ end
10
+
11
+ function _symbolic (A:: AbstractMatrix , alg:: CliqueTreesFactorization{Nothing} )
12
+ return symbolic (A; snd= alg. snd)
13
+ end
14
+
15
+ function _symbolic (A:: AbstractMatrix , alg:: CliqueTreesFactorization{<:Any, Nothing} )
16
+ return symbolic (A; alg= alg. alg)
17
+ end
18
+
19
+ function _symbolic (A:: AbstractMatrix , alg:: CliqueTreesFactorization{Nothing, Nothing} )
20
+ return symbolic (A)
14
21
end
15
22
16
23
function LinearSolve. init_cacheval (
17
24
alg:: CliqueTreesFactorization , A:: AbstractMatrix , b, u, Pl, Pr, maxiters:: Int , abstol,
18
25
reltol, verbose:: Bool , assumptions:: OperatorAssumptions )
19
- symbfact = symbolic (A; alg = alg . alg, snd = alg. snd )
26
+ symbfact = _symbolic (A, alg)
20
27
cholfact, cholwork = cholinit (A, symbfact)
21
28
linwork = lininit (1 , cholfact)
22
29
return (cholfact, cholwork, linwork)
@@ -29,7 +36,7 @@ function SciMLBase.solve!(cache::LinearSolve.LinearCache, alg::CliqueTreesFactor
29
36
30
37
if cache. isfresh
31
38
if isnothing (cache. cacheval) || ! alg. reuse_symbolic
32
- symbfact = symbolic (A; alg = alg . alg, snd = alg. snd )
39
+ symbfact = _symbolic (A, alg)
33
40
cholfact, cholwork = cholinit (A, symbfact)
34
41
linwork = lininit (1 , cholfact)
35
42
cache. cacheval = (cholfact, cholwork, linwork)
0 commit comments