@@ -24,6 +24,7 @@ shadow space.
24
24
## Keywords
25
25
26
26
- `s::Integer = 8`: dimension of the shadow space;
27
+ - `Pl::precT`: left preconditioner,
27
28
- `abstol::Real = zero(real(eltype(b)))`,
28
29
`reltol::Real = sqrt(eps(real(eltype(b))))`: absolute and relative
29
30
tolerance for the stopping condition
@@ -46,6 +47,7 @@ shadow space.
46
47
"""
47
48
function idrs! (x, A, b;
48
49
s = 8 ,
50
+ Pl = Identity (),
49
51
abstol:: Real = zero (real (eltype (b))),
50
52
reltol:: Real = sqrt (eps (real (eltype (b)))),
51
53
maxiter= size (A, 2 ),
@@ -55,7 +57,7 @@ function idrs!(x, A, b;
55
57
history[:abstol ] = abstol
56
58
history[:reltol ] = reltol
57
59
log && reserve! (history, :resnorm , maxiter)
58
- idrs_method! (history, x, A, b, s, abstol, reltol, maxiter; kwargs... )
60
+ idrs_method! (history, x, A, b, s, Pl, abstol, reltol, maxiter; kwargs... )
59
61
log && shrink! (history)
60
62
log ? (x, history) : x
61
63
end
78
80
end
79
81
80
82
function idrs_method! (log:: ConvergenceHistory , X, A, C:: T ,
81
- s:: Number , abstol:: Real , reltol:: Real , maxiter:: Number ; smoothing:: Bool = false , verbose:: Bool = false
82
- ) where {T}
83
+ s:: Number , Pl :: precT , abstol:: Real , reltol:: Real , maxiter:: Number ; smoothing:: Bool = false , verbose:: Bool = false
84
+ ) where {T, precT }
83
85
84
86
verbose && @printf (" === idrs ===\n %4s\t %7s\n " ," iter" ," resnorm" )
85
87
R = C - A* X
@@ -129,6 +131,9 @@ function idrs_method!(log::ConvergenceHistory, X, A, C::T,
129
131
Q .+ = c[i- k+ 1 ] .* U[i]
130
132
end
131
133
134
+ # Preconditioning
135
+ ldiv! (Pl, V)
136
+
132
137
# Compute new U[:,k] and G[:,k], G[:,k] is in space G_j
133
138
V .= R .- V
134
139
@@ -181,6 +186,10 @@ function idrs_method!(log::ConvergenceHistory, X, A, C::T,
181
186
# Now we have sufficient vectors in G_j to compute residual in G_j+1
182
187
# Note: r is already perpendicular to P so v = r
183
188
copyto! (V, R)
189
+
190
+ # Preconditioning
191
+ ldiv! (Pl, V)
192
+
184
193
mul! (Q, A, V)
185
194
om = omega (Q, R)
186
195
R .- = om .* Q
0 commit comments