1
- function smoothed_aggregation (A:: TA , _B= nothing ,
2
- :: Type{Val{bs}} = Val{1 };
3
- symmetry= HermitianSymmetry (),
4
- strength= SymmetricStrength (),
5
- aggregate= StandardAggregation (),
6
- smooth= JacobiProlongation (4.0 / 3.0 ),
7
- presmoother= GaussSeidel (),
8
- postsmoother= GaussSeidel (),
9
- improve_candidates= GaussSeidel (iter= 4 ),
10
- max_levels= 10 ,
11
- max_coarse= 10 ,
12
- diagonal_dominance= false ,
13
- keep= false ,
14
- coarse_solver= Pinv, kwargs... ) where {T,V,bs,TA<: SparseMatrixCSC{T,V} }
1
+ function smoothed_aggregation (A:: TA , _B = nothing ,
2
+ :: Type{Val{bs}} = Val{1 };
3
+ symmetry = HermitianSymmetry (),
4
+ strength = SymmetricStrength (),
5
+ aggregate = StandardAggregation (),
6
+ smooth = JacobiProlongation (4.0 / 3.0 ),
7
+ presmoother = GaussSeidel (),
8
+ postsmoother = GaussSeidel (),
9
+ improve_candidates = GaussSeidel (iter= 4 ),
10
+ max_levels = 10 ,
11
+ max_coarse = 10 ,
12
+ diagonal_dominance = false ,
13
+ keep = false ,
14
+ coarse_solver = Pinv, kwargs... ) where {T,V,bs,TA<: SparseMatrixCSC{T,V} }
15
15
16
16
n = size (A, 1 )
17
- B = isnothing (_B) ? ones (T, n, 1 ) : copy (_B)
17
+ B = isnothing (_B) ? ones (T,n, 1 ) : copy (_B)
18
18
@assert size (A, 1 ) == size (B, 1 )
19
19
20
20
#= max_levels, max_coarse, strength =
@@ -28,15 +28,15 @@ function smoothed_aggregation(A::TA, _B=nothing,
28
28
# agg = [aggregate for _ in 1:max_levels - 1]
29
29
# sm = [smooth for _ in 1:max_levels]
30
30
31
- levels = Vector {Level{TA,TA,Adjoint{T,TA}}} ()
31
+ levels = Vector {Level{TA, TA, Adjoint{T, TA}}} ()
32
32
bsr_flag = false
33
33
w = MultiLevelWorkspace (Val{bs}, eltype (A))
34
34
residual! (w, size (A, 1 ))
35
35
36
36
while length (levels) + 1 < max_levels && size (A, 1 ) > max_coarse
37
37
A, B, bsr_flag = extend_hierarchy! (levels, strength, aggregate, smooth,
38
- improve_candidates, diagonal_dominance,
39
- keep, A, B, symmetry, bsr_flag)
38
+ improve_candidates, diagonal_dominance,
39
+ keep, A, B, symmetry, bsr_flag)
40
40
coarse_x! (w, size (A, 1 ))
41
41
coarse_b! (w, size (A, 1 ))
42
42
#= if size(A, 1) <= max_coarse
@@ -54,9 +54,9 @@ struct HermitianSymmetry
54
54
end
55
55
56
56
function extend_hierarchy! (levels, strength, aggregate, smooth,
57
- improve_candidates, diagonal_dominance, keep,
58
- A, B,
59
- symmetry, bsr_flag)
57
+ improve_candidates, diagonal_dominance, keep,
58
+ A, B,
59
+ symmetry, bsr_flag)
60
60
61
61
# Calculate strength of connection matrix
62
62
if symmetry isa HermitianSymmetry
@@ -70,7 +70,7 @@ function extend_hierarchy!(levels, strength, aggregate, smooth,
70
70
# b = zeros(eltype(A), size(A, 1))
71
71
72
72
# Improve candidates
73
- b = zeros (size (A, 1 ))
73
+ b = zeros (size (A,1 ))
74
74
improve_candidates (A, B, b)
75
75
T, B = fit_candidates (AggOp, B)
76
76
0 commit comments