@@ -63,6 +63,17 @@ function KrylovJL_GMRES(args...; kwargs...)
6363 KrylovJL (args... ; KrylovAlg = Krylov. gmres!, kwargs... )
6464end
6565
66+ """
67+ ```julia
68+ KrylovJL_BLOCK_GMRES(args...; gmres_restart = 0, window = 0, kwargs...)
69+ ```
70+
71+ A generic BLOCK-GMRES implementation for square non-Hermitian linear systems with multiple right-hand sides
72+ """
73+ function KrylovJL_BLOCK_GMRES (args... ; kwargs... )
74+ KrylovJL (args... ; KrylovAlg = Krylov. block_gmres!, kwargs... )
75+ end
76+
6677"""
6778```julia
6879KrylovJL_BICGSTAB(args...; kwargs...)
@@ -143,8 +154,10 @@ function get_KrylovJL_solver(KrylovAlg)
143154 Krylov. CrmrSolver
144155 elseif (KrylovAlg === Krylov. cg!)
145156 Krylov. CgSolver
146- elseif (KrylovAlg === Krylov. cg_lanczos !)
157+ elseif (KrylovAlg === Krylov. cg_lanczos_shift !)
147158 Krylov. CgLanczosShiftSolver
159+ elseif (KrylovAlg === Krylov. cgls_lanczos_shift!)
160+ Krylov. CglsLanczosShiftSolver
148161 elseif (KrylovAlg === Krylov. cgls!)
149162 Krylov. CglsSolver
150163 elseif (KrylovAlg === Krylov. cg_lanczos!)
@@ -163,6 +176,8 @@ function get_KrylovJL_solver(KrylovAlg)
163176 Krylov. GpmrSolver
164177 elseif (KrylovAlg === Krylov. fom!)
165178 Krylov. FomSolver
179+ elseif (KrylovAlg === Krylov. block_gmres!)
180+ Krylov. BlockGmresSolver
166181 else
167182 error (" Invalid Krylov method detected" )
168183 end
@@ -181,7 +196,8 @@ function init_cacheval(alg::KrylovJL, A, b, u, Pl, Pr, maxiters::Int, abstol, re
181196 alg. KrylovAlg === Krylov. gmres! ||
182197 alg. KrylovAlg === Krylov. fgmres! ||
183198 alg. KrylovAlg === Krylov. gpmr! ||
184- alg. KrylovAlg === Krylov. fom!)
199+ alg. KrylovAlg === Krylov. fom! ||
200+ alg. KrylovAlg === Krylov. block_gmres!)
185201 if A isa SparseMatrixCSC
186202 KS (SparseMatrixCSC (0 , 0 , [1 ], Int[], eltype (A)[]), eltype (b)[], 1 )
187203 elseif A isa Matrix
@@ -206,7 +222,8 @@ function init_cacheval(alg::KrylovJL, A, b, u, Pl, Pr, maxiters::Int, abstol, re
206222 alg. KrylovAlg === Krylov. gmres! ||
207223 alg. KrylovAlg === Krylov. fgmres! ||
208224 alg. KrylovAlg === Krylov. gpmr! ||
209- alg. KrylovAlg === Krylov. fom!)
225+ alg. KrylovAlg === Krylov. fom! ||
226+ alg. KrylovAlg === Krylov. block_gmres!)
210227 KS (A, b, memory)
211228 elseif (alg. KrylovAlg === Krylov. minres! ||
212229 alg. KrylovAlg === Krylov. symmlq! ||
0 commit comments