@@ -45,6 +45,7 @@ function extend_heirarchy!(levels, strength, CF, A::SparseMatrixCSC{Ti,Tv}, symm
45
45
end
46
46
47
47
function direct_interpolation (At, T, splitting)
48
+ T = typeof (At)(T)
48
49
fill! (T. nzval, eltype (At)(1 ))
49
50
T .= At .* T
50
51
@@ -99,7 +100,7 @@ function rs_direct_interpolation_pass2(At::SparseMatrixCSC{Tv,Ti},
99
100
row = T. rowval[j]
100
101
sval = T. nzval[j]
101
102
if splitting[row] == C_NODE
102
- if sval < 0
103
+ if real ( sval) < 0
103
104
sum_strong_neg += sval
104
105
else
105
106
sum_strong_pos += sval
@@ -115,7 +116,7 @@ function rs_direct_interpolation_pass2(At::SparseMatrixCSC{Tv,Ti},
115
116
if row == i
116
117
diag += aval
117
118
else
118
- if aval < 0
119
+ if real ( aval) < 0
119
120
sum_all_neg += aval
120
121
else
121
122
sum_all_pos += aval
@@ -125,7 +126,7 @@ function rs_direct_interpolation_pass2(At::SparseMatrixCSC{Tv,Ti},
125
126
126
127
if sum_strong_pos == 0
127
128
beta = zero (diag)
128
- if diag >= 0
129
+ if real ( diag) >= 0
129
130
diag += sum_all_pos
130
131
end
131
132
else
@@ -134,14 +135,14 @@ function rs_direct_interpolation_pass2(At::SparseMatrixCSC{Tv,Ti},
134
135
135
136
if sum_strong_neg == 0
136
137
alpha = zero (diag)
137
- if diag < 0
138
+ if real ( diag) < 0
138
139
diag += sum_all_neg
139
140
end
140
141
else
141
142
alpha = sum_all_neg / sum_strong_neg
142
143
end
143
144
144
- if isapprox (diag, 0 , atol= eps (Tv ))
145
+ if isapprox (real ( diag) , 0 , atol= eps (real (Tv) ))
145
146
neg_coeff = Tv (0 )
146
147
pos_coeff = Tv (0 )
147
148
else
@@ -155,7 +156,7 @@ function rs_direct_interpolation_pass2(At::SparseMatrixCSC{Tv,Ti},
155
156
sval = T. nzval[j]
156
157
if splitting[row] == C_NODE
157
158
Bj[nnz] = row
158
- if sval < 0
159
+ if real ( sval) < 0
159
160
Bx[nnz] = abs (neg_coeff * sval)
160
161
else
161
162
Bx[nnz] = abs (pos_coeff * sval)
0 commit comments