@@ -11,10 +11,22 @@ struct ScaleVector{T}
11
11
isleft:: Bool
12
12
end
13
13
14
+ # y = A x
14
15
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
15
23
end
16
24
25
+ # A B α + C β
17
26
function LinearAlgebra. mul! (C, A:: ScaleVector , B, α, β)
27
+
28
+ tmp = zero (B)
29
+ C = β * C + α * mul! (tmp, A, B)
18
30
end
19
31
20
32
function LinearAlgebra. ldiv! (A:: ScaleVector , x)
@@ -49,8 +61,20 @@ struct ComposePreconditioner{Ti,To}
49
61
outer:: To
50
62
end
51
63
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
+
52
76
function LinearAlgebra. ldiv! (A:: ComposePreconditioner , x)
53
- @unpack inner, outer, isleft = A
77
+ @unpack inner, outer = A
54
78
55
79
ldiv! (inner, x)
56
80
ldiv! (outer, x)
@@ -63,12 +87,6 @@ function LinearAlgebra.ldiv!(y, A::ComposePreconditioner, x)
63
87
ldiv! (outer, y)
64
88
end
65
89
66
- function LinearAlgebra. mul! (y, A:: ComposePreconditioner , x)
67
- end
68
-
69
- function LinearAlgebra. mul! (C, A:: ComposePreconditioner , B, α, β)
70
- end
71
-
72
90
# # Krylov.jl
73
91
74
92
struct KrylovJL{F,Tl,Tr,I,A,K} <: AbstractKrylovSubspaceMethod
0 commit comments