Skip to content

Commit 90614d3

Browse files
committed
Single precision on smoothed aggregation seems to work
1 parent c43419c commit 90614d3

File tree

6 files changed

+14
-17
lines changed

6 files changed

+14
-17
lines changed

src/aggregate.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ function aggregation(::StandardAggregation, S)
9595

9696
Tp = collect(1:n+1)
9797
x .= x .+ 1
98-
Tx = ones(length(x))
98+
Tx = ones(eltype(S), length(x))
9999

100100
SparseMatrixCSC(N, M, Tp, x, Tx)
101101
end

src/aggregation.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
function smoothed_aggregation{Tv,Ti}(A::SparseMatrixCSC{Tv,Ti},
1+
function smoothed_aggregation(A::SparseMatrixCSC{T,V},
22
symmetry = HermitianSymmetry(),
33
strength = SymmetricStrength(),
44
aggregate = StandardAggregation(),
@@ -10,12 +10,12 @@ function smoothed_aggregation{Tv,Ti}(A::SparseMatrixCSC{Tv,Ti},
1010
max_coarse = 10,
1111
diagonal_dominance = false,
1212
keep = false,
13-
coarse_solver = Pinv())
13+
coarse_solver = Pinv()) where {T,V}
1414

1515

1616
n = size(A, 1)
1717
# B = kron(ones(n, 1), eye(1))
18-
B = ones(n)
18+
B = ones(T,n)
1919

2020
#=max_levels, max_coarse, strength =
2121
levelize_strength_or_aggregation(max_levels, max_coarse, strength)
@@ -28,7 +28,7 @@ function smoothed_aggregation{Tv,Ti}(A::SparseMatrixCSC{Tv,Ti},
2828
# agg = [aggregate for _ in 1:max_levels - 1]
2929
# sm = [smooth for _ in 1:max_levels]
3030

31-
levels = Vector{Level{Tv,Ti}}()
31+
levels = Vector{Level{T,V}}()
3232
bsr_flag = false
3333

3434
while length(levels) + 1 < max_levels && size(A, 1) > max_coarse

src/multilevel.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
struct Level{Ti,Tv}
2-
A::SparseMatrixCSC{Ti,Tv}
3-
P::SparseMatrixCSC{Ti,Tv}
4-
R::SparseMatrixCSC{Ti,Tv}
1+
struct Level{T,V}
2+
A::SparseMatrixCSC{T,V}
3+
P::SparseMatrixCSC{T,V}
4+
R::SparseMatrixCSC{T,V}
55
end
66

77
struct MultiLevel{S, Pre, Post, Ti, Tv}

src/smoother.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ end
110110
function weight(::DiagonalWeighting, S, ω)
111111
D_inv = 1 ./ diag(S)
112112
D_inv_S = scale_rows(S, D_inv)
113-
(ω / approximate_spectral_radius(D_inv_S)) * D_inv_S
113+
(eltype(S)(ω) / approximate_spectral_radius(D_inv_S)) * D_inv_S
114114
#(ω) * D_inv_S
115115
end
116116

src/strength.jl

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,11 @@ SymmetricStrength() = SymmetricStrength(0.)
7777

7878
function strength_of_connection{T}(s::SymmetricStrength{T}, A, bsr_flag = false)
7979

80-
81-
8280
θ = s.θ
8381

8482
if bsr_flag && θ == 0
8583
S = SparseMatrixCSC(size(A)...,
86-
A.colptr, A.rowval, ones(size(A.rowval)))
84+
A.colptr, A.rowval, ones(eltype(A), size(A.rowval)))
8785
return S
8886
else
8987
S = deepcopy(A)

src/utils.jl

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ function approximate_spectral_radius(A, tol = 0.01,
55
symmetric = false
66

77
# Initial guess
8-
v0 = rand(size(A,1))
8+
v0 = rand(eltype(A), size(A,1))
99
maxiter = min(size(A, 1), maxiter)
1010
ev = zeros(eltype(A), maxiter)
1111
max_index = 0
12-
X = zeros(size(A,1), maxiter)
12+
X = zeros(eltype(A), size(A,1), maxiter)
1313

1414
for i in 1:restart+1
1515
evect, ev, H, V, flag =
@@ -90,8 +90,7 @@ function approximate_eigenvalues(A, tol, maxiter, symmetric, v0)
9090
scale!(w, 1/H[j+1,j])
9191
push!(V, w)
9292
end
93-
94-
Eigs, Vects = eig(H[1:maxiter, 1:maxiter], eye(maxiter))
93+
Eigs, Vects = eig(H[1:maxiter, 1:maxiter], eye(eltype(A), maxiter))
9594

9695
Vects, Eigs, H, V, flag
9796
end

0 commit comments

Comments
 (0)