Skip to content

Commit 04632f3

Browse files
authored
Merge pull request #35 from ranjanan/rs
Fix display bug on small matrices
2 parents c83c21b + 0b1b9ae commit 04632f3

File tree

2 files changed

+37
-6
lines changed

2 files changed

+37
-6
lines changed

src/multilevel.jl

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,17 @@ function Base.show(io::IO, ml::MultiLevel)
2424
op = operator_complexity(ml)
2525
g = grid_complexity(ml)
2626
c = ml.coarse_solver
27-
total_nnz = sum(nnz(level.A) for level in ml.levels) + nnz(ml.final_A)
27+
total_nnz = nnz(ml.final_A)
28+
if !isempty(ml.levels)
29+
total_nnz += sum(nnz(level.A) for level in ml.levels)
30+
end
2831
lstr = ""
32+
if !isempty(ml.levels)
2933
for (i, level) in enumerate(ml.levels)
3034
lstr = lstr *
3135
@sprintf " %2d %10d %10d [%5.2f%%]\n" i size(level.A, 1) nnz(level.A) (100 * nnz(level.A) / total_nnz)
3236
end
37+
end
3338
lstr = lstr *
3439
@sprintf " %2d %10d %10d [%5.2f%%]" length(ml.levels) + 1 size(ml.final_A, 1) nnz(ml.final_A) (100 * nnz(ml.final_A) / total_nnz)
3540
str = """
@@ -47,13 +52,21 @@ function Base.show(io::IO, ml::MultiLevel)
4752
end
4853

4954
function operator_complexity(ml::MultiLevel)
50-
(sum(nnz(level.A) for level in ml.levels) +
51-
nnz(ml.final_A)) / nnz(ml.levels[1].A)
55+
if !isempty(ml.levels)
56+
(sum(nnz(level.A) for level in ml.levels) +
57+
nnz(ml.final_A)) / nnz(ml.levels[1].A)
58+
else
59+
1.
60+
end
5261
end
5362

5463
function grid_complexity(ml::MultiLevel)
55-
(sum(size(level.A, 1) for level in ml.levels) +
56-
size(ml.final_A, 1)) / size(ml.levels[1].A, 1)
64+
if !isempty(ml.levels)
65+
(sum(size(level.A, 1) for level in ml.levels) +
66+
size(ml.final_A, 1)) / size(ml.levels[1].A, 1)
67+
else
68+
1.
69+
end
5770
end
5871

5972
abstract type Cycle end

test/runtests.jl

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,24 @@ end
274274
# Issue #24
275275
nodes_not_agg()
276276

277-
# Issue 26
277+
# Issue #26
278278
test_symmetric_sweep()
279+
280+
# Issue #31
281+
for sz in [10, 5, 2]
282+
a = poisson(sz)
283+
ml = ruge_stuben(a)
284+
@test isempty(ml.levels)
285+
@test size(ml.final_A) == (sz,sz)
286+
@test AMG.operator_complexity(ml) == 1
287+
@test AMG.grid_complexity(ml) == 1
288+
289+
a = poisson(sz)
290+
ml = smoothed_aggregation(a)
291+
@test isempty(ml.levels)
292+
@test size(ml.final_A) == (sz,sz)
293+
@test AMG.operator_complexity(ml) == 1
294+
@test AMG.grid_complexity(ml) == 1
295+
end
296+
279297
end

0 commit comments

Comments
 (0)