Skip to content

Commit 3cc01a9

Browse files
committed
Disable nested dissection (from #550)
1 parent d2a80a6 commit 3cc01a9

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

src/solvers/cholmod.jl

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1258,25 +1258,33 @@ end
12581258

12591259
## Compute that symbolic factorization only
12601260
function symbolic(A::Sparse{<:VTypes, Ti};
1261-
perm::Union{Nothing,AbstractVector{<:Integer}}=nothing,
1262-
postorder::Bool=isnothing(perm)||isempty(perm), userperm_only::Bool=true) where Ti
1261+
perm::Union{Nothing,AbstractVector{<:Integer}}=nothing,
1262+
postorder::Bool=isnothing(perm)||isempty(perm),
1263+
userperm_only::Bool=true,
1264+
nested_dissection::Bool=false) where Ti
12631265

12641266
sA = unsafe_load(pointer(A))
12651267
sA.stype == 0 && throw(ArgumentError("sparse matrix is not symmetric/Hermitian"))
12661268

1267-
@cholmod_param postorder = postorder begin
1268-
if perm === nothing || isempty(perm) # TODO: deprecate empty perm
1269-
return analyze(A)
1270-
else # user permutation provided
1271-
if userperm_only # use perm even if it is worse than AMD
1272-
@cholmod_param nmethods = 1 begin
1269+
# The default is to just use AMD. Use nested dissection only if explicitly asked for.
1270+
# https://github.com/JuliaSparse/SparseArrays.jl/issues/548
1271+
# https://github.com/DrTimothyAldenDavis/SuiteSparse/blob/26ababc7f3af725c5fb9168a1b94850eab74b666/CHOLMOD/Include/cholmod.h#L555-L574
1272+
@cholmod_param nmethods = (nested_dissection ? 0 : 2) begin
1273+
@cholmod_param postorder = postorder begin
1274+
if perm === nothing || isempty(perm) # TODO: deprecate empty perm
1275+
return analyze(A)
1276+
else # user permutation provided
1277+
if userperm_only # use perm even if it is worse than AMD
1278+
@cholmod_param nmethods = 1 begin
1279+
return analyze_p(A, Ti[p-1 for p in perm])
1280+
end
1281+
else
12731282
return analyze_p(A, Ti[p-1 for p in perm])
12741283
end
1275-
else
1276-
return analyze_p(A, Ti[p-1 for p in perm])
12771284
end
12781285
end
12791286
end
1287+
12801288
end
12811289

12821290
function cholesky!(F::Factor{Tv}, A::Sparse{Tv};

0 commit comments

Comments
 (0)