@@ -53,22 +53,24 @@ ITensors.disable_auto_fermion()
53
53
psi_mps = ITensorMPS. MPS ([psi[v] for v in 1 : nv (psi)])
54
54
e2, psi2 = dmrg (H_mpo, psi_mps; nsweeps, maxdim, outputlevel= 0 )
55
55
56
- psi = dmrg (
56
+ e, psi = dmrg (
57
57
H, psi; nsweeps, maxdim, cutoff, nsites, updater_kwargs= (; krylovdim= 3 , maxiter= 1 )
58
58
)
59
+ @test inner (psi' , H, psi) ≈ e
59
60
@test inner (psi' , H, psi) ≈ inner (psi2' , H_mpo, psi2)
60
61
61
62
# Alias for `ITensorNetworks.dmrg`
62
- psi = eigsolve (
63
+ e, psi = eigsolve (
63
64
H, psi; nsweeps, maxdim, cutoff, nsites, updater_kwargs= (; krylovdim= 3 , maxiter= 1 )
64
65
)
66
+ @test inner (psi' , H, psi) ≈ e
65
67
@test inner (psi' , H, psi) ≈ inner (psi2' , H_mpo, psi2)
66
68
67
69
# Test custom sweep regions #BROKEN, ToDo: Make proper custom sweep regions for test
68
70
#=
69
71
orig_E = inner(psi', H, psi)
70
72
sweep_regions = [[1], [2], [3], [3], [2], [1]]
71
- psi = dmrg(H, psi; nsweeps, maxdim, cutoff, sweep_regions)
73
+ e, psi = dmrg(H, psi; nsweeps, maxdim, cutoff, sweep_regions)
72
74
new_E = inner(psi', H, psi)
73
75
@test new_E ≈ orig_E
74
76
=#
@@ -101,13 +103,14 @@ end
101
103
energy (; eigvals, kw... ) = eigvals[1 ]
102
104
region_observer! = observer (region, sweep, energy)
103
105
104
- psi = dmrg (H, psi; nsweeps, maxdim, cutoff, sweep_observer!, region_observer!)
106
+ e, psi = dmrg (H, psi; nsweeps, maxdim, cutoff, sweep_observer!, region_observer!)
105
107
106
108
#
107
109
# Test out certain values
108
110
#
109
111
@test region_observer![9 , :region ] == [2 , 1 ]
110
112
@test region_observer![30 , :energy ] < - 4.25
113
+ @test region_observer![30 , :energy ] ≈ e rtol = 1e-6
111
114
end
112
115
113
116
@testset " Cache to Disk" begin
126
129
nsweeps = 4
127
130
maxdim = [10 , 20 , 40 , 80 ]
128
131
129
- @test_broken psi = dmrg (
132
+ @test_broken e, psi = dmrg (
130
133
H,
131
134
psi;
132
135
nsweeps,
160
163
maxdim = [200 , 250 , 400 , 600 , 800 , 1200 , 2000 , 2400 , 2600 , 3000 ]
161
164
cutoff = [1e-10 , 1e-10 , 1e-12 , 1e-12 , 1e-12 , 1e-12 , 1e-14 , 1e-14 , 1e-14 , 1e-14 ]
162
165
163
- psi = dmrg (H, psi; nsweeps, maxdim, cutoff)
166
+ e, psi = dmrg (H, psi; nsweeps, maxdim, cutoff)
164
167
end
165
168
166
169
@testset " Tree DMRG" for nsites in [2 ]
195
198
nsweeps = 10
196
199
maxdim = [10 , 20 , 40 , 100 ]
197
200
@show use_qns
198
- psi = dmrg (
201
+ e, psi = dmrg (
199
202
H, psi; nsweeps, maxdim, cutoff, nsites, updater_kwargs= (; krylovdim= 3 , maxiter= 1 )
200
203
)
201
204
252
255
end
253
256
states = v -> d[v]
254
257
psi = ttn (states, s)
255
- psi = dmrg (
258
+ e, psi = dmrg (
256
259
H, psi; nsweeps, maxdim, cutoff, nsites, updater_kwargs= (; krylovdim= 3 , maxiter= 1 )
257
260
)
258
261
280
283
os = ModelHamiltonians. heisenberg (c)
281
284
H = ttn (os, s)
282
285
psi = random_ttn (s; link_space= 5 )
283
- psi = dmrg (H, psi; nsweeps, maxdim, nsites)
286
+ e, psi = dmrg (H, psi; nsweeps, maxdim, nsites)
284
287
285
288
@test all (edge_data (linkdims (psi)) .<= maxdim)
286
289
end
0 commit comments