Skip to content

Commit 287f0b4

Browse files
committed
Define AbstractProblem. Work on saving max truncerror
1 parent 1a20572 commit 287f0b4

File tree

6 files changed

+35
-10
lines changed

6 files changed

+35
-10
lines changed

src/ITensorNetworks.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ include("solvers/subspace/subspace.jl")
6262
include("solvers/subspace/densitymatrix.jl")
6363
include("solvers/align_indices.jl")
6464
include("solvers/operator_map.jl")
65+
include("solvers/abstract_problem.jl")
6566
include("solvers/eigsolve.jl")
6667
include("solvers/applyexp.jl")
6768
include("solvers/fitting.jl")

src/solvers/abstract_problem.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
abstract type AbstractProblem end
3+
4+
set_truncation_info(P::AbstractProblem, args...; kws...) = P

src/solvers/applyexp.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using Printf: @printf
22

3-
@kwdef mutable struct ApplyExpProblem{State}
3+
@kwdef mutable struct ApplyExpProblem{State} <: AbstractProblem
44
operator
55
state::State
66
current_exponent::Number = 0.0

src/solvers/eigsolve.jl

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,37 @@
11
using 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
79
end
810

911
eigenvalue(E::EigsolveProblem) = E.eigenvalue
1012
state(E::EigsolveProblem) = E.state
1113
operator(E::EigsolveProblem) = E.operator
14+
max_truncerr(E::EigsolveProblem) = E.max_truncerr
1215

1316
function set_operator(E::EigsolveProblem, operator)
14-
EigsolveProblem(operator, E.state, E.eigenvalue)
17+
EigsolveProblem(operator, E.state, E.eigenvalue, E.max_truncerr)
1518
end
1619
function 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
1834
end
19-
set_state(E::EigsolveProblem, state) = EigsolveProblem(E.operator, state, E.eigenvalue)
2035

2136
function 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

src/solvers/fitting.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ using NamedGraphs.PartitionedGraphs: partitionedges
44
using Printf: @printf
55
using ConstructionBase: setproperties
66

7-
@kwdef mutable struct FittingProblem{State<:AbstractBeliefPropagationCache}
7+
@kwdef mutable struct FittingProblem{State<:AbstractBeliefPropagationCache} <:
8+
AbstractProblem
89
state::State
910
ket_graph::AbstractNamedGraph
1011
overlap::Number = 0

src/solvers/insert.jl

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ function insert(
88
set_orthogonal_region=true,
99
sweep,
1010
trunc=(;),
11+
outputlevel=0,
1112
kws...,
1213
)
1314
trunc = truncation_parameters(sweep; trunc...)
@@ -19,14 +20,16 @@ function insert(
1920
e = edgetype(psi)(first(region), last(region))
2021
indsTe = inds(psi[first(region)])
2122
tags = ITensors.tags(psi, e)
22-
U, C, _ = factorize(local_tensor, indsTe; tags, trunc...)
23+
U, C, spectrum = factorize(local_tensor, indsTe; tags, trunc...)
2324
@preserve_graph psi[first(region)] = U
25+
problem = set_truncation_info(problem; spectrum)
2426
else
2527
error("Region of length $(length(region)) not currently supported")
2628
end
2729
v = last(region)
2830
@preserve_graph psi[v] = C
2931
psi = set_orthogonal_region ? set_ortho_region(psi, [v]) : psi
3032
normalize && @preserve_graph psi[v] = psi[v] / norm(psi[v])
31-
return set_state(problem, psi)
33+
problem = set_state(problem, psi)
34+
return problem
3235
end

0 commit comments

Comments
 (0)