Skip to content

Commit fd400bb

Browse files
committed
Get V cycle working, add test
1 parent 4fb1768 commit fd400bb

File tree

3 files changed

+15
-7
lines changed

3 files changed

+15
-7
lines changed

src/AMG.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ export poisson
1414
include("smoother.jl")
1515

1616
include("multilevel.jl")
17+
export solve
1718

1819
include("classical.jl")
20+
export ruge_stuben
1921

2022
end # module

src/multilevel.jl

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,22 +68,20 @@ function solve{T}(ml::MultiLevel, b::Vector{T}; maxiter = 100,
6868
if length(ml.levels) == 1
6969
x = coarse_solver(ml.coarse_solver, A, b)
7070
else
71-
x = __solve(cycle, ml, x, b, lvl, residuals)
71+
x = __solve(cycle, ml, x, b, lvl)
7272
end
73+
push!(residuals, norm(A*x - b))
7374
end
7475
x
7576
end
76-
function __solve{T}(v::V, ml, x::Vector{T}, b::Vector{T}, lvl, residuals)
77+
function __solve{T}(v::V, ml, x::Vector{T}, b::Vector{T}, lvl)
7778

78-
@show lvl
7979
A = ml.levels[lvl].A
8080
presmoother!(ml.presmoother, A, x, b)
8181

8282
res = b - A * x
83-
@show norm(res)
84-
push!(residuals, norm(res))
85-
8683
coarse_b = ml.levels[lvl].R * res
84+
coarse_x = zeros(T, size(coarse_b))
8785

8886
if lvl == length(ml.levels) - 1
8987
coarse_x = coarse_solver(ml.coarse_solver, ml.levels[end].A, coarse_b)

test/runtests.jl

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ end
4444
@testset "Coarse Solver" begin
4545
A = poisson(10)
4646
b = A * ones(10)
47-
@test sum(abs, AMG.coarse_solver(AMG.Pinv(), A, b) - ones(10)) < 1e-6
47+
@test sum(abs2, AMG.coarse_solver(AMG.Pinv(), A, b) - ones(10)) < 1e-6
4848
end
4949

5050
@testset "Multilevel" begin
@@ -59,3 +59,11 @@ for i = 1:8
5959
@test nnz(ml.levels[i].A) == n[i]
6060
end
6161
end
62+
63+
@testset "Solver" begin
64+
A = poisson(1000)
65+
A = float.(A)
66+
ml = ruge_stuben(A)
67+
x = solve(ml, A * ones(1000))
68+
@test sum(abs2, x - ones(1000)) < 1e-10
69+
end

0 commit comments

Comments
 (0)