11using Printf: @printf
2+ using ITensors: truncerror
23
3- @kwdef mutable struct EigsolveProblem{State,Operator}
4+ @kwdef mutable struct EigsolveProblem{State,Operator} <: AbstractProblem
45 operator:: Operator
56 state:: State
67 eigenvalue:: Number = Inf
8+ max_truncerr:: Real = 0.0
79end
810
911eigenvalue (E:: EigsolveProblem ) = E. eigenvalue
1012state (E:: EigsolveProblem ) = E. state
1113operator (E:: EigsolveProblem ) = E. operator
14+ max_truncerr (E:: EigsolveProblem ) = E. max_truncerr
1215
1316function set_operator (E:: EigsolveProblem , operator)
14- EigsolveProblem (operator, E. state, E. eigenvalue)
17+ EigsolveProblem (operator, E. state, E. eigenvalue, E . max_truncerr )
1518end
1619function set_eigenvalue (E:: EigsolveProblem , eigenvalue)
17- EigsolveProblem (E. operator, E. state, eigenvalue)
20+ EigsolveProblem (E. operator, E. state, eigenvalue, E. max_truncerr)
21+ end
22+ function set_state (E:: EigsolveProblem , state)
23+ EigsolveProblem (E. operator, state, E. eigenvalue, E. max_truncerr)
24+ end
25+ function set_max_truncerr (E:: EigsolveProblem , truncerr)
26+ EigsolveProblem (E. operator, E. state, E. eigenvalue, truncerr)
27+ end
28+
29+ function set_truncation_info (E:: EigsolveProblem ; spectrum= nothing )
30+ if ! isnothing (spectrum)
31+ E = set_max_truncerr (E, max (max_truncerr (E), truncerror (spectrum)))
32+ end
33+ return E
1834end
19- set_state (E:: EigsolveProblem , state) = EigsolveProblem (E. operator, state, E. eigenvalue)
2035
2136function update (
2237 prob:: EigsolveProblem ,
@@ -43,8 +58,9 @@ function sweep_printer(problem::EigsolveProblem; outputlevel, sweep, nsweeps, kw
4358 else
4459 @printf (" After sweep %d/%d " , sweep, nsweeps)
4560 end
46- @printf (" eigenvalue=%.12f " , eigenvalue (problem))
47- @printf (" maxlinkdim=%d" , maxlinkdim (state (problem)))
61+ @printf (" eigenvalue=%.12f" , eigenvalue (problem))
62+ @printf (" maxlinkdim=%d" , maxlinkdim (state (problem)))
63+ @printf (" max truncerr=%d" , max_truncerr (problem))
4864 println ()
4965 flush (stdout )
5066 end
0 commit comments