Skip to content

Commit 902ee6a

Browse files
authored
Define cg_lanczos_shift with metaprogramming (#892)
* Define cg_lanczos_shift with metaprogramming
1 parent cb0d23f commit 902ee6a

File tree

2 files changed

+15
-13
lines changed

2 files changed

+15
-13
lines changed

src/cg_lanczos_shift.jl

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -94,17 +94,6 @@ args_cg_lanczos_shift = (:A, :b, :shifts)
9494
kwargs_cg_lanczos_shift = (:M, :ldiv, :check_curvature, :atol, :rtol, :itmax, :timemax, :verbose, :history, :callback, :iostream)
9595

9696
@eval begin
97-
function cg_lanczos_shift($(def_args_cg_lanczos_shift...); $(def_kwargs_cg_lanczos_shift...)) where {T <: AbstractFloat, FC <: FloatOrComplex{T}}
98-
start_time = time_ns()
99-
nshifts = length(shifts)
100-
solver = CgLanczosShiftSolver(A, b, nshifts)
101-
elapsed_time = ktimer(start_time)
102-
timemax -= elapsed_time
103-
cg_lanczos_shift!(solver, $(args_cg_lanczos_shift...); $(kwargs_cg_lanczos_shift...))
104-
solver.stats.timer += elapsed_time
105-
return (solver.x, solver.stats)
106-
end
107-
10897
function cg_lanczos_shift!(solver :: CgLanczosShiftSolver{T,FC,S}, $(def_args_cg_lanczos_shift...); $(def_kwargs_cg_lanczos_shift...)) where {T <: AbstractFloat, FC <: FloatOrComplex{T}, S <: AbstractVector{FC}}
10998

11099
# Timer

src/krylov_solve.jl

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,22 @@ for (KS, fun, fun2, args, def_args, optargs, def_optargs, kwargs, def_kwargs) in
4444
(:GpmrSolver , :gpmr! , :gpmr , args_gpmr , def_args_gpmr , optargs_gpmr , def_optargs_gpmr , kwargs_gpmr , def_kwargs_gpmr )
4545
]
4646
# window :: 5 -> lslq, lsmr, lsqr, minres, symmlq
47-
# shifts -> CgLanczosShiftSolver(A, b, nshifts)
4847
# memory :: 20 -> diom, dqgmres, fom, gmres, fgmres, gpmr
49-
if fun2 (:lslq, :lsmr, :lsqr, :minres, :symmlq, :cg_lanczos_shift, :diom, :dqgmres, :fom, :gmres, :fgmres, :gpmr)
48+
if fun2 == :cg_lanczos_shift
49+
@eval begin
50+
## Out-of-place
51+
function $(fun2)($(def_args...); $(def_kwargs...)) where {T <: AbstractFloat, FC <: FloatOrComplex{T}}
52+
start_time = time_ns()
53+
nshifts = length(shifts)
54+
solver = $KS(A, b, nshifts)
55+
elapsed_time = ktimer(start_time)
56+
timemax -= elapsed_time
57+
$(fun)(solver, $(args...); $(kwargs...))
58+
solver.stats.timer += elapsed_time
59+
return results(solver)
60+
end
61+
end
62+
elseif fun2 (:cg_lanczos_shift, :lslq, :lsmr, :lsqr, :minres, :symmlq, :diom, :dqgmres, :fom, :gmres, :fgmres, :gpmr)
5063
@eval begin
5164
## Out-of-place
5265
function $(fun2)($(def_args...); $(def_kwargs...)) where {T <: AbstractFloat, FC <: FloatOrComplex{T}}

0 commit comments

Comments
 (0)