Skip to content

Commit d740ed1

Browse files
committed
Merge branch 'master' into sector
2 parents ec17bf3 + 3b9bfed commit d740ed1

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed

test/excis.jl

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
using MPSKit, TensorKit
2+
import LinearAlgebra.eigvals
3+
using MPSKit: max_virtualspaces
4+
5+
V = U1Space(i => 1 for i in 0:1)
6+
O = randn(V^2 V^2)
7+
O += O' # Hermitian
8+
9+
N = 3
10+
H = FiniteMPOHamiltonian(fill(V, N), (i, i + 1) => O for i in 1:(N - 1));
11+
12+
h = convert(TensorMap, H);
13+
14+
sectors = collect(blocksectors(h))
15+
sec = U1Irrep(1)
16+
@assert sec in sectors
17+
num = 10
18+
vals1 = eigvals(block(h, sec))
19+
vals2 = eigvals(h)[sec]
20+
@assert vals1 vals2
21+
vals3, vecs = exact_diagonalization(H; sector=(sec), num);
22+
vals1
23+
vals3
24+
25+
right = U1Space(sec => 1)
26+
max_virtualspaces(physicalspace(H); right)
27+
28+
psi_full = rand(oneunit(V) * V^N right);
29+
dim(space(psi_full))
30+
psi = MPSKit.decompose_localmps(psi_full);
31+
left_virtualspace.(psi)
32+
33+
left_virtualspace.(vecs[1].AL)
34+
right_virtualspace.(vecs[1].AL)
35+
max_virtualspaces(physicalspace(H); right)
36+
psi1 = FiniteMPS(physicalspace(H), max_virtualspaces(physicalspace(H))[2:(end - 1)])
37+
psi1, = find_groundstate(psi1, H);
38+
psi2 = FiniteMPS(physicalspace(H), max_virtualspaces(physicalspace(H); right)[2:(end - 1)];
39+
right)
40+
left_virtualspace.(psi2.AL)
41+
right_virtualspace.(psi2.AL)
42+
43+
psi2, = find_groundstate(psi2, H);
44+
expectation_value(psi2, H)
45+
46+
Es, Bs = excitations(H, QuasiparticleAnsatz(), FiniteMPS(psi); sector=sec);
47+
@inferred excitations(H, QuasiparticleAnsatz(), FiniteMPS(psi); sector=sec);
48+
49+
Es .+ expectation_value(psi1, H)
50+
51+
vals1
52+
vals3
53+
54+
psi2
55+
using TestEnv
56+
using Test
57+
TestEnv.activate()
58+
include("setup.jl")
59+
using .TestSetup
60+
using TensorKit, MPSKit
61+
using MPSKit: Multiline
62+
using KrylovKit
63+
64+
H = repeat(TestSetup.sixvertex(), 2)
65+
ψ = InfiniteMPS([ℂ^2, ℂ^2], [ℂ^10, ℂ^10])
66+
ψ, envs, _ = leading_boundary(ψ, H,
67+
VUMPS(; maxiter=400, tol=1e-10))
68+
energies, ϕs = @inferred excitations(H, QuasiparticleAnsatz(),
69+
[0.0, Float64(pi / 2)], ψ,
70+
envs; verbosity=0)
71+
@test abs(energies[1]) > abs(energies[2]) # has a minimum at pi/2
72+
alg = QuasiparticleAnsatz()
73+
ps = [0.0, Float64(pi / 2)]
74+
excitations(H, alg, ps, ψ, envs; verbosity=0);
75+
using Cthulhu
76+
Hm = convert(MultilineMPO, H);
77+
psim = convert(MultilineMPS, ψ);
78+
envs = environments(psim, Hm);
79+
excitations(Hm, alg, ps[1], psim, envs, psim, envs; verbosity=0);
80+
81+
@descend excitations(Hm, alg, ps[1], psim, envs, psim, envs);
82+
83+
qp = Multiline([LeftGaugedQP(rand, psim[1], psim[1]; sector=one(sectortype(psim[1])),
84+
momentum=ps[1])]);
85+
excitations(Hm, alg, qp, envs, envs; num=1);
86+
87+
@descend excitations(Hm, alg, qp, envs, envs; num=1);
88+
@code_warntype excitations(Hm, alg, qp, envs, envs; num=1);
89+
90+
Heff = MPSKit.EffectiveExcitationHamiltonian(H, envs[1], envs[1], fill(1.0, length(H)));
91+
Heffs = Multiline([Heff]);
92+
@code_warntype KrylovKit.apply(Heff, qp[1])
93+
@descend KrylovKit.apply(Heff, qp[1])
94+
95+
KrylovKit.apply(Multiline([Heff]), qp);
96+
@code_warntype KrylovKit.apply(Heffs, qp);
97+
98+
@descend eigsolve(Heffs, qp, 1, :LM, Lanczos());
99+
@code_warntype eigsolve(Heffs, qp, 1, :LM);
100+
@descend eigsolve(Heffs, qp, 1, :LM);

0 commit comments

Comments
 (0)