Skip to content

Commit c081dfb

Browse files
committed
Continue adapting code and improve DMRG test
1 parent d70bf03 commit c081dfb

File tree

4 files changed

+33
-42
lines changed

4 files changed

+33
-42
lines changed

src/ITensorNetworks.jl

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,23 @@ include("gauging.jl")
3535
include("utils.jl")
3636
include("update_observer.jl")
3737

38+
include("treetensornetworks/abstracttreetensornetwork.jl")
39+
include("treetensornetworks/treetensornetwork.jl")
40+
include("treetensornetworks/opsum_to_ttn/matelem.jl")
41+
include("treetensornetworks/opsum_to_ttn/qnarrelem.jl")
42+
include("treetensornetworks/opsum_to_ttn/opsum_to_ttn.jl")
43+
include("treetensornetworks/projttns/abstractprojttn.jl")
44+
include("treetensornetworks/projttns/projttn.jl")
45+
include("treetensornetworks/projttns/projttnsum.jl")
46+
include("treetensornetworks/projttns/projouterprodttn.jl")
47+
3848
include("solvers/local_solvers/eigsolve.jl")
3949
include("solvers/local_solvers/exponentiate.jl")
4050
include("solvers/local_solvers/runge_kutta.jl")
4151
include("solvers/truncation_parameters.jl")
42-
include("solvers/sweep_solve.jl")
4352
include("solvers/iterators.jl")
53+
include("solvers/adapters.jl")
54+
include("solvers/sweep_solve.jl")
4455
include("solvers/region_plans/dfs_plans.jl")
4556
include("solvers/region_plans/euler_tour.jl")
4657
include("solvers/region_plans/euler_plans.jl")
@@ -49,19 +60,11 @@ include("solvers/extracter.jl")
4960
include("solvers/inserter.jl")
5061
include("solvers/subspace/subspace.jl")
5162
include("solvers/subspace/densitymatrix.jl")
63+
include("solvers/permute_indices.jl")
64+
include("solvers/operator_map.jl")
5265
include("solvers/eigsolve.jl")
5366
include("solvers/applyexp.jl")
5467

55-
include("treetensornetworks/abstracttreetensornetwork.jl")
56-
include("treetensornetworks/treetensornetwork.jl")
57-
include("treetensornetworks/opsum_to_ttn/matelem.jl")
58-
include("treetensornetworks/opsum_to_ttn/qnarrelem.jl")
59-
include("treetensornetworks/opsum_to_ttn/opsum_to_ttn.jl")
60-
include("treetensornetworks/projttns/abstractprojttn.jl")
61-
include("treetensornetworks/projttns/projttn.jl")
62-
include("treetensornetworks/projttns/projttnsum.jl")
63-
include("treetensornetworks/projttns/projouterprodttn.jl")
64-
6568
include("apply.jl")
6669
include("inner.jl")
6770
include("normalize.jl")

src/solvers/inserter.jl

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import ConstructionBase: setproperties
2+
import NamedGraphs: edgetype
23

34
function inserter(
45
problem,
@@ -17,10 +18,10 @@ function inserter(
1718
if length(region) == 1
1819
C = local_tensor
1920
elseif length(region) == 2
20-
e = ng.edgetype(psi)(first(region), last(region))
21-
indsTe = it.inds(psi[first(region)])
22-
tags = it.tags(psi, e)
23-
U, C, _ = it.factorize(local_tensor, indsTe; tags, trunc...)
21+
e = edgetype(psi)(first(region), last(region))
22+
indsTe = inds(psi[first(region)])
23+
tags = ITensors.tags(psi, e)
24+
U, C, _ = factorize(local_tensor, indsTe; tags, trunc...)
2425
@preserve_graph psi[first(region)] = U
2526
else
2627
error("Region of length $(length(region)) not currently supported")

test/solvers/test_tree_dmrg.jl

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
import NetworkSolvers as ns
21
using Test: @test, @testset
3-
42
using ITensors
5-
import ITensorNetworks as itn
6-
import Graphs as gr
7-
import NamedGraphs as ng
8-
import ITensorMPS as itm
3+
using TensorOperations # Needed to use contraction order finding
4+
using ITensorNetworks: siteinds, ttn, dmrg
5+
import Graphs: dst, edges, src
6+
import ITensorMPS: OpSum
97

108
include("utilities/simple_ed_methods.jl")
119
include("utilities/tree_graphs.jl")
@@ -15,24 +13,24 @@ include("utilities/tree_graphs.jl")
1513

1614
g = build_tree(; nbranch=3, nbranch_sites=3)
1715

18-
sites = itn.siteinds("S=1/2", g)
16+
sites = siteinds("S=1/2", g)
1917

2018
# Make Heisenberg model Hamiltonian
21-
h = itm.OpSum()
22-
for edge in gr.edges(sites)
23-
i, j = gr.src(edge), gr.dst(edge)
19+
h = OpSum()
20+
for edge in edges(sites)
21+
i, j = src(edge), dst(edge)
2422
h += "Sz", i, "Sz", j
2523
h += 1/2, "S+", i, "S-", j
2624
h += 1/2, "S-", i, "S+", j
2725
end
28-
H = itn.ttn(h, sites)
26+
H = ttn(h, sites)
2927

3028
# Make initial product state
3129
state = Dict{Tuple{Int,Int},String}()
3230
for (j, v) in enumerate(gr.vertices(sites))
3331
state[v] = iseven(j) ? "Up" : "Dn"
3432
end
35-
psi0 = itn.ttn(state, sites)
33+
psi0 = ttn(state, sites)
3634

3735
(outputlevel >= 1) && println("Computing exact ground state")
3836
Ex, psix = ed_ground_state(H, psi0)
@@ -48,7 +46,7 @@ include("utilities/tree_graphs.jl")
4846
nsites = 2
4947
trunc = (; cutoff, maxdim)
5048
inserter_kwargs = (; trunc)
51-
E, psi = ns.dmrg(H, psi0; inserter_kwargs, nsites, nsweeps, outputlevel)
49+
E, psi = dmrg(H, psi0; inserter_kwargs, nsites, nsweeps, outputlevel)
5250
(outputlevel >= 1) && println("2-site DMRG energy = ", E)
5351
@test abs(E-Ex) < 1E-5
5452

@@ -60,9 +58,7 @@ include("utilities/tree_graphs.jl")
6058
trunc = (; cutoff, maxdim)
6159
extracter_kwargs = (; trunc, subspace_algorithm="densitymatrix")
6260
inserter_kwargs = (; trunc)
63-
cutoff = 1E-10
64-
maxdim = 200
65-
E, psi = ns.dmrg(H, psi0; extracter_kwargs, inserter_kwargs, nsites, nsweeps, outputlevel)
61+
E, psi = dmrg(H, psi0; extracter_kwargs, inserter_kwargs, nsites, nsweeps, outputlevel)
6662
(outputlevel >= 1) && println("1-site+subspace DMRG energy = ", E)
6763
@test abs(E-Ex) < 1E-5
6864
end

test/solvers/utilities/simple_ed_methods.jl

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
import ITensorNetworks as itn
2-
import NetworkSolvers as ns
1+
import ITensorNetworks: AbstractITensorNetwork
32

43
function ed_ground_state(H, psi0)
54
ITensors.disable_warn_order()
65
H = prod(H)
76
psi = prod(psi0)
8-
# TODO: call KrylovKit instead
97
expH = exp(H*(-20.0))
108
for napply in 1:10
119
psi = noprime(expH*psi)
@@ -16,10 +14,7 @@ function ed_ground_state(H, psi0)
1614
end
1715

1816
function ed_time_evolution(
19-
H::itn.AbstractITensorNetwork,
20-
psi::itn.AbstractITensorNetwork,
21-
time_points;
22-
normalize=false,
17+
H::AbstractITensorNetwork, psi::AbstractITensorNetwork, time_points; normalize=false
2318
)
2419
ITensors.disable_warn_order()
2520
H = prod(H)
@@ -30,10 +25,6 @@ function ed_time_evolution(
3025
for step in steps
3126
expH = exp(H * step)
3227
psi = noprime(expH * psi)
33-
#psir, _ = ns.runge_kutta_solver(H_map,step,psi; order=4)
34-
#psix, _ = ns.exponentiate_solver(H_map,step,psi)
35-
#@show abs(scalar(dag(psi)*psix))
36-
#@show abs(scalar(dag(psir)*psix))
3728
if normalize
3829
psi /= norm(psi)
3930
end

0 commit comments

Comments
 (0)