Skip to content

Commit 2bb64f9

Browse files
fix diagonal preconditioners and tests
1 parent 3bed361 commit 2bb64f9

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

src/preconditioners.jl

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,16 @@ function LinearAlgebra.ldiv!(y, A::DiagonalPreconditioner, x)
2020
y .= x ./ A.diag
2121
end
2222

23-
function ldiv!(y::Array, A::DiagonalPreconditioner, b::Array)
23+
#=
24+
function LinearAlgebra.ldiv!(y::Matrix, A::DiagonalPreconditioner, b::Matrix)
2425
@inbounds @simd for j ∈ 1:size(y, 2)
2526
for i ∈ 1:length(A.diag)
2627
y[i,j] = b[i,j] / A.diag[i]
2728
end
2829
end
2930
return y
3031
end
32+
=#
3133

3234
function LinearAlgebra.ldiv!(A::InvDiagonalPreconditioner, x)
3335
x .= x .* A.diag
@@ -37,17 +39,19 @@ function LinearAlgebra.ldiv!(y, A::InvDiagonalPreconditioner, x)
3739
y .= x .* A.diag
3840
end
3941

40-
function ldiv!(y::Array, A::InvDiagonalPreconditioner, b::Array)
42+
#=
43+
function LinearAlgebra.ldiv!(y::Matrix, A::InvDiagonalPreconditioner, b::Matrix)
4144
@inbounds @simd for j ∈ 1:size(y, 2)
4245
for i ∈ 1:length(A.diag)
4346
y[i,j] = b[i,j] * A.diag[i]
4447
end
4548
end
4649
return y
4750
end
51+
=#
4852

49-
LinearAlgebra.mul!(y, A::DiagonalPreconditioner, x) = LinearAlgebra.mul!(y, InvDiagonalPreconditioner(A.diag), x)
50-
LinearAlgebra.mul!(y, A::InvDiagonalPreconditioner, x) = LinearAlgebra.mul!(y, DiagonalPreconditioner(A.diag), x)
53+
LinearAlgebra.mul!(y, A::DiagonalPreconditioner, x) = LinearAlgebra.ldiv!(y, InvDiagonalPreconditioner(A.diag), x)
54+
LinearAlgebra.mul!(y, A::InvDiagonalPreconditioner, x) = LinearAlgebra.ldiv!(y, DiagonalPreconditioner(A.diag), x)
5155

5256
## Compose Preconditioner
5357

test/runtests.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -197,13 +197,13 @@ end
197197
end
198198

199199
@testset "Preconditioners" begin
200-
@testset "scaling_preconditioner" begin
200+
@testset "Scalar Diagonal Preconditioner" begin
201201
s = rand()
202202

203203
x = rand(n,n)
204204
y = rand(n,n)
205205

206-
Pl, Pr = LinearSolve.scaling_preconditioner(1/s)
206+
Pl, Pr = LinearSolve.DiagonalPreconditioner(s),LinearSolve.InvDiagonalPreconditioner(s)
207207

208208
mul!(y, Pl, x); @test y s * x
209209
mul!(y, Pr, x); @test y s \ x
@@ -215,9 +215,9 @@ end
215215
ldiv!(y, Pr, x); @test y s * x
216216
end
217217

218-
@testset "vector scaling_preconditioner" begin
218+
@testset "Vector Diagonal Preconditioner" begin
219219
s = rand(n)
220-
Pl, Pr = LinearSolve.scaling_preconditioner(1 ./ s)
220+
Pl, Pr = LinearSolve.DiagonalPreconditioner(s),LinearSolve.InvDiagonalPreconditioner(s)
221221

222222
x = rand(n,n)
223223
y = rand(n,n)
@@ -239,8 +239,8 @@ end
239239
x = rand(n,n)
240240
y = rand(n,n)
241241

242-
P1, _ = LinearSolve.scaling_preconditioner(s1)
243-
P2, _ = LinearSolve.scaling_preconditioner(s2)
242+
P1 = LinearSolve.DiagonalPreconditioner(s1)
243+
P2 = LinearSolve.DiagonalPreconditioner(s2)
244244

245245
P = LinearSolve.ComposePreconditioner(P1,P2)
246246
Pi = LinearSolve.InvComposePreconditioner(P)

0 commit comments

Comments
 (0)