Skip to content

Commit 5e398b1

Browse files
committed
Faster max off diag method (Thanks Andreas)
1 parent 0bed167 commit 5e398b1

File tree

2 files changed

+12
-14
lines changed

2 files changed

+12
-14
lines changed

src/classical.jl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ function rs_direct_interpolation_pass1(S, A, splitting)
6767
if splitting[i] == C_NODE
6868
nnz += 1
6969
else
70-
for jj = Sp[i]:Sp[i+1]-1
70+
for jj = Sp[i]:Sp[i+1]
71+
jj > length(Sj) && continue
7172
if splitting[Sj[jj]] == C_NODE && Sj[jj] != i
7273
nnz += 1
7374
end
@@ -94,7 +95,6 @@ function rs_direct_interpolation_pass1(S, A, splitting)
9495
Bj = zeros(Ti, Bp[end])
9596
Bx = zeros(Float64, Bp[end])
9697
n_nodes = size(A, 1)
97-
#Bp += 1
9898

9999
for i = 1:n_nodes
100100
if splitting[i] == C_NODE
@@ -103,8 +103,8 @@ function rs_direct_interpolation_pass1(S, A, splitting)
103103
else
104104
sum_strong_pos = 0
105105
sum_strong_neg = 0
106-
for jj = Sp[i]: Sp[i+1]-1
107-
jj > length(Sp) && continue
106+
for jj = Sp[i]: Sp[i+1]
107+
jj > length(Sj) && continue
108108
if splitting[Sj[jj]] == C_NODE && Sj[jj] != i
109109
if Sx[jj] < 0
110110
sum_strong_neg += Sx[jj]
@@ -118,7 +118,7 @@ function rs_direct_interpolation_pass1(S, A, splitting)
118118
sum_all_neg = 0
119119
diag = 0;
120120
for jj = Ap[i]:Ap[i+1]
121-
jj > length(Ap) && continue
121+
jj > length(Aj) && continue
122122
if Aj[jj] == i
123123
diag += Ax[jj]
124124
else
@@ -138,8 +138,8 @@ function rs_direct_interpolation_pass1(S, A, splitting)
138138
beta = 0
139139
end
140140

141-
neg_coeff = -alpha/diag;
142-
pos_coeff = -beta/diag;
141+
neg_coeff = -alpha / diag
142+
pos_coeff = -beta / diag
143143

144144
nnz = Bp[i]
145145
for jj = Sp[i]:Sp[i+1]
@@ -150,8 +150,8 @@ function rs_direct_interpolation_pass1(S, A, splitting)
150150
Bx[nnz] = neg_coeff * Sx[jj]
151151
else
152152
Bx[nnz] = pos_coeff * Sx[jj]
153-
nnz += 1
154153
end
154+
nnz += 1
155155
end
156156
end
157157
end

src/strength.jl

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,11 @@ function strength_of_connection{T}(c::Classical{T}, A::SparseMatrixCSC)
3333
end
3434

3535
function find_max_off_diag(neighbors, col)
36-
max_offdiag = 0
37-
for (i,v) in enumerate(neighbors)
38-
if col != i
39-
max_offdiag = max(max_offdiag, abs(v))
40-
end
36+
maxval = zero(eltype(neighbors))
37+
for i in 1:length(neighbors.nzval)
38+
maxval = max(maxval, ifelse(neighbors.nzind[i] == col, 0, abs(neighbors.nzval[i])))
4139
end
42-
max_offdiag
40+
return maxval
4341
end
4442

4543
function scale_cols_by_largest_entry(A::SparseMatrixCSC)

0 commit comments

Comments
 (0)