Skip to content

Commit 7c48a1c

Browse files
committed
Reduce memory in strength matrix calc
1 parent 25e73bf commit 7c48a1c

File tree

1 file changed

+27
-13
lines changed

1 file changed

+27
-13
lines changed

src/strength.jl

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@ Classical(;θ = 0.25) = Classical(θ)
77
function strength_of_connection{T, Ti, Tv}(c::Classical{T}, A::SparseMatrixCSC{Tv, Ti})
88

99
θ = c.θ
10-
#I = Int[]
11-
#J = Int[]
12-
#V = Float64[]
1310

1411
m, n = size(A)
1512
nz = nnz(A)
@@ -19,17 +16,15 @@ function strength_of_connection{T, Ti, Tv}(c::Classical{T}, A::SparseMatrixCSC{T
1916
k = 1
2017

2118
for i = 1:n
22-
neighbors = A[:,i]
23-
_m = find_max_off_diag(neighbors, i)
19+
#neighbors = A[:,i]
20+
#_m = find_max_off_diag(neighbors, i)
21+
_m = find_max_off_diag(A, i)
2422
threshold = θ * _m
2523
for j in nzrange(A, i)
2624
row = A.rowval[j]
2725
val = A.nzval[j]
2826
if abs(val) >= threshold
2927
if row != i
30-
#=push!(I, row)
31-
push!(J, i)
32-
push!(V, abs(val))=#
3328
I[k] = row
3429
J[k] = i
3530
V[k] = abs(val)
@@ -38,9 +33,6 @@ function strength_of_connection{T, Ti, Tv}(c::Classical{T}, A::SparseMatrixCSC{T
3833
end
3934

4035
if row == i
41-
#=push!(I, row)
42-
push!(J, i)
43-
push!(V, val)=#
4436
I[k] = row
4537
J[k] = i
4638
V[k] = val
@@ -60,19 +52,41 @@ function strength_of_connection{T, Ti, Tv}(c::Classical{T}, A::SparseMatrixCSC{T
6052
S', S
6153
end
6254

63-
function find_max_off_diag(neighbors, col)
55+
#=function find_max_off_diag(neighbors, col)
6456
maxval = zero(eltype(neighbors))
6557
for i in 1:length(neighbors.nzval)
6658
maxval = max(maxval, ifelse(neighbors.nzind[i] == col, 0, abs(neighbors.nzval[i])))
6759
end
6860
return maxval
61+
end=#
62+
function find_max_off_diag(A, i)
63+
m = 0
64+
for j in nzrange(A, i)
65+
row = A.rowval[j]
66+
val = A.nzval[j]
67+
if row != i
68+
m = max(m, abs(val))
69+
end
70+
end
71+
m
72+
end
73+
74+
function find_max(A, i)
75+
m = zero(eltype(A))
76+
for j in nzrange(A, i)
77+
row = A.rowval[j]
78+
val = A.nzval[j]
79+
m = max(m, abs(val))
80+
end
81+
m
6982
end
7083

7184
function scale_cols_by_largest_entry!(A::SparseMatrixCSC)
7285

7386
n = size(A, 1)
7487
for i = 1:n
75-
_m = maximum(A[:,i])
88+
#_m = maximum(A[:,i])
89+
_m = find_max(A, i)
7690
for j in nzrange(A, i)
7791
A.nzval[j] /= _m
7892
end

0 commit comments

Comments
 (0)