diff --git a/src/ExactDiagonalization/ExactDiagonalization.jl b/src/ExactDiagonalization/ExactDiagonalization.jl index e54f9681d..12742f829 100644 --- a/src/ExactDiagonalization/ExactDiagonalization.jl +++ b/src/ExactDiagonalization/ExactDiagonalization.jl @@ -25,6 +25,7 @@ using CommonSolve: CommonSolve, solve, init using VectorInterface: VectorInterface, add using OrderedCollections: freeze using NamedTupleTools: delete +using Setfield: @set using Rimu: Rimu, DictVectors, Hamiltonians, Interfaces, BitStringAddresses, replace_keys, clean_and_warn_if_others_present diff --git a/src/ExactDiagonalization/init_and_solvers.jl b/src/ExactDiagonalization/init_and_solvers.jl index 68030fa65..a281bd1b5 100644 --- a/src/ExactDiagonalization/init_and_solvers.jl +++ b/src/ExactDiagonalization/init_and_solvers.jl @@ -15,8 +15,8 @@ function CommonSolve.init( # no algorithm specified as positional argument kw_nt = (; p.kw_nt..., kwargs...) # remove duplicates algorithm = get(kw_nt, :algorithm, LinearAlgebraSolver()) kw_nt = delete(kw_nt, (:algorithm,)) - - return init(p, algorithm; kw_nt...) + new_prp = ExactDiagonalizationProblem(p.hamiltonian, p.v0; kw_nt...) + return init(new_prp, algorithm) end diff --git a/test/ExactDiagonalization.jl b/test/ExactDiagonalization.jl index f367c7311..3f011e885 100644 --- a/test/ExactDiagonalization.jl +++ b/test/ExactDiagonalization.jl @@ -293,4 +293,15 @@ Random.seed!(1234) # for reproducibility, as some solvers start with random vect s3 = init(p3, KrylovKitSolver(); howmany=5) r3 = solve(s3) @test r3.success + + # specify algorithm in ExactDiagonalizationProblem + p4 = ExactDiagonalizationProblem( + HubbardReal1D(BoseFS(1, 2, 3)), DVec(BoseFS(1, 2, 3) => 2.3), + algorithm=KrylovKitSolver(; howmany=3) + ) + solver = init(p4) + @test solver.algorithm isa KrylovKitSolver + @test solver.kw_nt == (howmany=3,) + res = solve(solver) + @test res.success end