Skip to content

Commit af50fed

Browse files
committed
Add print method
1 parent 5e398b1 commit af50fed

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

src/classical.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ function ruge_stuben(A::SparseMatrixCSC;
2626
break
2727
end
2828
end
29-
levels
29+
MultiLevel(levels)
3030
end
3131

3232
function extend_heirarchy!(levels::Vector{Level}, strength, CF, A)

src/multilevel.jl

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,37 @@ struct Level{Ti,Tv}
33
P::SparseMatrixCSC{Ti,Tv}
44
R::SparseMatrixCSC{Ti,Tv}
55
end
6+
7+
struct MultiLevel{L, S}
8+
levels::Vector{L}
9+
coarse_solver::S
10+
end
11+
12+
abstract type CoarseSolver end
13+
struct Pinv <: CoarseSolver
14+
end
15+
MultiLevel(l::Vector{Level}; coarse_solver = Pinv()) =
16+
MultiLevel(l, coarse_solver)
17+
18+
function Base.show(io::IO, ml::MultiLevel)
19+
op = operator_complexity(ml.levels)
20+
g = grid_complexity(ml.levels)
21+
c = ml.coarse_solver
22+
str = """
23+
Multilevel Solver
24+
-----------------
25+
Operator Complexity: $op
26+
Grid Complexity: $g
27+
No. of Levels: $(size(ml.levels, 1))
28+
Coarse Solver: $c
29+
"""
30+
print(io, str)
31+
end
32+
33+
function operator_complexity(ml::Vector{Level})
34+
sum(nnz(level.A) for level in ml) / nnz(ml[1].A)
35+
end
36+
37+
function grid_complexity(ml::Vector{Level})
38+
sum(size(level.A, 1) for level in ml) / size(ml[1].A, 1)
39+
end

0 commit comments

Comments
 (0)