From 8d3395af48ad8897e72e4e23cd649baf0b04f7b3 Mon Sep 17 00:00:00 2001 From: lkdvos Date: Mon, 3 Aug 2026 13:14:18 -0400 Subject: [PATCH] docs(examples): add TFIM ground-state and SU(3) Heisenberg examples MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The gallery had no beginner entry point: every example already assumed familiarity with the API. `groundstates/0.tfim-groundstate` is a complete ground-state study of the transverse-field Ising model — the same model the tutorials use — from a product state through DMRG, magnetization and correlation functions. `excitations/1.su3-heisenberg` covers the SU(3) Heisenberg chain using `SUNRepresentations`, which is the only example exercising a non-abelian symmetry beyond SU(2). Its dispersion reproduces the soft-mode location of the reference but not the reported gap value; the page says so explicitly rather than quietly presenting the number as agreement. Co-Authored-By: Claude Opus 5 (1M context) --- .../excitations/su3-heisenberg/figure-1.png | Bin 0 -> 55260 bytes .../excitations/su3-heisenberg/figure-2.png | Bin 0 -> 60452 bytes .../excitations/su3-heisenberg/index.md | 237 +++++++++++++ .../excitations/su3-heisenberg/main.ipynb | 306 ++++++++++++++++ .../tfim-groundstate/figure-1.png | Bin 0 -> 32221 bytes .../tfim-groundstate/figure-2.png | Bin 0 -> 27284 bytes .../tfim-groundstate/figure-3.png | Bin 0 -> 30202 bytes .../groundstates/tfim-groundstate/index.md | 184 ++++++++++ .../groundstates/tfim-groundstate/main.ipynb | 329 ++++++++++++++++++ docs/src/examples/index.md | 17 + examples/Cache.toml | 20 +- examples/Project.toml | 1 + examples/excitations/su3-heisenberg/main.jl | 173 +++++++++ .../groundstates/tfim-groundstate/main.jl | 118 +++++++ 14 files changed, 1376 insertions(+), 9 deletions(-) create mode 100644 docs/src/examples/excitations/su3-heisenberg/figure-1.png create mode 100644 docs/src/examples/excitations/su3-heisenberg/figure-2.png create mode 100644 docs/src/examples/excitations/su3-heisenberg/index.md create mode 100644 docs/src/examples/excitations/su3-heisenberg/main.ipynb create mode 100644 docs/src/examples/groundstates/tfim-groundstate/figure-1.png create mode 100644 docs/src/examples/groundstates/tfim-groundstate/figure-2.png create mode 100644 docs/src/examples/groundstates/tfim-groundstate/figure-3.png create mode 100644 docs/src/examples/groundstates/tfim-groundstate/index.md create mode 100644 docs/src/examples/groundstates/tfim-groundstate/main.ipynb create mode 100644 examples/excitations/su3-heisenberg/main.jl create mode 100644 examples/groundstates/tfim-groundstate/main.jl diff --git a/docs/src/examples/excitations/su3-heisenberg/figure-1.png b/docs/src/examples/excitations/su3-heisenberg/figure-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0b7b9b930e77a5374e571eb547558767653f2c4c GIT binary patch literal 55260 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
  • c&$#*>Ko00iF#Tbg>(nn2>ZG`}=2H6fB{t6WFfov7bazTn^l;GPOBr9&XdwouroFb(l~lc zenI%IWJfkOL^WtI$N#Gh^8f|nM_gPy*RwC{kI!%a8pwmt5l;XT{cwjfOpj$1ViQU- zVte@6C}t2&|AhFwSvMkT;FJtKucEv>@&rzz4g?3ld$^;{zRyeK8&%)Ge`FpoBH}1x zC>@Vbo`UmbT42W~2Q8{VIt0l^>kz*@$~{Os9;vh|iur|W5%sh~#d7$tLk%)3~QkFoA>jI`3 zrO*K?!FxYpub7L?0r7OYS<`=wm4SBums_p>%Wb;)i&M#W-{;bUBz}B{vqnv4b?VB^ GhyEL#hmNKI literal 0 HcmV?d00001 diff --git a/docs/src/examples/excitations/su3-heisenberg/figure-2.png b/docs/src/examples/excitations/su3-heisenberg/figure-2.png new file mode 100644 index 0000000000000000000000000000000000000000..ef40ea9ffe844c6f5e1bb1670295e5cb5b335c42 GIT binary patch literal 60452 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%0D^_+* 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 Hx%58(JC{3j literal 0 HcmV?d00001 diff --git a/docs/src/examples/excitations/su3-heisenberg/index.md b/docs/src/examples/excitations/su3-heisenberg/index.md new file mode 100644 index 000000000..a9f10a0b8 --- /dev/null +++ b/docs/src/examples/excitations/su3-heisenberg/index.md @@ -0,0 +1,237 @@ +```@meta +EditURL = "../../../../../examples/excitations/su3-heisenberg/main.jl" +``` + +[![](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/QuantumKitHub/MPSKit.jl/gh-pages?filepath=dev/examples/excitations/su3-heisenberg/main.ipynb) +[![](https://img.shields.io/badge/show-nbviewer-579ACA.svg)](https://nbviewer.jupyter.org/github/QuantumKitHub/MPSKit.jl/blob/gh-pages/dev/examples/excitations/su3-heisenberg/main.ipynb) +[![](https://img.shields.io/badge/download-project-orange)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/QuantumKitHub/MPSKit.jl/examples/tree/gh-pages/dev/examples/excitations/su3-heisenberg) + +# The SU(3) Heisenberg chain + +The spin-1 Heisenberg chain has a gapped, symmetry-protected topological ground state, the Haldane phase. +In this example we study what happens when the SU(2) symmetry of the spins is promoted to SU(3), following [devos2022](@cite). +Every site of the chain carries the fully symmetric ``[3 0 0]`` irrep of SU(3), which is ten-dimensional, and neighbouring sites are coupled by the SU(3)-invariant Heisenberg interaction + +```math +H = J ∑_{⟨i,j⟩} ∑_{a=1}^{8} Tᵃᵢ Tᵃⱼ +``` + +where the ``Tᵃ`` are the eight generators of SU(3). +This is the direct analogue of the spin-1 chain, with the three generators of SU(2) replaced by the eight generators of SU(3). + +Just as in the [Haldane gap](@ref "The Haldane gap") example, imposing the full non-abelian symmetry block-diagonalizes every tensor, so that a modest number of variational parameters captures a large bond dimension. +The SU(3) Clebsch–Gordan coefficients are provided by [SUNRepresentations.jl](https://github.com/QuantumKitHub/SUNRepresentations.jl), whose `SU3Irrep` sectors plug directly into TensorKit. + +!!! warning "First-run cost" + SUNRepresentations.jl computes Clebsch–Gordan coefficients on demand, and caches them both in memory and on disk. + The first time a coefficient is needed, this computation can be slow. + +To follow this example you need the following packages: + +````julia +using MPSKit, TensorKit, SUNRepresentations, CairoMakie +```` + +For reproducibility of this page, we fix the seed of the random number generator: + +````julia +using Random +Random.seed!(4321); +```` + +## The model + +Each site carries the ``[3 0 0]`` irrep, which we specify through its highest weight. + +````julia +I300 = SU3Irrep(3, 0, 0) +Vphys = Vect[SU3Irrep](I300 => 1) +dim(I300) +```` + +```` +10 +```` + +To build the interaction, we use that it is diagonal in the total charge ``c`` of a bond. +Writing ``C₂ = ∑ₐ TᵃTᵃ`` for the quadratic Casimir, we have + +```math +∑ₐ Tᵃᵢ Tᵃⱼ = ½ (C₂(c) - 2 C₂([3 0 0])). +``` + +SUNRepresentations.jl provides the quadratic Casimir as `casimir(2, irrep)`, normalized such that the fundamental ``[1 0 0]`` has ``C₂ = 4/3``. + +````julia +casimir(2, SU3Irrep(1, 0, 0)), casimir(2, I300) +```` + +```` +(4//3, 6//1) +```` + +The nearest-neighbour term is then a single operator that acts as a scalar on each fusion channel of ``[3 0 0] ⊗ [3 0 0]``. +We construct it by filling in the blocks, one for every total charge ``c``: + +````julia +function su3_heisenberg(Vphys; J = 1.0) + c2_site = casimir(2, SU3Irrep(3, 0, 0)) + SS = zeros(ComplexF64, Vphys ⊗ Vphys ← Vphys ⊗ Vphys) + for (c, data) in blocks(SS) + coupling = (casimir(2, c) - 2 * c2_site) / 2 + for i in axes(data, 1) + data[i, i] = J * coupling + end + end + return InfiniteMPOHamiltonian(SS) +end + +H = su3_heisenberg(Vphys) +```` + +```` +1-site InfiniteMPOHamiltonian(ComplexF64, Rep[SU₃]) with maximal dimension 10: +| ⋮ +| (((0, 0, 0)=>1) ⊞ ((2, 1, 0)=>1) ⊞ ((0, 0, 0)=>1)) +┼─[1]─ ((3, 0, 0) => 1) +│ (((0, 0, 0)=>1) ⊞ ((2, 1, 0)=>1) ⊞ ((0, 0, 0)=>1)) +| ⋮ + +```` + +The product ``[3 0 0] ⊗ [3 0 0]`` decomposes into four irreps, and the antiferromagnetic coupling favours the channels with the lowest Casimir: + +````julia +for (c, n) in directproduct(I300, I300) + coupling = (casimir(2, c) - 2 * casimir(2, I300)) / 2 + println("$c:\t dim = $(dim(c)),\t coupling = $coupling") +end +```` + +```` +Irrep[SU₃]((4, 2, 0)): dim = 27, coupling = -2//1 +Irrep[SU₃]((5, 1, 0)): dim = 35, coupling = 0//1 +Irrep[SU₃]((6, 0, 0)): dim = 28, coupling = 3//1 +Irrep[SU₃]((3, 3, 0)): dim = 10, coupling = -3//1 + +```` + +## Ground state + +The ``[3 0 0]`` irrep has trivial triality, so that, as for the spin-1 chain, a translation-invariant state with a single-site unit cell is allowed. +The physical charge then cannot change the triality of the virtual spaces, so all virtual charges must have the same triality. +Here we use virtual charges with trivial triality, which give the lowest variational energy. +We start from a small virtual space, and optimize a random initial state with VUMPS: + +````julia +Vvirt = Vect[SU3Irrep]( + SU3Irrep(0, 0, 0) => 3, + SU3Irrep(2, 1, 0) => 6, + SU3Irrep(3, 0, 0) => 3, + SU3Irrep(3, 3, 0) => 3, + SU3Irrep(4, 2, 0) => 2, +) +ψ₀ = InfiniteMPS([Vphys], [Vvirt]) +vumps = VUMPS(; maxiter = 400, tol = 1.0e-10, verbosity = 0) +ψ, envs, info = find_groundstate(ψ₀, H, vumps) +E₀ = real(expectation_value(ψ, H, envs)) +```` + +```` +-2.5735056524313213 +```` + +## Excitations + +On top of the ground state, we compute excitations with the quasiparticle ansatz. +Following [devos2022](@cite), we look for the lowest excitations in the adjoint ``[2 1 0]`` sector, which has its minimum at momentum ``k = 2π/3``. + +````julia +sector = SU3Irrep(2, 1, 0) +Es, _ = excitations(H, QuasiparticleAnsatz(), 2π / 3, ψ, envs; sector) +ΔE = real(Es[1]) +```` + +```` +-0.04185666026343908 +```` + +The excitation energy comes out negative, which would mean that there are states below the ground state. + +!!! warning "Excitation energies are not variational" + The quasiparticle ansatz returns the energy of the excited state *relative to the ground-state energy*. + The ground state itself is only approximated, and its energy ``E₀`` lies above the exact one. + Any error in ``E₀`` therefore directly shifts the excitation energies, and they are not an upper bound on the true gap. + In particular, a gap that is small compared to the error in ``E₀`` can come out too small, or even negative. + +The remedy is to improve the ground state. +Instead of guessing a larger virtual space, we let `changebonds` with `OptimalExpand` grow the bond dimension, by adding the directions that contribute the most to a two-site update of the converged state. +Here `truncrank` counts the total dimension that is added to each bond, including the dimension of the SU(3) irreps. +Every expanded state is then reconverged with VUMPS, and we recompute the excitation energy at ``k = 2π/3``. + +````julia +expand = OptimalExpand(; trunc = truncrank(150)) +Ds = [dim(left_virtualspace(ψ, 1))] +E₀s = [E₀] +ΔEs = [ΔE] +for step in 1:8 + global ψ, envs = changebonds(ψ, H, expand, envs) + global ψ, envs, info = find_groundstate(ψ, H, vumps, envs) + Es_step, _ = excitations(H, QuasiparticleAnsatz(), 2π / 3, ψ, envs; sector) + push!(Ds, dim(left_virtualspace(ψ, 1))) + push!(E₀s, real(expectation_value(ψ, H, envs))) + push!(ΔEs, real(Es_step[1])) +end +[Ds E₀s ΔEs] +```` + +```` +9×3 Matrix{Float64}: + 165.0 -2.57351 -0.0418567 + 289.0 -2.58456 0.00418946 + 380.0 -2.58558 0.00073655 + 524.0 -2.58673 0.00949052 + 674.0 -2.58715 0.0111844 + 824.0 -2.58736 0.0116534 + 942.0 -2.58746 0.0122323 + 1058.0 -2.58757 0.0125425 + 1195.0 -2.58769 0.0128488 +```` + +````julia +fig = Figure() +ax = Axis(fig[1, 1]; xlabel = "D", ylabel = "ΔE / J", title = "[2 1 0], k = 2π/3") +scatterlines!(ax, Ds, ΔEs) +hlines!(ax, [0.0]; color = :gray, linestyle = :dash) +hlines!(ax, [0.0263]; color = :gray, linestyle = :dot) +fig +```` + +![](figure-1.png) + +As the bond dimension grows, the ground-state energy decreases, and the excitation energy turns positive already after the first expansion. +Apart from a dip at the second expansion, where VUMPS does not fully converge within `maxiter`, it then increases steadily. +It is still increasing at the largest bond dimension used here, and remains below the value ``ΔE / J = 0.0263`` reported in [devos2022](@cite) (dotted line). +Resolving this small gap therefore requires an even larger bond dimension. + +Finally, we compute the dispersion relation on top of the largest ground state, scanning half of the Brillouin zone. + +````julia +kspace = range(0, π, 10) +Es, _ = excitations(H, QuasiparticleAnsatz(), kspace, ψ, envs; sector, verbosity = 0) + +fig = Figure() +ax = Axis(fig[1, 1]; xlabel = "momentum", ylabel = "ΔE / J", title = "[2 1 0]") +lines!(ax, kspace, vec(real.(Es))) +vlines!(ax, [2π / 3]; color = :gray, linestyle = :dot) +fig +```` + +![](figure-2.png) + +The dispersion has its minimum at ``k = 2π/3``, where [devos2022](@cite) locates the gap of this model. + +--- + +*This page was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).* + diff --git a/docs/src/examples/excitations/su3-heisenberg/main.ipynb b/docs/src/examples/excitations/su3-heisenberg/main.ipynb new file mode 100644 index 000000000..9164610a4 --- /dev/null +++ b/docs/src/examples/excitations/su3-heisenberg/main.ipynb @@ -0,0 +1,306 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The SU(3) Heisenberg chain\n", + "\n", + "The spin-1 Heisenberg chain has a gapped, symmetry-protected topological ground state, the Haldane phase.\n", + "In this example we study what happens when the SU(2) symmetry of the spins is promoted to SU(3), following [devos2022](@cite).\n", + "Every site of the chain carries the fully symmetric $[3 0 0]$ irrep of SU(3), which is ten-dimensional, and neighbouring sites are coupled by the SU(3)-invariant Heisenberg interaction\n", + "\n", + "$$\n", + "H = J ∑_{⟨i,j⟩} ∑_{a=1}^{8} Tᵃᵢ Tᵃⱼ\n", + "$$\n", + "\n", + "where the $Tᵃ$ are the eight generators of SU(3).\n", + "This is the direct analogue of the spin-1 chain, with the three generators of SU(2) replaced by the eight generators of SU(3).\n", + "\n", + "Just as in the Haldane gap example, imposing the full non-abelian symmetry block-diagonalizes every tensor, so that a modest number of variational parameters captures a large bond dimension.\n", + "The SU(3) Clebsch–Gordan coefficients are provided by [SUNRepresentations.jl](https://github.com/QuantumKitHub/SUNRepresentations.jl), whose `SU3Irrep` sectors plug directly into TensorKit.\n", + "\n", + "> **First-run cost**\n", + ">\n", + "> SUNRepresentations.jl computes Clebsch–Gordan coefficients on demand, and caches them both in memory and on disk.\n", + "> The first time a coefficient is needed, this computation can be slow.\n", + "\n", + "To follow this example you need the following packages:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "using MPSKit, TensorKit, SUNRepresentations, CairoMakie" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For reproducibility of this page, we fix the seed of the random number generator:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "using Random\n", + "Random.seed!(4321);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The model\n", + "\n", + "Each site carries the $[3 0 0]$ irrep, which we specify through its highest weight." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "I300 = SU3Irrep(3, 0, 0)\n", + "Vphys = Vect[SU3Irrep](I300 => 1)\n", + "dim(I300)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To build the interaction, we use that it is diagonal in the total charge $c$ of a bond.\n", + "Writing $C₂ = ∑ₐ TᵃTᵃ$ for the quadratic Casimir, we have\n", + "\n", + "$$\n", + "∑ₐ Tᵃᵢ Tᵃⱼ = ½ (C₂(c) - 2 C₂([3 0 0])).\n", + "$$\n", + "\n", + "SUNRepresentations.jl provides the quadratic Casimir as `casimir(2, irrep)`, normalized such that the fundamental $[1 0 0]$ has $C₂ = 4/3$." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "casimir(2, SU3Irrep(1, 0, 0)), casimir(2, I300)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The nearest-neighbour term is then a single operator that acts as a scalar on each fusion channel of $[3 0 0] ⊗ [3 0 0]$.\n", + "We construct it by filling in the blocks, one for every total charge $c$:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "function su3_heisenberg(Vphys; J = 1.0)\n", + " c2_site = casimir(2, SU3Irrep(3, 0, 0))\n", + " SS = zeros(ComplexF64, Vphys ⊗ Vphys ← Vphys ⊗ Vphys)\n", + " for (c, data) in blocks(SS)\n", + " coupling = (casimir(2, c) - 2 * c2_site) / 2\n", + " for i in axes(data, 1)\n", + " data[i, i] = J * coupling\n", + " end\n", + " end\n", + " return InfiniteMPOHamiltonian(SS)\n", + "end\n", + "\n", + "H = su3_heisenberg(Vphys)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The product $[3 0 0] ⊗ [3 0 0]$ decomposes into four irreps, and the antiferromagnetic coupling favours the channels with the lowest Casimir:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for (c, n) in directproduct(I300, I300)\n", + " coupling = (casimir(2, c) - 2 * casimir(2, I300)) / 2\n", + " println(\"$c:\\t dim = $(dim(c)),\\t coupling = $coupling\")\n", + "end" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ground state\n", + "\n", + "The $[3 0 0]$ irrep has trivial triality, so that, as for the spin-1 chain, a translation-invariant state with a single-site unit cell is allowed.\n", + "The physical charge then cannot change the triality of the virtual spaces, so all virtual charges must have the same triality.\n", + "Here we use virtual charges with trivial triality, which give the lowest variational energy.\n", + "We start from a small virtual space, and optimize a random initial state with VUMPS:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Vvirt = Vect[SU3Irrep](\n", + " SU3Irrep(0, 0, 0) => 3,\n", + " SU3Irrep(2, 1, 0) => 6,\n", + " SU3Irrep(3, 0, 0) => 3,\n", + " SU3Irrep(3, 3, 0) => 3,\n", + " SU3Irrep(4, 2, 0) => 2,\n", + ")\n", + "ψ₀ = InfiniteMPS([Vphys], [Vvirt])\n", + "vumps = VUMPS(; maxiter = 400, tol = 1.0e-10, verbosity = 0)\n", + "ψ, envs, info = find_groundstate(ψ₀, H, vumps)\n", + "E₀ = real(expectation_value(ψ, H, envs))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Excitations\n", + "\n", + "On top of the ground state, we compute excitations with the quasiparticle ansatz.\n", + "Following [devos2022](@cite), we look for the lowest excitations in the adjoint $[2 1 0]$ sector, which has its minimum at momentum $k = 2π/3$." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sector = SU3Irrep(2, 1, 0)\n", + "Es, _ = excitations(H, QuasiparticleAnsatz(), 2π / 3, ψ, envs; sector)\n", + "ΔE = real(Es[1])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The excitation energy comes out negative, which would mean that there are states below the ground state.\n", + "\n", + "> **Excitation energies are not variational**\n", + ">\n", + "> The quasiparticle ansatz returns the energy of the excited state *relative to the ground-state energy*.\n", + "> The ground state itself is only approximated, and its energy $E₀$ lies above the exact one.\n", + "> Any error in $E₀$ therefore directly shifts the excitation energies, and they are not an upper bound on the true gap.\n", + "> In particular, a gap that is small compared to the error in $E₀$ can come out too small, or even negative.\n", + "\n", + "The remedy is to improve the ground state.\n", + "Instead of guessing a larger virtual space, we let `changebonds` with `OptimalExpand` grow the bond dimension, by adding the directions that contribute the most to a two-site update of the converged state.\n", + "Here `truncrank` counts the total dimension that is added to each bond, including the dimension of the SU(3) irreps.\n", + "Every expanded state is then reconverged with VUMPS, and we recompute the excitation energy at $k = 2π/3$." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "expand = OptimalExpand(; trunc = truncrank(150))\n", + "Ds = [dim(left_virtualspace(ψ, 1))]\n", + "E₀s = [E₀]\n", + "ΔEs = [ΔE]\n", + "for step in 1:8\n", + " global ψ, envs = changebonds(ψ, H, expand, envs)\n", + " global ψ, envs, info = find_groundstate(ψ, H, vumps, envs)\n", + " Es_step, _ = excitations(H, QuasiparticleAnsatz(), 2π / 3, ψ, envs; sector)\n", + " push!(Ds, dim(left_virtualspace(ψ, 1)))\n", + " push!(E₀s, real(expectation_value(ψ, H, envs)))\n", + " push!(ΔEs, real(Es_step[1]))\n", + "end\n", + "[Ds E₀s ΔEs]\n", + "fig = Figure()\n", + "ax = Axis(fig[1, 1]; xlabel = \"D\", ylabel = \"ΔE / J\", title = \"[2 1 0], k = 2π/3\")\n", + "scatterlines!(ax, Ds, ΔEs)\n", + "hlines!(ax, [0.0]; color = :gray, linestyle = :dash)\n", + "hlines!(ax, [0.0263]; color = :gray, linestyle = :dot)\n", + "fig" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As the bond dimension grows, the ground-state energy decreases, and the excitation energy turns positive already after the first expansion.\n", + "Apart from a dip at the second expansion, where VUMPS does not fully converge within `maxiter`, it then increases steadily.\n", + "It is still increasing at the largest bond dimension used here, and remains below the value $ΔE / J = 0.0263$ reported in [devos2022](@cite) (dotted line).\n", + "Resolving this small gap therefore requires an even larger bond dimension.\n", + "\n", + "Finally, we compute the dispersion relation on top of the largest ground state, scanning half of the Brillouin zone." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "kspace = range(0, π, 10)\n", + "Es, _ = excitations(H, QuasiparticleAnsatz(), kspace, ψ, envs; sector, verbosity = 0)\n", + "\n", + "fig = Figure()\n", + "ax = Axis(fig[1, 1]; xlabel = \"momentum\", ylabel = \"ΔE / J\", title = \"[2 1 0]\")\n", + "lines!(ax, kspace, vec(real.(Es)))\n", + "vlines!(ax, [2π / 3]; color = :gray, linestyle = :dot)\n", + "fig" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The dispersion has its minimum at $k = 2π/3$, where [devos2022](@cite) locates the gap of this model." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 1.13.3", + "language": "julia", + "name": "julia-1.13" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.13.3" + } + }, + "nbformat": 4, + "nbformat_minor": 3 +} \ No newline at end of file diff --git a/docs/src/examples/groundstates/tfim-groundstate/figure-1.png b/docs/src/examples/groundstates/tfim-groundstate/figure-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0b9ba1f2b903bcace439ca9a0d311334cdadbc99 GIT binary patch literal 32221 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%0D%+7#%Z1-@z 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 b_2Ls{1#eznrnxDdG{MZ+YJ2H6x1;|K_BHv1 literal 0 HcmV?d00001 diff --git a/docs/src/examples/groundstates/tfim-groundstate/figure-2.png b/docs/src/examples/groundstates/tfim-groundstate/figure-2.png new file mode 100644 index 0000000000000000000000000000000000000000..6ce16b5cdfc33cb8abc9db584c648830eced28b9 GIT binary patch literal 27284 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 literal 0 HcmV?d00001 diff --git a/docs/src/examples/groundstates/tfim-groundstate/figure-3.png b/docs/src/examples/groundstates/tfim-groundstate/figure-3.png new file mode 100644 index 0000000000000000000000000000000000000000..66d8aef2ee59d45fda6748b5c028ee67077fb702 GIT binary patch literal 30202 zcmd?ScU+X&(k|MHiV?<$NHP#4BT=%780N!_TRmI;>CNn5BvBZ?e%=caW6$VWhIG(B;}1DLt4^p zQFpr<`q0_WlG2tg z9N7MR?``4T&=1T><(-#X|2MsCdvI}b?t#%I<;~8{Zp0}3KDd*YgoG&XSla)5?ZM8* z_G0g$Q*pVuTiv}R|Qn3zasqp7Jm`t#?0%$3$))VV89{>96?+71EE zaAs~|zkQfH>=$=o?$oTeWwed-q)yju*ev6C>sMV%r{}tx*HWKGHe(<7V%JJA7$xNc z7>r_9zsq`vhJC$Y^0-m`wz-qQ>Icp7x!7W=>Pl_P`+XL5%>>V|4~s?<_}!J)4~!no!QiJ$Bz>!eEpYKL#z^xh~s<@!OgC z@{J|Qd>#(fjwUHzslc9}#x^=y_F-{*F-c|7>pVkt5&PJ03Kvd)Ti9}8b8Ij=fVmPJ z#HM$InAo7g^W^B%R0DltWWaN^QU{x{zNNhU_`*V7b^fIe9RiFDk)3c;%;Y7Z=nehN zkqO>Z7@e}h$DkaO&a92^gu+!L^%2>nw=%S%c&$c;j>oKA$GBA+Tbl@U8|#{YT|oU@ z@Kh-|59^e?-d(=gZQ@rvRmA8;!b*f;E1b;k&N0bw9+5i)3mEjSxnzijwc4Fn=p~t1 z!MWp^hRq31vtHVDDaxr?`t{*;(SrPq4sF?%U51InGoOeX^CBI_k~;_LI2!AgZbR>h z1Q))R%tuYv`ME5_1}S7&k2Y;=_HR2c^*K&sFoB=GtvA-b4GHKc_SHR4)M=%^)NQJU z!K5TSj=Hxv)>=4`Rm-mP#arfcJx_mRDD*Eqe9HfCdpZr%r4Xb)C)ht~}jN6zobM8j3g?uBg zN?+LXmG$F92QgPp2EY5{*-VpT_-dgFw;-XgD z^2>se9#6Y07iZu9_NHX5HKRc>IX|BVO~hOzPJoU?%l@tueRA>E+PGDZMdfh4xr>#{ zTwu%|%uDh2e?c z_JaI&5J}n0lhxj7mr!$;`3US{s&-V=j~60DlD%jK@lSq9E|qp}+I8zH78fHdNa8x5 z^|o;EM@#A8%f#WKhQX$m+aPbj!S6)sB6wJ1V`Dq-eR_JNv%o@U>m}9ZPw~~wY1fz{ zo{}F&u;=L_A6y%$3k&oi;~AN&Wo=B=-W(H9W+|S?(y;B+ z+Z?mC0Fu_2lkg>{-mpG=!!8O-PwVP7h#RUay zdke2;3rm}un?LpNP?V|$ne8c=&||F?7he0;18wuJ{fy1Fo$T5eFW)kTYqIZEc*?Z2 zs%S?|USebW?T+PXkpA!A@4)T>`v`ve?CmcT5D@I5^?Ug6;b9`8gydv;{QJ-kA3nf) z{X2Kgn#3Gq(3|YaP3|_%D9vK_I>jv2TU8}N>9X=;BDY-&%MR0Mf)rT5Kh{r(Z@fK2 zUPMGBZ)GmDJn|C}Ka=)aQ)rguaLq&^E}D01WpMtRp9|;uWWF}-*lMGzOJ1c2vET{V z35Wc}*)LyySrifyf(fid=1EjrTbt71=W9%$xT~ux5>I#()2C0LU|STY#8SJvyC)kP z8Xh>VaxH#gc{$N+ZDF)C1ZC!f z`1hgE$(G!_yoC688X1iP!R(xzK}8BudGSF3%xG_p<>cfX5*|-UO|Q8Qf5w@8c(iwC zlIvoGg?F07_cM&cK!4{u*ylO9x%EM0!+6ZK+^P*=>gREd^2Wx-FAHD=U~I|AdgVbs zbiLr_y+~+M7+x!YfekK_jo{W(=QiyMVurUTF>cR)PD~*AG0Iiz>gw8!VIvK?K`-yv z)vU1m-JMup-DSPIKf&yaH))u#s|(tI6H<;b4CA%2$Yy-5xPOzyaWYpWx(b=pq6#mP z#MiISq3aZt4+L9&JV2-GHSM~+j;%M=3alhMeY(oebz`t4%6{PaF1YArjZ{*QI}zW- zMyC-DtND5!oMOzHlGf&!3Tj4u9mxjtIDTrF)fJ0cO~^XNfSbr}Y^c@Vngf$9Tumr6 z^N>lqOaOE&d3{vgH5?hVWd6~(K(srcdt~%zlp3@*TeXK<6y@tf%NF7{mbbV1k<^nr zPGlAi`tn_e=N0zbKSyCly7epet&c*%Vl%ztwtfcy1@2o zW25k9v#=gqj~~RCR0n+st9CSKy}=tPdR`D7%aJgHkuKwm`fx5|cE_a&Ce0#FLh=V! zP=9Ps(kOMkRn4|+lBC;<`JVi>w>K&}I=aQi#wI>C_5$pwD!+Sw=<<{QBS-f=OKf&F z$K>Q>a;uS{vGF0yd)*uVuUacE<`)zMhiGg}N?cqVHq&(EreYZ0{s%8^nqme923_6V zim9zlZEdhmRloWVn)&s3XwA;f&cVS!p}n;=*w@z=HW^KD zD>XhXjTx-`)&HcKUym>Lo|>9kSXhWlPfcZ{prF`=Nh&&qI+yhBKY6hwjf#pgG&h$| zyCtozu8zUby8kE5{Cd1CX>V`u=;)}VrizLRA0Hon^Fp1&M+X1nmkD-0e*WgZzG$_y zki5J+P`Q2JM*feR`E|qprGd%c#xCz_|JnYcnfsSv&fi`FtxZkIfnzaNR8-XT?b}g| zTM8pGQEmtSlb1W8-@sW}T3Tu`%FW5m-MbS{{r9citx+$u)T6`>`A6Dz8HOeO`0+!- zd9k$+99ItWz7lfRjaj_U3>~t~JC=|Go2Aot0;;Ol9+ctDa{SE4!TWd-C@;hts_lZc z1(Uq6xTvSAOU-!eZPjRE3?&*!RPtl`|MUnM+QuOg*L5`QDY(R;UnfCNbNm}v z@z<|kw=jdHKfX90vn>D~V||!GbXXd*TFyn+IXc&XY3FIj!kLeUAncO+8wH#=F*rEL zJMip6mRWBR8vA*(f*((vRz6WRpa2OwKLQIu4*nFjIifEpzhs!%5Mug3>=%w`f95l1 z&amG!ZhI@)i=6CA{_k!CbEVVHtoVK_9^kLwYS#!v;SBV*>blb~qjt5i_IlT0h!MRq zGc$Xvn`Kuc%2y*aEGkaoqY?$FXes3M_5z$RXFoquFAdJs+WI;NL{O;FiNiD#5Bvn? zB>Gmq@aVrWD;y31huXYqX6C^X?0hB5rPKAZl~ghO(LPOPJ@^z zKc}G!SOy>PSJQ(6DveD{WP0DfzoK9F@+h?I7WMiu#Xv%YSq*c3PXKt6+$7pg7Hey3 z>^EyeSsUTP1lfp?T9#ra@a}ZSi1;VoF{$S<(M8+eL-CG=^*2%8L2r&MT(sjzGWwk` z^-Y|reozqnUPCjp2855mW8P&4y%Ry81q55&#tX67aN5jO%NiC%DJkPOPi2nlYJqIk8ryE_8ui5xwR z4b|FL56fPg_TiO5zs5t_D<8qZp>5Z&lHKZdT{q{QDi~zHX%J;|E3XptXSWOy8IKtX zG1S!50M`2L&KwFkPWcHg-R3swfVXJmu*mFym#C$kx?_oAw|#_!&ER=M1j1$kJzQHH zSIh@+%cST|53=zh<$LgejhUI*5aI?lEV;$!qpAfD z?t+qKwQD)*H7Ce|n-0MPy3oXg37pRz2oA+Y;OoPUcL%_=g)5Nzudj{-mKl^Mn;G?O zUbjJDzD~ejaH-?Mv}6DJoVEp^IeO3dDhKCky}`MN0|j znia0$2wNd17nh!slK|4@oJK{f)#8-k9uZq<4aZ^+8ZqBm;l z>YqLb-=Iep5UFn-nltsfmzThY-3b8L?WTHK(g2q1MkdYV61+uU$tc76T_vOlDq5c| z7Y3t;?AUSa_lJZE`6$?)>M6uK)+sQB$WYtB5*E%k@LSD%AjCcIdGP5-GU)s#q{M8& z(1AwRt$A=M*#Q$pa>={$-F@DkSa{Bd^Er7R>S$Rad>@UyzidZE}r zVHxck>l4}X;FqQRv&a0nMzzS=P-ynK{E+$9h`A+duZA(B&a8McM4ZZ*Qyp!MyxSY| z_{X*ezf(j}2VQARyK-bcqa93OkhHN1wz&C0s_n~uLTmTOmcWokx~z?2!Kg+l;K9~} zqGPt6?WI#T*xqri&`Ar3zlI(kmy-a?4fE2kw=~hI`tHtEv<9{`G)jHmq#Two>xeJ7 zqoVXral%O+p=b>kNAp`-My69v1;RRmgPpE@3nf2a?B!hzbBs^UJcYS4#;^m&NeVPyE*`RqS<*WEXh+5UQ;cI=sGHf-L4;N9N1 z+8lmn-t)q#VQmM>s_W#g-zm}DfZWSN)S%Q-$f^-J)lJn9E=$lEqRLDYV?TNq9+ChL z`K$M>pyya`R^OUP6&zT;lHJqR9ZHwA9NFfyxUClc=~TnPor$~hgdz)9*R#?vXj#qb z5)oXk6~Rw6Roh`dmxFD#YC3mlZp~miFpQZ7^S%X9Bq!T@Zr6@Sm&$7`PdM+!OgQ|H z;Q0Sj;Qas2&;2LV0?G9MC%xwXwSNvi`2UIUz{CkM!lzd1=Gyzjzcg{@a}iDmUBJAj z0^kAwh(8;^j#-!0ZXfLS$^681Uk?sG?r7%dvh{_?RUF~aLhKTNfEYKrn;@_gY}&;Z zvT~(Ep`>RhY6pAgt42x|Bg&BQB5*}uSgi8P ze6PAA$4&POI;u96pRkKD6BK`ZOF2a))&E^0uTs!&fe^DI0{Z@5(d-Y_W2YC_NqZ?Cb-cINeY+b_(+7#G zJ{-~?66`N!&KGV8O{>3eR;TXUCrmZQcNy#x0Y)GbKN}7f>mN5NULUfWpXMG`Den&Y z;Ga3cVW;NX=bB$<0(LGh4XkX(k27ZiXuR|ds^4_NN63)WqcAax$1qTVC{r;*~SByU-zhi&#I!BcIqXA(AKBoW?|0o=LK`V9`k|gl=W6i-OQL7B{Vw+ z1f7>hJ1Mi(r9rh%yksb|Q#a469L^UE!cF9>1G0*rh%r946%|9cO?*o%t&twTg*Z@;|?SNtv zV8ej`6DI;s4h(4n3dFov%PyzhN<-*s-Z0QXwJ5-&10OzIuQp^apvAbd2Nq_oNv!>a z@jUVg@qlxv2m-%acUXpIeUh6we{o6gO*FT;1LltS#k)0y5aR=bfg93ebyO{z^)ZhF zBz?KpPJ0WeHBN&_3$gU_tu>Qc6yT+{&H>Acd|q{9Gc*%Y;b)9hSJw=19PPcKhg|IK zT(VuP^6tOoiW~pFmv=d?LN)8Y?VS`=+n>>eY5A(+*VKTv!6&?{_-sMo3ZbOb?UL03TVE_AwXZ_WeW5T6dQ_q2T_Kcf2MfntI!@{F9* zmyL}LbH94k{$l3-(p(-$ALzU{m6K4i_;Yi93r7_MD!t2%B0laOV1S719STu5t5&?* znxeeggA)qX2G*B%<~@PcSaRY>aE6nfZ5|4EP=F2ai~sY>fSg!<6D85}LeVL(bd3lg z+gi-P83?bdLO_M@z80{Hh#wZ{gLPDBhggUXp#dnj0mX6#Li1tdc0CrOlauv8=S3jW z2PHBz2(3>*2rz!T;nH|p8sadc z4+4N=)&~t6c(tag;5-@AtK?nRnm7EmXN9w}Ax#8_&=cA*MBXCRDMIXG%xay1<;o8a zgWe(=)y#XMLMtDLM<7X{KB9kPM8jb;9$PXpG6Es-(CpKvPZiobI$qLoIIk@@;rRQj z&v}ps5D;BHYlGOwvekNX{ptW36rRnOEtj%FWDE(SV?j7UiRtK+N=VY)7$8}N zbcvTmBqiVXj*gAh`0(_-M5>M0do7?gM_@(kedmCo;w#@6X0@8kZ68_cHg8;7`RXAQ zR0Omv52H$Y-Nx#?B8q{B2&h)BI5;{YmI~2M<*)))9d|wSj1Q5p)B*M}Z;u$%UM@0fM+)f z@rPWtwNKZno-7w29&onKvI5LMZ-cg9THQ>t?Djy4uGu4 zOG`^@%{(F*s&<+*)~*G7Iofr5*|iZtmT8*6X?B|C_htbCh6pMk-IHI{NAMT`8XX@b z(8mLY)oHCcrU5Mk@QtkU34lr4pyaDI1b#-^w5fJ}!{dOHNb2&-HzzkPp;VwTlxvVE zya^~(C6%j_S;_2|9+&k=Y>7(gm@+<+&o7-cUHw4p@}k$an^{HEMi~q%>kuM9Z2>Yg zu~-{TGyt%&a40}p0Svf`>!J$p_}lEc5uS2hw3G-A1z2i$W4^I*xqN$5boJWsEDb4j`vhM0Z# z)6+VDrPL8j)W6=hoCVoIh^I$j0%C|qUh4Q(d!A&>$_-{zL3kRbwAd&zie*7G))FLi4=Z|0GF335EKx&y>3 z@&U31vRxOHI!p#p;YEd3IDPezhNuW;lstgm8CQ~9$pC2SyD{S-TnEY-8ZRA+Mkxs$ z%dd#$swzSZ{lc+?;d&Ry`pg-?6cLIBX%v9R zfrZ@9hV}OG(S!E@9FwB&3lASTg5JaTzuy1p`r|4JH<1kE@#h|^Mg$bkQ*F;u@vaU9 zD&|j@t>Y0Yvc8$8Z`E=c5TBl1fjD_2s>zO<Z(T09ex7 z*Eiu-s@{)}Pj)a+P97culrVr#Pl$&-3^GMf_P`EYsC2{1$_nye<`A@wOfyPLI6}r9 zHwF0y4QQhfST1a=r?Bh6r-=aTiI8o?F5tBtFk^(_`8iMMgqc8A6d46YeIA~~06VVq zttnnQTM&SI0vRFzDUnq|Pebo1!8{on8A$mHKZf8vMOi%oF_Ay0*`%#it*RPAFa9KF!cHJ_LN{o&z?Mi8HGd8Y_ z>avK|{Mg#o3h8=z;MQ#@`=_V3ofkfoZ(QF0oMuC4bn>H!z%KQ47s0-nO5rX4xjD-|*KKD?*9{BwlgAI>BT5Io z$iVO>zq+xJ4n`8z0F$1rdG+e90BTA2Zi(VeMPmz{?c(e zIo+-tLlYj$A&FB=x8J*Nw!2<3Xdq8XO(kX5-Jcj`dqzdunX9w2b3u%Nkcc`yFE6B_ zrKRP?F|Uf#YPme}fSvgKgN$JL|TTiJa6&Z);;UP9|D_6pbk$&id4iIKa09dwMiLfKVdPOFkP0e#hz3<_+QX%Jl2z~2$jq&~$tIWBl9I@#CWV37%QQ4J66@|u*8?22(nh9M8L?>&$0wgt zhml(NQnvar`chWx4U~RX@q$|P_7&9MCM9P@GJ`(N3a{F+j+^S@k4S{x4n83sxBtGV zEMPl(bI3sNtfXgx8|p>;Yu#fFrORAe8n?s^7)a7^1B4_q5njI615U`|dnYAQ?wJ47 zK)B`GL+ z-Kgoqe|?mfYx9*tU7Zg)s<_k9uP=l;nbh)w)6b~A^!dkya+mL5=0nWlQuQfsd;j{l z%UtQ!Ed^y|Q7KW;y&$_1qhoWi;PwKc15yWT$&z(~_WFAn%28L_}w2$1ZH0(DDO0fuz%t z3f6nk{LuSEsq#JcoOMrfauu9cY0G|{8T`RHD~vlun2ti=#czHv6L~u`QTW#TvOy5h zh5nB3)p9WBu$M}{(DfS-%eKIV+sih@nXh=V69~lsE3?Ay> z{_oz4MtbxVhzpwY^Gx`Wd*_W z*ZVKR+^vp9E*p+Z%xtHc|5)TYvN04ttf9pn5EE&2QI*t!nqCuKo7124_HA5Bif53g z=fRqqninTDw`VszdS;64M(Y}J8F7VzA2xCF*8-Z9@ymLGHpnF#QYk4Z63IzPuim~rEIDS#Jb8f9*^#-?`Q1Y<_3-N2y6-c0pE!*@yX#G+yBKN zl^qS3)N6Ek_mG&Ivq{;mwB*se?`gPO>et;9!zUN5D{E`VC1}r`5((G}-O&Zd&Zl2) z6~z_`UKNq%f5N*%$C=B~_8uL$bTEtKMV#gV&?u1DPzs^9FQzVA-#<4CCbcUV zHL^rDJUko}5^~J1lAfOaYJfvc^6`C_&I)_^_@r4^JP{8$yED|T%JA;vLys>9#4WVa z@xwCHTF#1?XVHltW*rJ2jrEV~MGu)IXk^lA^wU;r=%FF&?CBBH7mJkqbg1xw)PYbc zLC?tF!~=q~Son@g>##tV2R2c}t93vMUNYr9do29jGzCa&2mD z{-AA3oBu1LVcL{iW&^l+mAUoW+KZzR?$q?98g>(>FYoE zJaerfhBMNNm`Y4c;3>5YEoe-OyV=&K^Qbw#`L=N8$TjVG?4(zvfACS%AtI&*oNxn! zXn;_PTb!ApJT=z2mA1{y@SHHC`=_U;*bC&j1LC$#^_-6jzbp<)zg=K^XnV0nDm_f- z3`n1$_%2D!rk?2U#f?lObgV3iWywC1_by$Yef6-%wrdY<=z?g#0*@cFhP1KxqjZM{ zAB_IXjgC3-g;9Z14q+;(Jek?L$D&nBq79{a=Dt4(T>bo7#GiVzm7nW~btU|g2soh( z8ywjg^=j|R(=TG4#5vQQHS|k&STNN}>$`5C#(zv><~>=7)u7B5qAHPqJ>6>jKYhQn z5m8HehKGi<&XyKRWA$ep&ZzTCkoM3;$dmI0xvq9R^qz?Eiida}=MYhhP^lE(G(VY=eEN0>Jz8f#Y< z$x^XHR*ILgJy)m~Bi-WUHkTbiZb!4WT{2EdHfh&`N!ecg=waPjN8sg8P0ujpoEz@y zyync8U0CQN-!so(t|9F1PB?NQ* zoZ1*UVb2ZAh_?R??BWGUg%c$OZ+*j`o+=t!o^FGcJWKc4KWBL_JX>j7qe$m|40#s& zfJDHS(b~)NBU;XfNrZFUmW}eWvOh+?x054n1iN=uQbDPt+>Eg|GcDJBOjed$Dbg>l zl=W<~VxrvXx=`0;7EPP6$5){db4Br`K~|o~_Z(h4Z04h4M)`R!VuC*e1-L}oRNYw{ z(LFDz5X6~J_cPrzjY49KbeCjQI9q`m*n=+@%+v46TV9KF<(<7kExD~OaB6VKf`AuI zw4`UzYv-)d^t(@Z@%K1#jt6?oepnMb^|r5WN>~4L;W9_yp8{IQ z{=9oMO>I`H#+Rs-J_o653X_*V(}0XkG7gqp+V&ZTskJNglsZ0tV1r4k$d<2NXqJQ$ zYjxzgZUDteT|%?VKQLtuO;Y_MVL0n>tAz(lAnjq6 zS57@=J?Gf{TjqCcZL*>c;gH2}&dmi|&?x$Ilped)i-$EQFxpq{Pf{ zf9a?Bb{TQclwVI{M9#yp7(;FLg zLqmDCqKkfW76hx6vEnx)W1ci=ZtRlM-dXy% zXRA%#1S^x;M)o?b`h3kibb&EZR;O>acXWM-FwW1ys&gD?KX_T!o@fj&^h;zA*C{D0 z`zzeMc~w=F6uhjPTDSHEtB}`M5SLZEmaEjJgWYR%Cy{$?EkX6h=vz@*&xXe`b}UK_ zHm8kN1?b{%j2~4k&W}O__GUhk9VgxM6)3rj>#7pOTa~fqX~UZ~N5BG}RtyraSh?yn z@bw%Ru;(c?qT{@{XcZLM7%+}U6l_)7y`1mki!NHY2)5_z)bDdS0qa7}pYW^?O=?WZ zG8gQ4KkGQW+UFa~ojuT|X3L8Aq66Ye$J%fq?{ed#(hG`>XtcquijfSz)9+% zkOS9Mx+4q$ODQ5x7k<#;$ZM4S%4FHA&3veo-ZwV#liRTTKE^4~*GmZ({lHUaG0*7z z=$j=HDV^Z^y{(z{D-YfAKQ5%4opmRi8wu5)kuxP|ELV{gQ9LyGlz8Z|J7F^`&v6^s z9Z8lHq&?*h550S%-=9A*#$rVULDJdJ z3I`@%ShH%lD*~nl%{M*CXtloY)c2h&~0D7FUQDzFF{?P-esOSB6T zh#o82Rhn_js``_8fJ~NjM0i)h&}*K~uBL|EO5dx{uoMr-`w3O9Bg`7hpS2}uJ7Zb5 zr!?iF*j{E5%pnPELSDaU8#L1VwMkATCx>oDv{kCis>U9^jI%xl*Z40EWbqXtya0a# znhMdjqBLe}@yWJR_^VJn;190xSBfW{NWbWN_rPYUOTixZ0*@0=u;&m%XB3KHuyIv< zu5%BjoMuG=B#VYNBtIc+q-m$o7XQtHpH)ZEPU1NCT*Sk&=>vg3pW@#|!=5=H%wkrK zk33Gj)wgT7NKuCmIAO%#k_MbGgkY6&V?q}N^x4{4A8HxLl1=Zw21$$+U&Li)`9~`A zJ%&I4`pOKtqmc2SX60%myUTCT&898nHbbv|hfl!6`1^%LSM3Dv{}d4;ujFrpLCO(e z%At{wxtoCT1x7{5GJ$`F9yPlC#H~p|S{h~BlGp>Cmz0*KH}DysAL%q@6%)%C?Ks6- zHW!@n?#_qZ5FtX({g55L0^EdTjb5mx7}&x7wYL0%pKrXLRot6suq$8JJb3637IGO$Iq&~QkGRs9 z%?Sf6An1i~5fUG8RZ!#0Jyyh-x4juNN&+Skv@?%4CR8I!H`Hj3#DO} z6(?2L?teWCWtoY>^*G^eER;rSu@wD0k8dkrDcEf(tlPXiip#j|K_!LVS7n650sjL) zG}nn!r`QdfsO1C~m9nz3I->0QupU4Ky1f?h$clwRG2bAl1`Zwc6OPuz0;w)Z8;EGm ziHjF5xI?MkEKon^P=^C@SOM*W9B}^#^RlqFZ<&BfAX?G|$Q@;#3P9!c#M`*I$0+Fl zrG8FG$;uvaCnVN4sHmujYiVoC;^*SxiaS9zImP<|H=6rK)g)?MiovI=t1oV6N?)@c_jJp<}LA}Kb;O?_^tB(a#Q)>px(5?de zC|;9e*t`N&q1TyC=@f$i&U~WUdI9ADA%GXpK#lkV$n?#OJty+?hPHNN!`S$^Bq^Wu z#bOTKs^1jgU8kzEv*70XG94WqA%2nKoM~QB&O*1JcXg>18AE*~Fs%VWtWG};J^rnu z^9hMo71Y~{g8yd^~e z02kvb1jQBm9|q_<&3}=X0QP9|3ds#M}F@LZAKMkq~C} zFF<>F;RU^^?8FVf(*U{ikF{q|X=dL4c3xp0F=gHRhXkEb5NOT8jJ?~LVOX_EIsQq` zFFs_IaKAKkX7G#8U}*UUP5FB7bir_ldR0x$y<#ZS^|l#r%XC;YVrOTUK!rW1oTYHU zld)j-3mFug9|4YPF9Yhg`q<9p;76U0FDeQT0!Wh&yvu7fd8XYR@9q)+Gof4j+iql< z-exxpEHum0(Qt4Cl9`wIqf+vT`@jo=76r)AcA`pmCLjz)fQkDKtGSn+kkbAvYst)R zf_;ZyrFwdL{`3XIaW2`eqrl<+e~5tlyqPflI@;X-1~g*62Sbk_T=DN_&2q*T$i%7 z<&LUuXwWYdI)bk{4ZgW!gQw1_${!zFuYeuN&6*BrElFjRbO9!_zdT>$Vl=Qn_Z$(a&knd z4%!+@Af8Nu{oJwMQY!G3i;ECF(52S;Fn=a0H*WlL&WjFSRCr2EC07HM6$fyI80EE^I5Jmy$!X=~zMy(7ATR*6_kSFqsXo6`* zWnqXZnniS+7faDIMR~#CNm!lLk0fPRqyTPDjI=!XN9$Fnc)0O`pTNiQjPeFZ&aY2S zjIIHmRyF7TQKZMIDjBqlj9#E7NBt^ywoNI6U7~U@ZNSq{ucG}5(rJ*fK{lo{9n>9& zct5b0VEJ1p{tP`*C-dyTA5#Df7w?b9$E&KUUNItRgDSS|86b#ns;XAQq+VoV(ya-i zcY^aG;=rs+1QeMAIHZ-@_qi>E2nY|0g(R1S`s(X23ScX8~c!@tFfH&cMzLEXDQ z{2Y~R>c_Ei9nshx;zu}vZBW=z+@tDGt9_)$=^Glap<5Tgdy}$4kSxbk`WwLIqjGJi z3vjJQ(VKS&8nvws$9my?#}mvj#Z4W6!y>{cyo>Lr%whtqkj?gZ$;PVA^U8b3V0!w3 zbQn%lva-YiIGCQKR`?tRGkP0mkywa|UkQlgT=H0M|3+cer(Q`vNQm}adOip$;xkV! z%34=?u9@Q72|?{JQF?u&Ak93D*69rmAWvt=6oV?enCq=uf4&ijv%aOODygh|k{&k3 zpx|I=>VyrxkEHSLtMhYwMPqm_26}~WZDLGEY(A#ZRYF$ekR$v2`+GvRcP{;-X~wz( z0@zWd8iVqW2?^Y`1{<$-BcBrAZ+X;j9vfZZzKy2CkeedtGT)}w#dpl49YRUQ1fL-k zy+4|OJ_p481h+Sb>U67csJ13sSSQYQrY*dlGspTyWK6}6PX`ao?hJ?VERcNEfV=95 zk)TOPUf#d6a|A|?Hd;Ud; zgP!z1c=)={KRZ5XT7Rd&{+*6%wtQ`BXr9g(9HucgG%*`=J69hm;Ibb;c_jY<4!|G8 z2};oZpkrko9G7Q(1JYNn+9+#v%HrcLf`WBLaW>m4l<3Nwe24(L+{s+FSrEqE8&+(6 zLA-x;H>;K-6CrUOp7C8mb0~qjg7CnwThN*-@8ODs`NJuI4sL& zVw|&tN@+<+^eW>xuY(dE)-yB*acFtIt(x_4%HFJcA5gYbXuMtOu!xglz-AzB3S^oY zt$tG<09}SWfPC6BiJcFNOP$MRN0vCQ6ll#RGXMuj`Oo^%kewM#u^>3~$2SUe4T4Um zx3?w;twqiB_a(}cd&5oClZe9Qv-ng;fYcdaetr2ehk>hynW~WD2keaUXG}yj)mEl= zv#U@HVnL%^`Sdxp`A6{zYiJIkeGZ`qG2>7gYs`CM9P{vpy{W4Y2DufWkAuXg-!F0y z0p@sxT2%Y*q}1l>O)c7fUOfTyQ+q2d-pu&;pcqm7SymD>31gDb!6JH40`HP5&nofb ziT(?p`EN)twDdoV%h2e5zX#1Oo`^*s{Y&-vD~W_G`QNH7dcrS0{$B@_>(|*21bem3 zu6)cbQ7H}vs^5RpD)}_evql+8IXU3qplfUWy944V^KGR$aKbbDtU}Fn#WUU};rw~p zAJkHj%zk~Mco~UYGM)0DdGZ}?Zixl(c6H^gihW|j!(P>!{hzC|wSH8LCs=iSy@sC+ zR|xADle(kTKLP_YAqj%Hz3}szR*@MWnyt8U5Mu|K^I=0I%B|L|F`@0VT9dZ`a0Yll zGGIYvm!yJUa$idwvd!YHH4cCIrn^nb&a|ful0_i)HAe$!7Ul_@I`abP_&+}4$Z}-? zbXKwX>opZw(r?6Q)J^@cI|Gg$(_&tunc3YT1d3zeggyeqde@^Y{y>(|8uzF@@<50+eb zicGoW4vGkk{TUfTU;TGx6B0iD0&Y{&kNt19^MB?g0^<74{*RFl7}I~FEv0oJH% zWSOVQ+0Mosa0l~bBl~xjGC8zhI#=0g+|Nt3DAS*U0)SMW+DeP9p&$4KXoAi5JWJT) zR4Uhq;;oWLnyYt2E|6@D9nn&~*%-C`U_V-=xP@ac;+_=)lxeq#-Rn3POA?9%gM@-> zH-47a_Dd){rU{%$6J|+BEn7^4sHSB<+y~&>g|m`JmzKJif$)BlD%4ZpV`ohE@^S%! ztf1N7Uc~KJ*UI;qQqyYx{P}}3vPsnO9&Vt_Ok(*Jcqb>INdmfPqO>hgWDLC7Kbo}# zWfEJcjR!PV^AhYg#|f9O2ILt3v-1a?tGGAg6G%KVC*JplvCLxb@=hz@Us z+_0EUEN|56hK0^bk3VF#zy(dxR{|U!!ZAk|o5hxKAvG0Dy&YA)L<|kM5Kjvy{iX*y zjnJKyEdBgMQK|sQ=;;>Dch))=F5M%)9ohK!!%nE)qyp`PHJx+5NYR9kr<=CU{R>f; z+oM1Zdh1LgAHN5ToJN`?rOnRv}|iq7aVoLcy^( zr1J_O4~&78H8CeA2!b|A$pg^Y(yLbtaZsY5yE-=vDa-_sfGNc}ZLjy^;KZ&$$h01T z9BU#-o||ZZgW#_8m*GpDcfx};SLRna^H8G!xL>`hK~#mW&|wW)T%% z-?;JKmsU3XdJWVWkJdqN-hY06d==^zK0{ct{~ViM&51HNpN`#WWk*N?mg3!nvUJ(2 zQF#h#D zjXG$pvlGq)kf3K_(YF)xC9eh;>q`TC@&yhBtjus(WaKvQlL1-yg|3q99?OCQFT7Dg zv$cw`F(cr(v?#?J2gk$R760Txj02>T7saEHN<9o|-h+=0vD^`dGo=JJ7n-d{0ED9k zkP^VLcV@kOws{tVVhV5)!x!;OcR%h?fb`GN?tIo?lYH%pW=LpgWzx;qj&#T^1#oOh z7wSA9XZnRD#MD`gfIFRcUSHA!=nukMk3%d4ZWOYBM?u!NfBI#p%zp{EAoN4;=hxRJ z%O4N1zJLlFk9Yhi2u44U2+s&0(L_>0!c%*J2Ef$*0FlSC&;flLKgEUb6+@H2aqPgu@|%up0Ow(OQwc{0K~C)hfNeRzTtMwTcV238@{jiNEiQoGKsLZxXyN}m&qvS_6o zfJVWAS7Q4gLM%W3T;Aysf=?l(9A*0g%Jd0}HAEm)7U}}zM^nH&HB+ePn~5q+L%y|y zl@$lPi7zdskSrC4i@I}ja^3+LL%m1|hzcAA2e=Seplb@#fUy3Ts{sfSOotf`0`R&i z4D`Uisjm-JEFe^rsuhmY``li(#1-u{Cy9=eWW&zsM%xb@Xt+Fh*wz~L3lJiNw89w; zF(O2~kI|&|!|^AFDFt3aDy$_`$8Z?6Tr3&`5G#%!fMS4=OuBNOhlHHEwjW@z3(3p( z&CKxd(@hl>kGQ_r%uIhMqG*PRU=O>lFpabj^7i+idjWu35z8w|D8rGE($b=gs;;ls zEB^9DY>V>T9<)&C2asUEBs8%bvz48ya8Z7b5DiVTch&zBvOm`SFbRV zr6MqGaN^2|6DLsX0OtWfIGL554fqwnj7PmH?i(9l00{Tdqul_f0g#1M^Tv%UfSQ5l z<)8sNMt^P(-|=gAih;IU3PH~}=~c0k1T=xD3KT*_1ig84zGWU;zF)j>#} z82fbd!aAf;#HAaVn?q$?*w*HHU|^s-bO5%c$+@{Xl&7aK?H?R0${rT?>XjR`0v!Me z1$w8s+|||6((*?8-j+eQR05es4(OXnXheip4i8s8-AcP~Nn_(yNhD+{*>Zxji-IB& zIY>nV0~wceAgOY3wAmwwSv~J-82oyt86)KUVkrc!77`lQ)6&vvOn>{pi$y zJq}&q8pExg0d5XGFE8mxAc`PLwbX%&esy*AF!|-*49yEim#3jK4ogFMxR3`u9p~jD z*iNIH0^Xc|MahHg2OQe+zAM)l54X=jRZ}3l%Z5FGmrZ@|GBX#qa|m%amD`_hS86Z! z@eGJ++^EvzR6Koi<$PNBfrO8*xa9zm#EwLM!(?7c+^}T`49|M~MNE;Cy;9$zuCB#| zmMNd(%!TlQ0O`z^BT^4NtB&n1pI;q}j;S2{cx!&vF~-lMug^ushRabTT5RKODXLn= zygPJZiuZz+%=U?`d;_a44d+>P<(tPqnIIPokC&WCa|%vPjQ~JJ zmz3Z3ty_ZShSQU=*o3@Wm5s_tHiT5D>;`j(P;5mK($*DqDt%j*Cc78G9$w_)Qf3L2 z4w;xR*@W7s3??}A8KCH6UzNO@U#}VIN8*p-c+cWJ6Npm%7oc`*6p-yyEtge2D8#q{ zHY}!WZH$qE&srixE{e|(?9=Y>rnJcoC91M7$qi}YhtQ)j#cUttQSsVXUuiM&7*Yxf zZbPk@f91QopB5VUr;{Mx3hsN+y}LD~@TO!1O>4!>i?gd-R`|+qxc!>DsJM7)UfwMm zJ@0Q&&X$xI?H~o#sI@wf4k`*6MMXuE4H~0&yBv0@*KlyTZ(hH$^2+RU<#3Bv=DD3g z$iX0tJG0^k1_$?UC`EftC4YJnzc%lyQxu}llDM^zx_wg@2gj$vzxQ(9n2i|R0}1J4 z=Q(riUNvzK8%|dr!=6qQv3Q;TGrr(AQCl;pzJq@gU-rAT+h5Mgru3b7+f2e>6PF}Y z?;JUHvg6uTnHc_(j^Lx1jON$z8GJblCo%8Wfzi_9x1D%F!@?p5H434qm4^NJOEK?u z&a8nh>>O?dpOSIl`-H)m)cxBRX=O&|%sf-}vE;qe25n*#j8!TtMhSXg9YdNh#xCkT9OxBxZ_ zNTNO8M~;z^r2-SIggQR+t!tU{FS4^Mm_Z@B84DpX zWeYH%CtxPr+%Q~EfY6%kEmi^TDFSZo1Su(fK2){Kn!_>Cke1d2h8X7UhN^1v#)i|$ z6DN{HJc!1c6aAp_w?&DFf-ep>twIf!#i?F(aHUd9!j59zGeWk}C^-0SPy(f_rN!b0 zRX_AJG@?K~&CSl<6hSV@8q@=(kx9zPwA8YeGhuvqz(0c1nY8%rrdlTR`_sRG|Jn>k zBBg<6l2THlL7AqO3;d9$f}-N^;NS&}EWis2vEqJh@I9w~-D$2baN5+uSZch%(9?gL=*-S_ z-FAWF*Tm!!6&G_Im(2jX9~A>ueDAAS*r{^Bx#fBSISofh*{?$>)7<`p2b+MmPlRc& zj}}y4U!HCUYGlZo53YwWB^}PsO@%USqqh*+r6wgw@K`QQsP0NCFLhiVD_fsZl$3nV zBqStskcg=5`EfcWEvx^!qLXK7!_PYRB&i$A~4$bVVhCQH;aPOtXJS< zUt0tgCm9}cD+EruyDsRk@HO}FX}15TxigKb^2*ZiMR7o*QE@6H&;*g`f<|GX1jL|% z5t&p*xoAL2z=%i#0hFLoq9!sAS`-L^%ws5s;X0)y5rmZzkSQjpbf5$rq7*k0l%$^n zwN}!tVmYX8J#?)|=V_St9ecfWhM8zgEETP|$ex@AiX2hqOJJEC`*-@bj#$>+`$ zkvI0vdiw)cZ}0PjuNUZ;-cK^rvue*Vf$fz1Gs*HlB5~}r1B{jC_u$K8pTx&^)`mXr zc9skg5xL&FbqgUUefOl3kfea1){C8&R8({_?w3StE|IVvYDMWJYd_8N9n#q>4#{IyCt&Wao?+m8)Q?PP}&NCCrL6}T!2b{uLCnqE%NZN0s zYN;tHc}!;?!YT!Br8BMCf(e0Jw{2T^w18=a26PDB8m0)wfc=fK6S(t+8s;H)B=gp-;DaAp5-OymmoJ42DLQ=gjMb|M9H=MEB?~^O1xvZr} zK(TNkDgA^tX?F(O`@avmMD$mnqPk+B?^ep)&ky|7$H!-MzpDYhxuy&-h{ZWzz$9O@zF49nZIuCts+Fq!s^U`9s8Lfx*|5bxd}QnynkD<>+~Td~3>43*Zk zLtK3mmSd&9{=0_`K~WtUt!isyKznxdPk)ihE{D5BM0`=PV*Pq=1l-ZlA#6B1SI+s6 z7`c#?Pb95zHpG%Hz9`Zy?d8iiNisTn>reWr%$~i205r@9u*NSN)N=88z0uj`{AJ|n z?@)@N-Q1W&+j*W%TpJ_uu#fpXudXL3a<m}*B6?vCppj`tbi zwY>>|Hl))iD{~AEu3{aj+1Zt2jm^y|`CL|V=*~ew6%{5xSge>M_d-?jQcq7WQD^O1 z_byd+^)kq_{)Z1|AC2xq;%(J_c0G_ubd9D|gu;{f3q09Xnavdvu437`$l;6l8XddP z(3+tVUai60Lb-T)nkic?3Y0%m|pFv1Fxps+n*wb9~QO!03co;)JT#s?Y6k@$<{~j_hCLVUwUyE;Re^w{JV5 zfE`KNwyA zAAQyY(if1+7nHAGsG zWA=Ik>UYMO{{0cE6pM0mt-E$OJ8OM<{rYuDx2=y)ZqVML_F{&6oDF^Y{ks0XzL^{9 z7lI5Z!)QZ#hU~@3+WI3=DHVplQ*`8Rp6vl0Ns+dWrlzLMe)Hy7i&x|0{r2J(>FDWg z(RIjdf$9jgEOg9H*IBj7$=*mR-3IEw&5J{lbZ!n9WVdHe4lwx4 zTevC_?g^-Z5kMkwe_CV10~7tIK#77&WNG;yQ+M2N)Hm5yyH!+F0?QH;=S9Mf6mfX+3~k%^Mr|H{ z@2i=T2QIm}xs=+ih<^U{5Bk!TWYp;gwghUq1pRXke zy99NeWgfPbS&8zoBQH^%x-ALmNagrf(10K_W5e&x-5r( zt=q&u@y3lCp%1=P`Ua|i`5q~im6aCa%&>*c3zjS?+;#A(%UMG`y_Ul44-M?x-Oo** zqqaPOg4r$DKW=&&)w@MF-y-UZU;SLv zPmlEzfLcPpGv=zd01-^z?_Txu*jUpK_{t2+!=FoW*K$SYu4xYnh2s~dIh~C+p??b& zEXZXl5I4*pwj2QIilZ?`$;z0nV+K}p#_x~NNIz>s4+7bePHkJ!;TKO!h>T`kg-5Jb zR#w*2(t78t-PWybpuU>@UB&{~pqTRSvws=U&9aExo__J-^2lYvRUb0X%2=~69*j}D z@3w|O^`}pt{^ZmtMhBz|sQg1iLi3YwL;SGY-K&Q$B_}8E6*QqKurHEFJH(9EYmQvL zKkfi?;ezC#n{vIcMh(Jjb|K>0i03}zBv}YzTS#;$vthC&`j(cmbZFjE_>JM<|Mdza zA4aXbI+8qBeeJ(B547g>hhOeb!VC@!_%B+#*x=1Kt?3&jKHMG_Rx30}hzGA!eFaGa zu~d)B>mr`#3U0?^{pf?K;|vmSkHepNb4rP}0RhEgbBM_qLuPCi{@7jIXHNDGnVMSM zUYz>6?brrzY(h!Q%x!7SozP_eZZR0=fJv=;cgKhoTJK<^pai!OU z=?3HmQV9#7xFbB0VGjujPkCrD%-2fEPa>A5GIu|IoNsSO{>Be~{IQY*l0FDZ^0=QQ zSu4}N_vsMZQ1}?dsN2wd7^*?49NWOzTyN}IpR=oL0sgD!)LS-+-r%)0pluQY`ntNd z5DJ|{cwu$j-R@-g-0wBA@U-NV6jRWs;J#S6fw8eGxL^_ZCpC4UVxV=S8xf}__1kvo z5bH9!r|((VpSSQhcO}UFq>uYOo{O;1hE^uZ0)x#fHGI~wTGOC7oEO|^ZYU=88 zOIcyh^vn&>6U<#)6|@4s66JuR4tLl6d!cKESMg`Q4S`^e4D+xO;`VaD9L#CXH6gE~ z)0-f#i9lQkiU0zJ*gHUhO|X7I=vmj=JsvQ&^=8>Swi zv!eP$Y-|9aL!Kcl0USry)1J%I_>9x!XMpL=ZI!#NWR8RoHP9*We`r@?bvs>fGdR2Z&(eHLWU;>|hkU$BN&5+O5+2?v=>Dh0_-X8pi9% z;9-8hOmb^pf=t0S)Pz6r9Os9B+S5pZmXT%@5`Am(9T5xw2PWndGzAcd4t19Q6|Bj~=H-lxgx31ES|g%4?+G^7;-PIH#v*Z`ACN=iVUwhnc{ z<^#`vTZx4DQ|Kf+iPx|!;kiRwxu_ks`kKluE5P! zl*Gl;)8J(N1uT9kMe;&dCq;V;?C9i@BI;4{r~Oj a#;r=cT~+$N)4VA5_U>kfO%>LAKKd^{O5&sd literal 0 HcmV?d00001 diff --git a/docs/src/examples/groundstates/tfim-groundstate/index.md b/docs/src/examples/groundstates/tfim-groundstate/index.md new file mode 100644 index 000000000..6c463a1f9 --- /dev/null +++ b/docs/src/examples/groundstates/tfim-groundstate/index.md @@ -0,0 +1,184 @@ +```@meta +EditURL = "../../../../../examples/groundstates/tfim-groundstate/main.jl" +``` + +[![](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/QuantumKitHub/MPSKit.jl/gh-pages?filepath=dev/examples/groundstates/tfim-groundstate/main.ipynb) +[![](https://img.shields.io/badge/show-nbviewer-579ACA.svg)](https://nbviewer.jupyter.org/github/QuantumKitHub/MPSKit.jl/blob/gh-pages/dev/examples/groundstates/tfim-groundstate/main.ipynb) +[![](https://img.shields.io/badge/download-project-orange)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/QuantumKitHub/MPSKit.jl/examples/tree/gh-pages/dev/examples/groundstates/tfim-groundstate) + +# The transverse-field Ising model + +In this example we locate the quantum phase transition of the transverse-field Ising model, by scanning the field across it and comparing a finite chain with a calculation directly in the thermodynamic limit. +The Hamiltonian is given by + +```math +H = -J (∑_{⟨i,j⟩} σᶻᵢ σᶻⱼ + g ∑ᵢ σˣᵢ) +``` + +where ``J`` sets the energy scale and the field ``g`` tunes the competition between the ``σᶻσᶻ`` interaction and the transverse ``σˣ`` field. +The model has a quantum critical point at ``g = 1``, which we will diagnose in three independent ways: the order parameter, the entanglement entropy and the correlation length. +To follow this example you need the following packages: + +````julia +using MPSKit, TensorKit, CairoMakie +using .ExampleModels +using TensorKitTensors.SpinOperators: σᶻ +```` + +For reproducibility of this page, we fix the seed of the random number generator: + +````julia +using Random +Random.seed!(1234); +```` + +We fix a finite chain length `L`, a bond dimension `D` and the set of field values to scan. +`D` is kept modest so the example runs quickly; increasing it sharpens the results in the thermodynamic limit. + +````julia +L = 16 +D = 8 +g_values = 0.1:0.1:2.0 +```` + +```` +0.1:0.1:2.0 +```` + +## Order parameter + +We compute the order parameter ``|⟨σᶻ⟩|`` at every field value, both on a finite chain and in the thermodynamic limit. + +For the finite chain we use an open chain of `L` sites and optimize with DMRG. +We average ``⟨σᶻᵢ⟩`` over the sites and take the absolute value, since a symmetry-broken state can have either sign. + +````julia +ψ₀_finite = FiniteMPS(L, ℂ^2, ℂ^D) +M_finite = map(g_values) do g + H = transverse_field_ising(; L, g) + ψ, envs, info = find_groundstate(ψ₀_finite, H, DMRG(; verbosity = 0)) + return abs(sum(i -> expectation_value(ψ, i => σᶻ()), 1:L)) / L +end +```` + +```` +20-element Vector{Float64}: + 0.9980617138856797 + 0.009304206174155815 + 9.886926889666883e-7 + 1.4949130880990819e-7 + 4.847831921565129e-9 + 2.4238082826113185e-10 + 5.090603802018776e-10 + 6.399930826746388e-12 + 1.1608529523047178e-12 + 9.505170272796344e-15 + 2.2076248830477028e-14 + 3.5562341351713215e-14 + 4.552007274692689e-15 + 2.311668137737342e-15 + 1.541625133765297e-15 + 6.59959564548599e-16 + 2.5681839634229746e-16 + 1.2731436158915082e-15 + 9.96912572737997e-16 + 1.9572671223156964e-16 +```` + +In the thermodynamic limit, we drop the length `L` to build the Hamiltonian on the infinite chain, and optimize an `InfiniteMPS` with VUMPS. +We keep the optimized states, since we will reuse them for the entropy and the correlation length below. +On the ordered side, the infinite state settles into one of the two symmetry-broken ground states, so we again take the absolute value. + +````julia +ψ₀_infinite = InfiniteMPS(ℂ^2, ℂ^D) +states_infinite = map(g_values) do g + H = transverse_field_ising(; g) + ψ, envs, info = find_groundstate(ψ₀_infinite, H, VUMPS(; verbosity = 0)) + return ψ +end +M_infinite = [abs(expectation_value(ψ, 1 => σᶻ())) for ψ in states_infinite] +```` + +```` +20-element Vector{Float64}: + 0.9987444968227268 + 0.9949102475942 + 0.9882803811214428 + 0.9784416036423226 + 0.9646786299603123 + 0.9457416090034619 + 0.9192767410625147 + 0.8801117382538193 + 0.8125392063206265 + 0.4785381092362469 + 1.4673123827080297e-12 + 9.027500968983304e-15 + 1.0614772949502084e-14 + 2.0311877180212447e-14 + 6.019490461639521e-15 + 7.421147030228778e-15 + 4.833806965809376e-15 + 4.174612044938186e-15 + 1.2895934320411578e-14 + 2.584737979205443e-16 +```` + +````julia +fig = Figure() +ax = Axis(fig[1, 1]; xlabel = "g", ylabel = "|⟨σᶻ⟩|") +scatter!(ax, g_values, M_finite; label = "L = $L") +scatter!(ax, g_values, M_infinite; label = "L = ∞") +vlines!(ax, [1.0]; color = :gray, linestyle = :dash) +axislegend(ax; position = :rt) +fig +```` + +![](figure-1.png) + +The two calculations agree in the disordered phase, but not in the ordered one. +The infinite state stays ordered up to ``g = 1`` and then collapses, locating the critical point. +On the finite chain, the magnetization vanishes well before ``g = 1``. +The exact ground state of a finite chain is the symmetric superposition of the two ordered states, which only needs a small bond dimension, so DMRG readily finds it. +Spontaneous symmetry breaking only happens in the thermodynamic limit, which is why the order parameter is best measured there. + +## Entanglement entropy + +At a critical point correlations become long-ranged, and the ground state is more entangled than deep in either phase. +For an `InfiniteMPS`, `entropy` returns the entanglement entropy of every bond in the unit cell, which here contains a single site. + +````julia +S_infinite = [real(only(entropy(ψ))) for ψ in states_infinite] + +fig, ax, _ = scatter(g_values, S_infinite; axis = (; xlabel = "g", ylabel = "S")) +vlines!(ax, [1.0]; color = :gray, linestyle = :dash) +fig +```` + +![](figure-2.png) + +The entropy peaks near ``g = 1``, the entanglement signature of the phase transition. + +## Correlation length + +Finally, the correlation length is extracted from the transfer matrix spectrum of the infinite state, and has no finite-chain analogue. +`correlation_length` returns one value per symmetry sector, and without symmetries there is only the trivial one. +It grows towards the critical point, so we plot it on a logarithmic scale. + +````julia +ξ_infinite = [only(values(correlation_length(ψ))) for ψ in states_infinite] + +fig, ax, _ = scatter(g_values, ξ_infinite; axis = (; xlabel = "g", ylabel = "ξ", yscale = log10)) +vlines!(ax, [1.0]; color = :gray, linestyle = :dash) +fig +```` + +![](figure-3.png) + +The correlation length peaks near ``g = 1`` as well. +At the critical point it should diverge, but an MPS with finite bond dimension `D` can only capture correlations up to a finite length, so the peak grows as `D` is increased. +The critical point itself is studied in more detail in the [Ising CFT](@ref "The Ising CFT spectrum") example, which matches its excitation spectrum to the predictions of conformal field theory. + +--- + +*This page was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).* + diff --git a/docs/src/examples/groundstates/tfim-groundstate/main.ipynb b/docs/src/examples/groundstates/tfim-groundstate/main.ipynb new file mode 100644 index 000000000..ccaa5d32f --- /dev/null +++ b/docs/src/examples/groundstates/tfim-groundstate/main.ipynb @@ -0,0 +1,329 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The transverse-field Ising model\n", + "\n", + "In this example we locate the quantum phase transition of the transverse-field Ising model, by scanning the field across it and comparing a finite chain with a calculation directly in the thermodynamic limit.\n", + "The Hamiltonian is given by\n", + "\n", + "$$\n", + "H = -J (∑_{⟨i,j⟩} σᶻᵢ σᶻⱼ + g ∑ᵢ σˣᵢ)\n", + "$$\n", + "\n", + "where $J$ sets the energy scale and the field $g$ tunes the competition between the $σᶻσᶻ$ interaction and the transverse $σˣ$ field.\n", + "The model has a quantum critical point at $g = 1$, which we will diagnose in three independent ways: the order parameter, the entanglement entropy and the correlation length.\n", + "To follow this example you need the following packages:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "using MPSKit, TensorKit, CairoMakie\n", + "# Model constructors for the MPSKit documentation and examples.\n", + "# Adapted from MPSKitModels.jl v0.4.7, src/models/{hamiltonians,transfermatrices}.jl:\n", + "# https://github.com/QuantumKitHub/MPSKitModels.jl/tree/v0.4.7/src/models\n", + "# Operators come from TensorKitTensors; chain assembly uses MPSKit directly.\n", + "#\n", + "# MIT License\n", + "# Copyright (c) 2021 Maarten Van Damme\n", + "#\n", + "# Permission is hereby granted, free of charge, to any person obtaining a copy\n", + "# of this software and associated documentation files (the \"Software\"), to deal\n", + "# in the Software without restriction, including without limitation the rights\n", + "# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n", + "# copies of the Software, and to permit persons to whom the Software is\n", + "# furnished to do so, subject to the following conditions:\n", + "#\n", + "# The above copyright notice and this permission notice shall be included in all\n", + "# copies or substantial portions of the Software.\n", + "#\n", + "# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n", + "# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n", + "# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n", + "# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n", + "# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n", + "# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n", + "# SOFTWARE.\n", + "\n", + "module ExampleModels\n", + "\n", + "using MPSKit, TensorKit\n", + "using TensorKitTensors: SpinOperators, BosonOperators, HubbardOperators\n", + "\n", + "export chain_hamiltonian, transverse_field_ising, heisenberg_XXX\n", + "export hubbard_model, bose_hubbard_model, hard_hexagon\n", + "\n", + "# L specifies an open finite chain; otherwise unitcell specifies an infinite chain.\n", + "function chain_hamiltonian(twosite, onesite = nothing; L = nothing, unitcell::Integer = 1)\n", + " nsites = isnothing(L) ? unitcell : L\n", + " nsites isa Integer && nsites > 0 || throw(ArgumentError(\"chain length must be a positive integer\"))\n", + " nbonds = isnothing(L) ? nsites : nsites - 1\n", + " terms = Pair[(i, i + 1) => twosite for i in 1:nbonds]\n", + " if !isnothing(onesite)\n", + " append!(terms, [i => onesite for i in 1:nsites])\n", + " end\n", + " spaces = fill(space(twosite, 1), nsites)\n", + " constructor = isnothing(L) ? InfiniteMPOHamiltonian : FiniteMPOHamiltonian\n", + " return constructor(spaces, terms)\n", + "end\n", + "\n", + "# H = -J sum(σz_i σz_{i+1} + g σx_i).\n", + "function transverse_field_ising(\n", + " T::Type{<:Number} = ComplexF64, symmetry::Type{<:Sector} = Trivial;\n", + " J = 1.0, g = 1.0, kwargs...\n", + " )\n", + " ZZ = 4 * SpinOperators.S_z_S_z(T, symmetry; spin = 1 // 2)\n", + " X = SpinOperators.σˣ(T, symmetry)\n", + " return chain_hamiltonian(-J * ZZ, -J * g * X; kwargs...)\n", + "end\n", + "transverse_field_ising(symmetry::Type{<:Sector}; kwargs...) =\n", + " transverse_field_ising(ComplexF64, symmetry; kwargs...)\n", + "\n", + "# H = J sum(S_i ⋅ S_{i+1}); preserve the examples' spin-1 default.\n", + "function heisenberg_XXX(\n", + " T::Type{<:Number} = ComplexF64, symmetry::Type{<:Sector} = Trivial;\n", + " J = 1.0, spin = 1, kwargs...\n", + " )\n", + " term = J * SpinOperators.S_exchange(T, symmetry; spin)\n", + " return chain_hamiltonian(term; kwargs...)\n", + "end\n", + "heisenberg_XXX(symmetry::Type{<:Sector}; kwargs...) =\n", + " heisenberg_XXX(ComplexF64, symmetry; kwargs...)\n", + "\n", + "# H = -t sum(e⁺_i e⁻_{i+1} + h.c.) + U sum(n↑ n↓) - mu sum(n).\n", + "function hubbard_model(\n", + " T::Type{<:Number} = ComplexF64, particle_symmetry::Type{<:Sector} = Trivial,\n", + " spin_symmetry::Type{<:Sector} = Trivial;\n", + " t = 1.0, U = 1.0, mu = 0.0, kwargs...\n", + " )\n", + " # e_hopping includes the fermionic reordering sign and is Hermitian.\n", + " hopping = HubbardOperators.e_hopping(T, particle_symmetry, spin_symmetry)\n", + " interaction = HubbardOperators.ud_num(T, particle_symmetry, spin_symmetry)\n", + " N = HubbardOperators.e_num(T, particle_symmetry, spin_symmetry)\n", + " return chain_hamiltonian(-t * hopping, U * interaction - mu * N; kwargs...)\n", + "end\n", + "\n", + "# H = -t sum(b⁺_i b⁻_{i+1} + h.c.) + U/2 sum(n(n-1)) - mu sum(n).\n", + "function bose_hubbard_model(\n", + " T::Type{<:Number} = ComplexF64, symmetry::Type{<:Sector} = Trivial;\n", + " cutoff::Integer = 5, t = 1.0, U = 1.0, mu = 0.0, kwargs...\n", + " )\n", + " hopping = BosonOperators.b_plus_b_min(T, symmetry; cutoff) +\n", + " BosonOperators.b_min_b_plus(T, symmetry; cutoff)\n", + " N = BosonOperators.b_num(T, symmetry; cutoff)\n", + " interaction = N * (N - id(domain(N)))\n", + " return chain_hamiltonian(-t * hopping, U / 2 * interaction - mu * N; kwargs...)\n", + "end\n", + "\n", + "function hard_hexagon(T::Type{<:Number} = ComplexF64)\n", + " P = Vect[FibonacciAnyon](:τ => 1)\n", + " O = ones(T, P ⊗ P ← P ⊗ P)\n", + " block(O, FibonacciAnyon(:I)) .*= 0\n", + " return InfiniteMPO([O])\n", + "end\n", + "\n", + "end\n", + "\n", + "using .ExampleModels\n", + "using TensorKitTensors.SpinOperators: σᶻ" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For reproducibility of this page, we fix the seed of the random number generator:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "using Random\n", + "Random.seed!(1234);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We fix a finite chain length `L`, a bond dimension `D` and the set of field values to scan.\n", + "`D` is kept modest so the example runs quickly; increasing it sharpens the results in the thermodynamic limit." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "L = 16\n", + "D = 8\n", + "g_values = 0.1:0.1:2.0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Order parameter\n", + "\n", + "We compute the order parameter $|⟨σᶻ⟩|$ at every field value, both on a finite chain and in the thermodynamic limit.\n", + "\n", + "For the finite chain we use an open chain of `L` sites and optimize with DMRG.\n", + "We average $⟨σᶻᵢ⟩$ over the sites and take the absolute value, since a symmetry-broken state can have either sign." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ψ₀_finite = FiniteMPS(L, ℂ^2, ℂ^D)\n", + "M_finite = map(g_values) do g\n", + " H = transverse_field_ising(; L, g)\n", + " ψ, envs, info = find_groundstate(ψ₀_finite, H, DMRG(; verbosity = 0))\n", + " return abs(sum(i -> expectation_value(ψ, i => σᶻ()), 1:L)) / L\n", + "end" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the thermodynamic limit, we drop the length `L` to build the Hamiltonian on the infinite chain, and optimize an `InfiniteMPS` with VUMPS.\n", + "We keep the optimized states, since we will reuse them for the entropy and the correlation length below.\n", + "On the ordered side, the infinite state settles into one of the two symmetry-broken ground states, so we again take the absolute value." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ψ₀_infinite = InfiniteMPS(ℂ^2, ℂ^D)\n", + "states_infinite = map(g_values) do g\n", + " H = transverse_field_ising(; g)\n", + " ψ, envs, info = find_groundstate(ψ₀_infinite, H, VUMPS(; verbosity = 0))\n", + " return ψ\n", + "end\n", + "M_infinite = [abs(expectation_value(ψ, 1 => σᶻ())) for ψ in states_infinite]\n", + "fig = Figure()\n", + "ax = Axis(fig[1, 1]; xlabel = \"g\", ylabel = \"|⟨σᶻ⟩|\")\n", + "scatter!(ax, g_values, M_finite; label = \"L = $L\")\n", + "scatter!(ax, g_values, M_infinite; label = \"L = ∞\")\n", + "vlines!(ax, [1.0]; color = :gray, linestyle = :dash)\n", + "axislegend(ax; position = :rt)\n", + "fig" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The two calculations agree in the disordered phase, but not in the ordered one.\n", + "The infinite state stays ordered up to $g = 1$ and then collapses, locating the critical point.\n", + "On the finite chain, the magnetization vanishes well before $g = 1$.\n", + "The exact ground state of a finite chain is the symmetric superposition of the two ordered states, which only needs a small bond dimension, so DMRG readily finds it.\n", + "Spontaneous symmetry breaking only happens in the thermodynamic limit, which is why the order parameter is best measured there." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Entanglement entropy\n", + "\n", + "At a critical point correlations become long-ranged, and the ground state is more entangled than deep in either phase.\n", + "For an `InfiniteMPS`, `entropy` returns the entanglement entropy of every bond in the unit cell, which here contains a single site." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "S_infinite = [real(only(entropy(ψ))) for ψ in states_infinite]\n", + "\n", + "fig, ax, _ = scatter(g_values, S_infinite; axis = (; xlabel = \"g\", ylabel = \"S\"))\n", + "vlines!(ax, [1.0]; color = :gray, linestyle = :dash)\n", + "fig" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The entropy peaks near $g = 1$, the entanglement signature of the phase transition." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Correlation length\n", + "\n", + "Finally, the correlation length is extracted from the transfer matrix spectrum of the infinite state, and has no finite-chain analogue.\n", + "`correlation_length` returns one value per symmetry sector, and without symmetries there is only the trivial one.\n", + "It grows towards the critical point, so we plot it on a logarithmic scale." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ξ_infinite = [only(values(correlation_length(ψ))) for ψ in states_infinite]\n", + "\n", + "fig, ax, _ = scatter(g_values, ξ_infinite; axis = (; xlabel = \"g\", ylabel = \"ξ\", yscale = log10))\n", + "vlines!(ax, [1.0]; color = :gray, linestyle = :dash)\n", + "fig" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The correlation length peaks near $g = 1$ as well.\n", + "At the critical point it should diverge, but an MPS with finite bond dimension `D` can only capture correlations up to a finite length, so the peak grows as `D` is increased.\n", + "The critical point itself is studied in more detail in the Ising CFT example, which matches its excitation spectrum to the predictions of conformal field theory." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 1.13.3", + "language": "julia", + "name": "julia-1.13" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.13.3" + } + }, + "nbformat": 4, + "nbformat_minor": 3 +} \ No newline at end of file diff --git a/docs/src/examples/index.md b/docs/src/examples/index.md index 1f91825d8..4dd2f69b1 100644 --- a/docs/src/examples/index.md +++ b/docs/src/examples/index.md @@ -21,6 +21,14 @@ The sidebar lists the same pages in the same order. ## Ground states +### [The transverse-field Ising model](groundstates/tfim-groundstate/index.md) + +![](groundstates/tfim-groundstate/figure-1.png) + +Scans the transverse field across the critical point of the Ising chain and locates the transition three independent ways: the order parameter on a finite chain and directly in the thermodynamic limit, the entanglement entropy, and the correlation length. +Combines the basic finite and infinite ground-state tools into one case study, without any symmetries. +**Complexity: introductory.** + ### [The Ising CFT spectrum](groundstates/ising-cft/index.md) ![](groundstates/ising-cft/figure-2.png) @@ -74,6 +82,15 @@ Computes the Haldane gap of the spin-1 Heisenberg antiferromagnet in two complem Introduces SU(2)-symmetric tensors for both finite and infinite MPS. **Complexity: intermediate.** +### [The SU(3) Heisenberg chain](excitations/su3-heisenberg/index.md) + +![](excitations/su3-heisenberg/figure-1.png) + +Generalizes the spin-1 Heisenberg chain to a chain of ``[3 0 0]`` irreps of SU(3), building the symmetric coupling from quadratic Casimirs and optimizing a uniform ground state with VUMPS. +Growing the bond dimension with `changebonds` shows that quasiparticle excitation energies are not variational: the small gap at ``k = 2π/3`` comes out negative for a poorly converged ground state, and increases as the ground state improves. +Shows that the SU(2) workflow of the Haldane gap example carries over to SU(N) symmetries through SUNRepresentations.jl. +**Complexity: advanced.** + ## Dynamics & finite temperature ### [DQPT in the Ising model](dynamics/ising-dqpt/index.md) diff --git a/examples/Cache.toml b/examples/Cache.toml index 6f2cc32b2..296a00e2c 100644 --- a/examples/Cache.toml +++ b/examples/Cache.toml @@ -1,16 +1,18 @@ [excitations] -haldane = "2e79dd49111097b0541bb6039e2c4e23f615b61d59611da6fd633df229a20b5f" +haldane = "4a4576752d9a394f18177d4884fa00c60f6be4fb20084e0007b0a7e34457c225" +su3-heisenberg = "610c3fde3b5d5340b8352a96f8ef77b92e125fb2445edfab72f1ae65b4088615" [statmech] -hard-hexagon = "68269e430555ac77e0ed1d1c3b44e553ffa3bfb6a37112eb8c2aff350cd81e1c" +hard-hexagon = "55853c4136b6c0b6b91741dc28ff06cb4b53f3a808ef34d3b6abc8f93c91bfbd" [dynamics] -ising-dqpt = "cd6d0545172ada42735a7847d7da35be46bdf7a1b038366c7fa8046585269c92" -xy-finiteT = "11e794f7e8700da83bbeb75da8c697a47957c9469b830496974c7df442d854ab" +ising-dqpt = "bd3313835872764e28f77750433ed72b8097ee74a295afa9947a151bc80be6ef" +xy-finiteT = "2263b2b3fd3ddaaf8164b2d4866088028ca535f925f37d13a77e4c4965099d97" [groundstates] -bose-hubbard = "5411a7d968e9fb0071528f81946536046d12820f39dc358aaae1e1a3be9580bf" -haldane-spt = "4ad3562ff82691ac31e0851c30bf5c7975d7bbcb06494f93ba168084ef912d42" -xxz-heisenberg = "aad20bd24766dce3ee103e815723d1d5c15951a6f69557660525308a94b5e229" -ising-cft = "9715c2348b7bf056bf1742d4f0940faa3eb3d30857d439e027993fb8fbb98e0d" -hubbard = "66faf9d13d42abae30248d288f1e628c5cc5664e0ee69c6faf34b6b06d5ef75c" +tfim-groundstate = "c68c90200aa2a11df7a5a13ff996cae42837e88fc10c7d126fa9d6971c4fac24" +bose-hubbard = "d2c28ca050a2f0a7d039ae145052b1fbfbcd2114bfd2f33bd4067526918dedc0" +haldane-spt = "ecafb4eb37da88444ef8ffad7c5d237eb8f6ff7c99eef6b6ce01dc2169798c33" +xxz-heisenberg = "ceab3a8607ad3ad28d536309997f8db1fbf4b732ecea119ccfb314b9799f7f80" +ising-cft = "4881eac3246e7a1027f028a2b31f1389ddd2b84ad780d603df5f80f7f08b8a99" +hubbard = "0dcfd341636c9acdadbd024de7f36523b8c74c4465e66796c3b6ee053fc64607" diff --git a/examples/Project.toml b/examples/Project.toml index 262cac131..6a88e78f4 100644 --- a/examples/Project.toml +++ b/examples/Project.toml @@ -10,6 +10,7 @@ Optim = "429524aa-4258-5aef-a3af-852621145aeb" Polynomials = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" QuadGK = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" +SUNRepresentations = "1a50b95c-7aac-476d-a9ce-2bfc675fc617" TensorKit = "07d1fe3e-3e46-537d-9eac-e9e13d0d4cec" TensorKitTensors = "41b62e7d-e9d1-4e23-942c-79a97adf954b" TensorOperations = "6aa20fa7-93e2-5fca-9bc0-fbd0db3c71a2" diff --git a/examples/excitations/su3-heisenberg/main.jl b/examples/excitations/su3-heisenberg/main.jl new file mode 100644 index 000000000..f10066800 --- /dev/null +++ b/examples/excitations/su3-heisenberg/main.jl @@ -0,0 +1,173 @@ +md""" +# The SU(3) Heisenberg chain + +The spin-1 Heisenberg chain has a gapped, symmetry-protected topological ground state, the Haldane phase. +In this example we study what happens when the SU(2) symmetry of the spins is promoted to SU(3), following [devos2022](@cite). +Every site of the chain carries the fully symmetric ``[3 0 0]`` irrep of SU(3), which is ten-dimensional, and neighbouring sites are coupled by the SU(3)-invariant Heisenberg interaction + +```math +H = J ∑_{⟨i,j⟩} ∑_{a=1}^{8} Tᵃᵢ Tᵃⱼ +``` + +where the ``Tᵃ`` are the eight generators of SU(3). +This is the direct analogue of the spin-1 chain, with the three generators of SU(2) replaced by the eight generators of SU(3). + +Just as in the [Haldane gap](@ref "The Haldane gap") example, imposing the full non-abelian symmetry block-diagonalizes every tensor, so that a modest number of variational parameters captures a large bond dimension. +The SU(3) Clebsch–Gordan coefficients are provided by [SUNRepresentations.jl](https://github.com/QuantumKitHub/SUNRepresentations.jl), whose `SU3Irrep` sectors plug directly into TensorKit. + +!!! warning "First-run cost" + SUNRepresentations.jl computes Clebsch–Gordan coefficients on demand, and caches them both in memory and on disk. + The first time a coefficient is needed, this computation can be slow. + +To follow this example you need the following packages: +""" + +using MPSKit, TensorKit, SUNRepresentations, CairoMakie + +# For reproducibility of this page, we fix the seed of the random number generator: + +using Random +Random.seed!(4321); + +md""" +## The model + +Each site carries the ``[3 0 0]`` irrep, which we specify through its highest weight. +""" + +I300 = SU3Irrep(3, 0, 0) +Vphys = Vect[SU3Irrep](I300 => 1) +dim(I300) + +md""" +To build the interaction, we use that it is diagonal in the total charge ``c`` of a bond. +Writing ``C₂ = ∑ₐ TᵃTᵃ`` for the quadratic Casimir, we have + +```math +∑ₐ Tᵃᵢ Tᵃⱼ = ½ (C₂(c) - 2 C₂([3 0 0])). +``` + +SUNRepresentations.jl provides the quadratic Casimir as `casimir(2, irrep)`, normalized such that the fundamental ``[1 0 0]`` has ``C₂ = 4/3``. +""" + +casimir(2, SU3Irrep(1, 0, 0)), casimir(2, I300) + +md""" +The nearest-neighbour term is then a single operator that acts as a scalar on each fusion channel of ``[3 0 0] ⊗ [3 0 0]``. +We construct it by filling in the blocks, one for every total charge ``c``: +""" + +function su3_heisenberg(Vphys; J = 1.0) + c2_site = casimir(2, SU3Irrep(3, 0, 0)) + SS = zeros(ComplexF64, Vphys ⊗ Vphys ← Vphys ⊗ Vphys) + for (c, data) in blocks(SS) + coupling = (casimir(2, c) - 2 * c2_site) / 2 + for i in axes(data, 1) + data[i, i] = J * coupling + end + end + return InfiniteMPOHamiltonian(SS) +end + +H = su3_heisenberg(Vphys) + +md""" +The product ``[3 0 0] ⊗ [3 0 0]`` decomposes into four irreps, and the antiferromagnetic coupling favours the channels with the lowest Casimir: +""" + +for (c, n) in directproduct(I300, I300) + coupling = (casimir(2, c) - 2 * casimir(2, I300)) / 2 + println("$c:\t dim = $(dim(c)),\t coupling = $coupling") +end + +md""" +## Ground state + +The ``[3 0 0]`` irrep has trivial triality, so that, as for the spin-1 chain, a translation-invariant state with a single-site unit cell is allowed. +The physical charge then cannot change the triality of the virtual spaces, so all virtual charges must have the same triality. +Here we use virtual charges with trivial triality, which give the lowest variational energy. +We start from a small virtual space, and optimize a random initial state with VUMPS: +""" + +Vvirt = Vect[SU3Irrep]( + SU3Irrep(0, 0, 0) => 3, + SU3Irrep(2, 1, 0) => 6, + SU3Irrep(3, 0, 0) => 3, + SU3Irrep(3, 3, 0) => 3, + SU3Irrep(4, 2, 0) => 2, +) +ψ₀ = InfiniteMPS([Vphys], [Vvirt]) +vumps = VUMPS(; maxiter = 400, tol = 1.0e-10, verbosity = 0) +ψ, envs, info = find_groundstate(ψ₀, H, vumps) +E₀ = real(expectation_value(ψ, H, envs)) + +md""" +## Excitations + +On top of the ground state, we compute excitations with the quasiparticle ansatz. +Following [devos2022](@cite), we look for the lowest excitations in the adjoint ``[2 1 0]`` sector, which has its minimum at momentum ``k = 2π/3``. +""" + +sector = SU3Irrep(2, 1, 0) +Es, _ = excitations(H, QuasiparticleAnsatz(), 2π / 3, ψ, envs; sector) +ΔE = real(Es[1]) + +md""" +The excitation energy comes out negative, which would mean that there are states below the ground state. + +!!! warning "Excitation energies are not variational" + The quasiparticle ansatz returns the energy of the excited state *relative to the ground-state energy*. + The ground state itself is only approximated, and its energy ``E₀`` lies above the exact one. + Any error in ``E₀`` therefore directly shifts the excitation energies, and they are not an upper bound on the true gap. + In particular, a gap that is small compared to the error in ``E₀`` can come out too small, or even negative. + +The remedy is to improve the ground state. +Instead of guessing a larger virtual space, we let `changebonds` with `OptimalExpand` grow the bond dimension, by adding the directions that contribute the most to a two-site update of the converged state. +Here `truncrank` counts the total dimension that is added to each bond, including the dimension of the SU(3) irreps. +Every expanded state is then reconverged with VUMPS, and we recompute the excitation energy at ``k = 2π/3``. +""" + +expand = OptimalExpand(; trunc = truncrank(150)) +Ds = [dim(left_virtualspace(ψ, 1))] +E₀s = [E₀] +ΔEs = [ΔE] +for step in 1:8 + global ψ, envs = changebonds(ψ, H, expand, envs) + global ψ, envs, info = find_groundstate(ψ, H, vumps, envs) + Es_step, _ = excitations(H, QuasiparticleAnsatz(), 2π / 3, ψ, envs; sector) + push!(Ds, dim(left_virtualspace(ψ, 1))) + push!(E₀s, real(expectation_value(ψ, H, envs))) + push!(ΔEs, real(Es_step[1])) +end +[Ds E₀s ΔEs] + +#+ + +fig = Figure() +ax = Axis(fig[1, 1]; xlabel = "D", ylabel = "ΔE / J", title = "[2 1 0], k = 2π/3") +scatterlines!(ax, Ds, ΔEs) +hlines!(ax, [0.0]; color = :gray, linestyle = :dash) +hlines!(ax, [0.0263]; color = :gray, linestyle = :dot) +fig + +md""" +As the bond dimension grows, the ground-state energy decreases, and the excitation energy turns positive already after the first expansion. +Apart from a dip at the second expansion, where VUMPS does not fully converge within `maxiter`, it then increases steadily. +It is still increasing at the largest bond dimension used here, and remains below the value ``ΔE / J = 0.0263`` reported in [devos2022](@cite) (dotted line). +Resolving this small gap therefore requires an even larger bond dimension. + +Finally, we compute the dispersion relation on top of the largest ground state, scanning half of the Brillouin zone. +""" + +kspace = range(0, π, 10) +Es, _ = excitations(H, QuasiparticleAnsatz(), kspace, ψ, envs; sector, verbosity = 0) + +fig = Figure() +ax = Axis(fig[1, 1]; xlabel = "momentum", ylabel = "ΔE / J", title = "[2 1 0]") +lines!(ax, kspace, vec(real.(Es))) +vlines!(ax, [2π / 3]; color = :gray, linestyle = :dot) +fig + +md""" +The dispersion has its minimum at ``k = 2π/3``, where [devos2022](@cite) locates the gap of this model. +""" diff --git a/examples/groundstates/tfim-groundstate/main.jl b/examples/groundstates/tfim-groundstate/main.jl new file mode 100644 index 000000000..e14035d76 --- /dev/null +++ b/examples/groundstates/tfim-groundstate/main.jl @@ -0,0 +1,118 @@ +md""" +# The transverse-field Ising model + +In this example we locate the quantum phase transition of the transverse-field Ising model, by scanning the field across it and comparing a finite chain with a calculation directly in the thermodynamic limit. +The Hamiltonian is given by + +```math +H = -J (∑_{⟨i,j⟩} σᶻᵢ σᶻⱼ + g ∑ᵢ σˣᵢ) +``` + +where ``J`` sets the energy scale and the field ``g`` tunes the competition between the ``σᶻσᶻ`` interaction and the transverse ``σˣ`` field. +The model has a quantum critical point at ``g = 1``, which we will diagnose in three independent ways: the order parameter, the entanglement entropy and the correlation length. +To follow this example you need the following packages: +""" + +using MPSKit, TensorKit, CairoMakie +include(joinpath(@__DIR__, "..", "..", "..", "docs", "src", "assets", "models.jl")) #hide +using .ExampleModels +using TensorKitTensors.SpinOperators: σᶻ + +# For reproducibility of this page, we fix the seed of the random number generator: + +using Random +Random.seed!(1234); + +md""" +We fix a finite chain length `L`, a bond dimension `D` and the set of field values to scan. +`D` is kept modest so the example runs quickly; increasing it sharpens the results in the thermodynamic limit. +""" + +L = 16 +D = 8 +g_values = 0.1:0.1:2.0 + +md""" +## Order parameter + +We compute the order parameter ``|⟨σᶻ⟩|`` at every field value, both on a finite chain and in the thermodynamic limit. + +For the finite chain we use an open chain of `L` sites and optimize with DMRG. +We average ``⟨σᶻᵢ⟩`` over the sites and take the absolute value, since a symmetry-broken state can have either sign. +""" + +ψ₀_finite = FiniteMPS(L, ℂ^2, ℂ^D) +M_finite = map(g_values) do g + H = transverse_field_ising(; L, g) + ψ, envs, info = find_groundstate(ψ₀_finite, H, DMRG(; verbosity = 0)) + return abs(sum(i -> expectation_value(ψ, i => σᶻ()), 1:L)) / L +end + +md""" +In the thermodynamic limit, we drop the length `L` to build the Hamiltonian on the infinite chain, and optimize an `InfiniteMPS` with VUMPS. +We keep the optimized states, since we will reuse them for the entropy and the correlation length below. +On the ordered side, the infinite state settles into one of the two symmetry-broken ground states, so we again take the absolute value. +""" + +ψ₀_infinite = InfiniteMPS(ℂ^2, ℂ^D) +states_infinite = map(g_values) do g + H = transverse_field_ising(; g) + ψ, envs, info = find_groundstate(ψ₀_infinite, H, VUMPS(; verbosity = 0)) + return ψ +end +M_infinite = [abs(expectation_value(ψ, 1 => σᶻ())) for ψ in states_infinite] + +#+ + +fig = Figure() +ax = Axis(fig[1, 1]; xlabel = "g", ylabel = "|⟨σᶻ⟩|") +scatter!(ax, g_values, M_finite; label = "L = $L") +scatter!(ax, g_values, M_infinite; label = "L = ∞") +vlines!(ax, [1.0]; color = :gray, linestyle = :dash) +axislegend(ax; position = :rt) +fig + +md""" +The two calculations agree in the disordered phase, but not in the ordered one. +The infinite state stays ordered up to ``g = 1`` and then collapses, locating the critical point. +On the finite chain, the magnetization vanishes well before ``g = 1``. +The exact ground state of a finite chain is the symmetric superposition of the two ordered states, which only needs a small bond dimension, so DMRG readily finds it. +Spontaneous symmetry breaking only happens in the thermodynamic limit, which is why the order parameter is best measured there. +""" + +md""" +## Entanglement entropy + +At a critical point correlations become long-ranged, and the ground state is more entangled than deep in either phase. +For an `InfiniteMPS`, `entropy` returns the entanglement entropy of every bond in the unit cell, which here contains a single site. +""" + +S_infinite = [real(only(entropy(ψ))) for ψ in states_infinite] + +fig, ax, _ = scatter(g_values, S_infinite; axis = (; xlabel = "g", ylabel = "S")) +vlines!(ax, [1.0]; color = :gray, linestyle = :dash) +fig + +md""" +The entropy peaks near ``g = 1``, the entanglement signature of the phase transition. +""" + +md""" +## Correlation length + +Finally, the correlation length is extracted from the transfer matrix spectrum of the infinite state, and has no finite-chain analogue. +`correlation_length` returns one value per symmetry sector, and without symmetries there is only the trivial one. +It grows towards the critical point, so we plot it on a logarithmic scale. +""" + +ξ_infinite = [only(values(correlation_length(ψ))) for ψ in states_infinite] + +fig, ax, _ = scatter(g_values, ξ_infinite; axis = (; xlabel = "g", ylabel = "ξ", yscale = log10)) +vlines!(ax, [1.0]; color = :gray, linestyle = :dash) +fig + +md""" +The correlation length peaks near ``g = 1`` as well. +At the critical point it should diverge, but an MPS with finite bond dimension `D` can only capture correlations up to a finite length, so the peak grows as `D` is increased. +The critical point itself is studied in more detail in the [Ising CFT](@ref "The Ising CFT spectrum") example, which matches its excitation spectrum to the predictions of conformal field theory. +"""