Skip to content

Commit 84ec352

Browse files
committed
Clean UsymlqrSolver
1 parent 6217f35 commit 84ec352

File tree

8 files changed

+309
-205
lines changed

8 files changed

+309
-205
lines changed

docs/src/storage.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ Each table summarizes the storage requirements of Krylov methods recommended to
9595

9696
| Methods | [`TriCG`](@ref tricg) | [`TriMR`](@ref trimr) | [`USYMLQR`](@ref usymlqr) |
9797
|:--------:|:---------------------:|:---------------------:|:-------------------------:|
98-
| Storage | $6n + 6m$ | $8n + 8m$ | $Xn + Ym$ |
98+
| Storage | $6n + 6m$ | $8n + 8m$ | $7n + 6m$ |
9999

100100
#### Generalized saddle-point and non-Hermitian partitioned systems
101101

src/krylov_solvers.jl

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1920,35 +1920,49 @@ can be used to initialize this workspace.
19201920
mutable struct UsymlqrSolver{T,FC,S} <: KrylovSolver{T,FC,S}
19211921
m :: Int
19221922
n :: Int
1923+
r :: S
19231924
x :: S
19241925
y :: S
1925-
M⁻¹vₖ₋₁ :: S
1926-
M⁻¹vₖ :: S
1927-
N⁻¹uₖ₋₁ :: S
1928-
N⁻¹uₖ :: S
1926+
z :: S
1927+
M⁻¹uₖ₋₁ :: S
1928+
M⁻¹uₖ :: S
1929+
N⁻¹vₖ₋₁ :: S
1930+
N⁻¹vₖ :: S
19291931
p :: S
19301932
q :: S
1931-
vₖ :: S
1933+
:: S
1934+
wₖ₋₂ :: S
1935+
wₖ₋₁ :: S
1936+
Δx :: S
1937+
Δy :: S
19321938
uₖ :: S
1939+
vₖ :: S
19331940
warm_start :: Bool
19341941
stats :: SimpleStats{T}
19351942
end
19361943

19371944
function UsymlqrSolver(m, n, S)
19381945
FC = eltype(S)
19391946
T = real(FC)
1940-
x = S(undef, m)
1941-
y = S(undef, n)
1942-
M⁻¹vₖ₋₁ = S(undef, m)
1943-
M⁻¹vₖ = S(undef, m)
1944-
N⁻¹uₖ₋₁ = S(undef, n)
1945-
N⁻¹uₖ = S(undef, n)
1946-
p = S(undef, n)
1947+
r = S(undef, m)
1948+
x = S(undef, n)
1949+
y = S(undef, m)
1950+
z = S(undef, n)
1951+
M⁻¹uₖ₋₁ = S(undef, m)
1952+
M⁻¹uₖ = S(undef, m)
1953+
N⁻¹vₖ₋₁ = S(undef, n)
1954+
N⁻¹vₖ = S(undef, n)
19471955
q = S(undef, m)
1948-
vₖ = S(undef, 0)
1956+
p = S(undef, n)
1957+
= S(undef, m)
1958+
wₖ₋₂ = S(undef, n)
1959+
wₖ₋₁ = S(undef, n)
1960+
Δx = S(undef, 0)
1961+
Δy = S(undef, 0)
19491962
uₖ = S(undef, 0)
1963+
vₖ = S(undef, 0)
19501964
stats = SimpleStats(0, false, false, T[], T[], T[], 0.0, "unknown")
1951-
solver = UsymlqrSolver{T,FC,S}(m, n, x, y, M⁻¹vₖ₋₁, M⁻¹vₖ, N⁻¹uₖ₋₁, N⁻¹uₖ, p, q, vₖ, uₖ, false, stats)
1965+
solver = UsymlqrSolver{T,FC,S}(m, n, r, x, y, z, M⁻¹uₖ₋₁, M⁻¹uₖ, N⁻¹vₖ₋₁, N⁻¹vₖ, q, p, d̅, wₖ₋₂, wₖ₋₁, Δx, Δy, uₖ, vₖ, false, stats)
19521966
return solver
19531967
end
19541968

src/minres_qlp.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -279,8 +279,8 @@ kwargs_minres_qlp = (:M, :ldiv, :λ, :atol, :rtol, :Artol, :itmax, :timemax, :ve
279279
# [sₖ -cₖ] [βₖ₊₁ ] [0 ]
280280
(cₖ, sₖ, λₖ) = sym_givens(λbarₖ, βₖ₊₁)
281281

282-
# Compute [ zₖ ] = (Qₖ)ᴴβ₁e₁
283-
# [ζbarₖ₊₁]
282+
# Compute z̅ₖ₊₁ = [ zₖ ] = (Qₖ)ᴴβ₁e₁
283+
# [ζbarₖ₊₁]
284284
#
285285
# [cₖ sₖ] [ζbarₖ] = [ ζₖ ]
286286
# [sₖ -cₖ] [ 0 ] [ζbarₖ₊₁]

src/trilqr.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,10 @@ kwargs_trilqr = (:transfer_to_usymcg, :atol, :rtol, :itmax, :timemax, :verbose,
201201
mul!(q, A , uₖ) # Forms vₖ₊₁ : q ← Auₖ
202202
mul!(p, Aᴴ, vₖ) # Forms uₖ₊₁ : p ← Aᴴvₖ
203203

204-
@kaxpy!(m, -γₖ, vₖ₋₁, q) # q ← q - γₖ * vₖ₋₁
205-
@kaxpy!(n, -βₖ, uₖ₋₁, p) # p ← p - βₖ * uₖ₋₁
204+
if iter 2
205+
@kaxpy!(m, -γₖ, vₖ₋₁, q) # q ← q - γₖ * vₖ₋₁
206+
@kaxpy!(n, -βₖ, uₖ₋₁, p) # p ← p - βₖ * uₖ₋₁
207+
end
206208

207209
αₖ = @kdot(m, vₖ, q) # αₖ = ⟨vₖ,q⟩
208210

src/usymlq.jl

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,10 @@ kwargs_usymlq = (:transfer_to_usymcg, :atol, :rtol, :itmax, :timemax, :verbose,
203203

204204
αₖ = @kdot(m, vₖ, q) # αₖ = ⟨vₖ,q⟩
205205

206-
@kaxpy!(m, - αₖ , vₖ, q) # q ← q - αₖ * vₖ
207-
@kaxpy!(n, -conj(αₖ), uₖ, p) # p ← p - ᾱₖ * uₖ
206+
if iter 2
207+
@kaxpy!(m, - αₖ , vₖ, q) # q ← q - αₖ * vₖ
208+
@kaxpy!(n, -conj(αₖ), uₖ, p) # p ← p - ᾱₖ * uₖ
209+
end
208210

209211
βₖ₊₁ = @knrm2(m, q) # βₖ₊₁ = ‖q‖
210212
γₖ₊₁ = @knrm2(n, p) # γₖ₊₁ = ‖p‖
@@ -281,7 +283,7 @@ kwargs_usymlq = (:transfer_to_usymcg, :atol, :rtol, :itmax, :timemax, :verbose,
281283
@kaxpby!(n, -cₖ, uₖ, conj(sₖ), d̅)
282284
end
283285

284-
# Compute uₖ₊₁ and uₖ₊₁.
286+
# Compute vₖ₊₁ and uₖ₊₁.
285287
@kcopy!(m, vₖ₋₁, vₖ) # vₖ₋₁ ← vₖ
286288
@kcopy!(n, uₖ₋₁, uₖ) # uₖ₋₁ ← uₖ
287289

0 commit comments

Comments
 (0)