Skip to content

Commit 73d8808

Browse files
committed
need mul! for krylov.jl
1 parent 6b6d2dd commit 73d8808

File tree

1 file changed

+25
-7
lines changed

1 file changed

+25
-7
lines changed

src/wrappers.jl

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,22 @@ struct ScaleVector{T}
1111
isleft::Bool
1212
end
1313

14+
# y = A x
1415
function LinearAlgebra.mul!(y, A::ScaleVector, x)
16+
A.s == one(eltype(A.s)) && return y = x
17+
18+
if A.isleft
19+
@. x = x / A.s
20+
else
21+
@. x = x * A.s
22+
end
1523
end
1624

25+
# A B α + C β
1726
function LinearAlgebra.mul!(C, A::ScaleVector, B, α, β)
27+
28+
tmp = zero(B)
29+
C = β * C + α * mul!(tmp, A, B)
1830
end
1931

2032
function LinearAlgebra.ldiv!(A::ScaleVector, x)
@@ -49,8 +61,20 @@ struct ComposePreconditioner{Ti,To}
4961
outer::To
5062
end
5163

64+
# y = A x
65+
function LinearAlgebra.mul!(y, A::ComposePreconditioner, x)
66+
@unpack inner, outer = A
67+
mul!(y, inner, x)
68+
y = outer * y
69+
end
70+
71+
# A B α + C β
72+
function LinearAlgebra.mul!(C, A::ComposePreconditioner, B, α, β)
73+
@unpack inner, outer = A
74+
end
75+
5276
function LinearAlgebra.ldiv!(A::ComposePreconditioner, x)
53-
@unpack inner, outer, isleft = A
77+
@unpack inner, outer = A
5478

5579
ldiv!(inner, x)
5680
ldiv!(outer, x)
@@ -63,12 +87,6 @@ function LinearAlgebra.ldiv!(y, A::ComposePreconditioner, x)
6387
ldiv!(outer, y)
6488
end
6589

66-
function LinearAlgebra.mul!(y, A::ComposePreconditioner, x)
67-
end
68-
69-
function LinearAlgebra.mul!(C, A::ComposePreconditioner, B, α, β)
70-
end
71-
7290
## Krylov.jl
7391

7492
struct KrylovJL{F,Tl,Tr,I,A,K} <: AbstractKrylovSubspaceMethod

0 commit comments

Comments
 (0)