From 8f63a002b89ee34d78fc435ea38c9fcc9147dbe1 Mon Sep 17 00:00:00 2001 From: lkdvos Date: Mon, 3 Aug 2026 13:13:48 -0400 Subject: [PATCH 1/5] docs(examples): regroup the gallery by computational task MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `quantum1d` and `classic2d` grouped by the physics of the model, which is not how a reader arrives: they come with a task ("I need a ground state", "I need finite temperature") and have to open every example to find out which one does it. Regroup into `groundstates`, `excitations`, `dynamics` and `statmech`, and give the gallery index a one-paragraph summary per example so it can be scanned. Drop the `N.` prefix from the example folders as well. The folder name is the published URL, so a numeric prefix means inserting one example renames — and breaks the URL of — every example after it, in order to express an ordering these examples do not really have. The reading order now lives in the gallery index summaries, which run from introductory to advanced; the sidebar is alphabetical within each group. `examples/README.md` documents this for contributors. `examples/make.jl` now discovers groups by listing its own subdirectories instead of naming them, so adding a group needs no pipeline change. The gallery sidebar in `docs/make.jl` mirrors the same grouping. Co-Authored-By: Claude Opus 5 (1M context) --- docs/make.jl | 23 +- .../classic2d/1.hard-hexagon/figure-1.png | Bin 16719 -> 0 bytes .../ising-dqpt}/finite_timeev.png | Bin .../ising-dqpt}/index.md | 71 +-- .../ising-dqpt}/infinite_timeev.png | Bin .../ising-dqpt}/main.ipynb | 140 +---- .../xy-finiteT}/figure-1.png | Bin .../xy-finiteT}/figure-2.png | Bin .../xy-finiteT}/figure-3.png | Bin .../xy-finiteT}/figure-4.png | Bin .../xy-finiteT}/figure-5.png | Bin .../xy-finiteT}/figure-6.png | Bin .../xy-finiteT}/index.md | 59 ++- .../xy-finiteT}/main.ipynb | 139 +---- .../haldane}/figure-1.png | Bin .../haldane}/figure-2.png | Bin .../haldane}/figure-3.png | Bin .../haldane}/index.md | 57 +- .../haldane}/main.ipynb | 2 +- .../groundstates/bose-hubbard/figure-1.png | Bin 0 -> 16503 bytes .../bose-hubbard}/figure-2.png | Bin .../groundstates/bose-hubbard/figure-3.png | Bin 0 -> 39306 bytes .../groundstates/bose-hubbard/figure-4.png | Bin 0 -> 36945 bytes .../groundstates/bose-hubbard/figure-5.png | Bin 0 -> 32117 bytes .../groundstates/bose-hubbard/figure-6.png | Bin 0 -> 15424 bytes .../bose-hubbard}/index.md | 79 +-- .../bose-hubbard}/main.ipynb | 0 .../groundstates/haldane-spt/figure-1.png | Bin 0 -> 34236 bytes .../groundstates/haldane-spt/figure-2.png | Bin 0 -> 32088 bytes .../groundstates/haldane-spt/figure-3.png | Bin 0 -> 37375 bytes .../haldane-spt}/index.md | 18 +- .../haldane-spt}/main.ipynb | 0 .../haldane-spt}/spt-tensors.svg | 0 .../groundstates/hubbard/figure-1.png | Bin 0 -> 41850 bytes .../groundstates/hubbard/figure-2.png | Bin 0 -> 40056 bytes .../hubbard}/figure-3.png | Bin .../examples/groundstates/hubbard/index.md | 361 +++++++++++++ .../hubbard}/main.ipynb | 44 +- .../groundstates/ising-cft/figure-1.png | Bin 0 -> 15044 bytes .../ising-cft}/figure-2.png | Bin .../groundstates/ising-cft/figure-3.png | Bin 0 -> 22801 bytes .../ising-cft}/index.md | 91 +--- .../ising-cft}/main.ipynb | 116 +--- .../ising-cft}/translation_mpo.svg | 0 .../groundstates/xxz-heisenberg/figure-1.png | Bin 0 -> 12994 bytes .../groundstates/xxz-heisenberg/figure-2.png | Bin 0 -> 21619 bytes .../groundstates/xxz-heisenberg/index.md | 208 ++++++++ .../xxz-heisenberg}/main.ipynb | 153 ++---- docs/src/examples/index.md | 96 +++- .../quantum1d/1.ising-cft/figure-1.png | Bin 15484 -> 0 bytes .../quantum1d/1.ising-cft/figure-3.png | Bin 22792 -> 0 bytes .../quantum1d/4.xxz-heisenberg/figure-1.png | Bin 11650 -> 0 bytes .../quantum1d/4.xxz-heisenberg/figure-2.png | Bin 21809 -> 0 bytes .../quantum1d/4.xxz-heisenberg/index.md | 373 ------------- .../quantum1d/5.haldane-spt/figure-1.png | Bin 32642 -> 0 bytes .../quantum1d/5.haldane-spt/figure-2.png | Bin 31949 -> 0 bytes .../quantum1d/5.haldane-spt/figure-3.png | Bin 37374 -> 0 bytes .../examples/quantum1d/6.hubbard/figure-1.png | Bin 41851 -> 0 bytes .../examples/quantum1d/6.hubbard/figure-2.png | Bin 40056 -> 0 bytes .../src/examples/quantum1d/6.hubbard/index.md | 494 ------------------ .../quantum1d/8.bose-hubbard/figure-1.png | Bin 16580 -> 0 bytes .../quantum1d/8.bose-hubbard/figure-3.png | Bin 39277 -> 0 bytes .../quantum1d/8.bose-hubbard/figure-4.png | Bin 36942 -> 0 bytes .../quantum1d/8.bose-hubbard/figure-5.png | Bin 35906 -> 0 bytes .../quantum1d/8.bose-hubbard/figure-6.png | Bin 15425 -> 0 bytes .../statmech/hard-hexagon/figure-1.png | Bin 0 -> 16674 bytes .../hard-hexagon}/hexagon.svg | 0 .../hard-hexagon}/index.md | 23 +- .../hard-hexagon}/main.ipynb | 0 docs/src/index.md | 4 +- examples/Cache.toml | 26 +- examples/README.md | 17 +- .../ising-dqpt}/finite_timeev.png | Bin .../ising-dqpt}/infinite_timeev.png | Bin .../ising-dqpt}/main.jl | 8 +- .../xy-finiteT}/main.jl | 10 +- .../2.haldane => excitations/haldane}/main.jl | 2 +- .../bose-hubbard}/main.jl | 0 .../haldane-spt}/main.jl | 0 .../haldane-spt}/spt-tensors.svg | 0 .../hubbard}/main.jl | 33 +- .../ising-cft}/main.jl | 2 +- .../ising-cft}/translation_mpo.svg | 0 .../xxz-heisenberg}/main.jl | 17 +- examples/make.jl | 24 +- .../hard-hexagon}/hexagon.svg | 0 .../hard-hexagon}/main.jl | 0 87 files changed, 1024 insertions(+), 1666 deletions(-) delete mode 100644 docs/src/examples/classic2d/1.hard-hexagon/figure-1.png rename docs/src/examples/{quantum1d/3.ising-dqpt => dynamics/ising-dqpt}/finite_timeev.png (100%) rename docs/src/examples/{quantum1d/3.ising-dqpt => dynamics/ising-dqpt}/index.md (65%) rename docs/src/examples/{quantum1d/3.ising-dqpt => dynamics/ising-dqpt}/infinite_timeev.png (100%) rename docs/src/examples/{quantum1d/3.ising-dqpt => dynamics/ising-dqpt}/main.ipynb (53%) rename docs/src/examples/{quantum1d/7.xy-finiteT => dynamics/xy-finiteT}/figure-1.png (100%) rename docs/src/examples/{quantum1d/7.xy-finiteT => dynamics/xy-finiteT}/figure-2.png (100%) rename docs/src/examples/{quantum1d/7.xy-finiteT => dynamics/xy-finiteT}/figure-3.png (100%) rename docs/src/examples/{quantum1d/7.xy-finiteT => dynamics/xy-finiteT}/figure-4.png (100%) rename docs/src/examples/{quantum1d/7.xy-finiteT => dynamics/xy-finiteT}/figure-5.png (100%) rename docs/src/examples/{quantum1d/7.xy-finiteT => dynamics/xy-finiteT}/figure-6.png (100%) rename docs/src/examples/{quantum1d/7.xy-finiteT => dynamics/xy-finiteT}/index.md (92%) rename docs/src/examples/{quantum1d/7.xy-finiteT => dynamics/xy-finiteT}/main.ipynb (81%) rename docs/src/examples/{quantum1d/2.haldane => excitations/haldane}/figure-1.png (100%) rename docs/src/examples/{quantum1d/2.haldane => excitations/haldane}/figure-2.png (100%) rename docs/src/examples/{quantum1d/2.haldane => excitations/haldane}/figure-3.png (100%) rename docs/src/examples/{quantum1d/2.haldane => excitations/haldane}/index.md (71%) rename docs/src/examples/{quantum1d/2.haldane => excitations/haldane}/main.ipynb (99%) create mode 100644 docs/src/examples/groundstates/bose-hubbard/figure-1.png rename docs/src/examples/{quantum1d/8.bose-hubbard => groundstates/bose-hubbard}/figure-2.png (100%) create mode 100644 docs/src/examples/groundstates/bose-hubbard/figure-3.png create mode 100644 docs/src/examples/groundstates/bose-hubbard/figure-4.png create mode 100644 docs/src/examples/groundstates/bose-hubbard/figure-5.png create mode 100644 docs/src/examples/groundstates/bose-hubbard/figure-6.png rename docs/src/examples/{quantum1d/8.bose-hubbard => groundstates/bose-hubbard}/index.md (88%) rename docs/src/examples/{quantum1d/8.bose-hubbard => groundstates/bose-hubbard}/main.ipynb (100%) create mode 100644 docs/src/examples/groundstates/haldane-spt/figure-1.png create mode 100644 docs/src/examples/groundstates/haldane-spt/figure-2.png create mode 100644 docs/src/examples/groundstates/haldane-spt/figure-3.png rename docs/src/examples/{quantum1d/5.haldane-spt => groundstates/haldane-spt}/index.md (92%) rename docs/src/examples/{quantum1d/5.haldane-spt => groundstates/haldane-spt}/main.ipynb (100%) rename docs/src/examples/{quantum1d/5.haldane-spt => groundstates/haldane-spt}/spt-tensors.svg (100%) create mode 100644 docs/src/examples/groundstates/hubbard/figure-1.png create mode 100644 docs/src/examples/groundstates/hubbard/figure-2.png rename docs/src/examples/{quantum1d/6.hubbard => groundstates/hubbard}/figure-3.png (100%) create mode 100644 docs/src/examples/groundstates/hubbard/index.md rename docs/src/examples/{quantum1d/6.hubbard => groundstates/hubbard}/main.ipynb (93%) create mode 100644 docs/src/examples/groundstates/ising-cft/figure-1.png rename docs/src/examples/{quantum1d/1.ising-cft => groundstates/ising-cft}/figure-2.png (100%) create mode 100644 docs/src/examples/groundstates/ising-cft/figure-3.png rename docs/src/examples/{quantum1d/1.ising-cft => groundstates/ising-cft}/index.md (60%) rename docs/src/examples/{quantum1d/1.ising-cft => groundstates/ising-cft}/main.ipynb (59%) rename docs/src/examples/{quantum1d/1.ising-cft => groundstates/ising-cft}/translation_mpo.svg (100%) create mode 100644 docs/src/examples/groundstates/xxz-heisenberg/figure-1.png create mode 100644 docs/src/examples/groundstates/xxz-heisenberg/figure-2.png create mode 100644 docs/src/examples/groundstates/xxz-heisenberg/index.md rename docs/src/examples/{quantum1d/4.xxz-heisenberg => groundstates/xxz-heisenberg}/main.ipynb (50%) delete mode 100644 docs/src/examples/quantum1d/1.ising-cft/figure-1.png delete mode 100644 docs/src/examples/quantum1d/1.ising-cft/figure-3.png delete mode 100644 docs/src/examples/quantum1d/4.xxz-heisenberg/figure-1.png delete mode 100644 docs/src/examples/quantum1d/4.xxz-heisenberg/figure-2.png delete mode 100644 docs/src/examples/quantum1d/4.xxz-heisenberg/index.md delete mode 100644 docs/src/examples/quantum1d/5.haldane-spt/figure-1.png delete mode 100644 docs/src/examples/quantum1d/5.haldane-spt/figure-2.png delete mode 100644 docs/src/examples/quantum1d/5.haldane-spt/figure-3.png delete mode 100644 docs/src/examples/quantum1d/6.hubbard/figure-1.png delete mode 100644 docs/src/examples/quantum1d/6.hubbard/figure-2.png delete mode 100644 docs/src/examples/quantum1d/6.hubbard/index.md delete mode 100644 docs/src/examples/quantum1d/8.bose-hubbard/figure-1.png delete mode 100644 docs/src/examples/quantum1d/8.bose-hubbard/figure-3.png delete mode 100644 docs/src/examples/quantum1d/8.bose-hubbard/figure-4.png delete mode 100644 docs/src/examples/quantum1d/8.bose-hubbard/figure-5.png delete mode 100644 docs/src/examples/quantum1d/8.bose-hubbard/figure-6.png create mode 100644 docs/src/examples/statmech/hard-hexagon/figure-1.png rename docs/src/examples/{classic2d/1.hard-hexagon => statmech/hard-hexagon}/hexagon.svg (100%) rename docs/src/examples/{classic2d/1.hard-hexagon => statmech/hard-hexagon}/index.md (84%) rename docs/src/examples/{classic2d/1.hard-hexagon => statmech/hard-hexagon}/main.ipynb (100%) rename examples/{quantum1d/3.ising-dqpt => dynamics/ising-dqpt}/finite_timeev.png (100%) rename examples/{quantum1d/3.ising-dqpt => dynamics/ising-dqpt}/infinite_timeev.png (100%) rename examples/{quantum1d/3.ising-dqpt => dynamics/ising-dqpt}/main.jl (94%) rename examples/{quantum1d/7.xy-finiteT => dynamics/xy-finiteT}/main.jl (97%) rename examples/{quantum1d/2.haldane => excitations/haldane}/main.jl (99%) rename examples/{quantum1d/8.bose-hubbard => groundstates/bose-hubbard}/main.jl (100%) rename examples/{quantum1d/5.haldane-spt => groundstates/haldane-spt}/main.jl (100%) rename examples/{quantum1d/5.haldane-spt => groundstates/haldane-spt}/spt-tensors.svg (100%) rename examples/{quantum1d/6.hubbard => groundstates/hubbard}/main.jl (90%) rename examples/{quantum1d/1.ising-cft => groundstates/ising-cft}/main.jl (99%) rename examples/{quantum1d/1.ising-cft => groundstates/ising-cft}/translation_mpo.svg (100%) rename examples/{quantum1d/4.xxz-heisenberg => groundstates/xxz-heisenberg}/main.jl (91%) rename examples/{classic2d/1.hard-hexagon => statmech/hard-hexagon}/hexagon.svg (100%) rename examples/{classic2d/1.hard-hexagon => statmech/hard-hexagon}/main.jl (100%) diff --git a/docs/make.jl b/docs/make.jl index 582b21dbc..ebb7a2ab3 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -14,13 +14,19 @@ using DocumenterInterLinks include("overrides.jl") include("src/assets/models.jl") -# examples +# examples — grouped by computational task; each group is a subdirectory of src/examples/ example_dir = joinpath(@__DIR__, "src", "examples") -classic_pages = map(readdir(joinpath(example_dir, "classic2d"))) do dir - return joinpath("examples", "classic2d", dir, "index.md") -end -quantum_pages = map(readdir(joinpath(example_dir, "quantum1d"))) do dir - return joinpath("examples", "quantum1d", dir, "index.md") +example_groups = [ + "Ground states" => "groundstates", + "Excitations & dispersions" => "excitations", + "Dynamics & finite temperature" => "dynamics", + "Statistical mechanics" => "statmech", +] +example_pages = map(example_groups) do (title, group) + pages = map(readdir(joinpath(example_dir, group))) do dir + return joinpath("examples", group, dir, "index.md") + end + return title => pages end # contributing guide: `CONTRIBUTING.md` in the repository root is canonical, since that is the @@ -73,7 +79,10 @@ makedocs(; "man/parallelism.md", "man/lattices.md", ], - "Examples" => "examples/index.md", + "Examples" => [ + "Overview" => "examples/index.md", + example_pages..., + ], "Library" => "lib/lib.md", "References" => "references.md", "Changelog" => "changelog.md", diff --git a/docs/src/examples/classic2d/1.hard-hexagon/figure-1.png b/docs/src/examples/classic2d/1.hard-hexagon/figure-1.png deleted file mode 100644 index 7a590f3bf941ee9b3710363a2cd08f6b96dea75c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16719 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 G1OFc`fwUz6 diff --git a/docs/src/examples/quantum1d/3.ising-dqpt/finite_timeev.png b/docs/src/examples/dynamics/ising-dqpt/finite_timeev.png similarity index 100% rename from docs/src/examples/quantum1d/3.ising-dqpt/finite_timeev.png rename to docs/src/examples/dynamics/ising-dqpt/finite_timeev.png diff --git a/docs/src/examples/quantum1d/3.ising-dqpt/index.md b/docs/src/examples/dynamics/ising-dqpt/index.md similarity index 65% rename from docs/src/examples/quantum1d/3.ising-dqpt/index.md rename to docs/src/examples/dynamics/ising-dqpt/index.md index 98f515216..6f3a8fb35 100644 --- a/docs/src/examples/quantum1d/3.ising-dqpt/index.md +++ b/docs/src/examples/dynamics/ising-dqpt/index.md @@ -1,10 +1,10 @@ ```@meta -EditURL = "../../../../../examples/quantum1d/3.ising-dqpt/main.jl" +EditURL = "../../../../../examples/dynamics/ising-dqpt/main.jl" ``` -[![](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/QuantumKitHub/MPSKit.jl/gh-pages?filepath=dev/examples/quantum1d/3.ising-dqpt/main.ipynb) -[![](https://img.shields.io/badge/show-nbviewer-579ACA.svg)](https://nbviewer.jupyter.org/github/QuantumKitHub/MPSKit.jl/blob/gh-pages/dev/examples/quantum1d/3.ising-dqpt/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/quantum1d/3.ising-dqpt) +[![](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/QuantumKitHub/MPSKit.jl/gh-pages?filepath=dev/examples/dynamics/ising-dqpt/main.ipynb) +[![](https://img.shields.io/badge/show-nbviewer-579ACA.svg)](https://nbviewer.jupyter.org/github/QuantumKitHub/MPSKit.jl/blob/gh-pages/dev/examples/dynamics/ising-dqpt/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/dynamics/ising-dqpt) # DQPT in the Ising model @@ -12,8 +12,14 @@ In this tutorial we will try to reproduce the results from [this paper](https://arxiv.org/pdf/1206.2505.pdf). The needed packages are ````julia -using MPSKit, TensorKit -using .ExampleModels +using MPSKit, MPSKitModels, TensorKit +```` + +```` +Precompiling packages... + 14306.2 ms ✓ MPSKitModels + 1 dependency successfully precompiled in 16 seconds. 74 already precompiled. + ```` Dynamical quantum phase transitions (DQPT in short) are signatures of equilibrium phase transitions in a dynamical quantity - the Loschmidt echo. @@ -34,28 +40,14 @@ First we construct the Hamiltonian in MPO form, and obtain the pre-quenched grou ````julia L = 20 -H₀ = transverse_field_ising(; L, g = -0.5) +H₀ = transverse_field_ising(FiniteChain(L); g = -0.5) ψ₀ = FiniteMPS(L, ℂ^2, ℂ^10) -ψ₀, _ = find_groundstate(ψ₀, H₀, DMRG()); -```` - -```` -[ Info: DMRG init: obj = +9.789608054020e+00 err = 1.0000e+00 -[ Info: DMRG 1: obj = -2.040016740045e+01 err = 1.7077445107e-02 time = 0.01 sec -[ Info: DMRG 2: obj = -2.040021715177e+01 err = 3.5394180072e-05 time = 0.01 sec -[ Info: DMRG 3: obj = -2.040021715349e+01 err = 2.1033336427e-06 time = 0.02 sec -[ Info: DMRG 4: obj = -2.040021748658e+01 err = 1.5656718877e-05 time = 0.02 sec -[ Info: DMRG 5: obj = -2.040021759890e+01 err = 8.8241952375e-06 time = 0.01 sec -[ Info: DMRG 6: obj = -2.040021767905e+01 err = 1.1092508692e-05 time = 0.01 sec -[ Info: DMRG 7: obj = -2.040021786701e+01 err = 2.4581655330e-06 time = 0.01 sec -[ Info: DMRG 8: obj = -2.040021786703e+01 err = 9.9647269587e-09 time = 0.01 sec -[ Info: DMRG conv 9: obj = -2.040021786703e+01 err = 8.2188000056e-11 time = 0.12 sec - +ψ₀, _ = find_groundstate(ψ₀, H₀, DMRG(; verbosity = 0)); ```` ## Finite MPS quenching -We can define a helper function that measures the Loschmidt echo: +We can define a helper function that measures the loschmith echo ````julia echo(ψ₀::FiniteMPS, ψₜ::FiniteMPS) = -2 * log(abs(dot(ψ₀, ψₜ))) / length(ψ₀) @@ -65,10 +57,10 @@ echo(ψ₀::FiniteMPS, ψₜ::FiniteMPS) = -2 * log(abs(dot(ψ₀, ψₜ))) / le We will initially use a two-site TDVP scheme to dynamically increase the bond dimension while time evolving, and later on switch to a faster one-site scheme. A single timestep can be done using ````julia -H₁ = transverse_field_ising(; L, g = -2.0) +H₁ = transverse_field_ising(FiniteChain(L); g = -2.0) ψₜ = deepcopy(ψ₀) dt = 0.01 -ψₜ, envs, info = timestep(ψₜ, H₁, 0, dt, TDVP2(; trunc = truncrank(20))); +ψₜ, envs = timestep(ψₜ, H₁, 0, dt, TDVP2(; trunc = truncrank(20))); ```` "envs" is a kind of cache object that keeps track of all environments in `ψ`. It is often advantageous to re-use the environment, so that MPSKit doesn't need to recalculate everything. @@ -78,10 +70,10 @@ Putting it all together, we get ````julia function finite_sim(L; dt = 0.05, finaltime = 5.0) ψ₀ = FiniteMPS(L, ℂ^2, ℂ^10) - H₀ = transverse_field_ising(; L, g = -0.5) - ψ₀, _ = find_groundstate(ψ₀, H₀, DMRG()) + H₀ = transverse_field_ising(FiniteChain(L); g = -0.5) + ψ₀, _ = find_groundstate(ψ₀, H₀, DMRG(; verbosity = 0)) - H₁ = transverse_field_ising(; L, g = -2.0) + H₁ = transverse_field_ising(FiniteChain(L); g = -2.0) ψₜ = deepcopy(ψ₀) envs = environments(ψₜ, H₁, ψₜ) @@ -90,7 +82,7 @@ function finite_sim(L; dt = 0.05, finaltime = 5.0) for t in times[2:end] alg = t > 3 * dt ? TDVP() : TDVP2(; trunc = truncrank(50)) - ψₜ, envs, info = timestep(ψₜ, H₁, 0, dt, alg, envs) + ψₜ, envs = timestep(ψₜ, H₁, 0, dt, alg, envs) push!(echos, echo(ψₜ, ψ₀)) end @@ -111,18 +103,7 @@ Similarly we could start with an initial infinite state and find the pre-quench ````julia ψ₀ = InfiniteMPS([ℂ^2], [ℂ^10]) H₀ = transverse_field_ising(; g = -0.5) -ψ₀, _ = find_groundstate(ψ₀, H₀, VUMPS()); -```` - -```` -[ Info: VUMPS init: obj = +4.958532341527e-01 err = 4.0184e-01 -[ Info: VUMPS 1: obj = -1.014182971769e+00 err = 1.6819729194e-01 time = 9.57 sec -[ Info: VUMPS 2: obj = -1.063544208631e+00 err = 4.2583303913e-04 time = 0.01 sec -[ Info: VUMPS 3: obj = -1.063544409973e+00 err = 6.1082631880e-07 time = 0.01 sec -[ Info: VUMPS 4: obj = -1.063544409973e+00 err = 2.0420569870e-08 time = 0.00 sec -[ Info: VUMPS 5: obj = -1.063544409973e+00 err = 8.6924174444e-10 time = 0.00 sec -[ Info: VUMPS conv 6: obj = -1.063544409973e+00 err = 5.3767504258e-11 time = 9.59 sec - +ψ₀, _ = find_groundstate(ψ₀, H₀, VUMPS(; verbosity = 0)); ```` The dot product of two infinite matrix product states scales as ``\alpha ^N`` where ``α`` is the dominant eigenvalue of the transfer matrix. @@ -133,7 +114,7 @@ dot(ψ₀, ψ₀) ```` ```` -0.9999999999999998 + 2.8068402690374434e-16im +1.0000000000000047 + 1.040736567930811e-16im ```` so the Loschmidt echo takes on the pleasant form @@ -157,7 +138,7 @@ a single timestep is easy ````julia dt = 0.01 -ψₜ, envs, info = timestep(ψₜ, H₁, 0, dt, TDVP(), envs); +ψₜ, envs = timestep(ψₜ, H₁, 0, dt, TDVP(), envs); ```` With performance in mind we should once again try to re-use these "envs" cache objects. @@ -166,7 +147,7 @@ The final code is ````julia function infinite_sim(dt = 0.05, finaltime = 5.0) ψ₀ = InfiniteMPS([ℂ^2], [ℂ^10]) - ψ₀, _ = find_groundstate(ψ₀, H₀, VUMPS()) + ψ₀, _ = find_groundstate(ψ₀, H₀, VUMPS(; verbosity = 0)) ψₜ = deepcopy(ψ₀) envs = environments(ψₜ, H₁, ψₜ) @@ -178,7 +159,7 @@ function infinite_sim(dt = 0.05, finaltime = 5.0) if t < 50dt # if t is sufficiently small, we increase the bond dimension ψₜ, envs = changebonds(ψₜ, H₁, OptimalExpand(; trunc = truncrank(1)), envs) end - ψₜ, envs, info = timestep(ψₜ, H₁, 0, dt, TDVP(), envs) + ψₜ, envs = timestep(ψₜ, H₁, 0, dt, TDVP(), envs) push!(echos, echo(ψₜ, ψ₀)) end diff --git a/docs/src/examples/quantum1d/3.ising-dqpt/infinite_timeev.png b/docs/src/examples/dynamics/ising-dqpt/infinite_timeev.png similarity index 100% rename from docs/src/examples/quantum1d/3.ising-dqpt/infinite_timeev.png rename to docs/src/examples/dynamics/ising-dqpt/infinite_timeev.png diff --git a/docs/src/examples/quantum1d/3.ising-dqpt/main.ipynb b/docs/src/examples/dynamics/ising-dqpt/main.ipynb similarity index 53% rename from docs/src/examples/quantum1d/3.ising-dqpt/main.ipynb rename to docs/src/examples/dynamics/ising-dqpt/main.ipynb index 1d4893fb7..682c5b3a1 100644 --- a/docs/src/examples/quantum1d/3.ising-dqpt/main.ipynb +++ b/docs/src/examples/dynamics/ising-dqpt/main.ipynb @@ -16,113 +16,7 @@ "metadata": {}, "outputs": [], "source": [ - "using MPSKit, TensorKit\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" + "using MPSKit, MPSKitModels, TensorKit" ] }, { @@ -153,9 +47,9 @@ "outputs": [], "source": [ "L = 20\n", - "H₀ = transverse_field_ising(; L, g = -0.5)\n", + "H₀ = transverse_field_ising(FiniteChain(L); g = -0.5)\n", "ψ₀ = FiniteMPS(L, ℂ^2, ℂ^10)\n", - "ψ₀, _ = find_groundstate(ψ₀, H₀, DMRG());" + "ψ₀, _ = find_groundstate(ψ₀, H₀, DMRG(; verbosity = 0));" ] }, { @@ -164,7 +58,7 @@ "source": [ "## Finite MPS quenching\n", "\n", - "We can define a helper function that measures the Loschmidt echo:" + "We can define a helper function that measures the loschmith echo" ] }, { @@ -190,10 +84,10 @@ "metadata": {}, "outputs": [], "source": [ - "H₁ = transverse_field_ising(; L, g = -2.0)\n", + "H₁ = transverse_field_ising(FiniteChain(L); g = -2.0)\n", "ψₜ = deepcopy(ψ₀)\n", "dt = 0.01\n", - "ψₜ, envs, info = timestep(ψₜ, H₁, 0, dt, TDVP2(; trunc = truncrank(20)));" + "ψₜ, envs = timestep(ψₜ, H₁, 0, dt, TDVP2(; trunc = truncrank(20)));" ] }, { @@ -213,10 +107,10 @@ "source": [ "function finite_sim(L; dt = 0.05, finaltime = 5.0)\n", " ψ₀ = FiniteMPS(L, ℂ^2, ℂ^10)\n", - " H₀ = transverse_field_ising(; L, g = -0.5)\n", - " ψ₀, _ = find_groundstate(ψ₀, H₀, DMRG())\n", + " H₀ = transverse_field_ising(FiniteChain(L); g = -0.5)\n", + " ψ₀, _ = find_groundstate(ψ₀, H₀, DMRG(; verbosity = 0))\n", "\n", - " H₁ = transverse_field_ising(; L, g = -2.0)\n", + " H₁ = transverse_field_ising(FiniteChain(L); g = -2.0)\n", " ψₜ = deepcopy(ψ₀)\n", " envs = environments(ψₜ, H₁, ψₜ)\n", "\n", @@ -225,7 +119,7 @@ "\n", " for t in times[2:end]\n", " alg = t > 3 * dt ? TDVP() : TDVP2(; trunc = truncrank(50))\n", - " ψₜ, envs, info = timestep(ψₜ, H₁, 0, dt, alg, envs)\n", + " ψₜ, envs = timestep(ψₜ, H₁, 0, dt, alg, envs)\n", " push!(echos, echo(ψₜ, ψ₀))\n", " end\n", "\n", @@ -257,7 +151,7 @@ "source": [ "ψ₀ = InfiniteMPS([ℂ^2], [ℂ^10])\n", "H₀ = transverse_field_ising(; g = -0.5)\n", - "ψ₀, _ = find_groundstate(ψ₀, H₀, VUMPS());" + "ψ₀, _ = find_groundstate(ψ₀, H₀, VUMPS(; verbosity = 0));" ] }, { @@ -328,7 +222,7 @@ "outputs": [], "source": [ "dt = 0.01\n", - "ψₜ, envs, info = timestep(ψₜ, H₁, 0, dt, TDVP(), envs);" + "ψₜ, envs = timestep(ψₜ, H₁, 0, dt, TDVP(), envs);" ] }, { @@ -347,7 +241,7 @@ "source": [ "function infinite_sim(dt = 0.05, finaltime = 5.0)\n", " ψ₀ = InfiniteMPS([ℂ^2], [ℂ^10])\n", - " ψ₀, _ = find_groundstate(ψ₀, H₀, VUMPS())\n", + " ψ₀, _ = find_groundstate(ψ₀, H₀, VUMPS(; verbosity = 0))\n", "\n", " ψₜ = deepcopy(ψ₀)\n", " envs = environments(ψₜ, H₁, ψₜ)\n", @@ -359,7 +253,7 @@ " if t < 50dt # if t is sufficiently small, we increase the bond dimension\n", " ψₜ, envs = changebonds(ψₜ, H₁, OptimalExpand(; trunc = truncrank(1)), envs)\n", " end\n", - " ψₜ, envs, info = timestep(ψₜ, H₁, 0, dt, TDVP(), envs)\n", + " ψₜ, envs = timestep(ψₜ, H₁, 0, dt, TDVP(), envs)\n", " push!(echos, echo(ψₜ, ψ₀))\n", " end\n", "\n", @@ -386,15 +280,15 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.13.1", + "display_name": "Julia 1.12.6", "language": "julia", - "name": "julia-1.13" + "name": "julia-1.12" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.13.1" + "version": "1.12.6" } }, "nbformat": 4, diff --git a/docs/src/examples/quantum1d/7.xy-finiteT/figure-1.png b/docs/src/examples/dynamics/xy-finiteT/figure-1.png similarity index 100% rename from docs/src/examples/quantum1d/7.xy-finiteT/figure-1.png rename to docs/src/examples/dynamics/xy-finiteT/figure-1.png diff --git a/docs/src/examples/quantum1d/7.xy-finiteT/figure-2.png b/docs/src/examples/dynamics/xy-finiteT/figure-2.png similarity index 100% rename from docs/src/examples/quantum1d/7.xy-finiteT/figure-2.png rename to docs/src/examples/dynamics/xy-finiteT/figure-2.png diff --git a/docs/src/examples/quantum1d/7.xy-finiteT/figure-3.png b/docs/src/examples/dynamics/xy-finiteT/figure-3.png similarity index 100% rename from docs/src/examples/quantum1d/7.xy-finiteT/figure-3.png rename to docs/src/examples/dynamics/xy-finiteT/figure-3.png diff --git a/docs/src/examples/quantum1d/7.xy-finiteT/figure-4.png b/docs/src/examples/dynamics/xy-finiteT/figure-4.png similarity index 100% rename from docs/src/examples/quantum1d/7.xy-finiteT/figure-4.png rename to docs/src/examples/dynamics/xy-finiteT/figure-4.png diff --git a/docs/src/examples/quantum1d/7.xy-finiteT/figure-5.png b/docs/src/examples/dynamics/xy-finiteT/figure-5.png similarity index 100% rename from docs/src/examples/quantum1d/7.xy-finiteT/figure-5.png rename to docs/src/examples/dynamics/xy-finiteT/figure-5.png diff --git a/docs/src/examples/quantum1d/7.xy-finiteT/figure-6.png b/docs/src/examples/dynamics/xy-finiteT/figure-6.png similarity index 100% rename from docs/src/examples/quantum1d/7.xy-finiteT/figure-6.png rename to docs/src/examples/dynamics/xy-finiteT/figure-6.png diff --git a/docs/src/examples/quantum1d/7.xy-finiteT/index.md b/docs/src/examples/dynamics/xy-finiteT/index.md similarity index 92% rename from docs/src/examples/quantum1d/7.xy-finiteT/index.md rename to docs/src/examples/dynamics/xy-finiteT/index.md index f55c6a9c3..86dc23584 100644 --- a/docs/src/examples/quantum1d/7.xy-finiteT/index.md +++ b/docs/src/examples/dynamics/xy-finiteT/index.md @@ -1,18 +1,17 @@ ```@meta -EditURL = "../../../../../examples/quantum1d/7.xy-finiteT/main.jl" +EditURL = "../../../../../examples/dynamics/xy-finiteT/main.jl" ``` -[![](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/QuantumKitHub/MPSKit.jl/gh-pages?filepath=dev/examples/quantum1d/7.xy-finiteT/main.ipynb) -[![](https://img.shields.io/badge/show-nbviewer-579ACA.svg)](https://nbviewer.jupyter.org/github/QuantumKitHub/MPSKit.jl/blob/gh-pages/dev/examples/quantum1d/7.xy-finiteT/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/quantum1d/7.xy-finiteT) +[![](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/QuantumKitHub/MPSKit.jl/gh-pages?filepath=dev/examples/dynamics/xy-finiteT/main.ipynb) +[![](https://img.shields.io/badge/show-nbviewer-579ACA.svg)](https://nbviewer.jupyter.org/github/QuantumKitHub/MPSKit.jl/blob/gh-pages/dev/examples/dynamics/xy-finiteT/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/dynamics/xy-finiteT) ````julia using Markdown -using TensorKitTensors.SpinOperators: S_plus_S_min, S_min_S_plus using TensorKit using MPSKit -using .ExampleModels using MPSKit: infinite_temperature_density_matrix +using MPSKitModels using QuadGK: quadgk using SpecialFunctions: ellipe using Plots @@ -20,6 +19,27 @@ using LinearAlgebra using BenchmarkFreeFermions ```` +```` +Precompiling packages... + 2928.0 ms ✓ SpecialFunctions + 1 dependency successfully precompiled in 3 seconds. 12 already precompiled. +Precompiling packages... + 1182.9 ms ✓ JLFzf + 1251.9 ms ✓ Xorg_libXi_jll + 1647.3 ms ✓ GLFW_jll + 4694.5 ms ✓ Latexify + 2510.2 ms ✓ GR_jll + 1296.9 ms ✓ Latexify → SparseArraysExt + 14731.3 ms ✓ HTTP + 5752.3 ms ✓ GR + 46383.1 ms ✓ Plots + 9 dependencies successfully precompiled in 71 seconds. 171 already precompiled. +Precompiling packages... + 2884.9 ms ✓ ColorVectorSpace → SpecialFunctionsExt + 1 dependency successfully precompiled in 3 seconds. 20 already precompiled. + +```` + # Finite temperature XY model This example shows how to simulate the finite temperature behavior of the XY model in 1D. @@ -44,8 +64,13 @@ function XY_hamiltonian( ::Type{T} = ComplexF64, ::Type{S} = Trivial; J = 1 / 2, N ) where {T <: Number, S <: Sector} spin = 1 // 2 - term = J / 2 * (S_plus_S_min(T, S; spin) + S_min_S_plus(T, S; spin)) - return chain_hamiltonian(term; L = isfinite(N) ? Int(N) : nothing) + term = J * (S_xx(T, S; spin) + S_yy(T, S; spin)) + lattice = isfinite(N) ? FiniteChain(N) : InfiniteChain(1) + return @mpoham begin + sum(nearest_neighbours(lattice)) do (i, j) + return term{i, j} + end + end end ```` @@ -62,8 +87,7 @@ The Hamiltonian can be diagonalized in terms of fermionic creation and annihilat E_0 = -\frac{1}{\pi} \text{EllipticE}\left( \sqrt{1 - \gamma^2} \right) ``` -!!! todo - Show the derivation of the ground state energy by diagonalizing the Hamiltonian in terms of fermionic operators. +The derivation, via a Jordan-Wigner transformation to free fermions followed by a Bogoliubov rotation, can be found in [Lieb, Schultz & Mattis, Ann. Phys. 16, 407 (1961)](https://doi.org/10.1016/0003-4916(61)90115-4). ````julia function groundstate_energy(J, N) @@ -112,7 +136,7 @@ D = 64 V_init = symmetry === Trivial ? ℂ^32 : U1Space(i => 10 for i in -1:(1 // 2):1) psi_init = FiniteMPS(N, physicalspace(H, 1), V_init) trunc = truncrank(D) -psi, envs, = find_groundstate(psi_init, H, DMRG2(; trunc, maxiter = 5)); +psi, envs, = find_groundstate(psi_init, H, DMRG2(; trunc, maxiter = 5, verbosity = 0)); E_0 = expectation_value(psi, H, envs) / N println("Numerical:\t", real(E_0)) @@ -121,12 +145,7 @@ println("Exact (N=Inf):\t", groundstate_energy(J, Inf)) ```` ```` -[ Info: DMRG2 init: obj = +4.372173567940e+00 err = 1.0000e+00 -[ Info: DMRG2 1: obj = -5.003682441423e+00 err = 3.0044527697e-02 time = 1.23 min -[ Info: DMRG2 2: obj = -5.004096972575e+00 err = 4.0291060276e-04 time = 0.44 sec -[ Info: DMRG2 3: obj = -5.004096975044e+00 err = 4.3913120671e-06 time = 0.18 sec -[ Info: DMRG2 conv 4: obj = -5.004096975044e+00 err = 7.5912983728e-07 time = 1.24 min -Numerical: -0.1563780304701152 +Numerical: -0.1563780304701162 Exact (N=32): -0.15637803047254015 Exact (N=Inf): -0.15915494309189535 @@ -170,8 +189,7 @@ The resulting expression is Z(\beta) = \prod_{k=1}^{N} \left( 1 + e^{-\beta \epsilon_k} \right)^{1/N} ``` -!!! todo - Show the derivation of the partition function for the XY model. +This expression follows from the same free-fermion diagonalization as the ground-state energy above: each single-particle mode $\epsilon_k$ is independently occupied or empty, giving the usual free-fermion partition function (see again [Lieb, Schultz & Mattis (1961)](https://doi.org/10.1016/0003-4916(61)90115-4)). ````julia function partition_function(β::Number, J::Number, N::Number) @@ -305,9 +323,6 @@ Z(\beta) = In other words, we can compute the partition function at $\beta$ by computing the overlap of two states evolved for $\beta / 2$, as long as the Hamiltonian is Hermitian. Otherwise, we could still use the same trick, but we would have to compute the evolved states twice, once for $H$ and once for $H^\dagger$. -!!! todo - Add a figure to illustrate this trick. - ````julia double_logpartition(ρ₁, ρ₂ = ρ₁) = log(real(dot(ρ₁, ρ₂))) / length(ρ₁) diff --git a/docs/src/examples/quantum1d/7.xy-finiteT/main.ipynb b/docs/src/examples/dynamics/xy-finiteT/main.ipynb similarity index 81% rename from docs/src/examples/quantum1d/7.xy-finiteT/main.ipynb rename to docs/src/examples/dynamics/xy-finiteT/main.ipynb index f46ed94fe..1af3f9bf8 100644 --- a/docs/src/examples/quantum1d/7.xy-finiteT/main.ipynb +++ b/docs/src/examples/dynamics/xy-finiteT/main.ipynb @@ -7,116 +7,10 @@ "outputs": [], "source": [ "using Markdown\n", - "using TensorKitTensors.SpinOperators: S_plus_S_min, S_min_S_plus\n", "using TensorKit\n", "using MPSKit\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 MPSKit: infinite_temperature_density_matrix\n", + "using MPSKitModels\n", "using QuadGK: quadgk\n", "using SpecialFunctions: ellipe\n", "using Plots\n", @@ -163,8 +57,13 @@ " ::Type{T} = ComplexF64, ::Type{S} = Trivial; J = 1 / 2, N\n", " ) where {T <: Number, S <: Sector}\n", " spin = 1 // 2\n", - " term = J / 2 * (S_plus_S_min(T, S; spin) + S_min_S_plus(T, S; spin))\n", - " return chain_hamiltonian(term; L = isfinite(N) ? Int(N) : nothing)\n", + " term = J * (S_xx(T, S; spin) + S_yy(T, S; spin))\n", + " lattice = isfinite(N) ? FiniteChain(N) : InfiniteChain(1)\n", + " return @mpoham begin\n", + " sum(nearest_neighbours(lattice)) do (i, j)\n", + " return term{i, j}\n", + " end\n", + " end\n", "end" ] }, @@ -181,9 +80,7 @@ " E_0 = -\\frac{1}{\\pi} \\text{EllipticE}\\left( \\sqrt{1 - \\gamma^2} \\right)\n", "$$\n", "\n", - "> **Todo**\n", - ">\n", - "> Show the derivation of the ground state energy by diagonalizing the Hamiltonian in terms of fermionic operators." + "The derivation, via a Jordan-Wigner transformation to free fermions followed by a Bogoliubov rotation, can be found in [Lieb, Schultz & Mattis, Ann. Phys. 16, 407 (1961)](https://doi.org/10.1016/0003-4916(61)90115-4)." ] }, { @@ -247,7 +144,7 @@ "V_init = symmetry === Trivial ? ℂ^32 : U1Space(i => 10 for i in -1:(1 // 2):1)\n", "psi_init = FiniteMPS(N, physicalspace(H, 1), V_init)\n", "trunc = truncrank(D)\n", - "psi, envs, = find_groundstate(psi_init, H, DMRG2(; trunc, maxiter = 5));\n", + "psi, envs, = find_groundstate(psi_init, H, DMRG2(; trunc, maxiter = 5, verbosity = 0));\n", "E_0 = expectation_value(psi, H, envs) / N\n", "\n", "println(\"Numerical:\\t\", real(E_0))\n", @@ -297,9 +194,7 @@ " Z(\\beta) = \\prod_{k=1}^{N} \\left( 1 + e^{-\\beta \\epsilon_k} \\right)^{1/N}\n", "$$\n", "\n", - "> **Todo**\n", - ">\n", - "> Show the derivation of the partition function for the XY model." + "This expression follows from the same free-fermion diagonalization as the ground-state energy above: each single-particle mode $\\epsilon_k$ is independently occupied or empty, giving the usual free-fermion partition function (see again [Lieb, Schultz & Mattis (1961)](https://doi.org/10.1016/0003-4916(61)90115-4))." ] }, { @@ -462,11 +357,7 @@ "$$\n", "\n", "In other words, we can compute the partition function at $\\beta$ by computing the overlap of two states evolved for $\\beta / 2$, as long as the Hamiltonian is Hermitian.\n", - "Otherwise, we could still use the same trick, but we would have to compute the evolved states twice, once for $H$ and once for $H^\\dagger$.\n", - "\n", - "> **Todo**\n", - ">\n", - "> Add a figure to illustrate this trick." + "Otherwise, we could still use the same trick, but we would have to compute the evolved states twice, once for $H$ and once for $H^\\dagger$." ] }, { @@ -793,15 +684,15 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.13.1", + "display_name": "Julia 1.12.6", "language": "julia", - "name": "julia-1.13" + "name": "julia-1.12" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.13.1" + "version": "1.12.6" } }, "nbformat": 4, diff --git a/docs/src/examples/quantum1d/2.haldane/figure-1.png b/docs/src/examples/excitations/haldane/figure-1.png similarity index 100% rename from docs/src/examples/quantum1d/2.haldane/figure-1.png rename to docs/src/examples/excitations/haldane/figure-1.png diff --git a/docs/src/examples/quantum1d/2.haldane/figure-2.png b/docs/src/examples/excitations/haldane/figure-2.png similarity index 100% rename from docs/src/examples/quantum1d/2.haldane/figure-2.png rename to docs/src/examples/excitations/haldane/figure-2.png diff --git a/docs/src/examples/quantum1d/2.haldane/figure-3.png b/docs/src/examples/excitations/haldane/figure-3.png similarity index 100% rename from docs/src/examples/quantum1d/2.haldane/figure-3.png rename to docs/src/examples/excitations/haldane/figure-3.png diff --git a/docs/src/examples/quantum1d/2.haldane/index.md b/docs/src/examples/excitations/haldane/index.md similarity index 71% rename from docs/src/examples/quantum1d/2.haldane/index.md rename to docs/src/examples/excitations/haldane/index.md index e888595d3..f26c31407 100644 --- a/docs/src/examples/quantum1d/2.haldane/index.md +++ b/docs/src/examples/excitations/haldane/index.md @@ -1,10 +1,10 @@ ```@meta -EditURL = "../../../../../examples/quantum1d/2.haldane/main.jl" +EditURL = "../../../../../examples/excitations/haldane/main.jl" ``` -[![](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/QuantumKitHub/MPSKit.jl/gh-pages?filepath=dev/examples/quantum1d/2.haldane/main.ipynb) -[![](https://img.shields.io/badge/show-nbviewer-579ACA.svg)](https://nbviewer.jupyter.org/github/QuantumKitHub/MPSKit.jl/blob/gh-pages/dev/examples/quantum1d/2.haldane/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/quantum1d/2.haldane) +[![](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/QuantumKitHub/MPSKit.jl/gh-pages?filepath=dev/examples/excitations/haldane/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/haldane/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/haldane) # The Haldane gap @@ -12,9 +12,14 @@ In this tutorial we will calculate the Haldane gap (the energy gap in the ``S = To follow the tutorial you need the following packages: ````julia -using MPSKit, TensorKit, Plots, Polynomials -using .ExampleModels -using TensorKitTensors.SpinOperators: S_exchange +using MPSKit, MPSKitModels, TensorKit, Plots, Polynomials +```` + +```` +Precompiling packages... + 1343.7 ms ✓ Polynomials → PolynomialsRecipesBaseExt + 1 dependency successfully precompiled in 2 seconds. 18 already precompiled. + ```` The Heisenberg model is defined by the following Hamiltonian: @@ -49,12 +54,13 @@ This can be done as follows. ````julia L = 11 -H = heisenberg_XXX(symmetry; L, J, spin) +chain = FiniteChain(L) +H = heisenberg_XXX(symmetry, chain; J, spin) physical_space = SU2Space(1 => 1) virtual_space = SU2Space(0 => 12, 1 => 12, 2 => 5, 3 => 3) ψ₀ = FiniteMPS(L, physical_space, virtual_space) -ψ, envs, info = find_groundstate(ψ₀, H, DMRG(; verbosity = 0)) +ψ, envs, delta = find_groundstate(ψ₀, H, DMRG(; verbosity = 0)) E₀ = real(expectation_value(ψ, H)) En_1, st_1 = excitations(H, QuasiparticleAnsatz(), ψ, envs; sector = SU2Irrep(1)) En_2, st_2 = excitations(H, QuasiparticleAnsatz(), ψ, envs; sector = SU2Irrep(2)) @@ -62,7 +68,7 @@ En_2, st_2 = excitations(H, QuasiparticleAnsatz(), ψ, envs; sector = SU2Irrep(2 ```` ```` -0.7989253589480417 +0.7989253589480387 ```` We can go even further and doublecheck the claim that ``S = 1`` is an edge excitation, by plotting the energy density. @@ -89,8 +95,8 @@ Ls = 12:4:30 ΔEs = map(Ls) do L @info "computing L = $L" ψ₀ = FiniteMPS(L, physical_space, virtual_space) - H = heisenberg_XXX(symmetry; L, J, spin) - ψ, envs, info = find_groundstate(ψ₀, H, DMRG(; verbosity = 0)) + H = heisenberg_XXX(symmetry, FiniteChain(L); J, spin) + ψ, envs, delta = find_groundstate(ψ₀, H, DMRG(; verbosity = 0)) En_1, st_1 = excitations(H, QuasiparticleAnsatz(), ψ, envs; sector = SU2Irrep(1)) En_2, st_2 = excitations(H, QuasiparticleAnsatz(), ψ, envs; sector = SU2Irrep(2)) return real(En_2[1] - En_1[1]) @@ -101,7 +107,7 @@ f = fit(Ls .^ (-2), ΔEs, 1) ```` ```` -0.4517340158582783 +0.4517340158585316 ```` ````julia @@ -123,36 +129,21 @@ In contrast with the finite size case, we now should specify a momentum label to This way, it is possible to scan the dispersion relation over the entire momentum space. ````julia -H = heisenberg_XXX(symmetry; J, spin) +chain = InfiniteChain(1) +H = heisenberg_XXX(symmetry, chain; J, spin) virtual_space_inf = Rep[SU₂](1 // 2 => 16, 3 // 2 => 16, 5 // 2 => 8, 7 // 2 => 4) ψ₀_inf = InfiniteMPS([physical_space], [virtual_space_inf]) -ψ_inf, envs_inf, info_inf = find_groundstate(ψ₀_inf, H; verbosity = 0) +ψ_inf, envs_inf, delta_inf = find_groundstate(ψ₀_inf, H; verbosity = 0) kspace = range(0, π, 16) -Es, _ = excitations(H, QuasiparticleAnsatz(), kspace, ψ_inf, envs_inf; sector = SU2Irrep(1)) +Es, _ = excitations(H, QuasiparticleAnsatz(), kspace, ψ_inf, envs_inf; sector = SU2Irrep(1), verbosity = 0) ΔE, idx = findmin(real.(Es)) println("minimum @k = $(kspace[idx]):\t ΔE = $(ΔE)") ```` ```` -[ Info: Found excitations for momentum = 0.0 -[ Info: Found excitations for momentum = 0.20943951023931953 -[ Info: Found excitations for momentum = 0.41887902047863906 -[ Info: Found excitations for momentum = 0.6283185307179586 -[ Info: Found excitations for momentum = 0.8377580409572781 -[ Info: Found excitations for momentum = 1.0471975511965976 -[ Info: Found excitations for momentum = 1.2566370614359172 -[ Info: Found excitations for momentum = 1.4660765716752369 -[ Info: Found excitations for momentum = 1.6755160819145563 -[ Info: Found excitations for momentum = 1.8849555921538759 -[ Info: Found excitations for momentum = 2.0943951023931953 -[ Info: Found excitations for momentum = 2.303834612632515 -[ Info: Found excitations for momentum = 2.5132741228718345 -[ Info: Found excitations for momentum = 2.722713633111154 -[ Info: Found excitations for momentum = 2.9321531433504737 -[ Info: Found excitations for momentum = 3.141592653589793 -minimum @k = 3.141592653589793: ΔE = 0.4104792486506801 +minimum @k = 3.141592653589793: ΔE = 0.41047924870059116 ```` diff --git a/docs/src/examples/quantum1d/2.haldane/main.ipynb b/docs/src/examples/excitations/haldane/main.ipynb similarity index 99% rename from docs/src/examples/quantum1d/2.haldane/main.ipynb rename to docs/src/examples/excitations/haldane/main.ipynb index 537558604..5137d13ae 100644 --- a/docs/src/examples/quantum1d/2.haldane/main.ipynb +++ b/docs/src/examples/excitations/haldane/main.ipynb @@ -269,7 +269,7 @@ "ψ_inf, envs_inf, info_inf = find_groundstate(ψ₀_inf, H; verbosity = 0)\n", "\n", "kspace = range(0, π, 16)\n", - "Es, _ = excitations(H, QuasiparticleAnsatz(), kspace, ψ_inf, envs_inf; sector = SU2Irrep(1))\n", + "Es, _ = excitations(H, QuasiparticleAnsatz(), kspace, ψ_inf, envs_inf; sector = SU2Irrep(1), verbosity = 0)\n", "\n", "ΔE, idx = findmin(real.(Es))\n", "println(\"minimum @k = $(kspace[idx]):\\t ΔE = $(ΔE)\")\n", diff --git a/docs/src/examples/groundstates/bose-hubbard/figure-1.png b/docs/src/examples/groundstates/bose-hubbard/figure-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d57ee39ea4b6e74af4b2fb57d72757ef0583db09 GIT binary patch literal 16503 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

oi2rIjf;lGok@|9EwohreZM?m!4iv&{VKz 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 literal 0 HcmV?d00001 diff --git a/docs/src/examples/groundstates/bose-hubbard/figure-4.png b/docs/src/examples/groundstates/bose-hubbard/figure-4.png new file mode 100644 index 0000000000000000000000000000000000000000..5befe8bb36c6a19a24a6a99d308d71aae047d2d7 GIT binary patch literal 36945 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 literal 0 HcmV?d00001 diff --git a/docs/src/examples/groundstates/bose-hubbard/figure-5.png b/docs/src/examples/groundstates/bose-hubbard/figure-5.png new file mode 100644 index 0000000000000000000000000000000000000000..03e3e7ee30f21c2104ec7ded3249a7a1d26f20a0 GIT binary patch literal 32117 zcmd43XHZmKw>8=l+Xe)bBsqy>5D^d&ut87+CFdv^Bu52_O^yl(5+n(d6a)k%M-jxg+L%k?%$JD zMIdmr5r}iKNF4ahiB?z-{6p~gfxIl@4EtY3?YlSxf*EmN_Kvz|>gq2K=}U`egd11A zN<>3fb26x$hQo0!8N>=cdz^58s;Gz_>T@`GZcC~6zQS$rf>wksCE;gEUK9Jug2Xa#Z@({DFAWfguYdmhs=gS8 zS>=w5P{^tBIT0VxASAYx5%u%4lc}aA)rba7;>^s9Mxo{l1N=;W zgQ}e#sk2yvyKx(b$87S^tK(nFK7ZD}os^zlZ`t#v{_Iqbmnu#>#VIQeZsf4PHQy0P zNE$B7N<(;-eLFG`=*cWt(4A zG+yuPYi9PgxL5#vk0b8Nl`CPgSx&QGmnKWN97br~zI`hzFMqZ(@F+h&-^9dZWMt&k zt5@}>M=Onig!`)_*FFA>H;0h6wY6Q+c`41TUE{e~_xx|@_)>KvqL=U1ty@>Gh8� zL+$+Tn{AJ~N)v2uW`+q0GWhIx=Zr%~M({pj^VK?D z@wqrU{vNAz7>EdqjI8lJJFTuipT(8%{fo<@&(YF5Z%Lzk^*`fZwompa7dJhhiKuW= z82KE|PdA6$WqqN}ZBXxXJF(+rG2NH;mzJTSVZF~uvg(g0I#Dw8di`15LWVy7WTiv; z`}b>EcOy0kWRfByiH{#Kg)}?4yXPu%`uqDI9v(*7e|DIxyJ0&-rpyv-^5e&kN{31N zufeFGEQ4xysnY|tV3P=Hfr^hG^FMs>+4)T#gnqg)buQS1g@q-MfW&6rnXb%n8f|H5 z8Q^jBFoPWDIV{ZcqaEu24_!k;dsEZ6`1rSsU!3Q|qoS0YoIZX~idQhNwErdYU3jgN1Z!i`NiS(;-e(NJ3SoL?rY01 zUAnr-&)%B0MZ1chKqw#W|Jac`*qD~V^v1HtlrvR1%@U+^8J1hAs2RTdWM*cDM?er9 z91P*(0VA9J8inJZ!9{m*1X*lQz1K`CC2T5l%$-{mrjVmb-0Z$KYHn>E7V~Z1xoeUP zhyBWxk+Ctlr)(Hoj5O16F-;?cg#ZLxv60m7J(zE8-l6WaTW)sFuuOmV*JBuNY2JQp zX(?*en~{`6v-_>{_4UP`^!4?1hm6wpAd{c_lfF!sFW=9pJAHK9=lJ0B=g;uxl~Ha! zzO|#>72lKH#Ahu718SMd5iz+E1tODZ+|8RU5MCN()(S5wn{ z|Ie=k9xYv6-HTuLbCsDY>UfT`GSbo*PWj^6WswQ-@pG|y0o7-NR!yM<&pGUF?2nclDf&U$E z#Y`*QV2ojs>h9{=-PswW-`U&yDyZ1gV>eQ2ZaY+@Q{|ff4E7No%iu>-`R0TI>xItO z$V|7DA@Z_Yam-W^zK8SFrG-`u*REZIsLxjBG^6fECh_7}4pPe{pX#9Y< z4-XF~L&L^@wqCoB{P}lntP&P|)VOzILh{O$yTcr>U%!T!=&}&~Da)TI<$IdySDMJD zw=g}uIbxZfFaN!xLq3}Ri`TyW+WuoCT#RJ#770(Tt-X!@-Ipz2Rk5|b{de;0^xdh5 zfWSKZ<`ReE@7~P7M(*b_i`{8A>AQbbdk~>ewBFIzgkLMduATYwXCnSkcKvNZfz98& zHQ3M5(a}RgLqt@(R+Dw`wUv`TJX~CmW>Rl?@So~!!q&4eH{bNEfo)34BuUTW3X`$B zGA#9UYi@6CtlDE;4vCMCzq>wZbTYHQJ{c1g^{Kp^BBE7NQgVBttC{pK85$DoEgzd5 z$Zy@<-GBc4fwZ)_xd|5+zklCq^j-eim{)p`vtj(fT=t35Zv9%ba^S$&V^%9fAeaCT=(P;m3` zkVoG3-0&+&qoShXhnRxNfP{av(M(!tH#QV5a5~o>2d7D|RXHx*44EJ`xi2;t&fl7soB-5S2LAA+l^K1?6`Vknx}d7Du`Lk92{cK>Rp_jRqGF4 z@#$%P(EnodqW~hyZnV6;sVNI`7aSB#OuM_gZZ0k|$dR8vr;N%*p1`w1YJPD~cJAyk zCRUyMw&Rraz@kMQQ8cnquViEua{DZyc4lTKoLly;aZOE45QoM}Nk-kqf?3(wn`a+K z3knKihhC5r)Q_sDsB8|ACc)V9Mxz%HL&@E0)_u~J=u(b4K=U#lpQroq9%pFe-b$5UJgDRW=bU3FEt4 zqe*-ss^3p>qU3n^`6s@(Ts>VOzkGRVaq((m$L8Ju`eK+_XVSHkquswpE5(~HV8VEA z+}K?mDLXst@%F-{a-EG1P^gnYRBr2tdSVwPoN???wrKJPUJRo#B5(NY} zIUOAx8{{pzQ!g_yNm=*5ZE2B31zjX3_cv0;ZjSYd+Ra5`Mu`JBiq*M4^_{hbg@sY` z>sx&vb9HpI+QBSBPChtXOs6}$uR<@3?iH7ikbpeiyEWYRLt&FWT{Zv7k>&wMi!5So zZ7nb$Kv;f5?&ojWNcip;#@ki%_%*wB%V(MSZfm2IQUjmx8EdPn!6bAQkOnSaw}3QOzR?P}qO7b;)P6jV@wJ%K z@>{-1^XIIz33A{6+!qbB%%0B;olG$+l z5jQf)D_&Kej&CsO4*25W5)jkCQo;yBQ`t2%HG|1mw_?7f{nDVQ9_P(ns)x8 z&riK>lKfVcE3mQmhgNE8>O|G~{v-u^>~Kg>4eyLZ4vy``4&*TeH>M_M)GQ_xI4Mv; z=&l!%&yScf6>yTra(@EA63{mL<@0B<>wz-d2|i~h`!J3H`WD~(jSf#fOnS!9Hm-xn z@yl~Q;#!wNn(rW|E!Co07P?X(3#7ez7p^<>jY^WbP^|c|M8sxMpfFx(wvv!4u zhzOP<(864+hoC;zo<>>*+~JFs2*D4he~gWh1LoQ&Sw8 zKQ5v(A-9D<@>PzJ@IHubeSG7yW8NBsv=VU?0I;PmN0ek_eq=TqE<6GP^2nf|pjx-M z($dnYDPvU7*1@LfuFf5Ap}PQj)D&#K077NP)E#ei5Xf7Tu(PuZUmN{BHz(}zN8cbO z_wCyv!&-56cD(egu-WZHBnur~N-ouVI-fZ$9i5S>9lzu~fs(z~kpvrO9v?n@5T;eC zo}MP@Z*IFO}+dgD~nZLUf!El-O1@%Oj~xJRWf1F!KA?B znM*l2IdJ*{GCMrp?%9=c8O&43mW#4EWPI-JeYCT*y;eDCb74lRJhu~RJBT@d34+H5 z_9ei90zwV$AEzgO0r*EPFK*g2oka=P?w+MZMRoON%B+unf%9D0H(yl^`+y5qODt9< z>+3BZW{;E?FEHM6SLBHMG&D&l`dGv$wooq`tg7V z4;z0Cx74u`#{dB+p@(fHbc@dZX^3s-gm@J?hGXS620PvaHs-+t;1H zNC*iz!?AKOSq#uRJ|O{i-~?n4>_qLN1G7}~c{Gc}o*$JjkbebiE+0jkBPssHaXKI| zQOnGX{nQS2LSSHE&zswYPk%m}|4s?G_sz~v=L0u|wb?g2J3Ickghzk>0{FMBB*fj^ z-Ccu9=$YIVbY5=m0^9_^*?ND@gAOC#sRnCbQ&S(GrRApk9No`Xw|OWIcZ8)s+3FDZk$$$prAy*73j01&Io5O5 z^R;5|87+;#)}KEFiVfkEJUBQw7cX6^KiM18tF$Mtn1sCQzSMt(hli-S1f~ds!L+ot z<}+z<$~HiM#dJ+_6b%J4%yTo<%s^$1+Cy4w6g&crz)6>(J zu0Cw>eSCCd(=b~#-xWRzH69@;V-3UuoJpVERy4b=9s}qAoHSf))bs6|cD>JYNV)(~ z+}xs~qxreHo6@(TP!hj+Gfm>D^Y8})__(@5%9}S6g<8c>GED%EY6-i9EkpiPud8!Y zp8kf*C*JFcVwAPDf5I9wNq8zND+~IbdLN^AVe`BaFfvqA+rA)GMD=$e#lfO8$=^4a z5zZu7DE5ozU*HRq<6j5Jg$RSZ#VFy~n=Maz%uQi}LZL1&h_h2g=MZ{DDhfQA*A$$FPuA$l;%N=i`*Ii;UI*}2*@|NLlL zf4D$rpf&0UPY!iz<^UWjO90e0&pvmjORdk(-~Ab-ONLGqFalth+h>JMn7NA9j+JTQ z;V1w|T|~|bIa~1Hq>K`IMMXRN`{}~gs%p7n3yX_AsW-Qme-u7@qo$^o&BFj06?4WD zo0XeuFAgR|{KPsPl}vCMRlY zB&Z@{zWZ2;nTQsNUh>eRvd17x@(fHChw8?T1lhNmSV@orok>k(9Lfcv*K!gx`Xn z98#KRV`Jk03hwp~IEY^QUgS9|{p@|Zh|th`_wV0)w!?XC7lF_vpM&4G$TK}3wBq-f zZVEa({VQ*-m*VaFK?bC^7<$4&Y-1Z5?eWfR@n-ltUsA4Mlg@@DK>& zAt;uye}h{f5J@*+qzFVOtuPw?u^<6z27xFeh$8#{+sEdb1&i|XLRY!rK@|Ji`5VUJ zV7bE1j>HRqg16Kbp2Y=E9>Y#VLc$>7DLA454{#XppXYAOR|zn)un2E`+(ph2H}b{B zvUC})_X}i02N=@~{f5aw%)D@v<$Q53nn~*6y8#G1TpS!IpRy10w0Wb$!p;*Bb#!#l zi9FE`xxhe%_B}nkn$iVfO@X??&5dGlT^V{0x$fKi7El(akPjf}54^Djh{W?FS2*RM z#6o5QA0tFVoTIt~5W(lz6VqGkwcnk3^AZgWmfm_Y0)$dDS(VG;Lj{HK#6;@!o^&Ye z&{l2H3>Pk3aQ-s>{X4giP-&kiz}QbIq7DGHb|48g$U|uf71|_x8x&BG%Y@n4Wrr)c z6BP2*MgA_HM<6op3N|qSEd>Li35H!Au8^atp?CfkNDW6CaZ3rkxA$}%5n}Ud7Ge?{J48SKkJ=r%RZdQ2k03bkw$xo=Bfg6Z) z5Ce=G5P&0@&O}24Qz=M1R%+e>rN%Yl2TDqivAKgyp#Hq=wbvrJI#KHd>Aq1k^|qHg zV9IOawC!sY9h{hB7$!!~TTT=8 z{rwcBh0Gx}3tu+c-4%0~tH}_Gl;@*LN=vr@L;@dXZhlit>|Ty)m%P{RG88V?k5>R! zz{I%@MP32J3BfC81EplwLa?$dU4lpeSJ=FdLdc(6AL99znKXE)xgWk3&)LQld+&-jc4Ww zJ*F2*Qcnp(Z|`H6=YjtI30>UN-ES}0;LwVwU&vKT0a~=xxaQ=MgNaGz(Q_xU)bHQF z6I?f+X!kpZ8x1S;yWZT%$?3u9`=zSq#}82WBf1&OmLVzoC@5ae^v#{;ZuEHJtCFE_ z4HL5$5|o{^+TQe+R#sD!ai`2J;Hvj*i(w*#tiI#Gdo#{FULglKx}BYx=YQP;Lu6UW zqvV?FEred<_)EKB8jS~shGvY2g3$8vZOO^WO-*QwGO$$unaR)xUj{};M{l|;yv@lm zq2WkSNSE^ECqq_wtp8bE)z{SxCwsQ@`-L>KG?uCYE&?V}K&RBK|LuLihQo}vTz?C? zEe`@E{obg)&Zyo8HrCKC!Ch8zpIw!|ccppMxLUrPO&Nuk?!V9@+HAS`m#m2lUD|J! z!<@M4j1as}@R~Ocsu!q?*PM8G3V#%8v0;)FEnq95Wn|LQ(jbKLUvpMgRsyNw=Hzq- zc^(f3jzn)f-|~tIV0fs`Mj_dBbU?9k5NL&y`!xfRdvPL3bty_EMsn` zJs%9&uiU^ajt8kO4MIEhX2W=XOV{qP5tCqle(e4((ka8i#RVLpl-;+wx>{ORc7x93 z-NUp4Z^=_PJ3Bi#fqi`Hj^^0Yd)5c@2LMP0Utma%i))^Cq-S7&+L{~RpunKEK4;%LXr6VJ2|Mv0MAB~ z0ZVlei3b%88hQ8b-78nGvSA?iB))tZKn5vodwbi(#f47PUf;rkqt5Qxvm>Z*Qq$7d z*w}8;UqJtcjaFvSg+@+a5+Fy9!CtO;dOZmJ1t^CCjY2ZCsKW#?l)5Mse7T$)=W|zkgd{dVNo~nY@RA76iJS1c?j{4{s8ndQ7tiS*`|+>Gha=PR+R(%1@3X&z@7fTt&0_%sW;=$nar4%FJFd7L;!RH&}#yrn+RvCHDipH zp585&1x4@VPS~n&fvt^AmD>sxJ$)D5mjVye-o=zwnh2&!+WK( zXga~RT!B6&{LT&P;!lvh3e>rei|IYJlnz^OInA^{835b+!E;RVnWvPi<+%-LDtP%G*K~*xC_jfmMGODS1Y zxVyiZ7s=yS)+X>rBa%_HEP}UZ#(f2I;^!q--+QQ;R>x#G>r)n}SzO+wEf^vDXD6ZmNmzR=pX}#0_%Wyc3*b;jK)EhdSqZ6*~ic_?FE1ES$8)iS*&z{}pyJs;rN6+W z1>BqOlj7sWwHo7I2Q$BtcDo0`d$E{{htFN#i(5GM#Bj4zBfrd^&19c6x zcO;uScOBg+5GPRLsP)brWK;}qUsck)Gz$|lp+d%qmw}z=^Sz;@d!EB~H|x}tZYlqS z%S2GkFV}8ffKmJgCM^jO6%;aYIl;VVi^i_XzsVz<)W++12m?HA1}+S8)v%55BpE_B zbj7lXha$XeKZ~P{@YBa}f;$;x|L$%2E}B&JrhS(e{s0NZV{DX!d4!SL1Y#cnYQ0E< z>o0LhUO&lDPWAY00E2^d_Va;}sn{BNE2o4Jp!B9?5U{pZ#BjU8WNM~Ci*SE5{@ItJ zV~gvsy4dR(;d*l0J8*qFKB{%ZD+R8?hV2ga23il`Dq)DISgkOy;NM_{)#-xoP1y2Qc#K9lFWNAsr;E5yC8@tG8(Rga@C_PMeNrt;|6(= zHR-P0Ael?kWO@>QByHkfw5m{8!;G*afN{QUx#?ReD4Ex#juZ4A!Vx=|32YRpzJEz? zb&r8l_>V;|H!SV0e^WNBh4dx(P$Y#$%v{ajE116@_^9m*v@RJXSN1i3$S`nHEHc^s z(jsVh3;Xr!z4#Mqn#Og!^;AOqUK)*|CHeR-N9ZZ4=IOH_Pvi` z`I{GnsFm436}}i!n?h0w!yuS?8ST($n~+#1s`a|Jg;oQ1a3+;2N-~ zU0;ySl=I%e#a+YsuSuYmX(9Y{*)F3*Qc~>Qr~k~qG%kFb(=}O`e z!z6{&ZBf>_8qN$g#Vpy5m)@nnk$8$W<7!C#(MtF$ zgics8kA#%Bz@|*2#!L2(mf8u1;ot4vdswMozK95YS4J*G6A5%5R90ZTU?sv?$p2H5 z$8<;Qn_*#nP!w-^`Ph4MDyG4&BuOMN9#@ejfIq;sxUK$l!a|}-2LV35E2X@~n!+=I z*K05rEOtBSt<_{raWD4xf_g^^{0 zyMP0W5rHPF_o%WH?5az7>0z`r!`@~o)aa$Pk=}0jiQQ`tDEcI!GtJlO`o@e2*ek7NMHk=d3s8CZWx391!^l1H9r)? z6(FOd^J;3mp+JS-0B^-wqTVY)&crk*x1V&cT|1~)`Ci!uvwa%|)^yq*?bPj~(tWP5 z*P)#o7jbc^Mh=R*#jX@BZEa8Rg%lMPfd(~WK*ln+x_S)6X}Y*ucpmE=JvncP`ygw1 zm%p(Gl&JgvNlt<;;&hp+`Jmg(KuyHP%E}opTB@X1@noqlI|Ml0=?+{wdL5W_#dYh@ zjsNj66YwNJNwGT=0+1Gqw*l@2YT$R`V=ot8L3ofFDK=|qaY|sgWbsx%@Jm_|GvQ1i zDHvI*sSu&LW#mUkM|WAcrRiMd+xu$Lh0 zP26Qzfl3k!u{~ysAavBhl(x)zVc4=JC#EdB;rRCx3?Olrg-$L`&TpNayxiQ+jt`uy zt@DATii#pZ=gEXz0Bsg;==>;s0y8*Z{B8QCQvf29nP0o&qrB;yyoUyC1@5w z(W6%;$=5BT-@UU`R_+CU;m>5fKw<}rtOJrJn3D2EEhFPJ``z>0PM5#H?C$bV7^t3VKP6d_qWbrbQ`pQsn05vSI{@Z+UKHq^GB=b8AfcRoB#{%4L(Q zo2CGvSpjkjxO;+D(V-T^@O{gas7*O@X3y*#y}#EDj%e)#x;BpdXkg`1;W6PEUkh8m zEG#TcNWh9SK$QVCLQh5YDmIomK>=%D0)2;E$4ZZqmR2018yK2o1zj#ap>XVRyyP5+ zkJ?l#2K+PkmGD#T1&UXoWDy}+`bLlp^z^_rZEW{QwY9e9ynWl5c1x6>{|{_7EHOY# zd^{CMIzE2yg3q~uE8RE!^3A@IF%1S6D~CR^xYn{Vtn@Wg`R3_$lFcJNTz|B2wCjW| z1xt%X*;S=vjBnSx^QOS*@%E!Y>K|0*ST4|^Xsg*w2m(=2^Y$F8-EL!U1^|raM`!H#Z6y=+sx+EriMR;zo%hNPmX>Xc+hIky zB+VtkizDUootTf<6fdl7r4DlmNz>xqB6;S23{k*EFHB+gJrrq81`6yif$bVt+5x5B z&(H6s%Y-(*5-(L-OADB|K&FK#EP}8>W=fqM$8}i@SP7$o0wzb-hTiK57}msg%)`7N zPlqspI*W&MM^RBRk>B8rBIGp#?oSf7ch+`=o$p*7LYz>SB( zVttmN^9pP~r2kUvn>TeH>xN(vy7?KLTn0T3Rlw9Mrb{w3mjHnP8c{(3cbB~B4K@Kg63ik0sTJ@&FoD;IfqWeU#$e+mC?o&J1Z8M_J_vVDChOpCumHg0 zJ*Lrw-3E?6;%4wKR)Xm2-8@oe3EYb4Q7%X+FrT78+wOh?Pa#zOg2Y~sV4<*evpWD6 z1GqSzjDOw)X|C$cb(1CxFdHJeGC+rA_pqd^YCh}z;z|0lw(5a9S255%{?ZvYS-neZ zJxL2Bq{`hqTI$c-HW}5Q+ZnFZJy}t0Ke$538@{hhalD!;+EqS0v#%sy?J;HA}a_~Ld?tv-@%TK71(r*jg7!E zeUJ*&<(^w`48t}Omy@q z)bF4TMoKLL1&qvu(;p8Xf10kUy80?RyZ2W6Rb*yYiYN>>Ug7<%^ct|=0Ifj~=uZZf zIyXPRW_<*Zc;)57goK2c*y3U=-RXwUjz*(*=y_+rLIIYy+|!}P#%a*=mxTs5NU4sD z!dRdort<$$f!b8a;cgn3g?L zcDe0|NtDawFvHWo+|LQG7~jo)BobyMG0RSY(%{wz9Kp?SnxQVJR*MyUM<1u+O>HX~ zVDi&zy%vm*9~eQHwcFW+(;N<35Z4q_#Z+#C_Ph7z*H~)SBzTChQYozC+mHILPDbhzy$)vNiwuPzt;1B7wu+L z6cpOp+Ii}3PMidRn-Frny}blIcd!m9V=$2cqXEhrqolW|m6esfJ^w_(j~i1)G4wZ` zfx|un*IAzWGO)Kz&CQ$qdGAX~luzo!=pUM!=VWjI|E7Yce9JZ-1A7Rx4~mHBPq;+MGF5A*T zIh*ISD^}itLqnRux_!Q&Wiu(Y$2lUFV7>QGKv#Ad`OH<^rxJ#D?%V;c{m{EkH6J`B z0x4Tr*4EY_IQ27DmX_**{D2N^H*;SZ;u97g92xlnTQ)h&*~{xMOzkmlt~7H=Sy{9E zhCI-0z_e}_*MhI3rUvX0;5G09LkJ*2utlsMY|etau}!dZY;0^`zy-V(Kx8gBe*qb0 zVq!v_`v&+P`1vpR>Ug80A|i-N8x?M7VtI4JqRo`X?!_;&p@2VS0O!%I;aIbYA0Z>04XYp z4249-D&!oj%nr!ju$|gI1o3-$3nZkhtSlhAVL;ozJSLZ_g!_S|-@SH4Qs!ObW#etL z)JlzkFonf~hsDp!^EGgSW@-YHRG*XsJ{b4A2@v6{OwyMqUrR1@(%rTzL$`fxb|O!1 z^&RSh*!V;00kbdnZ zYF?u=^{d_OeiUdRGa>f}1LWT}Vr641EGWRBO`M&Ep>KCTDJlj54=_cczCjR z?@nv6f_S*M`ufPidGh(b0oW>_r~xNl?xXZNn;+bYY(&~BDvh(7U|U3oHX27V+@kV* z0ZZ4NB3c|IRW35+=3P?TKAu`^Z=N-TqzI1$9wN$OsmqllM4E+}DYxj$?)kIs#ZdI8 zrP^Or!xcko0Z0~9F5A!vn2CLlH`|bzfE~cBh|5$1SOUxOt7#?6|KF(TgYx+QBBm|= z2QhstKaUQ5_%4R_ z#`lpC9qt6+)WK4!uBrJD0MVq^wl`4gSO=2qkS#&1zig7wmo|9b)x9b zM^bB7s+bmzG29BjRWbdM?>q(fL62dpTZUkfewG5KtNkn;4PoE*?Hj|3LIzC?a{7JS z!fa=)*DVBfa#fO4RnvrIUi!wPO-J@_HSGD^_ALWJ?!fFdAgmSNgY;bjpz1$D zxwW?GfzIv|zM4HlK=SN41Nv6O1mqS_yRD*KfA^lNFL?*P=xZ(ubXrDM!pT)Zg(UQ1 z%GGbdS0X~QG;zXbi)-zE2NRo^n0RD+%v;Do6>-B{!Pep)hMK$LSQ#A_wcaPd^jnU9Q-h_|~Q zHb~#s{E#UQhXi?G3KCBk>ah+zon(N!VermNQ>z{5V78las)FHq-qedQ$-yZ z0~3jO9qJcV2%D{$6f7jSA|YA^Q3SNPq@ZkRQcXLFD)AClogx zExD&LNY=OI-xcEAVN+NJsCM#?gojd#fpqdcCd1?w$N?K76bA* z_{fVse9-LS1$&GDR+v~O4O3i2jo4D?mf-?n+{lu95statbc2*VU-$w%Pd474wmc?R zRR9yk$Hzk{I5Ij~;6NE{qHS(|<(j#_NHYZtU+lEZhRN>YB17q)kMn63KH-WdGSbg8 zlr^8-P4&g2vcL%r;Ig&%<^Dbz#wna)DCKfX_R<%Zv?xK?I=60(wYT4QA*-*wfl$(_ zKbjKGHh5mb^}C{xxa|!D|9Uw(GvG||bXg?Gq-&4fvUiI(YF6}t<}-XvPCSCFtGxG! z)8fqa4Gid9?_kJ$-YFxJznj6B413a_lpY-z$6G@I=j6?yLi5TqBX(6+S}*(Mmggej zgRK}L5w6&`AG z+694#Dj*_yWptI9H!lRX5|~iaeNRWAWdW4Yjp}FL=eIzLdv8$vs$t8|x|y0$2pCEc z)Ijk3HQkqI#bS$o=7}0nlJ%03G!3pk>3;A)D^d?qYagYSO>*yyY1R+02|j|zDu`g> zzAFHcwHA_kg_$EWqFc^$W2zB6Qq`Y7>(~1j+(yQkOAq9;&tFvg4`?Yc%G_9yTP(Bg zOt?`C_uPeW?Pq_bCp$}r$Vi0X(&)$YHosGS$BBaAHH%wXRBvD3CKO8m6p{nslz!dF zgJTyYw#fAMWr{r%e;vg7uz_tl?pEU{vsA>(Yn{wz$E&me&$>HJLr zjqV4cyYPq)8}tV;l&HHSUMh5d$u^z^p~;Jsk;&)PhQ`BvOwI4ies;_#Bmdgg28t;+ zD=UtXLOG*`Z>VzJ48C8VGuk(}3CTu}i zHB)32v^ZrIrBTp!d^o!kz_xt^q!$#fwP5Rgm+n(wh>UGCc3u5>O-d>~qu*~ywY~Mr z$Gk3vi_^>Njql4Yhi-ZylYD?%7FW*8d#d2h*ASogRswYBmrb4*n**K!5yMLrA(wrF z25i>=&KjSpKC7~QDm;gbym)$?Jtze>(f@R~Rm?r`S zuK=rbiMjZ*mQz(s)&f`ahlu77F4q+1Ql4i-X`5k`JeoTz!w#+ClutzdLYV??9{{kR z3+F0F&Wv&h>e>MXsPrhKBnozzH6ALCMgH857X#H3(VzBH*POA>CBZu9Co=vL5s8LtZ}YA5ArCrt*~* zMGnXvIOY^(ou*^WaBfJ=&8k}(%zM$SQyyTG>)09WO` zmep2{k)t)Sv9ZzDr$^^yWz8(9i4o$s_J@)_1Y%~!aXGosuy4CI?~h~e&qe%ls$5&& z>C)f!LJfV=IrSB z8L%qkNMsR7(nXlx6i{MJKhY`7R;X>HKR`uSU^gR*+P7YSG|u2WbJXucqnZaykDbr8 z`BuCL!Qbs2K|=RdA{f@Qpmj9Gq3#Y+g)<(`##+x!G|;@-jDnYEs)9l+;`9j{Im@dS zLh`lk1FfkT&8THLqtAF{Gqd^!$T)=`eIhlr`OqWJ9R%RIg6Y_N4x4`di40LR*RmQ( zet==cWcPfAQul+z?f!gT!dLQiFjlp91Y=l|ysJND>0-3{%h5Kemj*=4uM|{VOz#+I zm-O(*A&HhV%gDj8%9B7+>gtq~! z0e+dn#6;rzSE{pyGF>inV0z1~2cSg=j8K{?D&(}Z%d@jGu;Vb_!Ub3p0;WYmn@U)# zsiZIDsxgI-Ydxiw|7P^7Kw@~(=i5ld^D(Dw_TtZN)e;I<_)W#!D`W0~?hf1Fhww|b z^3u}f;o?c?y8*8nbQ@f|ac+S1`BO%g7H1|ocNRZI*D>QZl}ehu%<$#TaLk0WA@>NS z|Im({w&TzFib3qr{n>he!%Y>PqY8~x*j`o+4!N9wmFX!GfNDsVSAQK#iO#WSJCD=L zy)79J$#1!mVA;IM)0RO3%<#McZCE=#xMOnZs0L*$*}ykN6FhC?@?{*fp+~7=*El&j zZ{14C8}&P{tbQAK`FwiOU;|5-wz+IU-Zj>TPTubxZ;cjoyl}kQFOsomqPY9%%e^a= zt2O<5fw!?=nmv7^3F~#IpkT%T@eh5^j8rSTkHtYs0JxxV|2|8(wDI`Hqm$J=HbwEf zc)H|4-^)qPQY;vhQz||jEfa%Itns_jj2b@~9}YEL-e*-rDpn%3zVifp?A6RN)<2QW z&CTG6JB6mubjjycV5t3JAHBd<0pjJr=+*Sx9F)HpVA8jT^+ZlkwwP@ z3FZ#eP6b^p?5=%>m$4OTGNCVkKj;jTV2p_^@UxD6#r{})7Bt@Y7-{-sM+N=MCcnnVp&B{T1FM~u)-aI2VB$uja5)g&5dm`7 z(vHN4>tRUo^;H^AMf7#_q}}gIGd*qn1tEkwy$&{mwilvG_U4TXebjl6l$4;a&u_u` z64smt#7x=;2OeX|K2%{FtPglJ)NCcvCgEFxPj}SCn12Id+fz@ zZ`7);-^akv%uUB2(OQ3Ae)uG^SZ@M~jGnfMcDUmu;rCE$ftOz=A* zGw0^aY;CWL8xm9*E94igqRj10xZIZn{7;dyu1XYjH^pamnkTqsF+(=kb~4G*8cs&<1O7_ z8JYy#deW&h9oOSQ`zaMv6r1;!E#Ow|)>sN|>zsw}0lYCPW?HheY1>jjP5Yi4xgCd3 zf$I(U36Qddps@nS7WZqRPaWsD6`k;0C}K3@$yHRAYXBJGwcHL=wa_lLa%cl2ay8C%+ zzwv+P{l@cWi$6;B{`awo@4)$O5B>%^%UtO4shg5g7glhv8-vb7MP-AAP_Cf6;me9( zbXporfi<@-G-@p=%v!kLx+GZ=&T{T;D>YA#d>;FJk-H3i@D((*>@(VFD8L7!dcS_P zXbivyV6FoV7f+wwRQYs{?aK3~1S~B!qAlYK+PE?q*tDh}6v}c9tc7oK1&h9Y_{Lcy zgA>`a_%1j1`@D0r2CgCw-c{+90Jz46>8rX?ifIMJ8?8tah%7+Z^!)g-JLXXTskAi9 zs^sHGawHx!3csa5MFuIb@O_EILJ)j%ndWBHWMC z1;vV#l7|{xya5`-diMa~6IO?+DK74}fA~fNdb!w>pMq}GbK8g5{_SVG+$tL9X7L-( z8(Tf;`3S~36UydSYA9!;VqUQ=0@phRfE?hAw1K{VENi;y3Cup0gMz;H8v9@3tP!|h z<*q!vvY4atTOWK0koN5^H|JM2hZYJy5YTQd8JVN>;CZ;OvXOp`-b*aH>Tcx)_G;GI zoHB9(e0=DJ;^5}C0r)FS%g4`e4_?>0x;i+dWQPbN!*}L&F!@OzaJhuVEH4m8*bnqM z&2=4xnm9b2$1UX%x&nt6tx02tdc}3f#5bT+0}ZJDeJ2D)Fc?*fHP>fnac`ns2pZ2z zzdZ__c1-wOzNPOQN+a?@%u8UspHq>4>YyjM#8?fA3s5SNnb3y}r@;jpK?D=LK_U}g zV{t9vTy|jo+tx&~&iHe9AXvkB=Is5>WJ?#eOV*ke#tLTW=IpAC~Q8>Ji2o5DBtTa1V$a`r5b ztfn`4K80eU4@EGxIx5R0zgA=Lbm2L^RLW}jH+3c|?{3G{X|XL1m=eN=rGXs&+gS~s zy>{Z_-k#aZ{UOeV&*n!QAyQex@B8E?wwuue|0vb&8lzVW#l(o3qF4$~?p2?IDl1}$ zug6=O4Nu9xkx$NFCDUo_X5?qx1TjNhXPpgW%8~i<&?55`7uj$3Duj z3%ID^4|eTRbb@zxMMoJgd}KFP=TzsYY-WX*Db)Q_a?H)`l-yYs{N=)QQP{2*ZizI>uDCsdUg#?F$2s@75x1CukNt}56W69CS5h$cz&S9g%E)d zRxpa*s9vulA|;h_o(q*_g>LdrfZI==JV6!`)8Jb7-NcX;GT>cBAnY{R{Et9#0x41b zWDUw*Xj?I#dg=GEA^xJy2&HUh>39efVbHy$wC-MK3-3xGD8Qv*(OIGdYpEDUWuzM_ zR|FzBtBm|rLIMec_~7Vha@I5m1+r9x->&clA7&x^DjqH7_kn^gclRzdI2b<9zKn@I z^(yff`L|@9{vf^qgYtBH;RcQVXU9zcm2+RwT)gUo5}ATUuOB*U&>(tWElJ$4F*nyx zRqZ#9MfAM?Zs(`y zCK?YL0S5EXk}VR%Vo0HM#L%Bh^O@0@UL9p^&Ds`)?UbLID3_@x zXmIobOezSP)NZ*07%G%{@Oq2cNrjw#NRrVEx8My#U@@DEt&@l$1BiPs^M=F~XezUd z>6Wu{z(S7Qh6d@~Z_vV^s;X*yyGf+@4-QKzH9jJVFl`uFe=tJ?T20pr_$JWD>%9;A zH#E*|8FO22UctL=4t;qtlYB$vgj^IT#aGs2aD-^Q)B@vM)hDdY2Z11mLkV^syk(~g zUX$YlVe$4Yd$Sh)y+DEcJ$rtC3C|%qgSzFwS|9)NB$MXb=!BxE5GSX{GrSiWD@RLeSnaT!RkZ*0(%j!H0m-oxEJK1S_+dTCnvvu|2|d_ z2X6wjazjHz_nX@fU{$qY+oJz1SQwC`5IG=axj^UFAe*-&GIoDn*cJYUjmBMSR!o$C}w_o$t@WbJB!*z)LlZ zgtt)4-jCyWul=#9rzhs&yTpV9P}ZQO>!J=lb7c9!#oTxygCmvK75}yXrvItzH)BC? z^%^^^=!EuBM4#s{$@#N(WSt|5kGNj34prahxkC(AVl!sSJnWa&Hz7c|Y z5Y`ZqboBI{SeFq&ELvq-o$DJ&<}`Z-?bt+#^|4jh4)b5Xu2ze_4JoL5 z9!xXiU(AAT&g^Z{N$f1AOQol!y}#)>({jE!5ieBJ*N_66q&r`9+hRZ$7K1)scqP)3 zt9aeTIOv4RSH~M72=(K-Qd(LViZ=g5hyFJaIB8KO(25IUCm2MM0|6n3c;EL^hW;mP z4%*8oP5U>ldqARIxGZD_?dc>R$f0%RGHgdqZ2HBz3{9{-@In9l2M5Ej;n=e{r8AE7 zBAf8h2*1}h-mj*h3HqTlgCE8BQSZA-R0-A{uB&(d-9LIbY6D6P*iz7313xQ23Wot5 zY;M9U2%yK^+Z#qU7k{1@SBl=Of-WFWyoUsqZ*1?VCp|81095@D;>%E;=EA!X@~9c! z_F2I$s4OV~*B)d$miulvfqqlaCR^h~U-Exd_oeYvw$ayjM5jVTl%X<2i87N^I!Q7| zAsM2QnMBDD)hS6zBr{1wW>GoD)MLnyA#Q#C^`W z@9Vnu+H0@9Hb{BoLLhZ4&No6Khi-Hpl@)JlNnWL#)7hFdSbT+L}h=;8Xk)q)BWv>kawFZjaSM^*SURd^b`A1nOQkkzwqdo^$tJ(p#v9IX# z24OopKd-E;OtNWQ!?ourRuV7vbMXfK-O<`EbxURi_N~Y-v1p4=zPbv%Ur}Kplv$`$ z0U?leaiM!;6VvH+t4w+RzNr~?;nTS$kS3VtoO~5wdAalBr2{uu=5T1jn`LDN>w11kUZJPMK#cHQPL6-u9b&c#h-Uvue7F5 zia~KkY~CbCeI^X12*;Mz?9z*ieO5=z92m>{%sZI4Inoqv-Fj#&u{>x0o3#?TZ#JTg zML7}}ytr%JA2v?{tb_J|_*=Ejwr5<&Uvehhc+@24a# zy;AKcO?|t`;pu7*mQ45EyPmsSuv3RJ{jcQs&h=5dIZr4HQv@fUm#cRCf-jauv2DDA z)e1o>rScV`uQ~=@VW%1>?S}IH+RV4^k3en5|affV0TMhnvmKduX)fP@}*n zBWDJQq@SPP*|T4vi}=}JH8a-DL%>>2%-7dfKtO;kpnqV1iNI4tn!`2$KqDb(H7 zb?cwc$afgZAr`BztAkP3}%4M4;WNXY_eI8W0hJRt|8aq|uaVHY9%I@wMb^{}$$^kd@pLKXIE-u3V zNt1FUy)`~Qo)!Yj4!m-62|B$Yzo4-ryw1*gQmer;z?wmWavWB45YSNsk%%B)riI+R zc@r(Fjhs~=Nn>KRa|c2G3VDR!7v$FH=i5w!pG;kh;$8MoxU!tCW~Wxe)~h|^_yIk$ zV$XBBx(!;Z;c3Xt!GXMrMRWi}G5f0Pv=9(4@O8SOtF5cM7j3R+D}(NfPuT_m4#?EY zZX+a8e4X3p&-;AZsUJ7jt+nroK&S>y6$!|fL;8$`jM>MWo9OrBWbcU3|Q)MGD ziJ!~K3E6i2sJM={ww$aiqd)q$VVN@wFg(?EBPr>W@S33aP&XiRuUoLQv6=o-!zs$g zGXMI~pSz9X`3GP4zg{=N9H^zqTV}RfB&;TK=}}pFF5en?P0=vBf-cjf6^+}U&QuE1 zSa{`9^YiZ?9!4P2+V_-+Au%m&7-wc!XeeU;WgPE&6W;a404vzqYP>*qaR_>VA)bbn zpXe58X$}II7|8Abm0DL{zi)m>m|&+Y*Jcz>c=xWpULH~}`vSS^RoE~CSn;jO%*5yZ z{;FWUixBq#(5>VYRob-+rTQlQ`Y%_U^`hnMAmxE~-DkH#Y>Sy6KOP>*$y!+ONikz) zW`=TZM+D#c^~Dy!th{pYk@J;3+u*n$m1)!sXySEo+vrTz?B^ZKj%RK}TQH&Q zUfzDL_>Q`>%6lb*j8=O@nU3ZScHzAApPD9RQ!rQgHIiLcI+ z@F=)*hplIDVh&EAaTWbPhsur=#AaQ1B7|}4|MC@)>^IZ6_p?ej5vlA%mso!2N z?bwlXW0i@yxsLayk;@uEvwc@(lq|ReY4#4GVx&g4&u^*3nT~S-u5N_?yRRsX;|3l# zH3eFs?MeFZ9&RAv%}P7(X<&)luIfR4xZC5K+6%Bu_=4&cQbI3i@b>L1gGyrs6BC60 z98_#IRAf*~jR#^_P4;sa0VANfJR~Fp(0@MHT~!A%JiGpAhNzL4c5r$=;p1f3Ep6JJSe^wU-&P??!O5iJiAa;7@>Um^8VxcMWop9HE`_A zJBaT0H*Z9Qg|7)v@UVAs2Ms?zDn5qeR9Ba+MQIy%5Wbrb8><50PFPTPy2MA#NwgoLNP5ba&%M%+I+; zZr#1cI=7>c?WJOwmN6L>2gFl_0!Owo-q zJ#s`atOoi#oD0NBlo2MIQIZ}np14y|QUa5Wu|N@;iud&GL3RTEp<|FOVf}!g^7Qt0 zfgUbrkO9^8U%%W6Oj!w)jV@6BOdbH8QG%OqliG1(t0j$*DC;))_<0__l}GskKN9K13d|EL;!CXut^>8kdc**vPvaFVq&_Xi|yj^#PI>dOdx(j z_l;V6vOyXP3k$g<0@WbznEaM~7VjP6ao^#SQMiHN1ln}6U+&Vm$KyEqC#?MPu*26x zr`NA!medX?ZuHv5FEOE4{5JT|idyKrSteAN2z^IDAfsvHA z*4qQF{75KQo$Zoh|HJ7b#r}CTK_M$e?ndexm9Q)8LENNTtfzD<#VTE4rv|@P?Wp|p zW+jc?o}anmx%T#*M&V-T+*vO@_%0d8Lu2>SvfAue%eAv&*-eY~86{<}|9sbemE8)# z=Rra={cBR}&&}16B#M`I3!Hd_r885r@kVP6L3o$ zKYv{59D^Xuf(fsBI9d+QkbpO*|YMI3vRgI?YvzGt9)oy%%Yxj2w5vuR(t+mcB7o?dk z!>@*{H8wgxNi@a_WeSR))A<+I-L@Mp1|r)Ic$j&FyO+qkC?n9ep&Hy^sHb;mnoz?$uKNkUl2~S9eq8ofN_M z(I+=M3ctLX^{{*Y$+DNpvcSxlx1F`l5+xhv+cuSZzni3Aa2mc%e)em6G>RatOP=Nb z)Bj1{W&Z_j%!3AS9R-GT$+#=iJ7ACp&mN(Bv%h~Yy}tYTr>BdE));$4P#MK?Q?F+> z$|avmX1aPm1_vyyG5r_Nf90Foio;y-*RHV;)y+T*l5s(8t6YlPZz%Te`^oI0^1t`T zk=IESN2pt2Y+S|Hi4`pC8x7|6Qv}sMaazd=(u(EqSoJ3yu82{ggW}?PoSq&N5&~C{ zGPJ);TNIjohlTLyC>$$D*I>DvLA# zo@Wy|aJ}OdUMYy~saUVIBl3TWrZXWnH&>Ct{HedgbP}$a2NDG$0hC6_i?t#j$Wo2Qp$gafFu^3mQu~T=p z%3M2xTogulxw(NsLFonQbh_!GLjlecb3TD;6}otJbgDSR%N6esNfdB5@#E*u!i(b@ ziN@#1bm^ySLScVPy=jmJ;-?VSasbNt`4T&JF#98Q3shqu{wn%U!tNLb*K_a^3)ehz zz!;u(*!by-g5JbYe zi=cDe-174C`DIR1ywwYF8UQ1HD3m3T_7y$;`jj99n8_Idu*-?2&VbWKzg?3P_Th;W z-B`#-YkTP)weQ}IgB^tK8HQN25P(}S&R9iX;W5c@rM#gb3rp5)ha$38DXEal5(4@y z;Nq1<4sB+yKAi^};^}n&@#hZ`uI}yt*vMu8+ngRVlhEZp6A`Q~98nt_9BlbafrCns zPZnKC!^6TC>zH}I?Y(Q)UIVVfuo0LXr$NV+9KWSM*13_+TFK35Umf`JMJhPVI`<{M zi_L@1hT6J1w82R!D#DYI@CVS*)6;`vY@)vH-|iT5L&H;!jw;y1gc24YcKNc0FJDI9 zF(kd!x$ zs@0`Sg{GOz#KyadPF-^If+Xn)G%kBo0>@~3xnTX?%o9mXaJ2u|Miz}DO;+3R+x&92 zAyH8qh~@vmwP@VuARtr&NqAZ&Dk(|Ww@q713!f-C$};ct%81%}hil~r=*&Irw9bi_YC;DJszw8Now zeBkrv3YONIy1M*l&rYoZPxAi?Z2=&972r+Y)F;Fpg!8c*+JSks6I$oa;W69=L6w=2 zVXLX51L{B<4g%)p=25Saoz}j63+HJ>pU5{zqWJjuQtFM+V)Ets6_V2jy)i$S}7B20*f+rPQV;WXH@8oFHU z5-cgwvAU-OmU^`f4Y;dHi)Ypl;o;#pFt9r72#-u7@2?F4Fc=#gtXy!`)zYf1uZQ>g zIMyS1cqHm~pj|fEASxzi>XHzT8tQ_Kfx|{lQ(~gNX5Lf-e#tCIX?21P=iL0s31XSK<7D znH$m|>>zU2TCR*~28$>wBLn88@KhDsd~w6`bN%WY@6I&r9{0fj4EGHkaN|VY4wFwP z^>^*vyODs@01^DdhYxS8f8yyL(wm%^kd>1I{e-sqO=ISzoB^s$Gj3 z3IgVMdv-!v+O{$MlW3&HBabU8D$)>v0GVCK41debJqO%_rbWa;VzZRg|IVLKL1Z0k zK$_l_WAz$ZM~o*xYoey!iich7O^z;o(cDkb$Ou-}M`}a34(3 z&Kl`pjQJ?A*?iS5{AWq zJ~(H2u_k2m5|0_Cx5CaC-fcPg`3tadb{IS3w+wc`C!%N3_0l%aKzbv>I=Q7~0+y~Q z?-6jUb;S}uHLLlKf<1Cg_&=h14EGE{aA{m~>GUH-d;5|0Z1_ef_guJm5z2?r5`Yeg zty?$KQd{j&%Ar={jg%pp(J$h&Va0;w8ZVjIs8i@O_Y12mss%fBc$gM~?s@!X;}}k* zJ$`?RS8BCN+}GSi#ti$|oOfA$M3ARZ^^LxF?!$j{`!i+8iz{OMKpJj?`LFuCHMs#O4-7%)q-$EKA3F4K?U7~R%mTXXTF^wYTSDqu@S9vX91YVsTAAL zGmW6`^zD)SHAMEK$BuDO;mC;x-%$jx@$8vw55V_Nr1k$oQGf{@eictw=*GZ+!be4j z=Gc|LO-Kle);B%++Kj~mz1}m!j;XXK zPmGTqeXPGVy7aWpqeQpX9tTH9bo|zr$`1d;X(n{kyG+|lm4S@gOr?s+Dh@Tc2GP8xIFtpYFkNN2Z` zYX1!5?@C!|=|TYA9zLM6d@#vv;ZaeYXbaWwUG()BH<`9zp}7>Gnm(<(8^OG82W$*l z?V}nb@sV*0;7&N`8I4+hMe$r%%6sobx|qVjbJ3hd-@ZK{$>KC_(_Bz4+UcSJubbN2 z(FvY?LUNQd>MjZpm<<7A5^RkplCqg>MUMrP-5&<&zAt)lZ+Gxv{IIcjI6Rx%s@lA* z4S6!t0@Z{D#dwJIyu4VuGJb8pnKFKtWF3>l6P)TT=VudBQ87DoNNn@wkAQDFmM=w( z(<8Ip`dgpsU0@yg_U*5)>{~j|)0vps@)?fjIZ#oEiix%BC`wBwI^2`}&yP+Oz+q-`*S+Q4ZJi)81aA%2r<|z;lQig^tIDA@lo?Lq) zAt@PU!<}p5Xl3<^zY*P4SdN(DG%tHd=pG3eOiXej7{~&t@BVc29lgd2$ zkDHjd7Mcy#Bz{+Xk&*%-10W%m7ZAsd9iU#W!!R_;t}x5tOZC0FGF}{9?q=Q=7V&@! z5w!yH_UNsKTP5;dfcMJE8!3(bAP_;lqnY;(|1PQ_G97@4BjeZY<2o9xTw);UmCLUM z*&BFI`xPQLx`5G$tscw^bC}`F#@Ci+qasyw2|_W04GRVv`=!bx;~jn?p|z6@Gb?V{_qxc z#uOo(4z{Z@Q68YXk98eOHozzzG-1Qy!AAFB=4xrivXNfTjzhCXCt&%B`AIMx$8SIy zOXZOeKx*bYItzDvo%jei;LM9WFf=FK&*QPX}53Q zoc$7}M|}JzhzCbKQnaOk2+JXrD;VqYrn2(w={#Unyq%mUqxl9{v55U}uD@ZL39RxN zSc#c{gab#uAW83oHHW8cobKHdr9Qg|jLeyW1cTWhArl_7oCF5opxW;z9{v_(O$_;g zu`Sd97hxYQEDS>i(#HzU6qp>gnH^8gGAQ~4J8w-jWp0fW~ zpQBPMKztJ?K^~FQXefdRxTM+ivX2m$mU>M+)l7zWr~q6o0KNp?#v~+I9zPxx8cH=* z^)W;Z6w@anH~sOeMRpshe$^C0@CwJ6m>9C0+ukgS6CCCMN zg9m{QV-%bi{PDsM?%#)HIIREUl+HaWcoD=IFHRW~BrN*_Q6{7RQE}E)tGuuc z&>k@KUIv5;7ISPYf369#$)T~a#id_AU)-QS8ib$8<^D?6dFDg67MZIsmk0%FFcP9< zvI4ss#QVi>Z$Jk$HtG)wRJ#=xFZjK&me#pna~eW@gz!<$6GhnQuqHv}Nc4Kzo=l_P zz(M%&d220kY%t_>C{!Kh2>J(Mz*t+GrKJdSLeSxYIt5Icqh4RVc5NBtLX6s)`}beL zi517G4mcAJJfOq#a|F0z&!YWe zuqW9=+C_}y9KUUh1<2mGG5*1W%EvinPf$2QY_4*VnR!c1Q)yP8;gGPF`gw@#B?-Hg#=p!m3QhY(Qshc@Q zox@(-UHXKL{^5!A)YOM}pZZ1IyT>7r)k^8|oO*7R?P`P@B<|FNv3QCyGWNC|y1+?2 z$z{+eox>yY3)P!6di6?%A|DQ18yOQ*_WOI$C_K2bzYdaLy6~9*Q7VcP2n215l_=Ph zd|^)FX?i-EV4ZAiVA%lyE)H+IJ{T`l0(g&(jUl~;-q(C&?NJSlYG^Vs&k1Yd`bLOP7JeQg;MD=cD{#)3 zPloUd4;wfFbb`f3!v=!PKi1@^8i7*<m5g~&&N6LosKGX$ZOu?p1 z$l6TP0((Sda3)Z}pSQ6YL`n|M5@ou*n0`j4wU~JljJjcb{KkOSbF=+-v4WKB->1^& z#7HfO8Qr}G;4i&3Z$b+C91J~BR_#xIvCN*ybp9S!;`4__Ew)FFG=U=J=jV?M&;Pq# zaF8H-7NVhWj6n&AMsx>s=c1Y_MzbyGA~~m#FYsD9iX;T|*KenkbhGhGTJ8kUCG^+v;j585ufyB?K`G@Av#X3ZmxV6uE98odRXi@(hK; zu=sf07tl16V#*qQ4-By?W7NT9>g%%yyxxW6ckBr`{!q9bw)A_zM+;A+xikSsUGqP= zr)9`z1lzj{$a--9et8yq@ku_>iNWm1p=kgGf(*7@7FDFM|%a10rD`f)uK!1#JR|i?GqKdpw)E?p4YWT5lxgJ3+7H=eLCT zia`Mr$UF;rznpY*)b5*bbZ|&Vxuebm&F_f^I5Dda$FypdJ%g&f{Wly&D+LKDSV_+_ z1i;5IR`(=n%BE(I zciHzCJC>;%8%IRl^hGZ_{g)fo8>;Y7PwQ9$0T_b7*9Yi|95Do7l46uT=X1G)GY9B@H)wF&WN%MTsG-OLeD-C@ zTZ=LcSm>80>J^C}n82z0E?^s^2gktO$KC8q*5c`U{nnx+!zc@M4GtDC(IhjTxl|;V3JMQW;72wM0VfuA{?Wt2iYlz z@?q&Z^?uCE7;b6C$HqJe&D~6>WjVOGEP){gfX5-&=KcBc;V_b`o%lE~Fa_-s5aJzQ zRn!R7lcZ&2yuuw(-$?{Fn0B-|uo>Jh=?2(ywb(ti0k74IhCuLEWYf;3z2p!FjLC8Q z;%Vvw+S}Q=p|lZ$V@|{O%OEXs*Cj9xWKqXF?hD>E2BH!E$o!DTh4<)~AgR(1QO{(< zvwmLzyalZUj2#{5@vEQ3Ll#p9oP~Y)y}$oFh#Bx8^vhS%)3^I(3M3^S;+#$*&AWzf zfXxTDE1;W}oxKk?6&q`dhzJY6Qcmw0SYHG{Aco}y)B=iNIGS;Ejoh8E2^1B6-N z8e|od0}-QFk!nu6wFYpSHfw%-Ste}=!#0&<~iuT+4VJs;e z@ocQD^|iGzQdU$mvse=e%((Ib^vCOCw{`>8A|HoRt*LV!I2F;&ti;Qsq{n;mi~#^J zid%TN$iyBFBcReRYB2%<$ zJ6U7ZccXdP<@D)Ez?>V(Y$#x;s+Plizz{7d&CS?)(}2v)@w!B$oLw`7lfyz+@#;{G z!fBVx7cS3!3V<{f;+rd~`s1OKge!za=uZUC3Phu(rUpjsu+Tloe6|2;!*ZssE(20C zIPzs0S(f?~K7INY_Jj~D0_=m^AjMZ`{6>jq)hbietEh<>GK#sNNeLf7Er5&X<&BPw z&CuTp5VM@&6+UxEnaGfP1W;kwH_5BL&in>_yIDA>_1cO0jZI5vab|yHlzvGi9u+ky zsfQ!Q?&H02zQsoAcuM1#zE$Ed_6)=i2oBSCJ~+an-c=R9erzGP1}7Rx4uvI{W~N-S zQKaVW!3;XgFu^xdQf{ax(PbIV$Q*}*R6)U1Uv$`^^T$k0pCY&wd(kbBD1+-^E3v{j zyKUi`psR_kJ9b#m-R;0x{wAo^Shgr&RmLa2qp-1|HrI>!KIv!Im(*i#(V|yzQutQp zyIjL(+G&zgUQ-hox1OE-2e4JU_W~Z1Uc5@DC!wB6ndZPxFE1?9X+`LHt4x1>9V|W2f}fVJHcOL(z?WPVCTIIFM4D|J(nTR;(HS U=w?KR>KI>#59+FAQBPj|A5Fnj!2kdN literal 0 HcmV?d00001 diff --git a/docs/src/examples/groundstates/bose-hubbard/figure-6.png b/docs/src/examples/groundstates/bose-hubbard/figure-6.png new file mode 100644 index 0000000000000000000000000000000000000000..a770a1995a90e10982bd41499c7eea691237f08a GIT binary patch literal 15424 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 a_op' ⊗ a_op) for i in 1:npoints) @@ -287,13 +285,13 @@ quasicondensate_density = map(state -> abs2(expectation_value(state, (0,) => a_o ```` 7-element Vector{Float64}: - 0.30974278056400306 - 0.28814773292057094 - 0.27020018663546547 - 0.25712728281504493 - 0.24685386187635147 - 0.23539733364228202 - 0.2279965627270329 + 0.30974277430265373 + 0.28814775946586596 + 0.27020005963868154 + 0.25712729075508733 + 0.24685385782407282 + 0.23539787855732608 + 0.22799752254820496 ```` We may now also visualize the momentum distribution function, which is obtained as the @@ -377,25 +375,32 @@ $$\frac{E[\Phi] - E[0]}{L} \approx \frac{1}{2} \Upsilon(L) \bigg (\frac{\Phi}{L} In order to find the ground state under these twisted boundary conditions, we must construct our own variant of the Bose-Hubbard Hamiltonian. Typically you would want to take a peek at the -[model helper source](https://github.com/QuantumKitHub/MPSKit.jl/blob/main/docs/src/assets/models.jl) to see how these models are defined and tweak it as per your needs. +[source code](https://github.com/QuantumKitHub/MPSKitModels.jl/blob/f4c36d9660a9eab05fa253ffd5c20dc6b7df44cc/src/models/hamiltonians.jl#L379-L409) +of `MPSKitModels.jl` to see how these models are defined and tweak it as per your needs. Here we see that applying twisted boundary conditions is equivalent to adding a prefactor of $e^{\pm i\phi}$ in front of the hopping amplitudes. ````julia function bose_hubbard_model_twisted_bc( - elt::Type{<:Number} = ComplexF64, symmetry::Type{<:Sector} = Trivial; + elt::Type{<:Number} = ComplexF64, symmetry::Type{<:Sector} = Trivial, + lattice::AbstractLattice = InfiniteChain(1); cutoff::Integer = 5, t = 1.0, U = 1.0, mu = 0.0, phi = 0 ) - a_pm = b_plus_b_min(elt, symmetry; cutoff = cutoff) - a_mp = b_min_b_plus(elt, symmetry; cutoff = cutoff) - N = b_num(elt, symmetry; cutoff = cutoff) + a_pm = a_plusmin(elt, symmetry; cutoff = cutoff) + a_mp = a_minplus(elt, symmetry; cutoff = cutoff) + N = a_number(elt, symmetry; cutoff = cutoff) interaction_term = N * (N - id(domain(N))) - hopping = -t * (exp(1im * phi) * a_pm + exp(-1im * phi) * a_mp) - onsite = U / 2 * interaction_term - mu * N - return chain_hamiltonian(hopping, onsite) + return H = @mpoham begin + sum(nearest_neighbours(lattice)) do (i, j) + return -t * (exp(1im * phi) * a_pm{i, j} + exp(1im * -phi) * a_mp{i, j}) + end + + sum(vertices(lattice)) do i + return U / 2 * interaction_term{i} - mu * N{i} + end + end end function superfluid_stiffness_profile(t, mu, D, cutoff, ϵ = 1.0e-4, npoints = 11) @@ -437,11 +442,11 @@ cutoff, D = 4, 10 mus = range(0, 0.75, 40) ts = range(0, 0.3, 40) -a_op = b_min(cutoff = cutoff) +a_op = a_min(cutoff = cutoff) order_parameters = zeros(length(ts), length(mus)) Threads.@threads for (i, j) in collect(Iterators.product(eachindex(mus), eachindex(ts))) - hamiltonian = bose_hubbard_model(; cutoff = cutoff, U = 1, mu = mus[i], t = ts[j]) + hamiltonian = bose_hubbard_model(InfiniteChain(); cutoff = cutoff, U = 1, mu = mus[i], t = ts[j]) init_state = InfiniteMPS(ℂ^(cutoff + 1), ℂ^D) state, _, _ = find_groundstate(init_state, hamiltonian, VUMPS(; tol = 1.0e-8, verbosity = 0)) order_parameters[i, j] = abs(expectation_value(state, 0 => a_op)) diff --git a/docs/src/examples/quantum1d/8.bose-hubbard/main.ipynb b/docs/src/examples/groundstates/bose-hubbard/main.ipynb similarity index 100% rename from docs/src/examples/quantum1d/8.bose-hubbard/main.ipynb rename to docs/src/examples/groundstates/bose-hubbard/main.ipynb diff --git a/docs/src/examples/groundstates/haldane-spt/figure-1.png b/docs/src/examples/groundstates/haldane-spt/figure-1.png new file mode 100644 index 0000000000000000000000000000000000000000..31124b5a5ddb9cf04911c80c753d4fb676e55a9c GIT binary patch literal 34236 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 Ou6$lYK11%3_x}P>LODAC literal 0 HcmV?d00001 diff --git a/docs/src/examples/groundstates/haldane-spt/figure-2.png b/docs/src/examples/groundstates/haldane-spt/figure-2.png new file mode 100644 index 0000000000000000000000000000000000000000..f9d22360f133fc8811c5f63b8b04d9e047fbd663 GIT binary patch literal 32088 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

    >VQ!vZRplr!=+>tq{O&grFJkD$aFRYT2}vIX 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 JN!;Mw{{l5GIj8^t literal 0 HcmV?d00001 diff --git a/docs/src/examples/groundstates/haldane-spt/figure-3.png b/docs/src/examples/groundstates/haldane-spt/figure-3.png new file mode 100644 index 0000000000000000000000000000000000000000..42c179c9fff8da1c4c5bb084364de02f84b0a6ec GIT binary patch literal 37375 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 literal 0 HcmV?d00001 diff --git a/docs/src/examples/quantum1d/5.haldane-spt/index.md b/docs/src/examples/groundstates/haldane-spt/index.md similarity index 92% rename from docs/src/examples/quantum1d/5.haldane-spt/index.md rename to docs/src/examples/groundstates/haldane-spt/index.md index 1dfc56414..51c9d03f7 100644 --- a/docs/src/examples/quantum1d/5.haldane-spt/index.md +++ b/docs/src/examples/groundstates/haldane-spt/index.md @@ -1,10 +1,10 @@ ```@meta -EditURL = "../../../../../examples/quantum1d/5.haldane-spt/main.jl" +EditURL = "../../../../../examples/groundstates/haldane-spt/main.jl" ``` -[![](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/QuantumKitHub/MPSKit.jl/gh-pages?filepath=dev/examples/quantum1d/5.haldane-spt/main.ipynb) -[![](https://img.shields.io/badge/show-nbviewer-579ACA.svg)](https://nbviewer.jupyter.org/github/QuantumKitHub/MPSKit.jl/blob/gh-pages/dev/examples/quantum1d/5.haldane-spt/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/quantum1d/5.haldane-spt) +[![](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/QuantumKitHub/MPSKit.jl/gh-pages?filepath=dev/examples/groundstates/haldane-spt/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/haldane-spt/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/haldane-spt) # Spin 1 Heisenberg model @@ -97,7 +97,7 @@ non-injective MPS. ℋ = SU2Space(1 => 1) V_wrong = SU2Space(0 => 8, 1 // 2 => 8, 1 => 3, 3 // 2 => 3) ψ = InfiniteMPS(ℋ, V_wrong) -ψ, environments, info = find_groundstate(ψ, H, VUMPS(; maxiter = 10)) +ψ, environments, δ = find_groundstate(ψ, H, VUMPS(; maxiter = 10)) sectors = SU2Irrep[0, 1 // 2, 1, 3 // 2] transferplot(ψ; sectors, title = "Transfer matrix spectrum", legend = :outertop) ```` @@ -128,7 +128,7 @@ E_plus = expectation_value(ψ_plus, H) ```` ```` --1.4014193313393015 - 5.56966055557632e-18im +-1.4014193313393004 - 2.2233521403023605e-17im ```` ````julia @@ -139,7 +139,7 @@ E_minus = expectation_value(ψ_minus, H) ```` ```` --1.4014839739630829 - 1.0846362574075293e-16im +-1.4014839739630827 + 6.744598315147384e-17im ```` ````julia @@ -188,8 +188,8 @@ println("S_plus = $S_plus") ```` ```` -S_minus + log(2) = 1.5486227235391343 -S_plus = 1.5450323530587475 +S_minus + log(2) = 1.5486227235423025 +S_plus = 1.545032353055433 ```` diff --git a/docs/src/examples/quantum1d/5.haldane-spt/main.ipynb b/docs/src/examples/groundstates/haldane-spt/main.ipynb similarity index 100% rename from docs/src/examples/quantum1d/5.haldane-spt/main.ipynb rename to docs/src/examples/groundstates/haldane-spt/main.ipynb diff --git a/docs/src/examples/quantum1d/5.haldane-spt/spt-tensors.svg b/docs/src/examples/groundstates/haldane-spt/spt-tensors.svg similarity index 100% rename from docs/src/examples/quantum1d/5.haldane-spt/spt-tensors.svg rename to docs/src/examples/groundstates/haldane-spt/spt-tensors.svg diff --git a/docs/src/examples/groundstates/hubbard/figure-1.png b/docs/src/examples/groundstates/hubbard/figure-1.png new file mode 100644 index 0000000000000000000000000000000000000000..73f21dcec67104f4325a647b53f56b5e2eb3b5c7 GIT binary patch literal 41850 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

    7|gBto%=)8fR9+O90>Lb_hP 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 DwqQ*J literal 0 HcmV?d00001 diff --git a/docs/src/examples/quantum1d/6.hubbard/figure-3.png b/docs/src/examples/groundstates/hubbard/figure-3.png similarity index 100% rename from docs/src/examples/quantum1d/6.hubbard/figure-3.png rename to docs/src/examples/groundstates/hubbard/figure-3.png diff --git a/docs/src/examples/groundstates/hubbard/index.md b/docs/src/examples/groundstates/hubbard/index.md new file mode 100644 index 000000000..0082d0899 --- /dev/null +++ b/docs/src/examples/groundstates/hubbard/index.md @@ -0,0 +1,361 @@ +```@meta +EditURL = "../../../../../examples/groundstates/hubbard/main.jl" +``` + +[![](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/QuantumKitHub/MPSKit.jl/gh-pages?filepath=dev/examples/groundstates/hubbard/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/hubbard/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/hubbard) + +````julia +using Markdown +```` + +# Hubbard chain at half filling + +The Hubbard model is a model of interacting fermions on a lattice, which is often used as a somewhat realistic model for electrons in a solid. +The Hamiltonian consists of two terms that describe competing forces of each electron: +a kinetic term that allows electrons to hop between neighboring sites, and a potential term reflecting on-site interactions between electrons. +Often, a third term is included which serves as a chemical potential to control the number of electrons in the system. + +```math +H = -t ∑_{⟨i, j⟩, σ} c^{†}_{i,σ} c_{j,σ} + U ∑_i n_{i,↑} n_{i,↓} - μ ∑_{i,σ} n_{i,σ} +``` + +At half-filling, the system exhibits particle-hole symmetry, which can be made explicit by rewriting the Hamiltonian slightly. +First, we fix the overall energy scale by setting `t = 1`, and then shift the total energy by adding a constant `U / 4`, as well as shifting the chemical potential to `N U / 2`. +This results in the following Hamiltonian: + +```math +H = - ∑_{⟨i, j⟩, σ} c^{†}_{i,σ} c_{j,σ} + U / 4 ∑_i (1 - 2 n_{i,↑}) (1 - 2 n_{i,↓}) - μ ∑_{i,σ} n_{i,σ} +``` + +Finally, setting `\mu = 0` and defining `u = U / 4` we obtain the Hubbard model at half-filling. + +```math +H = - ∑_{⟨i, j⟩, σ} c^{†}_{i,σ} c_{j,σ} + u ∑_i (1 - 2 n_{i,↑}) (1 - 2 n_{i,↓}) +``` + +````julia +using TensorKit +using MPSKit +using MPSKitModels +using SpecialFunctions: besselj0, besselj1 +using QuadGK: quadgk +using Plots +using Interpolations +using Optim +```` + +```` +Precompiling packages... + 3407.9 ms ✓ Interpolations + 1 dependency successfully precompiled in 4 seconds. 29 already precompiled. +Precompiling packages... + 1357.0 ms ✓ TensorOperations → TensorOperationsChainRulesCoreExt + 1 dependency successfully precompiled in 2 seconds. 20 already precompiled. +Precompiling packages... + 3507.7 ms ✓ TensorKit → TensorKitChainRulesCoreExt + 1 dependency successfully precompiled in 5 seconds. 55 already precompiled. +Precompiling packages... + 949.2 ms ✓ KrylovKit → KrylovKitChainRulesCoreExt + 1 dependency successfully precompiled in 1 seconds. 12 already precompiled. +Precompiling packages... + 1923.6 ms ✓ SpecialFunctions → SpecialFunctionsChainRulesCoreExt + 1 dependency successfully precompiled in 2 seconds. 18 already precompiled. +Precompiling packages... + 691.7 ms ✓ DifferentiationInterface → DifferentiationInterfaceChainRulesCoreExt + 1 dependency successfully precompiled in 1 seconds. 11 already precompiled. +Precompiling packages... + 656.3 ms ✓ ArrayInterface → ArrayInterfaceChainRulesCoreExt + 1 dependency successfully precompiled in 1 seconds. 10 already precompiled. + +```` + +For reproducibility of this page, we fix the seed of the random number generator: + +````julia +using Random +Random.seed!(123); + +const t = 1.0 +const mu = 0.0 +const U = 3.0 +```` + +```` +3.0 +```` + +For this case, the ground state energy has an analytic solution, which can be used to benchmark the numerical results. +It follows from Eq. (6.82) in [Essler, Frahm, Göhmann, Klümper & Korepin, The One-Dimensional Hubbard Model](https://doi.org/10.1017/CBO9780511534843). + +```math +e(u) = - u - 4 ∫₀^{∞} \frac{dω}{ω} \frac{J₀(ω) J₁(ω)}{1 + \exp(2u ω)} +``` + +We can easily verify this by comparing the numerical results to the analytic solution. + +````julia +function hubbard_energy(u; rtol = 1.0e-12) + integrandum(ω) = besselj0(ω) * besselj1(ω) / (1 + exp(2u * ω)) / ω + int, err = quadgk(integrandum, 0, Inf; rtol) + return -u - 4 * int +end + +function compute_groundstate( + psi, H; + svalue = 1.0e-3, + expansionfactor = (1 / 10), + expansioniter = 20 + ) + verbosity = 0 + psi, = find_groundstate(psi, H; tol = svalue * 10, verbosity) + for _ in 1:expansioniter + D = maximum(x -> dim(left_virtualspace(psi, x)), 1:length(psi)) + D′ = max(5, round(Int, D * expansionfactor)) + trunc = trunctol(; atol = svalue / 10) & truncrank(D′) + psi′, = changebonds(psi, H, OptimalExpand(; trunc = trunc)) + all( + left_virtualspace.(Ref(psi), 1:length(psi)) .== + left_virtualspace.(Ref(psi′), 1:length(psi)) + ) && break + psi, = find_groundstate(psi′, H, VUMPS(; tol = svalue / 5, maxiter = 10, verbosity)) + end + + # convergence steps + psi, = changebonds(psi, H, SvdCut(; trunc = trunctol(; atol = svalue))) + psi, = find_groundstate( + psi, H, + VUMPS(; tol = svalue / 100, verbosity, maxiter = 100) & + GradientGrassmann(; tol = svalue / 1000, verbosity) + ) + + return psi +end + +H = hubbard_model(InfiniteChain(2); U, t, mu = U / 2) +Vspaces = fill(Vect[fℤ₂](0 => 10, 1 => 10), 2) +psi = InfiniteMPS(physicalspace(H), Vspaces) +psi = compute_groundstate(psi, H) +E = real(expectation_value(psi, H)) / 2 +@info """ +Groundstate energy: + * numerical: $E + * analytic: $(hubbard_energy(U / 4) - U / 4) +""" +```` + +```` +┌ Info: Groundstate energy: +│ * numerical: -2.189996060974577 +└ * analytic: -2.190038374277775 + +```` + +## Symmetries + +The Hubbard model has a rich symmetry structure, which can be exploited to speed up simulations. +Apart from the fermionic parity, the model also has a ``U(1)`` particle number symmetry, along with a ``SU(2)`` spin symmetry. +Explicitly imposing these symmetries on the tensors can greatly reduce the computational cost of the simulation. + +Naively imposing these symmetries however, is not compatible with our desire to work at half-filling. +By construction, imposing symmetries restricts the optimization procedure to a single symmetry sector, which is the trivial sector. +In order to work at half-filling, we need to effectively inject one particle per site. +In MPSKit, this is achieved by the `add_physical_charge` function, which shifts the physical spaces of the tensors to the desired charge sector. + +````julia +H_u1_su2 = hubbard_model(ComplexF64, U1Irrep, SU2Irrep, InfiniteChain(2); U, t, mu = U / 2); +charges = fill(FermionParity(1) ⊠ U1Irrep(1) ⊠ SU2Irrep(0), 2); +H_u1_su2 = MPSKit.add_physical_charge(H_u1_su2, charges); + +pspaces = physicalspace.(Ref(H_u1_su2), 1:2) +vspaces = [oneunit(eltype(pspaces)), first(pspaces)] +psi = InfiniteMPS(pspaces, vspaces) +psi = compute_groundstate(psi, H_u1_su2; expansionfactor = 1 / 3) +E = real(expectation_value(psi, H_u1_su2)) / 2 +@info """ +Groundstate energy: + * numerical: $E + * analytic: $(hubbard_energy(U / 4) - U / 4) +""" +```` + +```` +┌ Info: Groundstate energy: +│ * numerical: -2.190015347514472 +└ * analytic: -2.190038374277775 + +```` + +## Excitations + +Because of the integrability, it is known that the Hubbard model has a rich excitation spectrum. +The elementary excitations are known as spinons and holons, which are domain walls in the spin and charge sectors, respectively. +The fact that the spin and charge sectors are separate is a phenomenon known as spin-charge separation. + +The domain walls can be constructed by noticing that there are two equivalent groundstates, which differ by a translation over a single site. +In other words, the groundstates are ``\psi_{AB}`` and ``\psi_{BA}``, where ``A`` and ``B`` are the two sites. +These excitations can be constructed as follows: + +````julia +alg = QuasiparticleAnsatz(; tol = 1.0e-3) +momenta = range(-π, π; length = 33) +psi_AB = psi +envs_AB = environments(psi_AB, H_u1_su2, psi_AB); +psi_BA = circshift(psi, 1) +envs_BA = environments(psi_BA, H_u1_su2, psi_BA); + +spinon_charge = FermionParity(0) ⊠ U1Irrep(0) ⊠ SU2Irrep(1 // 2) +E_spinon, ϕ_spinon = excitations( + H_u1_su2, alg, momenta, psi_AB, envs_AB, psi_BA, envs_BA; + sector = spinon_charge, num = 1, verbosity = 0 +); + +holon_charge = FermionParity(1) ⊠ U1Irrep(-1) ⊠ SU2Irrep(0) +E_holon, ϕ_holon = excitations( + H_u1_su2, alg, momenta, psi_AB, envs_AB, psi_BA, envs_BA; + sector = holon_charge, num = 1, verbosity = 0 +); +```` + +Again, we can compare the numerical results to the analytic solution. +Here, the formulae for the excitation energies are expressed in terms of dressed momenta: + +````julia +function spinon_momentum(Λ, u; rtol = 1.0e-12) + integrandum(ω) = besselj0(ω) * sin(ω * Λ) / ω / cosh(ω * u) + return π / 2 - quadgk(integrandum, 0, Inf; rtol = rtol)[1] +end +function spinon_energy(Λ, u; rtol = 1.0e-12) + integrandum(ω) = besselj1(ω) * cos(ω * Λ) / ω / cosh(ω * u) + return 2 * quadgk(integrandum, 0, Inf; rtol = rtol)[1] +end + +function holon_momentum(k, u; rtol = 1.0e-12) + integrandum(ω) = besselj0(ω) * sin(ω * sin(k)) / ω / (1 + exp(2u * abs(ω))) + return π / 2 - k - 2 * quadgk(integrandum, 0, Inf; rtol = rtol)[1] +end +function holon_energy(k, u; rtol = 1.0e-12) + integrandum(ω) = besselj1(ω) * cos(ω * sin(k)) * exp(-ω * u) / ω / cosh(ω * u) + return 2 * cos(k) + 2u + 2 * quadgk(integrandum, 0, Inf; rtol = rtol)[1] +end + +Λs = range(-10, 10; length = 51) +P_spinon_analytic = rem2pi.(spinon_momentum.(Λs, U / 4), RoundNearest) +E_spinon_analytic = spinon_energy.(Λs, U / 4) +I_spinon = sortperm(P_spinon_analytic) +P_spinon_analytic = P_spinon_analytic[I_spinon] +E_spinon_analytic = E_spinon_analytic[I_spinon] +P_spinon_analytic = [reverse(-P_spinon_analytic); P_spinon_analytic] +E_spinon_analytic = [reverse(E_spinon_analytic); E_spinon_analytic]; + +ks = range(0, 2π; length = 51) +P_holon_analytic = rem2pi.(holon_momentum.(ks, U / 4), RoundNearest) +E_holon_analytic = holon_energy.(ks, U / 4) +I_holon = sortperm(P_holon_analytic) +P_holon_analytic = P_holon_analytic[I_holon] +E_holon_analytic = E_holon_analytic[I_holon]; + +p = let p_excitations = plot(; xaxis = "momentum", yaxis = "energy") + scatter!(p_excitations, momenta, real(E_spinon); label = "spinon") + plot!(p_excitations, P_spinon_analytic, E_spinon_analytic; label = "spinon (analytic)") + + scatter!(p_excitations, momenta, real(E_holon); label = "holon") + plot!(p_excitations, P_holon_analytic, E_holon_analytic; label = "holon (analytic)") + + p_excitations +end +```` + +![](figure-1.png) + +The plot shows some discrepancies between the numerical and analytic results. +First and foremost, we must realize that in the thermodynamic limit, the momentum of a domain wall is actually not well-defined. +Concretely, only the difference in momentum between the two groundstates is well-defined, as we can always shift the momentum by multiplying one of the groundstates by a phase. +Here, we can fix this shift by realizing that our choice of shifting the groundstates by a single site, differs from the formula by a factor ``π/2``. + +````julia +momenta_shifted = rem2pi.(momenta .- π / 2, RoundNearest) +p = let p_excitations = plot(; xaxis = "momentum", yaxis = "energy", xlims = (-π, π)) + scatter!(p_excitations, momenta_shifted, real(E_spinon); label = "spinon") + plot!(p_excitations, P_spinon_analytic, E_spinon_analytic; label = "spinon (analytic)") + + scatter!(p_excitations, momenta_shifted, real(E_holon); label = "holon") + plot!(p_excitations, P_holon_analytic, E_holon_analytic; label = "holon (analytic)") + + p_excitations +end +```` + +![](figure-2.png) + +The second discrepancy is that while the spinon dispersion is well-reproduced, the holon dispersion is not. +This is due to the fact that the excitation ansatz captures the lowest-energy excitation, and not the elementary single-particle excitation. +To make this explicit, we can consider the scattering states comprising of a holon and two spinons. +If these are truly scattering states, the energy of the scattering state should be the sum of the energies of the individual excitations, and the momentum is the sum of the momenta. +Thus, we can find the lowest-energy scattering states by minimizing the energy over the combination of momenta for the constituent elementary excitations. + +````julia +holon_dispersion_itp = linear_interpolation( + P_holon_analytic, E_holon_analytic; + extrapolation_bc = Line() +) +spinon_dispersion_itp = linear_interpolation( + P_spinon_analytic, E_spinon_analytic; + extrapolation_bc = Line() +) +function scattering_energy(p1, p2, p3) + p1, p2, p3 = rem2pi.((p1, p2, p3), RoundNearest) + return holon_dispersion_itp(p1) + spinon_dispersion_itp(p2) + spinon_dispersion_itp(p3) +end; + +E_scattering_min = map(momenta_shifted) do p + e = Inf + for i in 1:10 # repeat for stability + res = optimize((rand(2) .* (2π) .- π)) do (p₁, p₂) + p₃ = p - p₁ - p₂ + return scattering_energy(p₁, p₂, p₃) + end + + e = min(Optim.minimum(res), e) + end + return e +end +E_scattering_max = map(momenta_shifted) do p + e = -Inf + for i in 1:10 # repeat for stability + res = optimize((rand(Float64, 2) .* (2π) .- π)) do (p₁, p₂) + p₃ = p - p₁ - p₂ + return -scattering_energy(p₁, p₂, p₃) + end + + e = max(-Optim.minimum(res), e) + end + return e +end; + +p = let p_excitations = plot(; + xaxis = "momentum", yaxis = "energy", xlims = (-π, π), ylims = (-0.1, 5) + ) + scatter!(p_excitations, momenta_shifted, real(E_spinon); label = "spinon") + plot!(p_excitations, P_spinon_analytic, E_spinon_analytic; label = "spinon (analytic)") + + scatter!(p_excitations, momenta_shifted, real(E_holon); label = "holon") + plot!(p_excitations, P_holon_analytic, E_holon_analytic; label = "holon (analytic)") + + I = sortperm(momenta_shifted) + plot!( + p_excitations, momenta_shifted[I], E_scattering_min[I]; label = "scattering states", + fillrange = E_scattering_max[I], fillalpha = 0.3, fillstyle = :x + ) + + p_excitations +end +```` + +![](figure-3.png) + +--- + +*This page was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).* + diff --git a/docs/src/examples/quantum1d/6.hubbard/main.ipynb b/docs/src/examples/groundstates/hubbard/main.ipynb similarity index 93% rename from docs/src/examples/quantum1d/6.hubbard/main.ipynb rename to docs/src/examples/groundstates/hubbard/main.ipynb index 16b518855..772559955 100644 --- a/docs/src/examples/quantum1d/6.hubbard/main.ipynb +++ b/docs/src/examples/groundstates/hubbard/main.ipynb @@ -21,7 +21,7 @@ "Often, a third term is included which serves as a chemical potential to control the number of electrons in the system.\n", "\n", "$$\n", - "H = -t \\sum_{\\langle i, j \\rangle, \\sigma} c^{\\dagger}_{i,\\sigma} c_{j,\\sigma} + U \\sum_i n_{i,\\uparrow} n_{i,\\downarrow} - \\mu \\sum_{i,\\sigma} n_{i,\\sigma}\n", + "H = -t ∑_{⟨i, j⟩, σ} c^{†}_{i,σ} c_{j,σ} + U ∑_i n_{i,↑} n_{i,↓} - μ ∑_{i,σ} n_{i,σ}\n", "$$\n", "\n", "At half-filling, the system exhibits particle-hole symmetry, which can be made explicit by rewriting the Hamiltonian slightly.\n", @@ -29,13 +29,13 @@ "This results in the following Hamiltonian:\n", "\n", "$$\n", - "H = - \\sum_{\\langle i, j \\rangle, \\sigma} c^{\\dagger}_{i,\\sigma} c_{j,\\sigma} + U / 4 \\sum_i (1 - 2 n_{i,\\uparrow}) (1 - 2 n_{i,\\downarrow}) - \\mu \\sum_{i,\\sigma} n_{i,\\sigma}\n", + "H = - ∑_{⟨i, j⟩, σ} c^{†}_{i,σ} c_{j,σ} + U / 4 ∑_i (1 - 2 n_{i,↑}) (1 - 2 n_{i,↓}) - μ ∑_{i,σ} n_{i,σ}\n", "$$\n", "\n", "Finally, setting `\\mu = 0` and defining `u = U / 4` we obtain the Hubbard model at half-filling.\n", "\n", "$$\n", - "H = - \\sum_{\\langle i, j \\rangle, \\sigma} c^{\\dagger}_{i,\\sigma} c_{j,\\sigma} + u \\sum_i (1 - 2 n_{i,\\uparrow}) (1 - 2 n_{i,\\downarrow})\n", + "H = - ∑_{⟨i, j⟩, σ} c^{†}_{i,σ} c_{j,σ} + u ∑_i (1 - 2 n_{i,↑}) (1 - 2 n_{i,↓})\n", "$$" ] }, @@ -157,8 +157,24 @@ "using QuadGK: quadgk\n", "using Plots\n", "using Interpolations\n", - "using Optim\n", - "\n", + "using Optim" + ] + }, + { + "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!(123);\n", "\n", "const t = 1.0\n", "const mu = 0.0\n", @@ -170,10 +186,10 @@ "metadata": {}, "source": [ "For this case, the ground state energy has an analytic solution, which can be used to benchmark the numerical results.\n", - "It follows from Eq. (6.82) in []().\n", + "It follows from Eq. (6.82) in [Essler, Frahm, Göhmann, Klümper & Korepin, The One-Dimensional Hubbard Model](https://doi.org/10.1017/CBO9780511534843).\n", "\n", "$$\n", - "e(u) = - u - 4 \\int_0^{\\infty} \\frac{d\\omega}{\\omega} \\frac{J_0(\\omega) J_1(\\omega)}{1 + \\exp(2u \\omega)}\n", + "e(u) = - u - 4 ∫₀^{∞} \\frac{dω}{ω} \\frac{J₀(ω) J₁(ω)}{1 + \\exp(2u ω)}\n", "$$\n", "\n", "We can easily verify this by comparing the numerical results to the analytic solution." @@ -187,7 +203,7 @@ "source": [ "function hubbard_energy(u; rtol = 1.0e-12)\n", " integrandum(ω) = besselj0(ω) * besselj1(ω) / (1 + exp(2u * ω)) / ω\n", - " int, err = quadgk(integrandum, 0, Inf; rtol = rtol)\n", + " int, err = quadgk(integrandum, 0, Inf; rtol)\n", " return -u - 4 * int\n", "end\n", "\n", @@ -197,7 +213,7 @@ " expansionfactor = (1 / 10),\n", " expansioniter = 20\n", " )\n", - " verbosity = 2\n", + " verbosity = 0\n", " psi, = find_groundstate(psi, H; tol = svalue * 10, verbosity)\n", " for _ in 1:expansioniter\n", " D = maximum(x -> dim(left_virtualspace(psi, x)), 1:length(psi))\n", @@ -216,7 +232,7 @@ " psi, = find_groundstate(\n", " psi, H,\n", " VUMPS(; tol = svalue / 100, verbosity, maxiter = 100) &\n", - " GradientGrassmann(; tol = svalue / 1000)\n", + " GradientGrassmann(; tol = svalue / 1000, verbosity)\n", " )\n", "\n", " return psi\n", @@ -283,7 +299,7 @@ "The fact that the spin and charge sectors are separate is a phenomenon known as spin-charge separation.\n", "\n", "The domain walls can be constructed by noticing that there are two equivalent groundstates, which differ by a translation over a single site.\n", - "In other words, the groundstates are $\\psi_{AB}` and $\\psi_{BA}$, where $A$ and $B$ are the two sites.\n", + "In other words, the groundstates are $\\psi_{AB}$ and $\\psi_{BA}$, where $A$ and $B$ are the two sites.\n", "These excitations can be constructed as follows:" ] }, @@ -303,13 +319,13 @@ "spinon_charge = FermionParity(0) ⊠ U1Irrep(0) ⊠ SU2Irrep(1 // 2)\n", "E_spinon, ϕ_spinon = excitations(\n", " H_u1_su2, alg, momenta, psi_AB, envs_AB, psi_BA, envs_BA;\n", - " sector = spinon_charge, num = 1\n", + " sector = spinon_charge, num = 1, verbosity = 0\n", ");\n", "\n", "holon_charge = FermionParity(1) ⊠ U1Irrep(-1) ⊠ SU2Irrep(0)\n", "E_holon, ϕ_holon = excitations(\n", " H_u1_su2, alg, momenta, psi_AB, envs_AB, psi_BA, envs_BA;\n", - " sector = holon_charge, num = 1\n", + " sector = holon_charge, num = 1, verbosity = 0\n", ");" ] }, @@ -379,7 +395,7 @@ "The plot shows some discrepancies between the numerical and analytic results.\n", "First and foremost, we must realize that in the thermodynamic limit, the momentum of a domain wall is actually not well-defined.\n", "Concretely, only the difference in momentum between the two groundstates is well-defined, as we can always shift the momentum by multiplying one of the groundstates by a phase.\n", - "Here, we can fix this shift by realizing that our choice of shifting the groundstates by a single site, differs from the formula by a factor $\\pi/2$." + "Here, we can fix this shift by realizing that our choice of shifting the groundstates by a single site, differs from the formula by a factor $π/2$." ] }, { diff --git a/docs/src/examples/groundstates/ising-cft/figure-1.png b/docs/src/examples/groundstates/ising-cft/figure-1.png new file mode 100644 index 0000000000000000000000000000000000000000..dc4c4239a270672cd30f0a4367c5c19564646a9d GIT binary patch literal 15044 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 OgqVo5Z~^kQ=YIo`O)ud9 literal 0 HcmV?d00001 diff --git a/docs/src/examples/quantum1d/1.ising-cft/figure-2.png b/docs/src/examples/groundstates/ising-cft/figure-2.png similarity index 100% rename from docs/src/examples/quantum1d/1.ising-cft/figure-2.png rename to docs/src/examples/groundstates/ising-cft/figure-2.png diff --git a/docs/src/examples/groundstates/ising-cft/figure-3.png b/docs/src/examples/groundstates/ising-cft/figure-3.png new file mode 100644 index 0000000000000000000000000000000000000000..8b55ec3c9cff7942fa1f7d882c8e02fbda11652a GIT binary patch literal 22801 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 literal 0 HcmV?d00001 diff --git a/docs/src/examples/quantum1d/1.ising-cft/index.md b/docs/src/examples/groundstates/ising-cft/index.md similarity index 60% rename from docs/src/examples/quantum1d/1.ising-cft/index.md rename to docs/src/examples/groundstates/ising-cft/index.md index e8d76048e..77113f9cc 100644 --- a/docs/src/examples/quantum1d/1.ising-cft/index.md +++ b/docs/src/examples/groundstates/ising-cft/index.md @@ -1,10 +1,10 @@ ```@meta -EditURL = "../../../../../examples/quantum1d/1.ising-cft/main.jl" +EditURL = "../../../../../examples/groundstates/ising-cft/main.jl" ``` -[![](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/QuantumKitHub/MPSKit.jl/gh-pages?filepath=dev/examples/quantum1d/1.ising-cft/main.ipynb) -[![](https://img.shields.io/badge/show-nbviewer-579ACA.svg)](https://nbviewer.jupyter.org/github/QuantumKitHub/MPSKit.jl/blob/gh-pages/dev/examples/quantum1d/1.ising-cft/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/quantum1d/1.ising-cft) +[![](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/QuantumKitHub/MPSKit.jl/gh-pages?filepath=dev/examples/groundstates/ising-cft/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/ising-cft/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/ising-cft) # The Ising CFT spectrum @@ -13,8 +13,7 @@ do this by first employing an exact diagonalization technique, and then extendin analysis to larger system sizes through the use of MPS techniques. ````julia -using MPSKit, TensorKit, Plots, KrylovKit -using .ExampleModels +using MPSKit, MPSKitModels, TensorKit, Plots, KrylovKit using LinearAlgebra: eigvals, diagm, Hermitian ```` @@ -127,21 +126,21 @@ append!(momenta, fix_degeneracies(states[17:18])) ```` 18-element Vector{Float64}: - 3.4795649708338624e-17 - 2.1864186746744933e-17 - 1.0296022899642392e-18 - -0.5235987755982991 - 0.5235987755982987 - 1.047197551196598 - -1.0471975511965972 - -0.5235987755982991 - 0.5235987755982987 - 1.047197551196598 + -6.835457747908734e-17 + -1.5823223400041525e-17 + -2.117254204162227e-17 + -0.5235987755982994 + 0.5235987755982988 + -1.047197551196598 + 1.0471975511965976 + 0.5235987755982993 + -0.5235987755982985 + -1.0471975511965976 + 1.0471975511965976 + -1.3705449793358471e-17 + 1.570796326794897 + -1.5707963267948966 -1.0471975511965979 - 1.0708451244677254e-16 - -1.570796326794897 - 1.5707963267948968 - -1.0471975511965987 1.0471975511965976 1.5707963267948968 -1.5707963267948966 @@ -178,57 +177,7 @@ can reach higher system sizes. L_mps = 20 H_mps = periodic_boundary_conditions(transverse_field_ising(), L_mps) D = 64 -ψ, envs, info = find_groundstate(FiniteMPS(L_mps, ℂ^2, ℂ^D), H_mps, DMRG()); -```` - -```` -[ Info: DMRG init: obj = -1.943771844888e+01 err = 1.0000e+00 -[ Info: DMRG 1: obj = -2.548965337401e+01 err = 1.5606788288e-02 time = 1.50 sec -[ Info: DMRG 2: obj = -2.549098968590e+01 err = 4.2297557187e-04 time = 0.79 sec -[ Info: DMRG 3: obj = -2.549098968636e+01 err = 1.0167456345e-06 time = 0.41 sec -[ Info: DMRG 4: obj = -2.549098968636e+01 err = 2.4867732855e-08 time = 0.30 sec -[ Info: DMRG 5: obj = -2.549098968636e+01 err = 7.4062863713e-09 time = 0.47 sec -[ Info: DMRG 6: obj = -2.549098968636e+01 err = 3.8191851769e-09 time = 1.41 sec -[ Info: DMRG 7: obj = -2.549098968636e+01 err = 2.6647921898e-09 time = 0.31 sec -[ Info: DMRG 8: obj = -2.549098968636e+01 err = 2.1927504209e-09 time = 0.31 sec -[ Info: DMRG 9: obj = -2.549098968636e+01 err = 1.9177066057e-09 time = 0.29 sec -[ Info: DMRG 10: obj = -2.549098968636e+01 err = 1.6969297883e-09 time = 0.29 sec -[ Info: DMRG 11: obj = -2.549098968636e+01 err = 1.6032558073e-09 time = 0.28 sec -[ Info: DMRG 12: obj = -2.549098968636e+01 err = 1.6496928155e-09 time = 0.30 sec -[ Info: DMRG 13: obj = -2.549098968636e+01 err = 1.6728447005e-09 time = 0.30 sec -[ Info: DMRG 14: obj = -2.549098968636e+01 err = 1.6689081338e-09 time = 0.28 sec -[ Info: DMRG 15: obj = -2.549098968636e+01 err = 1.6377730200e-09 time = 0.32 sec -[ Info: DMRG 16: obj = -2.549098968636e+01 err = 1.5799295265e-09 time = 0.31 sec -[ Info: DMRG 17: obj = -2.549098968636e+01 err = 1.5009049285e-09 time = 0.30 sec -[ Info: DMRG 18: obj = -2.549098968636e+01 err = 1.4066215762e-09 time = 0.30 sec -[ Info: DMRG 19: obj = -2.549098968636e+01 err = 1.5081205257e-09 time = 0.29 sec -[ Info: DMRG 20: obj = -2.549098968636e+01 err = 1.6810911856e-09 time = 0.30 sec -[ Info: DMRG 21: obj = -2.549098968636e+01 err = 1.8220210461e-09 time = 0.29 sec -[ Info: DMRG 22: obj = -2.549098968636e+01 err = 1.9139702907e-09 time = 0.29 sec -[ Info: DMRG 23: obj = -2.549098968636e+01 err = 1.9442171571e-09 time = 0.28 sec -[ Info: DMRG 24: obj = -2.549098968636e+01 err = 1.9087464599e-09 time = 1.38 sec -[ Info: DMRG 25: obj = -2.549098968636e+01 err = 1.8142533073e-09 time = 0.28 sec -[ Info: DMRG 26: obj = -2.549098968636e+01 err = 1.6750776273e-09 time = 0.28 sec -[ Info: DMRG 27: obj = -2.549098968636e+01 err = 1.5098703467e-09 time = 0.30 sec -[ Info: DMRG 28: obj = -2.549098968636e+01 err = 1.3360360659e-09 time = 0.20 sec -[ Info: DMRG 29: obj = -2.549098968636e+01 err = 1.1657760958e-09 time = 0.16 sec -[ Info: DMRG 30: obj = -2.549098968636e+01 err = 1.0073242984e-09 time = 0.18 sec -[ Info: DMRG 31: obj = -2.549098968636e+01 err = 8.6474907924e-10 time = 0.24 sec -[ Info: DMRG 32: obj = -2.549098968636e+01 err = 7.3927413439e-10 time = 0.28 sec -[ Info: DMRG 33: obj = -2.549098968636e+01 err = 6.3048094041e-10 time = 0.28 sec -[ Info: DMRG 34: obj = -2.549098968636e+01 err = 5.3702960640e-10 time = 0.29 sec -[ Info: DMRG 35: obj = -2.549098968636e+01 err = 4.5722500117e-10 time = 0.30 sec -[ Info: DMRG 36: obj = -2.549098968636e+01 err = 3.8930325414e-10 time = 0.29 sec -[ Info: DMRG 37: obj = -2.549098968636e+01 err = 3.3159981587e-10 time = 0.28 sec -[ Info: DMRG 38: obj = -2.549098968636e+01 err = 2.8261201613e-10 time = 0.29 sec -[ Info: DMRG 39: obj = -2.549098968636e+01 err = 2.4102587357e-10 time = 0.34 sec -[ Info: DMRG 40: obj = -2.549098968636e+01 err = 2.0570571140e-10 time = 0.30 sec -[ Info: DMRG 41: obj = -2.549098968636e+01 err = 1.7569292481e-10 time = 0.29 sec -[ Info: DMRG 42: obj = -2.549098968636e+01 err = 1.5016721096e-10 time = 0.28 sec -[ Info: DMRG 43: obj = -2.549098968636e+01 err = 1.2843977109e-10 time = 0.31 sec -[ Info: DMRG 44: obj = -2.549098968636e+01 err = 1.0992971958e-10 time = 0.44 sec -[ Info: DMRG conv 45: obj = -2.549098968636e+01 err = 9.4147444802e-11 time = 18.09 sec - +ψ, envs, δ = find_groundstate(FiniteMPS(L_mps, ℂ^2, ℂ^D), H_mps, DMRG(; verbosity = 0)); ```` Excitations on top of the ground state can be found through the use of the quasiparticle diff --git a/docs/src/examples/quantum1d/1.ising-cft/main.ipynb b/docs/src/examples/groundstates/ising-cft/main.ipynb similarity index 59% rename from docs/src/examples/quantum1d/1.ising-cft/main.ipynb rename to docs/src/examples/groundstates/ising-cft/main.ipynb index db7b248c7..e21dc19cc 100644 --- a/docs/src/examples/quantum1d/1.ising-cft/main.ipynb +++ b/docs/src/examples/groundstates/ising-cft/main.ipynb @@ -17,113 +17,7 @@ "metadata": {}, "outputs": [], "source": [ - "using MPSKit, TensorKit, Plots, KrylovKit\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 MPSKit, MPSKitModels, TensorKit, Plots, KrylovKit\n", "using LinearAlgebra: eigvals, diagm, Hermitian" ] }, @@ -303,7 +197,7 @@ "L_mps = 20\n", "H_mps = periodic_boundary_conditions(transverse_field_ising(), L_mps)\n", "D = 64\n", - "ψ, envs, info = find_groundstate(FiniteMPS(L_mps, ℂ^2, ℂ^D), H_mps, DMRG());" + "ψ, envs, δ = find_groundstate(FiniteMPS(L_mps, ℂ^2, ℂ^D), H_mps, DMRG(; verbosity = 0));" ] }, { @@ -362,15 +256,15 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.13.1", + "display_name": "Julia 1.12.6", "language": "julia", - "name": "julia-1.13" + "name": "julia-1.12" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.13.1" + "version": "1.12.6" } }, "nbformat": 4, diff --git a/docs/src/examples/quantum1d/1.ising-cft/translation_mpo.svg b/docs/src/examples/groundstates/ising-cft/translation_mpo.svg similarity index 100% rename from docs/src/examples/quantum1d/1.ising-cft/translation_mpo.svg rename to docs/src/examples/groundstates/ising-cft/translation_mpo.svg diff --git a/docs/src/examples/groundstates/xxz-heisenberg/figure-1.png b/docs/src/examples/groundstates/xxz-heisenberg/figure-1.png new file mode 100644 index 0000000000000000000000000000000000000000..5cb23a3c0ea4d3a4b0e992006d0aaf8c39a2866f GIT binary patch literal 12994 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%0ANqjw8!nKh8z_X+% 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 U#)jALuttf^b~|hzP~A`e0}0flVgLXD literal 0 HcmV?d00001 diff --git a/docs/src/examples/groundstates/xxz-heisenberg/index.md b/docs/src/examples/groundstates/xxz-heisenberg/index.md new file mode 100644 index 000000000..687bc0cb8 --- /dev/null +++ b/docs/src/examples/groundstates/xxz-heisenberg/index.md @@ -0,0 +1,208 @@ +```@meta +EditURL = "../../../../../examples/groundstates/xxz-heisenberg/main.jl" +``` + +[![](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/QuantumKitHub/MPSKit.jl/gh-pages?filepath=dev/examples/groundstates/xxz-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/groundstates/xxz-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/groundstates/xxz-heisenberg) + +# The XXZ model + +In this file we will give step by step instructions on how to analyze the spin 1/2 XXZ model. +The necessary packages to follow this tutorial are: + +````julia +using MPSKit, MPSKitModels, TensorKit, Plots +```` + +For reproducibility of this page, we fix the seed of the random number generator: + +````julia +using Random +Random.seed!(123); +```` + +## Failure + +First we should define the Hamiltonian we want to work with. +Then we specify an initial guess, which we then further optimize. +Working directly in the thermodynamic limit, this is achieved as follows: + +````julia +H = heisenberg_XXX(; spin = 1 // 2) +```` + +```` +1-site InfiniteMPOHamiltonian(ComplexF64, TensorKit.ComplexSpace) with maximal dimension 5: +| ⋮ +| (ℂ^1 ⊞ ℂ^3 ⊞ ℂ^1) +┼─[1]─ ℂ^2 +│ (ℂ^1 ⊞ ℂ^3 ⊞ ℂ^1) +| ⋮ + +```` + +We then need an initial state, which we shall later optimize. In this example we work directly in the thermodynamic limit. + +````julia +state = InfiniteMPS(2, 20) +```` + +```` +1-site InfiniteMPS(ComplexF64, TensorKit.ComplexSpace) with maximal dimension 20: +| ⋮ +| ℂ^20 +├─[1]─ ℂ^2 +│ ℂ^20 +| ⋮ + +```` + +The ground state can then be found by calling `find_groundstate`. + +````julia +groundstate, cache, delta = find_groundstate(state, H, VUMPS(; verbosity = 1)); +```` + +```` +┌ Warning: VUMPS cancel 200: obj = -1.878034423426e-01 err = 3.7915687051e-01 time = 6.59 sec +└ @ MPSKit src/algorithms/groundstate/vumps.jl:87 + +```` + +As you can see, VUMPS struggles to converge. +On its own, that is already quite curious. +Maybe we can do better using another algorithm, such as gradient descent. + +````julia +groundstate, cache, delta = find_groundstate(state, H, GradientGrassmann(; maxiter = 20, verbosity = 1)); +```` + +```` +┌ Warning: resorting to η +└ @ OptimKit src/cg.jl:225 +┌ Warning: CG: not converged to requested tol after 20 iterations and time 5.39 s: f = -4.427115230754e-01, ‖∇f‖ = 5.6573e-03 +└ @ OptimKit src/cg.jl:188 + +```` + +Convergence is quite slow and even fails after sufficiently many iterations. +To understand why, we can look at the transfer matrix spectrum. + +````julia +transferplot(groundstate, groundstate) +```` + +![](figure-1.png) + +We can clearly see multiple eigenvalues close to the unit circle. +Our state is close to being non-injective, and represents the sum of multiple injective states. +This is numerically very problematic, but also indicates that we used an incorrect ansatz to approximate the groundstate. +We should retry with a larger unit cell. + +## Success + +Let's initialize a different initial state, this time with a 2-site unit cell: + +````julia +state = InfiniteMPS(fill(2, 2), fill(20, 2)) +```` + +```` +2-site InfiniteMPS(ComplexF64, TensorKit.ComplexSpace) with maximal dimension 20: +| ⋮ +| ℂ^20 +├─[2]─ ℂ^2 +│ ℂ^20 +├─[1]─ ℂ^2 +│ ℂ^20 +| ⋮ + +```` + +In MPSKit, we require that the periodicity of the Hamiltonian equals that of the state it is applied to. +This is not a big obstacle, you can simply repeat the original Hamiltonian. +Alternatively, the Hamiltonian can be constructed directly on a two-site unit cell by making use of MPSKitModels.jl's `@mpoham`. + +````julia +# H2 = repeat(H, 2); -- copies the one-site version +H2 = heisenberg_XXX(ComplexF64, Trivial, InfiniteChain(2); spin = 1 // 2) +groundstate, envs, delta = find_groundstate( + state, H2, VUMPS(; maxiter = 100, tol = 1.0e-12, verbosity = 1) +); +```` + +```` +┌ Warning: VUMPS cancel 100: obj = -8.862417624752e-01 err = 4.2010390727e-06 time = 3.79 sec +└ @ MPSKit src/algorithms/groundstate/vumps.jl:87 + +```` + +We get convergence, but it takes an enormous amount of iterations. +The reason behind this becomes more obvious at higher bond dimensions: + +````julia +groundstate, envs, delta = find_groundstate( + state, H2, IDMRG2(; trunc = truncrank(50), maxiter = 20, tol = 1.0e-12, verbosity = 1) +); +entanglementplot(groundstate) +```` + +![](figure-2.png) + +We see that some eigenvalues clearly belong to a group, and are almost degenerate. +This implies 2 things: +- there is superfluous information, if those eigenvalues are the same anyway +- poor convergence if we cut off within such a subspace + +It are precisely those problems that we can solve by using symmetries. + +## Symmetries + +The XXZ Heisenberg Hamiltonian is SU(2) symmetric and we can exploit this to greatly speed up the simulation. + +It is cumbersome to construct symmetric Hamiltonians, but luckily SU(2) symmetric XXZ is already implemented: + +````julia +H2 = heisenberg_XXX(ComplexF64, SU2Irrep, InfiniteChain(2); spin = 1 // 2); +```` + +Our initial state should also be SU(2) symmetric. +It now becomes apparent why we have to use a two-site periodic state. +The physical space carries a half-integer charge and the first tensor maps the first `virtual_space ⊗ the physical_space` to the second `virtual_space`. +Half-integer virtual charges will therefore map only to integer charges, and vice versa. +The staggering thus happens on the virtual level. + +An alternative constructor for the initial state is + +````julia +P = Rep[SU₂](1 // 2 => 1) +V1 = Rep[SU₂](1 // 2 => 10, 3 // 2 => 5, 5 // 2 => 2) +V2 = Rep[SU₂](0 => 15, 1 => 10, 2 => 5) +state = InfiniteMPS([P, P], [V1, V2]); +```` + +```` +┌ Warning: Constructing an MPS from tensors that are not full rank +└ @ MPSKit src/states/infinitemps.jl:188 + +```` + +Even though the bond dimension is higher than in the example without symmetry, convergence is reached much faster: + +````julia +println(dim(V1)) +println(dim(V2)) +groundstate, cache, delta = find_groundstate(state, H2, VUMPS(; maxiter = 400, tol = 1.0e-12, verbosity = 1)); +```` + +```` +52 +70 + +```` + +--- + +*This page was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).* + diff --git a/docs/src/examples/quantum1d/4.xxz-heisenberg/main.ipynb b/docs/src/examples/groundstates/xxz-heisenberg/main.ipynb similarity index 50% rename from docs/src/examples/quantum1d/4.xxz-heisenberg/main.ipynb rename to docs/src/examples/groundstates/xxz-heisenberg/main.ipynb index 2f4d6379c..8f1685258 100644 --- a/docs/src/examples/quantum1d/4.xxz-heisenberg/main.ipynb +++ b/docs/src/examples/groundstates/xxz-heisenberg/main.ipynb @@ -16,113 +16,24 @@ "metadata": {}, "outputs": [], "source": [ - "using MPSKit, TensorKit, Plots\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" + "using MPSKit, MPSKitModels, TensorKit, Plots" + ] + }, + { + "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!(123);" ] }, { @@ -174,8 +85,7 @@ "metadata": {}, "outputs": [], "source": [ - "groundstate, cache, info = find_groundstate(state, H, VUMPS());\n", - "info" + "groundstate, cache, delta = find_groundstate(state, H, VUMPS(; verbosity = 1));" ] }, { @@ -193,8 +103,7 @@ "metadata": {}, "outputs": [], "source": [ - "groundstate, cache, info = find_groundstate(state, H, GradientGrassmann(; maxiter = 20));\n", - "info" + "groundstate, cache, delta = find_groundstate(state, H, GradientGrassmann(; maxiter = 20, verbosity = 1));" ] }, { @@ -248,7 +157,7 @@ "source": [ "In MPSKit, we require that the periodicity of the Hamiltonian equals that of the state it is applied to.\n", "This is not a big obstacle, you can simply repeat the original Hamiltonian.\n", - "Alternatively, our model helper can construct the Hamiltonian directly on a two-site unit cell." + "Alternatively, the Hamiltonian can be constructed directly on a two-site unit cell by making use of MPSKitModels.jl's `@mpoham`." ] }, { @@ -258,9 +167,9 @@ "outputs": [], "source": [ "# H2 = repeat(H, 2); -- copies the one-site version\n", - "H2 = heisenberg_XXX(ComplexF64, Trivial; unitcell = 2, spin = 1 // 2)\n", - "groundstate, envs, info = find_groundstate(\n", - " state, H2, VUMPS(; maxiter = 100, tol = 1.0e-12)\n", + "H2 = heisenberg_XXX(ComplexF64, Trivial, InfiniteChain(2); spin = 1 // 2)\n", + "groundstate, envs, delta = find_groundstate(\n", + " state, H2, VUMPS(; maxiter = 100, tol = 1.0e-12, verbosity = 1)\n", ");" ] }, @@ -278,8 +187,8 @@ "metadata": {}, "outputs": [], "source": [ - "groundstate, envs, info = find_groundstate(\n", - " state, H2, IDMRG2(; trunc = truncrank(50), maxiter = 20, tol = 1.0e-12)\n", + "groundstate, envs, delta = find_groundstate(\n", + " state, H2, IDMRG2(; trunc = truncrank(50), maxiter = 20, tol = 1.0e-12, verbosity = 1)\n", ");\n", "entanglementplot(groundstate)" ] @@ -313,7 +222,7 @@ "metadata": {}, "outputs": [], "source": [ - "H2 = heisenberg_XXX(ComplexF64, SU2Irrep; unitcell = 2, spin = 1 // 2);" + "H2 = heisenberg_XXX(ComplexF64, SU2Irrep, InfiniteChain(2); spin = 1 // 2);" ] }, { @@ -356,7 +265,7 @@ "source": [ "println(dim(V1))\n", "println(dim(V2))\n", - "groundstate, cache, info = find_groundstate(state, H2, VUMPS(; maxiter = 400, tol = 1.0e-12));" + "groundstate, cache, delta = find_groundstate(state, H2, VUMPS(; maxiter = 400, tol = 1.0e-12, verbosity = 1));" ] }, { @@ -371,15 +280,15 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.13.1", + "display_name": "Julia 1.12.6", "language": "julia", - "name": "julia-1.13" + "name": "julia-1.12" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.13.1" + "version": "1.12.6" } }, "nbformat": 4, diff --git a/docs/src/examples/index.md b/docs/src/examples/index.md index 2d4a5a970..43f7d66b6 100644 --- a/docs/src/examples/index.md +++ b/docs/src/examples/index.md @@ -1,4 +1,7 @@ -# Examples +# [Examples](@id examples_index) + +This gallery collects the full worked examples that ship with MPSKit.jl. +Each one is a complete, runnable script (also available as a Jupyter notebook, linked from the example page itself) that goes well beyond the short snippets in the how-to guides. The downloadable notebooks include the model constructors used in these examples. Their operator definitions come from @@ -12,16 +15,87 @@ include("models.jl") using .ExampleModels ``` -## Quantum (1+1)d +The examples are grouped by the kind of computation they demonstrate rather than by the physical system. +Within each group, the summaries below are ordered roughly by increasing difficulty: start at the top if you are new to MPSKit, and work down as you get comfortable with symmetries, infinite systems, and the less common algorithms. +(The sidebar lists the same pages alphabetically.) -```@contents -Pages = map(file -> joinpath("quantum1d", file, "index.md"), readdir("quantum1d")) -Depth = 1 -``` +## Ground states -## Classical (2+0)d +### [The XXZ model](groundstates/xxz-heisenberg/index.md) -```@contents -Pages = map(file -> joinpath("classic2d", file, "index.md"), readdir("classic2d")) -Depth = 1 -``` +![](groundstates/xxz-heisenberg/figure-2.png) + +Walks through a ground-state search that first goes wrong: single-site `VUMPS` and `GradientGrassmann` stall on the spin-1/2 Heisenberg antiferromagnet, and `transferplot`/`entanglementplot` reveal a near-non-injective state with several almost-degenerate transfer-matrix eigenvalues. +The fix is a two-site unit cell together with the `SU2Irrep`-symmetric Hamiltonian, after which `IDMRG2` and `VUMPS` converge cleanly. +A useful, diagnostic-driven example for recognizing and debugging convergence failures. +**Level: intermediate.** + +### [Hubbard chain at half filling](groundstates/hubbard/index.md) + +![](groundstates/hubbard/figure-2.png) + +Studies the 1D Hubbard model at half filling with fermionic `InfiniteMPS`, first benchmarking a plain `VUMPS`/`GradientGrassmann` ground-state search against the exact Bethe-ansatz integral for the energy, then imposing the full particle-number and spin symmetry (`U1Irrep`, `SU2Irrep`, with `MPSKit.add_physical_charge` to pin the filling) and constructing the spinon/holon excitation spectrum with the `QuasiparticleAnsatz`. +Combines fermionic symmetry sectors with a more elaborate ground-state recipe (staged bond-dimension growth via `changebonds`/`OptimalExpand`, `SvdCut`, and mixed `VUMPS`/`GradientGrassmann` refinement). +**Level: advanced.** + +### [1D Bose-Hubbard model](groundstates/bose-hubbard/index.md) + +![](groundstates/bose-hubbard/figure-6.png) + +The most comprehensive ground-state example in the gallery: works directly in the thermodynamic limit with a truncated bosonic local Hilbert space, extracts correlation functions and the correlation length as a function of bond dimension, computes the momentum distribution, and maps out the Mott-insulator/superfluid structure of the phase diagram from the ground-state response to an applied phase twist. +Touches most of the ground-state toolbox (`InfiniteMPS`, `find_groundstate`, bond-dimension control, `expectation_value`-based observables) in a single, longer study. +**Level: advanced.** + +### [Spin 1 Heisenberg model](groundstates/haldane-spt/index.md) + +![](groundstates/haldane-spt/figure-3.png) + +Distinguishes the two symmetry-protected topological phases of the SU(2)-symmetric spin-1 Heisenberg chain by restricting the virtual `SU2Space` to integer or half-integer charges, then compares the two resulting ground states through their energy, transfer-matrix spectrum (`transferplot`), entanglement spectrum (`entanglementplot`), and entanglement entropy (`entropy`). +Builds directly on the symmetry machinery introduced in the Haldane gap example. +**Level: intermediate/advanced.** + +### [The Ising CFT spectrum](groundstates/ising-cft/index.md) + +![](groundstates/ising-cft/figure-2.png) + +Extracts the finite-size conformal spectrum of the critical transverse-field Ising chain, first by brute-force `exact_diagonalization` on a small periodic chain, then by extending to larger sizes with finite `DMRG` and the `QuasiparticleAnsatz`, using a translation MPO to assign a momentum label to each state. +No symmetries are used, which makes this a good entry point into the finite-MPS workflow. +**Level: introductory.** + +## Excitations & dispersions + +### [The Haldane gap](excitations/haldane/index.md) + +![](excitations/haldane/figure-3.png) + +Computes the Haldane gap of the spin-1 Heisenberg antiferromagnet in two complementary ways: finite-size `DMRG` with the `QuasiparticleAnsatz`, extrapolated over system size, and a direct infinite-chain `VUMPS` calculation with a momentum-resolved excitation scan. +Introduces `SU2Irrep`/`SU2Space` symmetric tensors for both `FiniteMPS` and `InfiniteMPS`. +**Level: intermediate.** + +## Dynamics & finite temperature + +### [DQPT in the Ising model](dynamics/ising-dqpt/index.md) + +![](dynamics/ising-dqpt/infinite_timeev.png) + +Quenches the transverse-field Ising chain across its critical point and tracks the Loschmidt echo in search of non-analyticities (dynamical quantum phase transitions), on both a finite chain (`TDVP2`/`TDVP`) and directly in the thermodynamic limit (`changebonds` with `OptimalExpand`, then `TDVP`). +A compact introduction to real-time evolution and environment reuse, still without symmetries. +**Level: introductory/intermediate.** + +### [Finite temperature XY model](dynamics/xy-finiteT/index.md) + +![](dynamics/xy-finiteT/figure-1.png) + +Simulates the finite-temperature XY chain by purifying the infinite-temperature density matrix and evolving it in imaginary time, then compares the resulting partition function and free energy against exact diagonalization and, via BenchmarkFreeFermions.jl, the exact free-fermion solution. +A technical, comparison-heavy example built around `MPSKit.infinite_temperature_density_matrix` and imaginary-time evolution rather than ground-state search. +**Level: advanced.** + +## Statistical mechanics + +### [The Hard Hexagon model](statmech/hard-hexagon/index.md) + +![](statmech/hard-hexagon/figure-1.png) + +Extracts the central charge of the hard hexagon lattice gas by finding the leading boundary MPS of its transfer matrix with `VUMPS` (using Fibonacci-anyon virtual spaces), then fitting the CFT-predicted scaling relation between entanglement entropy and correlation length as the bond dimension is increased. +The only classical statistical-mechanics example in the gallery, and the only one demonstrating non-abelian anyonic symmetries (`FibonacciAnyon`) in MPSKit. +**Level: advanced.** diff --git a/docs/src/examples/quantum1d/1.ising-cft/figure-1.png b/docs/src/examples/quantum1d/1.ising-cft/figure-1.png deleted file mode 100644 index ec004e5a0b06d3d4b2e0ba997d9410a9b1332789..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15484 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 Z#}kjwqDiCzL4HCA^Gm$V<$Le;-vB(=O@ROa diff --git a/docs/src/examples/quantum1d/1.ising-cft/figure-3.png b/docs/src/examples/quantum1d/1.ising-cft/figure-3.png deleted file mode 100644 index a2e28ecb36e1777fc88900e6776237715bcc0bfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22792 zcmd43cRbd8|39o0M`eW*$w*{Jnb{m7JA`bqcjB;RkHfrQ zN1fOAab3UPb=}u}|Ngii_i;TQ=XsqRKI1)Juh(GWZuMFJfU~;mgTNsbgWC z)xp9#^9pemesZiG+7180F;$R}!aBwL??X*SBo@{+EIBC&%}4K6COpOac205E_XsF% zQG|J4XTBCv_Gs#(XKGw}R-86XmbtsPyOl+p`NKGBYk9_K&sUzP^VZLG5zJ@lu8|Nm z*Mu8{8PtjG9xDYVGt=&xRvSgs{g?^vet)=+UMcC`@hVbeB#}VS1zI&dBX~@NL`XCs zLx_+e);fsGNQ4^xB|0R6?vn|f6oO8Qmpu@^nE5P-h%S(5pn&LlAkjxkGGrhTQnT^T zAFT&DqBl{}DTS}O6BHTSyc@3I;VdA&P}Y?c%S)$R_BgYEcm? zU?BWmMS8k){t&;-dotx*ElHWjW?XU1M%eJHD1QR=+A|d4&CUMCrSjG#@f&MT*MHys zteIty>h;%Av9XdFkE7z^293l$~i@DiZ@r=i=(+%h2Rq*8)-b6)_E|9)b*U;G7+Dg_C7j#=9bv-AG zMx(Q`vU*sqrKP6IG7wwDKD7LOds8xUK`dlup}M-dv;9y92C zD$2?<{PyFMHQpn(!uT(G9>gDhU%p_+xWp*p@P=mKd{ESm=V4V6x!dX^_TxiXzEb|yo_-fkDWIMchOboNg zYv4ki7MFdE?rT$1Q*Uo?eSLDAAtG5TKPM+_Rd?9~E`v8C2yN z*2G6eZ8u+az@xbJA$bH3r*XP5_+}9I_3IyPhVt+`ZS4!CJuUH5dSzEBKe%8MT?~@e zRh!6qu1-kkF{%}GC2?)EGLe-HG0Y#b;t3|8_Clj#MMOk$ zyDV-|5Ks$#op$V~+g%;wXJAN8HZOIUdfzhBdvq-k&33-T=F7xH4cwEo_SjvN#ypEj zb}vJHUnGr+5Qz}lJ&x-ZzB~PiLcp0JXl=Bir6st@w6_|k(tUO5*RRQa-XF8GUs0l| z-wSPf(ivD;t$%(Eb*R~i8SqDKq0PBF zk6K!~Nd0wCaEJOG3w^4c$M=T}y`R3-9qQ^&HYA%=mHHA;cMdX7oyWro(8{)(#kI&z z)nrBch`wktb&M;0^zv1c>GaJMga}`>{5@TzZ*5x)GwiJjjKbPnZjo~R8!JPN$tiUG zlspQ)#4nmIk+FxoeEBjoG)~OlPg=UU_+ejsdB@YIPqR4Le+^q&wbV+^*KINeQOl^D zcz#;@mLa%9J89SRjk+r3VXdrq!qSp;3`tUfPHH;^mmjaE>6Hr$$YFhKdu*PpPoMNk zj}q5KC9fagC)}C|T3NAOkScYbX%1KG?g&}n&v`JFyp}VS*=zMy&$);cDJE8DSmR|- z>x1ryLghvlCLse+WYkYf9bZFtDzx{#*_QCWmCt- zgUz)0B51dHa(;8=2wf+J<5re#$>6isqU9qaBa=0T<1;dtsy;<6@C3ekzohv(4`Rth zbxFymPa-Am_@4;7p2LDUnZOAjzxP+3?*5CRk83LDIH`D?=FpeOlU+u-@^J~oZqE;t z)3js9+HxlCEf0?6i3AJR_m_OPU&A)R^z>=B6hs}t7`24jplWFvSoB%P0%}u z#nkLot!yeM@3xQh=JuR<_8`}rQWP6A^RNfIGT$E4&nv@{(Mz*GKfc{=_Pj|();OYIY3#j}fyfG~x~s2lc=slK zds%>j2Sm|=;y3%jL+`DY?g$I;;h;Y`m}Y<`LxO8VVULW9iDa zh1qO%GH2v$JuUB~ChQdZ{J>>xvL@Mu?y7*t#+&5BzCEQ)B9`H!=g%*Gkm7S&9=s`; z!0~mlHX*fGB;&}5@%?Mmm_(l)Y~MRt&fmG&law>K9Ur-6ID1ms;Y(4SdoW!saB04C zq|Ctxb}J466@nUfB&ye#;a#Oidr^6HJSD5>Iak5N&}AJDRu_jUf|rO2{k#P17tCvQ zLh1Wj#^P5$NRQV5P@0(wX>ILh3!I z*}EqvC*q;DtirryQ?BD&>7i2QrYj*zkYaHPodya?PpMI zM}Kn&Q3Y?75&mLpr2FRBnZ42aQjgR4gB8+YV+7sU{!svLt&H}ohSNHl)SUH@xH@;# z)eceRAyWY%A4; zm%m+FQBh=Ml7r*sd{VA~fLoi{f_~}NbQN2`=uz?Xi`y^N0)kFgY3F`c&(E5q6NK3H z>dw{EWEFL6%(NI77^Hms7%!mNzB6K(RI}N}<|9fghzNW4?p0l0+E zf`WEdMo8d4c9w_o@0Sq>o_{+#JDZb}bA{VN9QRC-W%qkJ$!CGV!D2px(nS#(DP;N_ zd&vefdi;C|O0BI#*;amQ7VKm%HlxMSWAl!8qWp23?@%c?Sf>wV83 zFU^}VI_v}l=^MALxoZqLU(24wUJjR&!Vi`DIXx}0b<7pDc9t?+nlUm|>iWVpQ3laI|4Hp;J2MzJ(;o)hiv4Qs>hdDVpL6W|~z@R#8S5kU> zxCd1P1KA4_VqzLmqvgNI$+h+MJ65<>S13*H-HWa_eyn^ZtGHM*qfgB{S~g9+)rRYb#J`Xnu?py6Nqvskja{UB z;AWXh!J06gFbyGGaU3f?Wwkt!cVf_rhl(J0G-Cll#}(Jn*oZB7o+7eU^WMF?F8OzZ zkkczGid!;tsH(@m(<3GYNqqT+a(*KIW#t+JJdG^+np7ZBTSPEo$L4Y4^bZa!>NAit zKKkJEw2YM%VTv)t?e?yV$-P$R#9}YK*d%ZXJm59HMd3*P_$3y+ty(Qk{LJc@E?u<` z+F4zl*!7|;j5<^ckn3hqC~6^hJi+s+F7sXH78b~i$J@tyQ!t`XXL6O?`QgdFoJIE zq=<8Qd3i9O=!1jrXe=Pv~z;ikgE!dAbyvDl2K_tC@1C9-gM7vOt@Z! z)n!Wdr;aTuLS|~R4p{TTfI#NyxqNML$16+oBD|eGM@DrE1Iyv__~X;^Ybk&EtsP8)vH&DiTF@Y#%;9BVQqOCQy80>F~F15*47FpLTpHdU#qC7Sj2`Zm965T zsDld^`S>Q%eaOG0j}8AB7K;BF7UtKoZSCz)8Mk$GoD)mHm(A6hpPPfVp{c4W?%9nB z3&Vrre%9GjLgEYzUPVPk*xvopBIMh+xVXqj?8LL*gD#O<*;n3tEel06>|S{#CG+Z; z0$+juR%!nW!uZdy#KKakjQ;v{h>4ic@cjA5ip~$R3`+yq}L({=Ay#x_G`}4JI(Pe@!2Af42Fu5#Bn%UZeJsai5)SWjJON;r$u>5nZ~Dwl)}m z0Od1_-_sPlYG`1Dvoz!1y~BfX)zj0Hle+--neR>teuanQGc7F*R)*T7TTO9s)Mmh$LLGfw-PYfK z2Pg~K@$W#H?jk#Vv^*h=Fa<5GKNN49o6a1u%gf7Sb^fQlDKaYW?!0c984&? zcPMi+GaVfri4f<)s*6P+p4HdaLp)m8@d}k9rl3Gjp9_<^zOlakp<sGTc zkHk`Xn9b|2L)y)qzanfa?JSws?u03o!D2>LVew5ogCE_ZP=0skw%d{>juB?JpWRze zX@{(6%au?7H96l@eeV zXlZHX-7n){VwztWDY|K5yzmM0VTGM4ub|*2NbP#@7HhOTW28jJV}{7qDES+(M(*Cd z3(J-zT7LYzChK2C?bU1j3xm1$>yCHF-o2yp_dmV+f~+%+n~96-&B%}>z;wN+!;90} zM!xsd)i-yBjOw<(D|Af0dk$;5L~$>XGVzYn_25R&)smr)A3wUU4A<}f2!_8>Rd6w) z8!xrHucp=;A$GE`vVxhR7g8THlKc*S)CcfPB|afSX1Zm2pJ-eo>PQsw_%&VuI~`>ShZmVDOPvLtd*6SOgAt52Z%kPOQ7+Goo=UIT0qUc$Y`;3_9wEaPs zXg+Mao2iyUKy^n|Rdv0I+{krxbbzmrvH|7%@K?SxV%oWar)=os(JBeDT%QBQ|5;6x zn93dtQs@S+v1N@kFC~6(qm!$vEv7J0WZYU`hy31b#&z%By^5+TN!&9js?6^a6Ca*1 zr}~ihEbmZ;Kby19cCOIBM#Q6?-y0Sd2JgW$=KvsAPfe}fIHdVO(MS}b1QNYLl>7)^ zHtjoV&2RndY+Oo4$ASBheLy`{A_Ax6>fdTi4jq9I61lAQ%?6)o{ zEG&e5dG)qwpkA(p@I_=M9gqnIIHDW(bY*`=j&b7Y)GcWm&i1HkBx{ z(BFrbBliB`x)De0)$nFOe+0oAhg``3vrrC7j2e=i!TUb7sK8Ik88(@6(c;$%d?qsU z@}LmenKvoaDe3Njyq6sjtJ7)ZUn1qvs*-bCWTbQ{<=L{h3-3J?yr;TcZ>`TCwp!`F_?Auc>w61F_Pul zwJ*wB{JzI*q!+cdwYReBn`b?ooIDrYP=|Ru+iO#&4MCTH_t;;|Na{)wJB2}5+VMh$ z6cxEl)%t4Z=?nOu__X_DX>>%e4vI~;&TNoz8rr_k>$L)kz>Lv$ON(4l)Xg zI}o3?x*^!X=xZ6Jd8|!BWz2W_ECA_wIZNx~<(-42rKL25 z*wKf6n>x#N<>il5*JuKC{3D;&8Q@uqv?o7X6@RMa6|~u(rEybCtZ3OE0xrG*UD1o9 zh?T%J2?}sOh~GdeC#|<oUP;Hq#5 zX~vT!adBeNuUeR@tE;VQMY4j*VWd0dBl)bam>jR2w)e~|e*B?UM=gBrD&EMmy1Ke7 zMa8g#!*sG#_XVPhQHYVzww#)#3b8eoTJjy!Q?{vetK~h7M9OH zOxzehA%l&Mn9eg0e!k5Sd-(I+yn(;b-R)C<-n36&*>=N~)@t$NFO4YcHTyH9p87^o zy$f$B4U6cIVPX$-f7~+TFN4lL`7$u@m*DxZ*Yq-BR05_z8qnsQ zJ}%8*WQTa6$_#L*wXrc^^J>Kv|ELkeb@WlUn4Sm3`tkAc-jqd=+Z?19f#QNBcS4n{ zmpfVMwhUJSz_%p4Yox0?@)pI&$VemP&d$lndF`5U>zf;d3sPIM-IuLP^Z;{iVUb=8 zdOFuF;bM8kx(@F$vfr9Fq9vtbi~$mSy>X9qN%+wh+i1vvN!^yEi^V(i4Z1}Z)FNK4 z+Y7yt!34h50TGbo-1;GX$VAjSqvXxZ%;e=S1{jP$rlU*O5x5R<7ywiPpPkooZW)bt z1(Xe)CsXIYJ;BE9is!W%`E0H=|CPQ$nw5oR1U*xmnh=+W9P3Wv6%iIbn)dIj1V;79 zYc?>o*yroxNuWS-r;=iDcxW%r&Cjom9=cdtC`TxpaCRkLAtgPR_-(N3oq+d#cM(^G z>2}WvXUF@y^Gqf#RG0NCbfuv>bFI8gFU|9?;?(GTxb%a&ch76=RX|b~#I3#Kyz*!- zGh@)w+YmplFpJ%1y_j5VVqf#=ar34wC_Dyqq}nDN>2qA zz`|TDsO`Vx(eCYBIUR5D2spXmdy?|B)VEpb)WiYLm3gdp(KRK>)4n;QZUu!WM(?$| zL*jYa_ZdJH$$1PH*Qr!+#S9hFW5(sS)c>$Eo;S?ZbsPvs&blM#)zOk?%7voG+kMH& z$uXP178f7dU!VW+B(XDk}X75`@ZyW^gNKbz`P%973kz-W-_;%e}aN4yJW=rMxh|?|~v;M|?duN?o2_Hi>6%d8g2Lu$$>pm})-9q-1!CK7XG7m;8>M_a;88Lx5{= z_u0FP6YKPxHw=XB$k8@7KM!JM8GJ;It`QACJQ1XfGh!y~^0cu-XFGkZe`q(&bSmJ% zARX{vw~6T)UgpHpx~4gYgM;q2ibNJ(iX(bqyo&-YtB>bN2UqJ3PYxG_@^6;DI3iOr zI)#$+{rmTGhvt-#V(jcWDoLVR*!OiRq`#RKeoRRL7yyXt@GFT54+^IVN~gsHhuR9q z=>}{vX9%nr@4ecb!=}=eu5Mi+q=~Ss;Qcl-QXvyTgA*_fkylw+`SRtOu5)q+t>^W>(8XFsn8rLkdpU8R1XUgk; zJOa;k`}W35OO>B1$_P3}jjVu(m#8n!_s%Iiw>=PH=uP0{cs;Nnl%=tP zn=WvMc~K)RbHXs=_s~U5`j=Y`U;Md1tm!f|l6gJwEfRN9fCK;1r6RA!2MX;Dz1usS z(el6}9UmWGjhpK3?zSEs&6(mI1wc|=Eu5=$-%^$N`$CoU1-iq%HUGoavYDSht%q_C z9JfP*M`7vwyhJ&(ek1S|>P>#_p0`@-T;xi-%U?2kepP=7Cf;jvmZ)c{&2v#Vi(TzLXj}8_uH0&g3ioCyJCwS_h zZc;g)8%grs3zsK$HOG57TGu94VgA%M?x&Ca)~wTmg=(iLC&D#$`q=h~i3wV_3dqhS z`JH;r^wJSe8mHe0efDn~Z$iiF>#7-uoa+42j;cM4o!H(UTkXr}E?b^_G*i?2^c%DN z<1h1NOt>D_=Lsohe$;P`?4kDQYRVj%4O2R-90L!yExUZSdu4|5jkK9bf%`Y8a>s}k5XdN0 z9uFa|a?;b&^YOVuu7LHNwl2q2qUQ_nWo2b$u`dG`2M5{mL}H#7$qkq*KHh8g+iMn$ zbU-4}BTTI;Pm#%(!ctDI6)p#yfh!e7>D6RWxEv4)WuQ;N&7a|4HT2nNf=V5(=f8#T zha22q;bKV>F_e3s|KcCDEe$xe$;runEs3^5og5kwFCrwQOlgz97y`>HD%@6v)fkA? z?w?Nx-O)&4)5@XXw&;L-%AO)>4~c5JA!x1k@Yf5@TErbvGjVY&5hlr;rSEB%IwhUF zyu8%?0u&)L`}+CISL#^JQ2kcAx^emWYtd}l?1ZfG zsQLLao1tG2b>=wD73;}tA_9N&APIA1HWt9*4!e#?-yH0qtaQh4iY1I%7n336SXnK= z%UYN5@KE4EJah5zSnJP<#Ge6djqGecxI8`Anb7@C0O(iXs`D|El3#b?B_;J0FeMa* z(!+EnH;CmtJq3)h905J@(B@CP}Dir+j7>7d=7pgkqfQa5I9Ho12@736~E$=Mp(bkHE>Z zIH~JEPXJ(N;pL6)x{b@OoG5sn`iwdRRBLNixD~8ktuasjy8(p#5tO{vut2d|#rtV0#@BkED zV1gada#i@zdd$uH^78UICue>$S-Gt>$U7L=>@pwkpMI3b05{mST7TjN{|>0+KuR|IMuhwZ z9D`PlPO>U90j;RMn%Zsq@jDhIwy;W3ZPDSjv~4Ko0@!DPx@!q8pe&h%bibA0}2I*`ok7fUrk118_vx`%dM%*Ucc@q=k zzW2*uONj^QB@kU}T;>S^I3r*L>p!a_YO1Ss*kjPmy^XBza z)M1*eO3KQ>l(O8snVW3s!{T&uP{__d@bHnkdXAjrfv?#@nZla8CG_`gcCqgNpQ5mw=Ig{tbPXvrTy;(01fA>f3AjmIzuXPdaK1eIxp9ia&mA0Im)vOOL%!hYIpp z;@L36d?>sM45*Fe7>Ef83FCkBs#ZLdz;zRceh7HX!puw*D%CMrZR)E_96Ad?9_mZU zXLz^ysY@Q$*z^w!M0cip;oXg|>LNkjp?diTicCx-j?^By2me-yUT?n8LMFf3NZ*2S zF!Db}fz~xU3$eRxWf_J6dGq-Wa=%;bbodS~y!yF@E@f`U8#m0&%)t0TdiAOe4Njo) zzi3C3c5bI9$H23NHvI%j52De}pFf|!coAn{5ioSM$#esT{(D~^K29Ty>jk>HlY{K4 zs>A(_nK-3&S)lNkX>mXOld4oQd>CgZ3G_#_JX{LW!UuYBb=K(eOF*@NljJyL9p(VM zAE5Jd+`L($&sYs;9}30Rm3De~{DK_v1_)`uimk)wKoOZ`{uAz1^!YP0?InER>ewDY zG>7#aew9B@zvAc8lHOrOll$uEWhC6|=;+9n{P${5)_REmR*^3Cgya|Og+L-)T->W) zVMGFL8|CS?!KAXaCFHfuTu~R<38S?#H%CT8V_)S8Ur^;Pa<-1@w8+;fGzC}ypC?bA zNT=Ku5I~nr`Hey50)9QK#^^G9HQVfXBeZPNEBo{3&7y8mZn4jURUQs}2{mS|Z=h%$ z{-5;E>=vfF(IN-F~c*#b?Yz$#N>F=ou`4Jf^%wfmd*N?M@p%R%ELbn$qfJ znL|xc$M#}h_NPy~DYkymqCPs2$v|}VgY!#qgJO6 z3|IeNj9b#rNyfLw>Qp5FgHxf2BG}zL@G9&tYgDt3MY;3Hr zPlGXXM6^@#!nw0R6vD0ncJraVP}lrc5RwiuH4P07&t4ou;JI_>#AP1O&do`?WZy%E zs4~xPp&?>>^{qnDw>n<2wa}XalEBDN_S)-sd(c~eYjC-t%1p}RPY{ps^4#5ur7O|v zoY}DY#V3d60BID|%Fc)~*sG#R4lmNjfUExNMH9p%xL|JI;wez|c(uZqIFenTKKA(UO)Fg<}WAf&ouJVO-@W*=B;osGTG(b2s=hO+rX3Tf)`D&dfEA-2YMhpE+GvMSN5 z&{y8V0niPOts?Sou-NSjiAhM7#YSbLK|w6h1I17gDia?cVR&Bv&!8J(M8mIN;f13T z6BGYv3qC$Rettl^RC`G2fCmkVFvtL3zI@5n&L8aW*EtR_X?%7&;fI>q2|GPX#pV0a zWGC|!7Gh@%%N{HBO6e0QVP;z+!DKWH^%&3~j7ssEdV1Cg=P=U&nvY{c-~}LF9|FZp zHw)jyr@oAtKTPqmFoXF#IH>??RooM^5E4EYC75IWkHv)0bz$FwZCExZJz`&Qm%u|< z!iX=bn)LQ9Y)>%NF%XA>iq_ZHCqUKpicZq@3IQfz+3#JP{-a3QoOr^!{9$h)PtLJ` z0}o2;mEIIw@n*fVXU_tUZ^HcrQ}jl(fEd@@*T;S54h3j15F>}KuqE(C@z-qb>Y7dsOVWZdrp$$W8Gnk`W>B_RQb0Jhp-O!ML z0!!b*g0ZvHx8K?gT#7LBQ1?1lP{Disdtvp2Y8pZ>+%+yXb`M;6!h7Q``Lzeu&d!?{ zsRk8m^uL$Fl8;(U4xNERhT3OyYYRMtfEwiGO^!nxzlH!`7p7C?Znqk`HQ#MnsN=o6A}1?L z!DaSs%Kucv_{-yTrZ4mjGD!50iSYHW^vE`kGs4%4doL#|G6Fnr0JONIm?Y|Z04NSY z2TH{5)>eBLxEy8Z!CwFiXynB0{!37dz-IuOaH{%4XJ;;$eyGv#4N57Fe z-hP0fgGdIO+zx_3ks6U#0Yv$vJ=*GM-@_rJz5BJ1bY4+0F@DFL9)Yj&>(JnW#SqNP`0=-Ivfv#%SZLqA;=?64owVEE=RdtojGR1b8Fm|v#C;GU9*oQl+?mH% zy>?*=ATXw;r<0MBgAiU0G#mitTVjp;KKtw7PaWf9`Z!wOSa|3V)n+6(XPBs4#$$+5b3#I_bjBWgypqB@=FX5~o1 z=;5&k(s&cjg@fHy?~R{L2mDVrA60{!>a7F*_eIxOP9r`FJeUmdY?g4o@$~lITN&v) zf?}u6eKmgI&{z_Q`E-bplah{Cy0u%sg`5fllHlLnAb7giabBt5>Ls6Nurg z(QOAsx)?34<(rX?&Tvmpj{ED=+k>Y`^Id!4l#;XaB6wUXHT@%+xfh;OsHg?kO0WY6bsEXgZ=J?^Dhyf@Odqe=PpfTi1rl`)XC0cFdbzGmZf< zwVM_KYHT%gc69vVTv2kBt^Y)l?8SiURNQD;g3FzE&-A$aYj2cwUE<|QNJ&W<7|EF{ z6TCX-Z{=4}{YkJt*pbRjT87>v4)KD>bQ{6U!czF+i16*I+LlX&J`||!Ny7%eX<+|{ zX^KpUvLn4tCrCgt5v=BSSG64q(O2|O^*PFRxyRjOF+^t3h%FGQC)v%j4jo0(gGuyJ z?I?gu8?fvkxGj&TSh<~~KT4fPs3ZzD&2NF&*Jg_&^x1Q34od7zv=7K)ye7@nB-Do2 zSG|M(i97T-%-nVfzBwh%;BL!p`Q*42AJ`{cdhhZ*b}nA&D=7kqHeWO zYO)u1rzv$xR+{RJ?%%IiC*U88t#)wDkHVf(@iYDynm5 zC0sJB3%{B=LHu>Sh$ZyVU+-`+_8@PD+F$~I#NXrcXTOM%)#>RoiS2`stAm4agY04> z-$Z6~`s+@nM?^9g>%EzwlM|&lHpu@b3l_%oUMn-MD>DWetFmCbmu2|r99NxZnMM>7 z9S!y^MkXeiQ8Ri-4-tWLC+g~1+W>iB!+}F@ZM1|9STvq8oxbHAC^cFkBllt$UR4ux!8#j^3^ws9FG{!%~mELhM+L<1h6}JZ2K<%CFDZL zuETf*rVk!0N5m;cKvn<=0^%izrOa!kmHwxGkR4&PkjS$Tl)+^P&yHaRE>C-})nuq= zz4g5z4Yoa9U-l>(@bCyGcJ=mN7DV7h%ioA>1uo%DtC<$9czW*}7Vj_WGN%aUp8qiwOxXFIpe?gB z_5As=(aYVtnP`k(2NZKAMn`eT~kbtb_ zZ$Bvz!9)#%T5gNu6{vYj_hbK!Ch`(7xm6B-lA*d@E8qlIqgXUncp!4aVByEM^ODas z&qjoWQNj8j__C+|gdB;X;1<9H^%}e&uU@S;T;deREo3RtqaOE=T1<$&Ko^-N02(#49rb<0usy7+Z0+aI?>BQq zm{wJgA@3b`*g5FFu5L56lXX3LiSr@3Q9{07;EF6AL2%L9qG*@^@JTks*qVDFuDSL9J#0@&QK$6PVgS z)s(_05<5?phoCm;|5R;%#FuQ8Au?9>c(1%b1PZVk!~9+=D|;@c*!J@f@WAgA7KWi? zHQH-@(3?QhI-Gd!EDZpUY*cKe)<@oMQN%L7Ws|c0D3d^N=y6$@M;pq;vg=)FozKAi z1<_yO-C1@*%JVqJYV(X2F7mdFIZWCFhCfMB5hjk8NxBvY-63rW_I<(!fmgtC_ENN$ zDn(^@gcq68i!iJ(QJXY*sal7FhlBm=EO1M4N!Ou}%MzIM3y7rxN&sSxvy01e@w1WQ zha@v}lxv%)cCf$3T=irjrKUax`_+A#s#GQL)S%j90hQuYpX-49+|baFDZ(j_K%X40 zY3CbaP$P6Txx4QISW6CgEC8M^z*k`X?Eb-(OWpudYdEb~ZB9;yPvm>8>>Gi11O*}O z4I{1mqKIx`-KjBD+1it6n-Zmy${zv;KC4Z zjr2JLaBzj;ie1LY0wdIHGJ%4L95-&DzJ`)WNJs<{1=RmoS~?ha>8>a*XV)qCP*Ct{ zE`uDtTfzl&6eOcER3Z$fD-0J!> zxL!Sm$pG?}?8+4|598q-ZM4ujOjPc)G9~S!(a_KmvdQOxx#X4Qdv;$QpNUC=xfg)F zd>`eBcp@(DqJ0?|lAq7nX_ZT4$Am9YAnp(g%Zs`dsosDG3H1#a4>@(Ppv-=LB`9P^)jRqSoLu@-vWwyRzKOz!E(qS95IWmyv+;^4dr*3JcozH!N(Ufmwy&&R-ga@ zEQ5Q#e~Lc~$Ovo@N5CBQC+Wd2;VY2z9$5Ufp5#VYAlTU0H;7w-LIs&Q zf<{ChjkWP-^n(hZfcHN=-aA~Y^WR@LftIV;Ssp0mp{t`;nCRLclP2G7h#RNie?!oL zy?Y~r97u*_vW5efz>*F05rhda-KMEO3=sc4fRJq=$d8merTq3A03!f6unOQ_)Kmd1 zrp%o}bp(W9kPkq;FgbB+dj1y#B#<=@fkFbY#XP0gY7C<{sB(XH4lnrpSv{o}8YoDR zsp^YRIs)Cg)4|=n{cA#qnRx-OJokE80@$fLLPC-?UJ5;F3gk2qxWI>JWLW+#xnx1! z+1uF(0$+{rErJr@w|+Z5Wr073-1>W%&5FPhwDo!lR77|(c#I2lKnMlC0*}QPBn5D@ zFJ*F*C4;{U6UV4BulzAMNBNUn4-BKYeHIL;Vq#)#GD!>Yiy)kN0<1wg@xh3^NhoN5rme&%ur70ekoi=EUFO16na>GRNx|z= zSk@5Lo*XR0a)7$p$;aoY+H0Fae!?o`O-7X5AO$Ca(zh4uoH87Mj5ML;2Pd#WR!ECDkW|;rGX|<>*FB&)|uv@^j z!C(ua3ixDt;!x%_UT_+C(9+Vv#X;%Ah5Z1!7Ydtjduc#{f%tZnBH5z^V$mccEv>{1odbu%k4voM2 z4~lfyabiO=q+t#JquKWVk6!bCX#lqH4|+AyCFuUAvl7!X6y<;wcwmRckM$jI>~Z2h z8M!+XKQ;ZI8M%e7`Zi!RpwhY&9UOqu(0&3!*UE^fB-)H%_Y_ zl2X%2{l8W}8oFL0Mr`>|lCM<#grzc#u&D@efA?eSu#=%|J_t=ZuiSl?$-=BXbp#E_c7W9okJJ%*}50%4I*Tre50>IOb>9lzH5~>xDQyDoq*MP%? zSpkxigPR-E5(D}?4Qy1{&p?ubogGZ|g<$ge-A3JGd<&fYFfrR+BArvXEdGaqL{NqN zPGCTJHQ;{``1JT6&-9<$KK|}TU&(opEPl<=%?%S+hlXP3N@u|J#Y_sBaTZ$AT$1FF zvS65iw*WIBPnq70KtvEyG^rcYVzF5Ir{7omY!FgnYyLy4nR=EckN*|*>;Yk#h&lU6 z@Ie5a$sXX_#4frA3Z9Q>(o*^uEHk2_|5<2%vNAAi(AELdCik2DhqnVW14^VBx`K=K za(_3a%dtj(pESJ*<}A>VV6>W=o4+63y9Pm9R1}&@pqC&J(~t`b*3=XvskW{zWm#G9 zvzr=Ixnp5bq+!klU;)NXOe|@{d{mc?A@K3k1a`X_7j!xQZ+r3h&zws9yYUmUDSSrM z`MIbFI^KCHmB3zrY0ATZ%^#QPknZ9sy~5lsCqLq#NhbT`m#K2B$&Bc+vydxupxy-` zq3d}6x#I|ntoC4+rKNWC#tY|ueg!HYg~Qy*Vh{UAjy3(n8pE;$J`=i_*^ip zUxBckp7$Ksvy|hwnvPr~B25?kG12f;6~cm$LHP}rSfr@$HDm#n`P z^2jr1hyst9-s&SWjERnhw+@;7t*!0z)KO~d@{|=%R|0>x-&UlI(W!udz|_jPo%3Ek zH=(v6kCpf-IORunlA!A=D$1-5oltv{p_Bkx_X__XtOi*DyiDrz+YW4hMVYbcgc`FJ>z(7`xx z3zV=J*83V7De75E-Hp?Z=gvMsX@jf0WG`jlXvfmK|L9^+1F#kFwCTD2k*%o%);E*R z0$B!FT02W~B85?woTl7?AUvnBaOgx3?fnNqbH(K(tK6*mHuZH!1u?zxD25(c)jkED zbggXQm^(T9-yXqsClm=q7$ImE`xjuZKN2=v?Uop2U}W4~>YTLrvV zkA$t=aCvKNRgLLI+R0i*qvnlQPUrGkCJ(J_zbz}oipvz0_@AIN{7+B*(A7X2fe8vI zl(#@O_w=Y*w9J(hRY?PL-71<-_yl|C!P;H2MC(|$ zuiOXd+fSdHD;NfLo&N#Wdq7;^amq+fhe#0h=FRojvTvbPaDw+aQ6i`i2V&$v!l)?L zPPPtgEON#WQryB4Bt_<)1FOyoc5q`HpB*b*dO<+}u(ik*iOijXB8`-P+W3E05;n~? zfv~1vwh{&1J`0CpWYrR$PB*D?^Y$3INXChBrw7m_n5~s-ovtkrf;r=XLeQ`6b!5hr zpU3fdtYLO$=3`}0^n2N50$HP%8VSXOJ$~tfZUE#Zcu@91Ln;FbXHns0NJzo<QtGa^@SV%=zqNbpiqalu1dY!gYUK6(-IFKH}jlve;<{c z$)kG81uLwDl}dXxJ-ztYSin(lbl5>>GINjXbT*z|T&!?i{0=~}JAogtrKCo>VltY7 zAUQpO|IpK)HlKeoVYQ#Pp(d5*`EvQzetobZS{%VE?UHCR2H*vlW?;l(Z{Fv7(2SQ( z1}$%D8XArL-&fR>l)?vGj-ynwG`ZrS4?2vgWyrusQaDumo9>!nxwz#thxz z^~hFA%Fp|SyxMeTg*x4$hbzFYwy&6i#0_ox4{MRC(1oU^Cb7CY15QWM_msIe+1T2x zcueV1wYJW|LN0Hg0sya*4!pUl$p}e(Lp!v?`jzzaqet| z{^Wl57Z@~7gUapttuN#aV4WIhX~}rat*xmES4EtAY7yT5CbY>k-XVTy(e=iS8$dn; z5u8m=P5t_t>cA94(7%za3iOEt?im;G@PWeD?D38OKKS^)>%xB@(i1rJA5Rgo$WK9& zl97QS>z<}&F(^%-fxQMkjuDm>@L2=aCBQ&>FNmn+ssjsbZEfx5wgZILhoWIw2(%+b zmJ{RS?|nAq09{kJ3@S2e0E`2i3zG`%D6Ujkz#5_=@&@P9O!s#gW$5OK?q4lwTz!<*PDt7*x)#tl&|%xkFDhcv3)o z`D1*5Rzp1K6Tuia7Zw&I0&rNO+uCC}Y2gMSF!dzcTEotSeF|OLKtgcFw%0t`_-Ib` zBb{qRAXf{jv@x-heQd!HB{|kWww-o-kP7K!Bd~ zoTrX#HM>OtF5fcfy;zXqOY2+2#C)ze9d^trgz*CFQ~pqbzhQ+l3aWUMEv!#jSs3?8 zoxhmIrQ$>G=TMk{yfHR*6>bfLkZ$coINSjW_WNbj(A$%&ib!lo2mRcHrYoq^Lgl?M z8oX*fp|;Q4QKdFRm?l{;XxvxEc`kK59yb+2W{2O(m=oRjXY+PoI3UNBJEPiQG$dM{ zm~h4ML7$bwq%e+3YzmnyYxJi9YXyZw(2^S(ki)Ww=ZcJ&aR7E8IRI-Is2jKfc!><5 zotNqTqo-L-rQ-?alYWP*;3pR(fkaUEpoL(o8+tL9VgG_?d<;FNit#*II}^8v|N85m zKhY>qIY7bIT4W>xA4eyzXQwEC0$z#}^P^85uloPZ}pri=OCrX2yc zSY1DtQd#LWTKo`90&jV3$Xv;=AU^&AnhP^2uxntO$w*1v`aB%tU8D&5m_A27HypE2 z0tR$9M&$&)TIGXCM1Mx_un+=dM&_(gV<&1IB2p9-RC)p(t&~X~aW&S)N z;XWKgfMR+w*OjzouIH-%; zSY;8H5$Aw53R3P>hh8197A1=Mj_P9pOUiBC&%B`eE!|ac0vv9@2ElAF=RXa^I1b<( zr&}eMd+cMurj7~5<qS0RbF7#OsSrkpn$-cxxzwljk0lb_ibip zXD`EfN@uo)-}YKzOj9uD#d>y*j_Yto2ySon$_;)S#zR=#kM_?2P1o=G?_k{jdMMlW zH(+odn40?SPvb6Jn}voUVE&AK3ZWWTf*{vMtehm87#)4j@}qKwMwX@<4cZTYocxV|)<9y2s0qXb8PF~Df1L{6p~QRU zP>W_179I!C0>_994DhnDE`if(&fm@5{XO_!U;rpWUiLhwM~3v!f9vQt0*VnFAZ%nW zfQmm)ouLbb9sX55Jg{>Y#uk`1J%^@UR9D5i#-v z^cm@9@etidQXzUw;L3)m@ZrNX;1(fjLXS5zbaWl5=;iK~3>m`G1$=UiND)qB*u7RZ zJw1(S_W=18@)yY9@PXHVaFPKnkV=Vy(L`JjCE=70;9^LSumNEygJRsFa1~O?s!1~N z*_cQ7-JcGgoSeMgds^a=Pp9PPkM*US!@f&tqF*U7HhE;cqrdutN&P{V()AmN;uoG0 zZ0rrP_523?%()1)Mn)?QM^Dd`a0V&X{111Oig@WQv&{39g74f-96RBBFGfh{GGRg9 zv*lUh;@Kt8O@A;UAlmIRo+Rw4uB8P>?7{g3pkT)-rq|T?Dl5P2wThBu0C?ME3UO;- zXei|-ND6mlWX48EA@71<0U2*?-tuEfNePhQaGX?=DXb>|0(5B8!r|7|tfC@t`wcfW z1=SnF=yr8?r^I%_SwS`W;1~o>1bWKOoH?V&7%80sRg1|Kx}riuTYG3>!HOYkXjxlJ ztGcG9^OMP*3WAUjjyH01a})D4B-&0mUY5m^@c#-s5DQCJSNH#_;QZs6&f_@#O=78) zN=vde!lQO8C4KYjRDRBnlX}S2MlJajMkNx;uckb9WG6jtsL}4u!*%*GOuC%7hoWd( zqqMtJhj5WjBSr?WMF;)1m?`BAY9ZCKixL&K(LQqp^ zY1MZ7#fV&P2P;G#FE$~;)|gUwV4Zy72UO|eM@Z-4b}wGNnzIeDlZ-sM;_P7l9=YJv z-EkC;SQzz`;mERzxfnO7qkm5dg47-)b$!NFW1V61PKv-Cix__!sZ&x+qIho==Cmj{ zqXYc>77;tyv~@l-QR|yys+Eti-I+%)T+=UDp|dq2OzCt_zlHiOt)f-xXN7f|M~{51 z08v8W4xCA4#9`vFaGpln&&u}pG-w|!Cz3JxGa%0G*I#mqp6P$2n(|mx;4kgS{qYTpU%LD z2wyTPGLoHaPm*vfL}#iphYt~da|idxX46PRBcWUW{3Yi>s9C7CkNy5!rcn)ggoV7PVBU zlnMB4X+zG9yon<}243&Rs}+1Q{B|AuEy8$z^wsNl!GVFt-gZbJkQZ};;B4Zzn+n7T zyhHlu*#mIotJ6+RO*J$))|yP;&4hY9wXyf*%QIiOFCfs^0RI-P2sDu@l~0}=3=M5{ ztpO&0Zbu|~Ofw{Q1!vCPFsOGI>Swopd&9%ia~^T)rrqi3@t<(UnlhSJ((%&0Ipz=- zi#P*e?A>RiX82@GofDhAxbybkj;F}dD53OEyWO_o;*kph&jk$ z?nO35M+Jh;Uzd#2g$2k+l`h>M*%iO-`FFvOt`v(S+V6r9VoW#-;EhC~I;!AF> z0dXJX2*_(cUth?sK|KC9Gb5MF;hlnVrFy7Mshpd?CZtsh$|?Eaqvn?OYxbE@gBTf$Yxk6KYzE6wGZ5j#J{&DYALq@LKaprdTm5#{2c5} z7wKnLUvwnNV4I?f*h&};;cG!_IW{r^Ci@Jws$c@J*hc{et)bY-Am=cj&xAnoU88&9 zNxo0~0cY$D-Hu^|5OSOR$RYCtC{UO+%9ml{Ly56C|L2pYjrbQ6M zs(X4agwC=zZtU#n_;GKQURGv%xT3a}FCDGn!cr3z9BR2jD=`OQ+ENS!p*yCkE)3fp zJFq!W)YVmp9w?Dj-2&rv z%{`bMKXbm#fc8) zy8U7f=>EoAxA;*};8yU;ppRX0-hC+~mMJcb(vN;K>m%*>oz zT)qoc2+N!DrutaM`n#Iolj>a+w0Hd_Y1PQ^a8(d%qw71pT^WWrm8t@`=RjQwaa>#Y zcoSoh{--ot0RQD|b}!Z>n@Q2C@pPG#>|}dWiUlRRoIaY-rSY87Gas!E7`%D)fQnehn3IfR;$g1+xN;;7#Z zebQLd@_60n=T7H~vQ8};e=Jj)DX`D}?WI=vDakyjz}Op;jk;86=sNn|>w^@IDJfGOdg}Fhb@!qDTb(2E6W4afFtx$6?>OyhWOWuEw=xn z{nNr0wc&xvk9-nx-iMK2&Psdh%OhJ_S~7y1nORvicDO#2l^GF^i#H5TUmy;)*?Jfo z8@CnoP(5KnAa=NrRERs=|LaSSBkECgdPc@*m7g9#z~S!0hlLRl5n7qKT6SoyfkJCl zUS7E)RDYq+^j~U%cDA>+%FD{^QMZV?%o%U_`NFORZF@R7Ioa5xqcjdY+Oa^>D`JPL zobkB7{$k3fE7$f~8bb{y7ae$XIX0RKk*>mY;NQ6zT&&jF`jf6q5I`Wjm6!~s%^v&m zme@WK;pLs(zWk%5CI9U4h5YsE-^DDc)QQg0xcgB zY-#zkI+hACe|{Y)fwgUWdyHG<=xNdPySWDYJGJ{eDf_#2{dvZU&+0=DhmiUV9XR8g zdp~I=zk2lwYuABu9MD2Y7iltPIfC zf8`a9c%(kay_-N6u5J};g_e1n$(;O(#2W1N*3HwXEzqCu(xsifoh2XQa9^&Wa8zTF zW&MHB`g38YB%KC-BwT8WKFuBW?D_L90_m)j=QY0-8*}sb+Yw^6tvVg7JQpq~sjAx9 z*p!u*8yg1vtb2U&vPmz-Vq7ZIW41kDV=-vCk<~HX36W)u{9LD!0kFU&SrhLlG zJQMTn<;$0AYip9u!$yhbHG$>2X(~7}H8nN1sK_D5_Mi8h?r(iygtZXmm(tbnxJaR8LbAuauNO#0IR{XoVNy=$%(T^g$nIDGgpUPxU{?V-1~ zd6jP=)A_4cugc5Uc8}v6`sODaqi`OgqM{}^C*!nm>Kmi=jiMWARMa%TW@l@czn$rj z+i}WJh7q;=_+e7%?Hm}m3l9$<6qsjfp(CTB#6(5&Jl2VLRu-1~8y~6at`w>o;UNzC ziy!E5DebHi(P(u3YNa=E_@gpi32|Ye%BJ~cdV2c3hNsycyJRvvMIa1$2dbs72of;+dTytr5&Ge971e~UT8d*Q;!6yxe*`Nv(a+O6-m4)2t?k+(_a z)&3WGc>{cXt9Dmf+LEuPNIIKj$cZ!{9yY>y1 zB7^4aLX7dvHsWluGBOTsXomHZ7A^jV3G70L!kMV3s2)CiIG>OeLMB*TLf=1#7<8}l z@zam+uhK_$rK_EAzC`tChn=+r@jqdTL89>Mp(;P@c5-0ZT^E;v{)>pZpwxDniNQka z+|Bw8sb(iheDKX$2Z(RqpN|hO7&9QQ(MZ#zcG*`!BwAWpR{N7&@TtYc;#aP8H8o`h z?W{}e{a&isaf!jK%GrsWl982N^4!0JsB<17u-~faj#iKe zm|8ijug@S}liF;h?;hxN#=b-q3sGgs%G*ZWeIW79Y@PN??LK)aQ3zEuCbMd=I@`f1 z7r41NTB&#E&K*5HS8|3IqVL6*GfPjbPhQSy>4!9=I7@xG|yYEqh?$fuie)|M@2@$bMs33y*xY! zU1?2dDbrwsG?EmJ*H8EN+^>jgwYoemuM9_oYDdnuPaD27{^QZNRsO)xAU~eyS9%dY zsJF_Tri|ojXW=u9ObByi!3X+MqcswwJ?Bx0xt}zdUcY*UGE!HBX6bRkoi^mXd31k?ayqU0pqA^`wPeo>Ydg2rZYAZ6Tka;cL#TIjiH5A^~%` z+w>QGd^W~!A9OyzEh3_m*)u&elOxalGCp3fQTT#5;Q6+EL;AjPOy9gtdbNYTE^~J9 zOWWO0tKCo*qLxKs&}!N3%Eyv60b`e5I4o!c%Q0*c{jA+%r`uE=+>-}psKb+!O`BrR zPEAeqHE(Wie*b<;Q-BI_tKB?6%OY@D*}$Mb=FHWay=}r&Q=Il25w2_3Hq+wdOiEqQ z+u@N(Vs`CGVoiO0q>*wDKuJ`gRX7@M|3C{d0G~5gU2Z3dDkC3GeWNEiKAD)9=*L#V zg8+uc%O0kcmTmy-0O%3*kLZ+MUbH%{*nKnYFP)BaDAn;CE!sT>Ddp@5iT*MOw!8c6 zsjaLn-vjNEzI;(6cr_N?TQD(9r3ZxXyRLZY-=y1dl;=T2UH*TTul!g2ZX`bBLehr$ zU8mVKyj6G3sShXhhreuC=*{rFEfJuRcyjKmEdP}wJs5W#W;O|dLs={dIJbD^SAT{& z>W_sX5ZQAjLWtPRPClGPQ5F$<$ZCT{!{Pm{t4KyWlxoOB?Crc-oxQLrr#nu^Rj?xbAHS!+ z6VBSKvn#gO<61nV@T{`GPP27R=b?^lrvB;U^S!*AiK8|2tb+X+H%2>!l?H^6>HrRt8vUzL)s+}-Z!ZRc{*&uS5Ho)~4Ds}T3>&pFkL9K*V4 z%eV|ZDYIelGR?Sbwsc{Q-PprT<}s|x-;4AA)MbuXI$u^+78Vu;)&J-j$=jJdqr+VM z{12cA*VNRcsm2u;V&0P>kA7+`l&Efw?~}*ld9{TE1>ebs?7iaGb0Pkb-(Qt)h+wRR z%$jLS<_uUU?C!n;XpFeQvQVUIFLLUnpb--*E9i=s;cwn&xbMX?d`pI@uIM>5O=l! zRcWBFzxJnrF*lxwFCE7@C(BZD-NAc^yDD(Y-OcT@mngu)%5)3v>;Y=(>gsC7vr=oD zQ*oCf-G6s-0eDL16X*MKf!mJNhSXA!Q!HS80sr2US@Bgu0+bW%klBeTH3mJ}$SfxiGhg}kTwJK@pqaw=J8Cnr~u(Zu6nQfMt*W+4y3n`ppXAdOJ z-zEG4=176D><(Dv?R8@EyLU1`OoeMU&jV}Ma&+v?>dFEzie)!OM;I_GV+IV5<$As8 zviJ1xi16COL1l-BEv^*{x!a~8%YKezJ{7K;V2Zi^iinniL3t#tt`!p6~YxqEmp za>!h>tV3`q1qbhKtZZRu6zbhf_%*mPaVV!ef7)N5SuZ75| zqYxyJ1O!EK9V4UP)6*GVEG3z}g6aZA+G|5*IO&Q>rKgqHKYz_dr#f|1UJk9-sSOUI z#AvgPC|e8%2ZuyiJHFQbq>z~rFse{SYeOln-C()YxkW)4RB+P4`3pXF6ML)m40iQ2 zj3e>*!xLg1GI}ju2*iiy72Z;*`ElKYdf%)=|1uaq7X|DzHoxG|1m{};)R{fet+)%T zxZ5=raZ(usm3ZQ>T{k@z4JuXE_>5LfaXg7@-UPa6H^aZH@%+z>ewwt+d9z02c<%Ba zZSESjFSL-livC+-xEZc7>@vOmUdAa+AE)$B+z9=r=dbIfB5nlKZd+%ThE#A_4Pp~m}rRLK7Zb6=j*p`H9L!y08S?rfy2x5@Yw$DOkL-r`R7&^<>BYsyCm`_BP}yEDO7Aa zu2}Z#?u#SWNgv+;anCZ0@DB*s+1$Lq!;?ckapJ_yn>UHNM}PxhTR2jqqFP`FQ~YL< zpoKmw7w9|jB^=78;xn|gPw-lo>dgoSFL(FtpP`JOZYQlQH*wC+P(Dy!`Zy@fnglf5 z-X>mJTJ6p8yrv}%EX>U5?fg)@g@jxNKc`A1rKE(+_h$Q(=1ZLM{f&*&T7=U8bY%~x zTz2k%HEj+ojIOur{KY;Y|FU(I?K-_f&Iv`&QG4}M1@-c^pFelDwB)XHZUom2I_^Kr z$NSxWT{IgxoiEg0Vi8(z`IG&gX5mzT0rZoXg7`l|7f+h+!)k4BZYrs$3}ZlJ4L-5K z28*Nl?dG#GADT3ycw1fkvf-<0!^@7{VN8=&FN!Ah8+RG#JzvDw>7vX zp~g!8L#(n*@!6%uk0UEBlJdCl_<^(9D?j%dIk*tJ=7HV0CkDB{E&*5pvNUF9X(&gw zHHt=h$>}6|(sz2%XML}Z(>9h{ni34IF?#Ae*0sF*Z)tMwRjK`zivpT8O2}SOg16k? z&_Q3L^z1F=`8OO6{{PE=`5O33=a*(>+0V2lNqa9Kkw{-ceklzDyHR$-yXzj%Y3Il1 zo0Nd=m4uG`o07AHfhMS_t-TLg9s`HW=C63|_t!mm`1ro#8h|&_($e;>(+OAooSL%E zR0rzt1oZ@%VIW`)NVHsBT-++rn`;1@I}6xaGSL+mWK!agAz4J>iSdT{CimkgH@!u* zAG5uGAJWEizE=&s(3{=!`~>e}uOCD*D1MH3T>k%H->uEf%YXiK5-u4m5(vp}-uPy= z1GK*tv(sX6geeV%0XS>FcS4z}t4GH75V@=V7QRe5O$0#ijr{oAQ!1aX>xQoGi+9wl z(WuEnN7NI^+dT1I_TtHHeG5yAi+jn>EfeePJ3lC>sXcGDxx-oW;X~c{_&!c{V{tS& zA%O%-U{Hty@vaTv0kC{NJt|5A^s}X2V*oh5@yCAt{y(;AKJcltm@1Ecqi}gK_gECY zA|qoQn^`7`A?9gV7-+9(xgZm?3}~~fGi|PTkLe!?A-hwYva+(dM#;dU;fds6o>>n@ z#OD*02U8;=n%-QohEB&)GFeYguhbd8-YV9CJv;wLR7R{3wYk2_11*xQUH8wU%iOI;w02WJK4+M_g5P{DIM9FEWDK)}sDj*PxH%A3C7xuFt7z%(dtqYF6kjaliICKqG7nmd>uHoR92*d~r<#8ny zf2eU+e|&x949pU1_B(8ILpPr3ONZvJNS4r1rYxJ;`_mD5ktt%A#IIMs)LC{MCEt8U zBmR0hG3jxDE~`8I@&W_q)OYz4Eu1SSv~gK$A6S%~TByyDa9TG#@pb z7eO@jjA#su7+6P2Z}Mwa-}1S2A^rWoMtvfNB?xuqgib<< z?2mA_o(kH!$Azm0|9AQV3TKBF*w)6z9tz?5(s;<~j3$uOZ$Q04#s-O%LIO+@KhVcF zGoLw=>%}q*l$(-^#n2!oB_(BNXG>JJ!=ha>EEuWq%B9=^#p^HwdsdrjmAQbsy5lO< zlKuL^(A?Y{w30DUrPXzr;T1PjRKB$)i9v88x!lzoNy9;0>{6b;(LQ6@eGyfzPUAJ? zcx}1tA+P?DbIgk0w?2J%juAGJG%vPC9r{qXBq~VgSXIorxb7Q)35BNU2I(JRXK|nU zIax-@duP`CfjY3ee;YSLW<=Li|ACC6md-9T6#%!76XBZK?$w7c=I}Y&esm zE?dgLLQV|WE&S)te`#pAnR`II7~p4*yaPOe209b~s7jxug1c14ZJex9yj)7D+Hc(4 zS1Mk7YG+i#7o1oRvS@2*(a_dj>dlTvaZc}f&UI%%6MC34@bg=;YV@gPNEO4;CaNbQ zLP7;)WrJ<`CbjiJu!0hufc%m8~|$+WymMxWUSP{wzXi zB0lm#Dg}b>Tr8wSt&(;{TDnp#p2vjsBNa3n&`-3XxVe;!jEtgAUd~yZLcjt&BD=-@ zJ2^57y|5$dW(i+pkzL38va)M15TJF#Lfb$yLPJBLw|B-LI&|py^XG5{n%JH7i%k#s z&Z}3RfDk`_TH?2^U%w9b($mu3!Oym%>5#~44=0t(%*@=~ivUL~EkCGS95{*{3IwMI zq!>^nBpv&22Swi9+S&p&lYnq-y~*1Z)(b zsql)Zs3>XoU(Wz0Ny0o;^2E`~4G6v2jueo10u>Yx)+dk9@Ayma$1EYNUr%(R={@`N{38~+{4Yrb}k58#{?s!VM`*bAn za0@MH^cN)!qe6chww z%tbXzSOePxBZ;0({FI30jSOYis^xF;`&-&2vLSoBSH}ZaVMZX4oCZ?`%FKZS2W&gu zqX?w_bQqzslG5#W*9yU91n;!1xw%jXs_0OZa7`9&JY=6-yGO!60RmfPe~NP-Hs~uD zG1~90>89m4egno2?gS6NjR2=dpaCP!WOw#{|C>ltx-5%*u;L3{!39J12P z+pj!5J^lFcV+fpnZv}<=CeDzB`T6;!C5s1iTS4sHNEkVU2s$}Am+yzqco6H!leUt{ zeahhXP5?>xfXjD{1&bT13PcW;o+6q5BAb9AoXV_*2~CAgpt}xi0b`B6@nissY~HOJt+RTkOSER8;n+g+sE}B<;@7j?V`F2`!GJZME&c}{ z*>{Ju@oiheh$Q0b=T|OeY-Hs7>-!4`{Ucl}tE=F5ftq)3CjxF6)a(a81f5Mj_f|Fkx&3e2sbWi zX}tFgq^t+w3_2fHnDh?(#(064AjpXly{&2_EiLq+`uO_#dX+TYtu5)r(x72Da&e~<55o9oH142t{+`l0h^#a-Q3P*dva>WYer)Sd5U$SQg@ z+`)rvur*M-cUPltAk1_F**EprApok6aP`_tuP$&c0b9?qu{p@xnKaP1Zt7Z1iVN9osIUjB2YvieIy!0JKOdw3E3QKmtBv{-(vV#Xqw0{ezy0qu-zlLL@qi^57t&azCqN}S5D$BFT$RZA+ z@1Od^QDXi}i#2ocGA2rK4+UZH4m}R)t|tpTa4Dp^B_-j?|BQ zB*K8UhK3&VbbjgBTNyuh3C`Xt>qyYgiKEyx|LSI&j=~6tv#Z?o;BrJ=;?Q z!WGtK9~~2O_L|#={)GOQP@U=7uXQ#yDkBR)czaBJc+6j}*;2$vxX4Ebgf-aqcT!$C z#I~u8g`pG2j-|#rLf;3Jc4cKHXDuQlBZDTiKD8;>R5Wk}jtYzdwftZ%xz%}-5wcfF zS$WP=3NJDU(hhWDF4ax`!NI{$;6{DNV9)c+j|=B)R9V1bgZ{_T{m#Gl_cm%N>K?!x zZk%;{6u*m#8HMNur)Ue*CRiy7X={0XIaxLU2Qofj1@Pj&5aYnWKqaLx(s(HlKMBYF z3l}fK@h=b1n8-UDoMN`oMB1Rhz~J5GrYKfn3fl`^9*KbiCM=f>*r7=V8Utr(VxpsW zds6nGCh!ny+F|8Ez~e8e2BcrA-ItS*fzFviG3T49@g)$5e!u~?rV~44H{QKX+rYxn zCpZn0nUSH1mb#1VfY|o0T;Yj4vxV$hYAqLOGoQR3CmIk#rll5yy3R zn+S%pz1BYo0~l7tQ%9kHKS;Rp9>%=2y)Ef7vIz^C60)~dbiYL)zq6@n7Bb<;kt6Vc zd}94b2K^byU4q3v+ZC&?j+p9C?G#1Y#l=New+rang|J)N+QM+mV{f|~au*Jg_|LSS zCcROBHwuvZU&h60-?`HbYn$WY{K5KQDw7qVKOYp2AFZu{fI=VB(v%ZYn1PE*`7Gvf zC?8YIO349UlxN5!yD{Pcv`{ysGSeX9;Ra-$Q`2!^WC1drko!Z}S?KR{6Xlk_o={0! zUKqkctp^xl7q|aw`v<3}&9iz-ot;3yY-lD$lG`>ym?*Rdh|y=Q9QiUVC2MT)ei&_yrh2 z!t2*2DLx?}Pw%XkxQv=qi@HH708nCs=Zr7|xw40ko;nxy**xef>~92Tuo1EgY%HjP zygWQ(`wI4i!X^&ACL?`)8(A&~ky8}$>Yj+xAe=eOgi}A@z;29(SdbZ!Tq@D0?iCt^ zG5J>qZ>>zjk($VlBeM#F5PvVYRdX=o@VgMuMULc?*?GHPXNwF_mFEekIilRoj$v}{jmY0V<-wX9> z2OuL7iQoiT(B~dtXQs>#_Op6@*b$(52PkZ0WMs|ud@kT%6?_RQW)EeGZc!3-T>OzM z^SKxy<04q@*0wh1Z_%e+YsomR%$^FNzgL0!lAs_^1*hTS?8L;x{t`rNl@yS0gCHPX(jp)wAlChMX)8#yc!|D6hw0cd)0~pQ1LO4`)x(====69KzKL$wXs`4b=p8q!sUOt}bZO!Id4*;nIF(l$g5N#q z%#3;buiP<~_f~j2E!;HGSIqY68LW`hH;-o1=9x%*t9&R`yO-_Se3} znYiUb$M((+78cgZa30lUxs(6cnCjD~PvzzNxy+`VewiyNg?V}kef*f}?*6C2hp4!? zcz1Vqy4un9a6>~;aWFag5%r@p*^-hHLPEmVuV0Ici(AbjVxmYVF$L+&k9YJWB_%5g z-SSFxngcpIItXb*)N5Td-mcYi3B7*Zcz$|l_!cKVCxO5tsLJVB4vDPm>nkWI*g04q z&&bG#jEt=Rf-A46m_n|gtX%7IUXhvUOK_Wv>?sS2GzK9F$>v}d$zXhH>f=X`9&vDR zz_$_-Sz5I&CnqOoQGYGUXJ%$XLPGA|y-Q3?TxvEgB_Yw@*GJCz>8G!+c>j-w43rq zx3I8qbE;ZRU40@;Iq#L{E!obM)z$N}v)i|C{|F5g^(Wu&oe-ChxN-e@UteECW8?bz z`svc+;# zYuBzVFE7i<$sPRnp_+71RUHG{w6w5*2lMy$hgW^a81`E4aMqHepnVFM~?R#)AHR|(==&xTf3=It} zEq7tn#!Jl>7Z%9L$pc8AdpMxIpy={M$N!+Cqo=F;1)qvJpL0o}48cT0M<5H+y8ylL6io`@jI`7~A#?DMn zud>@l{w*G>v}M`nbxU)-yg19-D%9`Bpq5X4d%PIu`iPd+z7q!r=Qa^h24`$+tfW@= z_FS{;3a-WH&ks;w;pe-XH2a+XWNaV7NX}^cCnlmx4P)2GOR=krVP(3yyBE#mH8uGi z4?aCE?6pH%aZb||yQZqDI^a?7jZcSy)fgWelXI0*RGhacSI*OpD z1j9{F1CvG(U}O8Km6~qXCMYQ>+1uNbk&)Th*i^+A743CKaS2?u2{wBnF_;F=km>R9 z@!8o`x~(C(FgM;(5YHL2vczAiCQR|MEm{dv1c*%%eeGEqnu3QBIO?wzqQVpN6k&zu! zh9qq8=^syYuo3v-(9qD>*w{Y_udTm-JW&K18k1m>%?%ANVFe%<;@qn5>kBD$Sy`opg=urlx_xQk@qzCUsa?*cr<}R}3#EH8^~l zRE)2`KQ10#ESDK&C{x~wyjMP~4P2}C{6Ou^n>X*@|IOE~$DlSfHC2fE_U#+oLO$Z? zvNk}-(9AMsGkuLXz1v!3(m<{32=2-##lbbkni7$jh@eH>XCuc=1BL(uRqjpP!MjqrblpVp3Hg zDmb`TRN%G(^+13B>Tuq41e?Bxr)PHzZ}WMemyDufF*xM3>*YDTCgn@JX9hjs_1P+g z6ciM`qDBQd9&T(ugw;m{&CbrUm~ugkR8djU(1@v@ks-_^xQ*mAo9dYE8ypNJs9U|0 znv(MC9izSdv4_WX&8Ue9^~}wk2;|SWI2Ib3q~zouv9VpXE}60Cr<=6{@|pro&CTA! zj~_q&f+ZEn?&GSG8C`3?`^6zLA_7uK2E^s9dJlT)0TRB$OKfWDe`CeQRh){7iYqHC zSFv+Q9=3cI{5$%E`RvAIB_tTSo^QkE(}nu@u1-rm38)|;Z@ldx zxL0aUPUq!A%kl|KqQ_fl&SyvF$gkDae6DE3?{##9FrL!W-~I|)50MPQ!rAtv0tO~E zug%)u;-^oZ#0N0(zId^f$#Hci-SZama&r8&G*l^hd6y^qtDy|aMuvv-|Ng1hIN7g{ z6~l5kpX~Yg`x6^5!p4TW##*lq5h8Qd%aMG1wi^^toth<|B7T#}xDU6Dk4F*g>~;%C zh>1DB?m`6(W+}VwP3W@u`1s_gmxmlGyngL|Ak+Y z$l%~0n#gbYMQlq;%i1y*Jny;rdFzwC<)fpc=;-K^6NjldENtxK?g~RABdq9pqLH>r z+f5AWg@uLdQA?wRi;I?DzkYpysoj_no?=WKMp*%!Az2 z)TX$5#Xch=@7yJ21fJfckB02~`*Gx@gUgSQkiHt{(}Ru4dl2^^&ybSZfkWiy=eyrP z7ZDa-T3+5(B_|`pj6O@M*nvp3Fde+L_1XRYQ)XuPYfH-;B*x(4DUX)ZFh7KR>G)gn zn_qo=#QOg#*XH+h0sh#MN!mY>6{z5*=pqT%sBt>(O%ml`XBP>e$Vf^Oa>kAmaOG!Z z4Y3t2icrhQ&3%kwk4ZafG&G{6r9}lnf}RQ%yU;_srRGA9>;8fx;79m9MLO_eLI0Vv z3Q6|G{WGw5Z2%f3Ce?P^vkeUm@ZcXmex!Wy*^S3uY=+8DSXNO{k2PX`ettlHr5FnX z!wy2FzD;sfRrH_tMY^-NW&_*9#{(^^Om?->d@9MhyRsZ8h7nfH?j}~F=(tlB#xR0T{y_<^+`^OB3E`1UbW&l)h znv69>xxF$R<7$Jf^!ddA4*Jd|@9g}1qw7}5Q#3TMs;a8BwKb*aXhFq-FJErC+x6er zN8E{~K^?qSSC1xm*wdQS#Dho0A6<(zG&r~|5`RWFU~uYUO1WAWr!HRKKV;o~HDGNPIrp`A`S=^w8vD*c8?8TV?R z1x*~B)ue0QT97?~0C|e+)NW~M`HL^7ZveRJ$P;dJQDMnRBk~Ob=>Gn`GlW1EyUUAn zhcTdHT<4`U>~npZ-mXRuQPqVP2z^`Es|h;b~G0# zDP0OdUGn|UC6dwcamWzP7iY%bFK6XVL>gXiJ$A1PVhfFT7RUFQ&F;;G=4@tH5 z11cFZQ-Y8;pd9cp2;eVubmjox#=bEB073ua;v!B(MpDuQmI3=NBRBY1K@Oj@kp-#>2yd@C=S8D=Vw1sTsv(mP#+WyAQd1 zp)-o;@mtcDcKP4Fy@lt1kHFZ@X6>bB+2@%u^SN7i6b1$c@6^=pQBiF!FO%K7mz9`U zU^Ga7(FAvxgj&Vf`TXZ|9eR3tfMFyA1n;%ApWAMzXS&zaTu`~5{nD<#B`VsyzdAfV zKAx4CnVOs|EG!(&W4)4Bdy)86w|i!g|35O2_bo9tIzEFlS|C;8MPP@!-LGz|6)&*#LGiFfc|+&EjBdzBt!4_r9>c z!Gmr@IU@?M7&ZKjpbttLcfIPWDh%q{vmI;}ITaOd=M$@`K{-3+u=ao&8}@&Xr*+#-!%q;Smj>;I>&KHGC;_nFMEV zZ_iK(h&_M)+#XC~(9Kql%$+^mJoEbZf((_#=0K`Ne1IDz%X(8#DWzlAnIGpe(&S^V zAg{sRF1!YqeG7;5_lIBUp-u~JtgdI<-oItU+T5<)0HAH(36IC^u=nJ$3hmy#sG=fv zcWW?*#AQKJz=!}GcE=PH6`53vzJ^mbj*R>qb~|~q)ntREuJV|fId{1xIXQU?KO^O2 zJFcSO+wX!T5&wrM@QW>U={SDL$PQ^QsT;O&ZeikY-<}OTdkxuLLqlWbIY+%}{FQI~ zo1d2*_8@%6Nk^9kC0gSLNJIX+{Xs+R%+m-1>e7UfX!;oQ=hYw~wJ-wzKDC&?QQjfzrJQcBIrVt7^;+xgMk z%d6V?w4|m+Q$nJ>p#gPiT$-E9OhY3iA|euhOIKHSU~o_teZ%e#pdBcUz=_?BGY5x< zy}x_`uu?esiHV5`>ZJ>N52i zTgfRYoe^y4iUfiK@AGlKKD^~=zCGJ$x!AS+@a^N>akJW#+zedALo{!ZSHi?3Bp)p#6ir)>1fj~UOUBtMC5KM-LLb$yVqP~eh1b_LT zA9xWU5W?hG)Ck1aA{zw^@bV)w_w(0GRqf=!qZlfCJ!4_ngkr7JObbc`n^pwE?W=+4 z)mef^GXGr^b2)Jw4GnFvE9QGp&`)m5)a>l+&z!&wZN08rBIIOe$GOj=psHF?RpnHN z!bFZdgj3ltlSCmWI79qF!@f&^WY(%VJJ~k|EJOW?1cCVLhw7zqI^2kfh#=b^>F8LS zth7arJb@D}F_H*|hKCE^F|Pdj`SYE#b2Y)$t$HY!m{97>T!4+Bq`STiWjs_Gjm^zO zNGogW{{H?9J5^P3Q&%{2UDOY2CPO~$$B!S3jEw2Kt}ibyPR-)@ouy)UINtwu<8wTK z2i^m)0iXq9uavZOX=$mMN*63gPU>qs6&3)%}bE09jfQT(C>Gz}3yox4TOX&zFgyygbvt zw!gP$M~5LG4IU>dN(Y#TL{>pT_ZexNim;~UMb<8C_X87I3}a*C#s>auB_uKt=#z+c z)`+(kl-i;S|K*3ggoK3DR1sTd*f+f#EsWx#BB;;pq=8$4zp6SjtV90lT#*#es+sHV zS#MQ$N+=ViCwn01`x zEM67D^n8WU+UYWP(3#yL>H@xKm39k(h#N?}77fH4WRVI0yyD_*kV?CvxrH!#dwU}w z8qM8xr$iNpHud6cc3e3qztd&Q*pOT$iV1fnMXH6Ic# z21tH*qket*=iPOCg>~ zK3K=Bo%T_ZR7_d?$|Rqla)gk`*_P?r49fehU-xN<(H=2KZO>ZJjn0Y@nP0v}xYn|Vo;@cUMa;AewSS6ewL@k8RWbP#kr{loang2FziLj)aL#>3k z>nJ?a14WRSuK05G-&mY$8pl%v!VcdnzjOZX9imWEf20Pxc$N`21)e0?HN4J1b$J9f z_YKqa8;^{lwLUvtYFRD9;-KOQumG&Mbo9G%XFt1v&*hmUlsY&S==5(mNff_g7r0>L zGiT%r$cPtw`F&fL505*)FuJ3FEn0!W>Q3Zs!o&UWPc775_ut9f&(sLe?P8n@J`jN zK}v;+oZM}uV{rb*caURC2I(OoZ{6dqR8oO+``=%8#61@~Zv7)ty3W)ZChoGbwDd*` zi1~-;o_Yp4`ue3G$G$qFPhy=gKW@{Y?WsCKn3__u9PG(#~d?f$^J%!i%5Lile z4GlN)Q1R{n2 zOS^J+w$V?udMerPmTP{4{qi>U@RB$tBA!SHE&$PEq(G9HnIit2Tq}YQ*=Ik zVhkpxCD7FsR*8!00Y?{H{DK_W0H!zc$upH1Wqy=+fx_nIyF#mL&SKXPR;oYwdnqR? z{&MK_`YwtF4B8eG=XHd3y3Xx)U*qHByV~m|lnll=4W#{Pzce;Bwz=6^s9QQZJ5?C( zPF`I?>IrH+9Ej?G0K6-ov$B9rz*Rc_KeF!sWp)2gMm0PUwz9JN{5c*6lUEh#eaD;gTNH1Kj8c7MwJ$oV82{;m9j2Ot50xMPUl#z`W*T< z5k0?VD6~aGVq>QY^V;1%tuL8%HM~9G|2bW)uND5|$DRLP<+tiFMFLVx> z=aSCL%-q@C&C1QSv9(o}m)|`+H1m8kQ@zzM+Ly}aB$ zPqSJC*m=l_n)%t;9Z-_i*VlJ<=K(2dHeGW*FbnuxI`(BodOB1JKtUTB4kh}wpN;T6 zA!TF^XV_CmAb5Nh?$!Ze1kwH;8QC`a)!~VWvx|$iK#2gWXA0Mm_Y?i^13%+_@ZbS2 z@2Py}3ks>{R8FX(=mjbb=OQwhIRE(usjeF zZ4bQ)cU@I#6M;S07(gJ#X#RH|?|mQ9(eZW)cNg{?$|fLd0sGgOny|96R#a59wzhU^ zUFGrBlEGJ!vFx%)xetSZI!5yYn4V8%!_E)$1f*hLxNlU!6X)M0M&fzb>(&UAwSD+i zrfw=EBxJ0M7RPSdv1G0zviR@c=W=zx+ZFu~bhiMFK!n@f*-39MFE58|5BV)8nAqvs z$7BSeDD19eIxwf@j)%?2^WMFC zESgm#ZEY)+n>F&v%0L(%#_-yXu`9zlO2ZRK1Moi@8VE(Ae4*dJ)1aU<1%7S^3P^a0 zSFc_Hy=xNs7>s)SeNkMw11t~RvXhEKRa2AMC<#(t{NPOD`2U&CY;IHFEe16UD4kDM zsEkwwL{RLkkxfF1vBJr5y7xF9&AXoLnUi|ax7WwQEDy6n!uA~ocKoAi@7FF=(q3h- zo~Z=U5i<1}3l5Qvc&C3#57Wd+aT5Cr4Q4_G@Ev9^_96YEkZ?o=(Yqnz4@p5kg*EUG zgMtVmS;6<8eKsg!OV7=qz1?^H&#mXJ(5FMbffW}N6dcHU!DrG5O(>uu`-5o^g1lao z+WLR{nnhS=f(2!Gp0_~PkDq_4L;Lr@c_~-ZQ&&f(MvK2&I&{+gA&(G(rzki)-(YIu zJeJuoazVY28b#12!(wS$nN|D?mc=JWzOJlZxY>h1PUww)yKR(B;F69p5Qr?1-)|ud zsCsDDZ~y~)Y)+Df*(f=OCw*Bo@ShA=UDNHhqXf9gD9f6d`PcD7$ZJn7%9k!*YILt5 z#z^)scri^(*2nqvfzR{x^8*~3@g9nooRFIL@*JKG&j3@n9m2I0-Z9?I!@7+uDlVp# zkVCsSPq(_djKRSKfCk4apRKT@MCpl>M1iI&#;?^Mo0t2ORS|o%Xo#MgzdZ)}O}ebk zEYal8^`zW2FIi30e0C@rF*db^7~!;3UJiuY!F8|v?_dV$6rL>?Rkr$AMwossqu-6wa|H#V3_rB=8 z%VGdHoj7z)X762YSg(zTU-=&j%TrHypbu9K>tk$k<^yWf(jMbad!x}qH3La3gxjqr zsE70nTyg35IIuFvbmvKWf8ZeyCNdbWhnl-^Engs|Zy?-0!aZSSj8Xt!sr8k6FD ziSX$qoc0qD+3Y31trMEv@DN@|R;vvIsY2^TbH62jL^ zK1Jd5g!*~WFZ)WRsjfn}0nrj6k_Om2QPZ2mOouc$kExTpTDZqQ&L*4DJrecy@tNtr z4*9bSj*8WH@;%9m2O|*Y8FV;+K6x6;Q+Re162o72k(l7MiTnGUDo7}lR|uns;||gw zIqere4X@OLCozXjzkj=hIl)#y<;Y&(^oJt!)HT=_sfpS?NVv<}4V|N=Z1^eO7Xd+< zTeog$o?fb#Ip`L@s--WTxgi2R{GS$po9VdYv$Kz{ad=l>3<*L|?G^RSSM`&Vx9d)U zRe%@&85LNNpC8W)XyfX^sHkaap+rMm!C-=0(KP=r7}rHu=Nk0=d*Nx2{!vybPvi=A zs`T14bkQLu6y0$^^{Cgl*ygBI>qC4;|5@7!xiuZQI zjw~FcACfmUB)j%jVJjyU+_-*YSqc{s{~9C%Do7!rRh(#_Y*qjthP|zR!^>CTLouEJ zS@_Vqn4uArBakjbAJVG+aQuPLI2%qaZ6KN z+!q86zY|ZmJo?Y&(OX+vT72CkIZlG_ zW>G;{ZF(iqMbvJ;GLo6r*$-Ik5CR-$DPGwY4aw-L(p`rP^HxNev?hF_}?ci#5V%pCc zUZ6>2^sk7xP|M&>!_i6f$7iHhS!nCp0wHo7NZ1P3OBdCTCB=HufMdRqpt&8~;zJs! z0TDLsw2ONMAf0Zz#6sZtzbG6@Qm>%;86d+ufUBIUvWHX(BukMi6wW%S-E1Y+D_kEE zhes{f^?U9jzLIO>gh5ZVyS*I<5)Dv%d?RDKe&Ys^V_x|h2Bj|p;!X@NTk8nNTM$vG zknEAd)9xenO2_?|AC(~W18oC3iE_R6y9^8r`uh56YU5BrP=C5JmIG{kob4Kux|1jA z9`%RY!o`lus7dX?HZIeNWOAs#pc%sFdQnwS5Hh83P4EuJK83dW)h8Ns8_&3~)`6RQ z6SMsOA#)=YV{wel#R4C)h01l4qloIoPWT*6$(fG9uHV0j*eDeHNC?V2A%X0-S6FQ$?Eoc^A|L+yc-Qaava_^Ji?$x zX;iLH+-_vv*kYxh{t3z%&;&sL3y9ET >?*ke#OX+I+cT?F*-qx}3N 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 X(p8_o@2AX1tVhCRCxf0&b3FGyDJEU; diff --git a/docs/src/examples/quantum1d/4.xxz-heisenberg/index.md b/docs/src/examples/quantum1d/4.xxz-heisenberg/index.md deleted file mode 100644 index b7192038c..000000000 --- a/docs/src/examples/quantum1d/4.xxz-heisenberg/index.md +++ /dev/null @@ -1,373 +0,0 @@ -```@meta -EditURL = "../../../../../examples/quantum1d/4.xxz-heisenberg/main.jl" -``` - -[![](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/QuantumKitHub/MPSKit.jl/gh-pages?filepath=dev/examples/quantum1d/4.xxz-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/quantum1d/4.xxz-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/quantum1d/4.xxz-heisenberg) - -# The XXZ model - -In this file we will give step by step instructions on how to analyze the spin 1/2 XXZ model. -The necessary packages to follow this tutorial are: - -````julia -using MPSKit, TensorKit, Plots -using .ExampleModels -```` - -## Failure - -First we should define the Hamiltonian we want to work with. -Then we specify an initial guess, which we then further optimize. -Working directly in the thermodynamic limit, this is achieved as follows: - -````julia -H = heisenberg_XXX(; spin = 1 // 2) -```` - -```` -1-site InfiniteMPOHamiltonian(ComplexF64, TensorKit.ComplexSpace) with maximal dimension 5: -| ⋮ -| (ℂ^1 ⊞ ℂ^3 ⊞ ℂ^1) -┼─[1]─ ℂ^2 -│ (ℂ^1 ⊞ ℂ^3 ⊞ ℂ^1) -| ⋮ - -```` - -We then need an initial state, which we shall later optimize. In this example we work directly in the thermodynamic limit. - -````julia -state = InfiniteMPS(2, 20) -```` - -```` -1-site InfiniteMPS(ComplexF64, TensorKit.ComplexSpace) with maximal dimension 20: -| ⋮ -| ℂ^20 -├─[1]─ ℂ^2 -│ ℂ^20 -| ⋮ - -```` - -The ground state can then be found by calling `find_groundstate`. - -````julia -groundstate, cache, info = find_groundstate(state, H, VUMPS()); -info -```` - -```` -AlgorithmInfo: - converged = false after 200 iterations - galerkin = 0.362154 - -```` - -As you can see, VUMPS struggles to converge. -On its own, that is already quite curious. -Maybe we can do better using another algorithm, such as gradient descent. - -````julia -groundstate, cache, info = find_groundstate(state, H, GradientGrassmann(; maxiter = 20)); -info -```` - -```` -AlgorithmInfo: - converged = false after 20 iterations - gradientnorm = 0.0112804 - -```` - -Convergence is quite slow and even fails after sufficiently many iterations. -To understand why, we can look at the transfer matrix spectrum. - -````julia -transferplot(groundstate, groundstate) -```` - -![](figure-1.png) - -We can clearly see multiple eigenvalues close to the unit circle. -Our state is close to being non-injective, and represents the sum of multiple injective states. -This is numerically very problematic, but also indicates that we used an incorrect ansatz to approximate the groundstate. -We should retry with a larger unit cell. - -## Success - -Let's initialize a different initial state, this time with a 2-site unit cell: - -````julia -state = InfiniteMPS(fill(2, 2), fill(20, 2)) -```` - -```` -2-site InfiniteMPS(ComplexF64, TensorKit.ComplexSpace) with maximal dimension 20: -| ⋮ -| ℂ^20 -├─[2]─ ℂ^2 -│ ℂ^20 -├─[1]─ ℂ^2 -│ ℂ^20 -| ⋮ - -```` - -In MPSKit, we require that the periodicity of the Hamiltonian equals that of the state it is applied to. -This is not a big obstacle, you can simply repeat the original Hamiltonian. -Alternatively, our model helper can construct the Hamiltonian directly on a two-site unit cell. - -````julia -# H2 = repeat(H, 2); -- copies the one-site version -H2 = heisenberg_XXX(ComplexF64, Trivial; unitcell = 2, spin = 1 // 2) -groundstate, envs, info = find_groundstate( - state, H2, VUMPS(; maxiter = 100, tol = 1.0e-12) -); -```` - -```` -[ Info: VUMPS init: obj = +4.997527111444e-01 err = 3.2696e-02 -[ Info: VUMPS 1: obj = -4.467165998476e-01 err = 3.1609479029e-01 time = 0.02 sec -[ Info: VUMPS 2: obj = -8.771683852570e-01 err = 6.2050493215e-02 time = 0.01 sec -[ Info: VUMPS 3: obj = -8.851498316480e-01 err = 1.1961437282e-02 time = 0.01 sec -[ Info: VUMPS 4: obj = -8.859041509393e-01 err = 6.3855220428e-03 time = 0.01 sec -[ Info: VUMPS 5: obj = -8.861046661398e-01 err = 4.2618759637e-03 time = 0.01 sec -[ Info: VUMPS 6: obj = -8.861780680439e-01 err = 2.8925460191e-03 time = 0.13 sec -[ Info: VUMPS 7: obj = -8.862081622654e-01 err = 2.2292422649e-03 time = 0.02 sec -[ Info: VUMPS 8: obj = -8.862224756657e-01 err = 1.6435394411e-03 time = 0.02 sec -[ Info: VUMPS 9: obj = -8.862294034930e-01 err = 1.3092870547e-03 time = 0.02 sec -[ Info: VUMPS 10: obj = -8.862329064156e-01 err = 9.9464595759e-04 time = 0.02 sec -[ Info: VUMPS 11: obj = -8.862346804992e-01 err = 8.0850406574e-04 time = 0.02 sec -[ Info: VUMPS 12: obj = -8.862355904749e-01 err = 6.4946824659e-04 time = 0.02 sec -[ Info: VUMPS 13: obj = -8.862360590666e-01 err = 5.4465159459e-04 time = 0.02 sec -[ Info: VUMPS 14: obj = -8.862363024838e-01 err = 4.6490637106e-04 time = 0.02 sec -[ Info: VUMPS 15: obj = -8.862364302780e-01 err = 4.0282057210e-04 time = 0.02 sec -[ Info: VUMPS 16: obj = -8.862364987557e-01 err = 3.5830647316e-04 time = 0.02 sec -[ Info: VUMPS 17: obj = -8.862365362487e-01 err = 3.1735310901e-04 time = 0.02 sec -[ Info: VUMPS 18: obj = -8.862365577473e-01 err = 2.8785456855e-04 time = 0.02 sec -[ Info: VUMPS 19: obj = -8.862365705090e-01 err = 2.5781877596e-04 time = 0.02 sec -[ Info: VUMPS 20: obj = -8.862365786770e-01 err = 2.3555411931e-04 time = 0.02 sec -[ Info: VUMPS 21: obj = -8.862365840895e-01 err = 2.1202440035e-04 time = 0.02 sec -[ Info: VUMPS 22: obj = -8.862365879952e-01 err = 1.9412564250e-04 time = 0.02 sec -[ Info: VUMPS 23: obj = -8.862365908485e-01 err = 1.7507326697e-04 time = 0.02 sec -[ Info: VUMPS 24: obj = -8.862365930912e-01 err = 1.6034513739e-04 time = 0.02 sec -[ Info: VUMPS 25: obj = -8.862365948285e-01 err = 1.4470698602e-04 time = 0.10 sec -[ Info: VUMPS 26: obj = -8.862365962571e-01 err = 1.3251239826e-04 time = 0.02 sec -[ Info: VUMPS 27: obj = -8.862365973948e-01 err = 1.1960733073e-04 time = 0.02 sec -[ Info: VUMPS 28: obj = -8.862365983500e-01 err = 1.0950376923e-04 time = 0.02 sec -[ Info: VUMPS 29: obj = -8.862365991198e-01 err = 9.8841277504e-05 time = 0.02 sec -[ Info: VUMPS 30: obj = -8.862365997728e-01 err = 9.0477029620e-05 time = 0.02 sec -[ Info: VUMPS 31: obj = -8.862366003020e-01 err = 8.1667414680e-05 time = 0.02 sec -[ Info: VUMPS 32: obj = -8.862366007537e-01 err = 7.4749996341e-05 time = 0.02 sec -[ Info: VUMPS 33: obj = -8.862366011212e-01 err = 6.7475286046e-05 time = 0.02 sec -[ Info: VUMPS 34: obj = -8.862366014364e-01 err = 6.1759302086e-05 time = 0.02 sec -[ Info: VUMPS 35: obj = -8.862366016936e-01 err = 5.5756232982e-05 time = 0.02 sec -[ Info: VUMPS 36: obj = -8.862366019155e-01 err = 5.1036052619e-05 time = 0.02 sec -[ Info: VUMPS 37: obj = -8.862366020972e-01 err = 4.6085571441e-05 time = 0.02 sec -[ Info: VUMPS 38: obj = -8.862366022548e-01 err = 4.2189530975e-05 time = 0.02 sec -[ Info: VUMPS 39: obj = -8.862366023846e-01 err = 3.8109078449e-05 time = 0.02 sec -[ Info: VUMPS 40: obj = -8.862366024978e-01 err = 3.4894596256e-05 time = 0.02 sec -[ Info: VUMPS 41: obj = -8.862366025917e-01 err = 3.1532851418e-05 time = 0.02 sec -[ Info: VUMPS 42: obj = -8.862366026742e-01 err = 2.8881208593e-05 time = 0.05 sec -[ Info: VUMPS 43: obj = -8.862366027431e-01 err = 2.6112378900e-05 time = 0.02 sec -[ Info: VUMPS 44: obj = -8.862366028041e-01 err = 2.3925599243e-05 time = 0.02 sec -[ Info: VUMPS 45: obj = -8.862366028556e-01 err = 2.1645498079e-05 time = 0.02 sec -[ Info: VUMPS 46: obj = -8.862366029016e-01 err = 1.9842772827e-05 time = 0.02 sec -[ Info: VUMPS 47: obj = -8.862366029409e-01 err = 1.7965352398e-05 time = 0.02 sec -[ Info: VUMPS 48: obj = -8.862366029763e-01 err = 1.6479776112e-05 time = 0.02 sec -[ Info: VUMPS 49: obj = -8.862366030070e-01 err = 1.4934164897e-05 time = 0.02 sec -[ Info: VUMPS 50: obj = -8.862366030349e-01 err = 1.3711041185e-05 time = 0.02 sec -[ Info: VUMPS 51: obj = -8.862366030594e-01 err = 1.2438715217e-05 time = 0.02 sec -[ Info: VUMPS 52: obj = -8.862366030820e-01 err = 1.1432932435e-05 time = 0.02 sec -[ Info: VUMPS 53: obj = -8.862366031022e-01 err = 1.0385875308e-05 time = 0.02 sec -[ Info: VUMPS 54: obj = -8.862366031209e-01 err = 9.5604213133e-06 time = 0.02 sec -[ Info: VUMPS 55: obj = -8.862366031379e-01 err = 8.6992460003e-06 time = 0.04 sec -[ Info: VUMPS 56: obj = -8.862366031539e-01 err = 8.0238879246e-06 time = 0.02 sec -[ Info: VUMPS 57: obj = -8.862366031686e-01 err = 7.3163045808e-06 time = 0.02 sec -[ Info: VUMPS 58: obj = -8.862366031826e-01 err = 6.7662395359e-06 time = 0.02 sec -[ Info: VUMPS 59: obj = -8.862366031957e-01 err = 6.1858182842e-06 time = 0.02 sec -[ Info: VUMPS 60: obj = -8.862366032082e-01 err = 5.7405851073e-06 time = 0.02 sec -[ Info: VUMPS 61: obj = -8.862366032201e-01 err = 5.2657759313e-06 time = 0.02 sec -[ Info: VUMPS 62: obj = -8.862366032316e-01 err = 4.9086532906e-06 time = 0.02 sec -[ Info: VUMPS 63: obj = -8.862366032426e-01 err = 4.5216221699e-06 time = 0.02 sec -[ Info: VUMPS 64: obj = -8.862366032533e-01 err = 4.2388065454e-06 time = 0.02 sec -[ Info: VUMPS 65: obj = -8.862366032637e-01 err = 3.9249530862e-06 time = 0.02 sec -[ Info: VUMPS 66: obj = -8.862366032738e-01 err = 3.7047993738e-06 time = 0.04 sec -[ Info: VUMPS 67: obj = -8.862366032837e-01 err = 3.4517513192e-06 time = 0.02 sec -[ Info: VUMPS 68: obj = -8.862366032935e-01 err = 3.2843770942e-06 time = 0.02 sec -[ Info: VUMPS 69: obj = -8.862366033031e-01 err = 3.0817221596e-06 time = 0.02 sec -[ Info: VUMPS 70: obj = -8.862366033126e-01 err = 2.9584112144e-06 time = 0.02 sec -[ Info: VUMPS 71: obj = -8.862366033220e-01 err = 2.7971587484e-06 time = 0.02 sec -[ Info: VUMPS 72: obj = -8.862366033313e-01 err = 2.7102153339e-06 time = 0.02 sec -[ Info: VUMPS 73: obj = -8.862366033406e-01 err = 2.5825604765e-06 time = 0.02 sec -[ Info: VUMPS 74: obj = -8.862366033498e-01 err = 2.5250442735e-06 time = 0.02 sec -[ Info: VUMPS 75: obj = -8.862366033589e-01 err = 2.4242363359e-06 time = 0.04 sec -[ Info: VUMPS 76: obj = -8.862366033681e-01 err = 2.3900277294e-06 time = 0.02 sec -[ Info: VUMPS 77: obj = -8.862366033772e-01 err = 2.3102610808e-06 time = 0.02 sec -[ Info: VUMPS 78: obj = -8.862366033863e-01 err = 2.2940867965e-06 time = 0.02 sec -[ Info: VUMPS 79: obj = -8.862366033954e-01 err = 2.2305152062e-06 time = 0.02 sec -[ Info: VUMPS 80: obj = -8.862366034046e-01 err = 2.2279952080e-06 time = 0.02 sec -[ Info: VUMPS 81: obj = -8.862366034137e-01 err = 2.1766874277e-06 time = 0.02 sec -[ Info: VUMPS 82: obj = -8.862366034229e-01 err = 2.1843045604e-06 time = 0.02 sec -[ Info: VUMPS 83: obj = -8.862366034321e-01 err = 2.1421521997e-06 time = 0.02 sec -[ Info: VUMPS 84: obj = -8.862366034413e-01 err = 2.1571782976e-06 time = 0.02 sec -[ Info: VUMPS 85: obj = -8.862366034506e-01 err = 2.1217886209e-06 time = 0.04 sec -[ Info: VUMPS 86: obj = -8.862366034599e-01 err = 2.1421645111e-06 time = 0.02 sec -[ Info: VUMPS 87: obj = -8.862366034693e-01 err = 2.1117287888e-06 time = 0.02 sec -[ Info: VUMPS 88: obj = -8.862366034787e-01 err = 2.1359334516e-06 time = 0.02 sec -[ Info: VUMPS 89: obj = -8.862366034881e-01 err = 2.1182010907e-06 time = 0.02 sec -[ Info: VUMPS 90: obj = -8.862366034976e-01 err = 2.1360357707e-06 time = 0.02 sec -[ Info: VUMPS 91: obj = -8.862366035072e-01 err = 2.1293906978e-06 time = 0.02 sec -[ Info: VUMPS 92: obj = -8.862366035168e-01 err = 2.1406884482e-06 time = 0.02 sec -[ Info: VUMPS 93: obj = -8.862366035265e-01 err = 2.1413862999e-06 time = 0.02 sec -[ Info: VUMPS 94: obj = -8.862366035362e-01 err = 2.1486037196e-06 time = 0.04 sec -[ Info: VUMPS 95: obj = -8.862366035460e-01 err = 2.1540387251e-06 time = 0.02 sec -[ Info: VUMPS 96: obj = -8.862366035558e-01 err = 2.1588561110e-06 time = 0.02 sec -[ Info: VUMPS 97: obj = -8.862366035657e-01 err = 2.1672377887e-06 time = 0.02 sec -[ Info: VUMPS 98: obj = -8.862366035757e-01 err = 2.1707822036e-06 time = 0.02 sec -[ Info: VUMPS 99: obj = -8.862366035858e-01 err = 2.1808977510e-06 time = 0.02 sec -┌ Warning: VUMPS cancel 100: obj = -8.862366035959e-01 err = 2.1839074149e-06 time = 2.16 sec -└ @ MPSKit ~/Projects/MPSKit.jl/ld-release/src/algorithms/groundstate/vumps.jl:96 - -```` - -We get convergence, but it takes an enormous amount of iterations. -The reason behind this becomes more obvious at higher bond dimensions: - -````julia -groundstate, envs, info = find_groundstate( - state, H2, IDMRG2(; trunc = truncrank(50), maxiter = 20, tol = 1.0e-12) -); -entanglementplot(groundstate) -```` - -![](figure-2.png) - -We see that some eigenvalues clearly belong to a group, and are almost degenerate. -This implies 2 things: -- there is superfluous information, if those eigenvalues are the same anyway -- poor convergence if we cut off within such a subspace - -It are precisely those problems that we can solve by using symmetries. - -## Symmetries - -The XXZ Heisenberg Hamiltonian is SU(2) symmetric and we can exploit this to greatly speed up the simulation. - -It is cumbersome to construct symmetric Hamiltonians, but luckily SU(2) symmetric XXZ is already implemented: - -````julia -H2 = heisenberg_XXX(ComplexF64, SU2Irrep; unitcell = 2, spin = 1 // 2); -```` - -Our initial state should also be SU(2) symmetric. -It now becomes apparent why we have to use a two-site periodic state. -The physical space carries a half-integer charge and the first tensor maps the first `virtual_space ⊗ the physical_space` to the second `virtual_space`. -Half-integer virtual charges will therefore map only to integer charges, and vice versa. -The staggering thus happens on the virtual level. - -An alternative constructor for the initial state is - -````julia -P = Rep[SU₂](1 // 2 => 1) -V1 = Rep[SU₂](1 // 2 => 10, 3 // 2 => 5, 5 // 2 => 2) -V2 = Rep[SU₂](0 => 15, 1 => 10, 2 => 5) -state = InfiniteMPS([P, P], [V1, V2]); -```` - -```` -┌ Warning: Constructing an MPS from tensors that are not full rank -└ @ MPSKit ~/Projects/MPSKit.jl/ld-release/src/states/infinitemps.jl:188 - -```` - -Even though the bond dimension is higher than in the example without symmetry, convergence is reached much faster: - -````julia -println(dim(V1)) -println(dim(V2)) -groundstate, cache, info = find_groundstate(state, H2, VUMPS(; maxiter = 400, tol = 1.0e-12)); -```` - -```` -52 -70 -[ Info: VUMPS init: obj = +1.095066760899e-02 err = 3.8232e-01 -[ Info: VUMPS 1: obj = -8.684099588789e-01 err = 1.4192144156e-01 time = 0.04 sec -[ Info: VUMPS 2: obj = -8.856573419610e-01 err = 9.8872106961e-03 time = 0.03 sec -[ Info: VUMPS 3: obj = -8.861205883550e-01 err = 3.1733701748e-03 time = 0.02 sec -[ Info: VUMPS 4: obj = -8.862275964002e-01 err = 1.5516807918e-03 time = 0.02 sec -[ Info: VUMPS 5: obj = -8.862625967019e-01 err = 1.0267980767e-03 time = 0.03 sec -[ Info: VUMPS 6: obj = -8.862756220945e-01 err = 1.1282651615e-03 time = 0.03 sec -[ Info: VUMPS 7: obj = -8.862824937091e-01 err = 6.9628740468e-04 time = 0.04 sec -[ Info: VUMPS 8: obj = -8.862853415694e-01 err = 5.0842789444e-04 time = 0.04 sec -[ Info: VUMPS 9: obj = -8.862866503123e-01 err = 3.8421438111e-04 time = 0.04 sec -[ Info: VUMPS 10: obj = -8.862872825540e-01 err = 2.8867805561e-04 time = 0.04 sec -[ Info: VUMPS 11: obj = -8.862875933596e-01 err = 2.1457518770e-04 time = 0.04 sec -[ Info: VUMPS 12: obj = -8.862877471486e-01 err = 1.5782954819e-04 time = 0.04 sec -[ Info: VUMPS 13: obj = -8.862878233469e-01 err = 1.1508389249e-04 time = 0.04 sec -[ Info: VUMPS 14: obj = -8.862878610880e-01 err = 8.3336988600e-05 time = 0.04 sec -[ Info: VUMPS 15: obj = -8.862878797702e-01 err = 6.0038192052e-05 time = 0.04 sec -[ Info: VUMPS 16: obj = -8.862878890168e-01 err = 4.3094839313e-05 time = 0.04 sec -[ Info: VUMPS 17: obj = -8.862878935931e-01 err = 3.0849559494e-05 time = 0.04 sec -[ Info: VUMPS 18: obj = -8.862878958589e-01 err = 2.2040393489e-05 time = 0.04 sec -[ Info: VUMPS 19: obj = -8.862878969816e-01 err = 1.5724344210e-05 time = 0.04 sec -[ Info: VUMPS 20: obj = -8.862878975383e-01 err = 1.1207061829e-05 time = 0.04 sec -[ Info: VUMPS 21: obj = -8.862878978145e-01 err = 7.9802923961e-06 time = 0.05 sec -[ Info: VUMPS 22: obj = -8.862878979518e-01 err = 5.6786905881e-06 time = 0.04 sec -[ Info: VUMPS 23: obj = -8.862878980200e-01 err = 4.0384681808e-06 time = 0.04 sec -[ Info: VUMPS 24: obj = -8.862878980539e-01 err = 2.8706728032e-06 time = 0.05 sec -[ Info: VUMPS 25: obj = -8.862878980708e-01 err = 2.0396825400e-06 time = 0.04 sec -[ Info: VUMPS 26: obj = -8.862878980792e-01 err = 1.4486713999e-06 time = 0.04 sec -[ Info: VUMPS 27: obj = -8.862878980834e-01 err = 1.0285324661e-06 time = 0.04 sec -[ Info: VUMPS 28: obj = -8.862878980855e-01 err = 7.2999868426e-07 time = 0.04 sec -[ Info: VUMPS 29: obj = -8.862878980866e-01 err = 5.1797460190e-07 time = 0.04 sec -[ Info: VUMPS 30: obj = -8.862878980871e-01 err = 3.6739836299e-07 time = 0.25 sec -[ Info: VUMPS 31: obj = -8.862878980874e-01 err = 2.6052111260e-07 time = 0.04 sec -[ Info: VUMPS 32: obj = -8.862878980875e-01 err = 1.8468688278e-07 time = 0.04 sec -[ Info: VUMPS 33: obj = -8.862878980876e-01 err = 1.3089495633e-07 time = 0.04 sec -[ Info: VUMPS 34: obj = -8.862878980876e-01 err = 9.2749261799e-08 time = 0.04 sec -[ Info: VUMPS 35: obj = -8.862878980876e-01 err = 6.5706029833e-08 time = 0.04 sec -[ Info: VUMPS 36: obj = -8.862878980877e-01 err = 4.6538615080e-08 time = 0.04 sec -[ Info: VUMPS 37: obj = -8.862878980877e-01 err = 3.2956500195e-08 time = 0.04 sec -[ Info: VUMPS 38: obj = -8.862878980877e-01 err = 2.3334242105e-08 time = 0.04 sec -[ Info: VUMPS 39: obj = -8.862878980877e-01 err = 1.6518729926e-08 time = 0.04 sec -[ Info: VUMPS 40: obj = -8.862878980877e-01 err = 1.1691719289e-08 time = 0.04 sec -[ Info: VUMPS 41: obj = -8.862878980877e-01 err = 8.2744103020e-09 time = 0.04 sec -[ Info: VUMPS 42: obj = -8.862878980877e-01 err = 5.8551948016e-09 time = 0.04 sec -[ Info: VUMPS 43: obj = -8.862878980877e-01 err = 4.1428084059e-09 time = 0.04 sec -[ Info: VUMPS 44: obj = -8.862878980877e-01 err = 2.9308969106e-09 time = 0.04 sec -[ Info: VUMPS 45: obj = -8.862878980877e-01 err = 2.0733038404e-09 time = 0.04 sec -[ Info: VUMPS 46: obj = -8.862878980877e-01 err = 1.4665094165e-09 time = 0.04 sec -[ Info: VUMPS 47: obj = -8.862878980877e-01 err = 1.0372149373e-09 time = 0.04 sec -[ Info: VUMPS 48: obj = -8.862878980877e-01 err = 7.3354405997e-10 time = 0.04 sec -[ Info: VUMPS 49: obj = -8.862878980877e-01 err = 5.1872860630e-10 time = 0.04 sec -[ Info: VUMPS 50: obj = -8.862878980877e-01 err = 3.6679629721e-10 time = 0.04 sec -[ Info: VUMPS 51: obj = -8.862878980878e-01 err = 2.5934803265e-10 time = 0.04 sec -[ Info: VUMPS 52: obj = -8.862878980878e-01 err = 1.8336362201e-10 time = 0.04 sec -[ Info: VUMPS 53: obj = -8.862878980878e-01 err = 1.2963594600e-10 time = 0.04 sec -[ Info: VUMPS 54: obj = -8.862878980878e-01 err = 9.1643274941e-11 time = 0.04 sec -[ Info: VUMPS 55: obj = -8.862878980878e-01 err = 6.4784009585e-11 time = 0.04 sec -[ Info: VUMPS 56: obj = -8.862878980878e-01 err = 4.5794931902e-11 time = 0.04 sec -[ Info: VUMPS 57: obj = -8.862878980878e-01 err = 3.2368796597e-11 time = 0.04 sec -[ Info: VUMPS 58: obj = -8.862878980878e-01 err = 2.2877874652e-11 time = 0.04 sec -[ Info: VUMPS 59: obj = -8.862878980878e-01 err = 1.6173234498e-11 time = 0.18 sec -[ Info: VUMPS 60: obj = -8.862878980878e-01 err = 1.1431584803e-11 time = 0.03 sec -[ Info: VUMPS 61: obj = -8.862878980878e-01 err = 8.0783379889e-12 time = 0.03 sec -[ Info: VUMPS 62: obj = -8.862878980878e-01 err = 5.7086349534e-12 time = 0.03 sec -[ Info: VUMPS 63: obj = -8.862878980878e-01 err = 4.0356697275e-12 time = 0.03 sec -[ Info: VUMPS 64: obj = -8.862878980878e-01 err = 2.8491662815e-12 time = 0.03 sec -[ Info: VUMPS 65: obj = -8.862878980878e-01 err = 2.0151560945e-12 time = 0.03 sec -[ Info: VUMPS 66: obj = -8.862878980878e-01 err = 1.4247184277e-12 time = 0.03 sec -[ Info: VUMPS 67: obj = -8.862878980878e-01 err = 1.0046235154e-12 time = 0.02 sec -[ Info: VUMPS conv 68: obj = -8.862878980879e-01 err = 7.1313164474e-13 time = 2.95 sec - -```` - ---- - -*This page was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).* - diff --git a/docs/src/examples/quantum1d/5.haldane-spt/figure-1.png b/docs/src/examples/quantum1d/5.haldane-spt/figure-1.png deleted file mode 100644 index 3316bbcdfad35f36606bfd275a4ac1a0da47c32a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32642 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 diff --git a/docs/src/examples/quantum1d/5.haldane-spt/figure-2.png b/docs/src/examples/quantum1d/5.haldane-spt/figure-2.png deleted file mode 100644 index 6848d9b4bbae8e84d56c77d1055bf4e942304493..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31949 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 diff --git a/docs/src/examples/quantum1d/6.hubbard/figure-1.png b/docs/src/examples/quantum1d/6.hubbard/figure-1.png deleted file mode 100644 index 667b26219ff91b0be59ccd4f5ee949a441c3ad8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41851 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 diff --git a/docs/src/examples/quantum1d/6.hubbard/figure-2.png b/docs/src/examples/quantum1d/6.hubbard/figure-2.png deleted file mode 100644 index ec55e8749130cec10bb168a2f7977b9b9fdc84e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40056 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 dim(left_virtualspace(psi, x)), 1:length(psi)) - D′ = max(5, round(Int, D * expansionfactor)) - trunc = trunctol(; atol = svalue / 10) & truncrank(D′) - psi′, = changebonds(psi, H, OptimalExpand(; trunc = trunc)) - all( - left_virtualspace.(Ref(psi), 1:length(psi)) .== - left_virtualspace.(Ref(psi′), 1:length(psi)) - ) && break - psi, = find_groundstate(psi′, H, VUMPS(; tol = svalue / 5, maxiter = 10, verbosity)) - end - - # convergence steps - psi, = changebonds(psi, H, SvdCut(; trunc = trunctol(; atol = svalue))) - psi, = find_groundstate( - psi, H, - VUMPS(; tol = svalue / 100, verbosity, maxiter = 100) & - GradientGrassmann(; tol = svalue / 1000) - ) - - return psi -end - -H = hubbard_model(; unitcell = 2, U, t, mu = U / 2) -Vspaces = fill(Vect[fℤ₂](0 => 10, 1 => 10), 2) -psi = InfiniteMPS(physicalspace(H), Vspaces) -psi = compute_groundstate(psi, H) -E = real(expectation_value(psi, H)) / 2 -@info """ -Groundstate energy: - * numerical: $E - * analytic: $(hubbard_energy(U / 4) - U / 4) -""" -```` - -```` -[ Info: VUMPS init: obj = -1.468489418346e+00 err = 5.1975e-01 -[ Info: VUMPS conv 9: obj = -4.377078635243e+00 err = 8.8168808972e-03 time = 9.43 sec -[ Info: VUMPS init: obj = -4.377078635243e+00 err = 1.6735e-02 -[ Info: VUMPS conv 6: obj = -4.378747252024e+00 err = 1.2361295846e-04 time = 0.12 sec -[ Info: VUMPS init: obj = -4.378747252024e+00 err = 8.0159e-03 -[ Info: VUMPS conv 6: obj = -4.379161083149e+00 err = 1.5147591757e-04 time = 0.35 sec -[ Info: VUMPS init: obj = -4.379161083149e+00 err = 6.1111e-03 -[ Info: VUMPS conv 5: obj = -4.379452158515e+00 err = 1.6672074243e-04 time = 0.27 sec -[ Info: VUMPS init: obj = -4.379452158515e+00 err = 5.6947e-03 -[ Info: VUMPS conv 4: obj = -4.379651693858e+00 err = 1.7048574253e-04 time = 0.25 sec -[ Info: VUMPS init: obj = -4.379651693858e+00 err = 4.1022e-03 -[ Info: VUMPS conv 3: obj = -4.379734900757e+00 err = 1.9568406227e-04 time = 0.22 sec -[ Info: VUMPS init: obj = -4.379734900757e+00 err = 3.5559e-03 -[ Info: VUMPS conv 3: obj = -4.379797739218e+00 err = 1.3879489646e-04 time = 0.28 sec -[ Info: VUMPS init: obj = -4.379797739218e+00 err = 2.7576e-03 -[ Info: VUMPS conv 2: obj = -4.379838449668e+00 err = 1.7162678551e-04 time = 0.23 sec -[ Info: VUMPS init: obj = -4.379838449668e+00 err = 2.7243e-03 -[ Info: VUMPS conv 3: obj = -4.379878835235e+00 err = 1.9410242419e-04 time = 0.37 sec -[ Info: VUMPS init: obj = -4.379878835235e+00 err = 2.6897e-03 -[ Info: VUMPS conv 3: obj = -4.379929227787e+00 err = 1.6816048594e-04 time = 0.48 sec -[ Info: VUMPS init: obj = -4.379929227787e+00 err = 2.5535e-03 -[ Info: VUMPS conv 3: obj = -4.379968042520e+00 err = 1.7686227682e-04 time = 0.58 sec -[ Info: VUMPS init: obj = -4.379968042520e+00 err = 1.7669e-03 -[ Info: VUMPS conv 2: obj = -4.379986883462e+00 err = 1.8114981456e-04 time = 0.53 sec -[ Info: VUMPS init: obj = -4.379986883462e+00 err = 1.5826e-03 -[ Info: VUMPS conv 2: obj = -4.380000785141e+00 err = 1.8783202881e-04 time = 2.59 sec -[ Info: VUMPS init: obj = -4.380000785141e+00 err = 1.5050e-03 -[ Info: VUMPS conv 2: obj = -4.380013154815e+00 err = 1.5341277502e-04 time = 0.66 sec -[ Info: VUMPS init: obj = -4.380013154815e+00 err = 1.4211e-03 -[ Info: VUMPS conv 2: obj = -4.380024394664e+00 err = 1.7785454577e-04 time = 0.86 sec -[ Info: VUMPS init: obj = -4.380024394664e+00 err = 1.3317e-03 -[ Info: VUMPS conv 2: obj = -4.380038147448e+00 err = 1.5752544479e-04 time = 1.16 sec -[ Info: VUMPS init: obj = -4.380038147448e+00 err = 1.0028e-03 -[ Info: VUMPS conv 1: obj = -4.380043676003e+00 err = 1.6642351068e-04 time = 0.69 sec -[ Info: VUMPS init: obj = -4.380043676003e+00 err = 9.0907e-04 -[ Info: VUMPS conv 1: obj = -4.380048631245e+00 err = 1.8550023124e-04 time = 0.99 sec -[ Info: VUMPS init: obj = -4.380048631245e+00 err = 8.3047e-04 -[ Info: VUMPS conv 1: obj = -4.380053194046e+00 err = 1.7976862986e-04 time = 1.02 sec -[ Info: VUMPS init: obj = -4.380053194046e+00 err = 6.8098e-04 -[ Info: VUMPS conv 1: obj = -4.380057135166e+00 err = 1.8942646284e-04 time = 3.55 sec -[ Info: VUMPS init: obj = -4.380057135166e+00 err = 6.0296e-04 -[ Info: VUMPS conv 1: obj = -4.380060542793e+00 err = 1.8183804864e-04 time = 1.50 sec -[ Info: VUMPS init: obj = -4.379609680843e+00 err = 4.0950e-03 -[ Info: VUMPS conv 19: obj = -4.379763262608e+00 err = 9.9349957478e-06 time = 5.15 sec -[ Info: CG: initializing with f = -4.379763262252e+00, ‖∇f‖ = 3.1505e-05 -[ Info: CG: converged after 74 iterations and time 31.48 s: f = -4.379763378976e+00, ‖∇f‖ = 9.7995e-07 -┌ Info: Groundstate energy: -│ * numerical: -2.1899959892263503 -└ * analytic: -2.190038374277775 - -```` - -## Symmetries - -The Hubbard model has a rich symmetry structure, which can be exploited to speed up simulations. -Apart from the fermionic parity, the model also has a $U(1)$ particle number symmetry, along with a $SU(2)$ spin symmetry. -Explicitly imposing these symmetries on the tensors can greatly reduce the computational cost of the simulation. - -Naively imposing these symmetries however, is not compatible with our desire to work at half-filling. -By construction, imposing symmetries restricts the optimization procedure to a single symmetry sector, which is the trivial sector. -In order to work at half-filling, we need to effectively inject one particle per site. -In MPSKit, this is achieved by the `add_physical_charge` function, which shifts the physical spaces of the tensors to the desired charge sector. - -````julia -H_u1_su2 = hubbard_model(ComplexF64, U1Irrep, SU2Irrep; unitcell = 2, U, t, mu = U / 2); -charges = fill(FermionParity(1) ⊠ U1Irrep(1) ⊠ SU2Irrep(0), 2); -H_u1_su2 = MPSKit.add_physical_charge(H_u1_su2, charges); - -pspaces = physicalspace.(Ref(H_u1_su2), 1:2) -vspaces = [unitspace(eltype(pspaces)), first(pspaces)] -psi = InfiniteMPS(pspaces, vspaces) -psi = compute_groundstate(psi, H_u1_su2; expansionfactor = 1 / 3) -E = real(expectation_value(psi, H_u1_su2)) / 2 -@info """ -Groundstate energy: - * numerical: $E - * analytic: $(hubbard_energy(U / 4) - U / 4) -""" -```` - -```` -[ Info: VUMPS init: obj = +2.614696817226e-01 err = 8.5807e-01 -[ Info: VUMPS conv 1: obj = -4.000000000000e+00 err = 1.3727089486e-15 time = 8.05 sec -[ Info: VUMPS init: obj = -4.000000000000e+00 err = 3.3634e-01 -[ Info: VUMPS conv 4: obj = -4.289650419749e+00 err = 1.8514003381e-04 time = 0.03 sec -[ Info: VUMPS init: obj = -4.289650419749e+00 err = 1.1203e-01 -[ Info: VUMPS conv 6: obj = -4.359777339602e+00 err = 1.0863018801e-04 time = 0.08 sec -[ Info: VUMPS init: obj = -4.359777339602e+00 err = 4.4013e-02 -[ Info: VUMPS conv 6: obj = -4.372880960804e+00 err = 1.2173013239e-04 time = 2.01 sec -[ Info: VUMPS init: obj = -4.372880960804e+00 err = 3.2691e-02 -[ Info: VUMPS conv 4: obj = -4.375236954195e+00 err = 1.1823474657e-04 time = 0.12 sec -[ Info: VUMPS init: obj = -4.375236954195e+00 err = 2.9487e-02 -[ Info: VUMPS conv 7: obj = -4.378159084338e+00 err = 1.1896655123e-04 time = 0.24 sec -[ Info: VUMPS init: obj = -4.378159084337e+00 err = 1.9312e-02 -[ Info: VUMPS conv 5: obj = -4.379272965967e+00 err = 1.5785504511e-04 time = 0.22 sec -[ Info: VUMPS init: obj = -4.379272965967e+00 err = 9.9128e-03 -[ Info: VUMPS conv 4: obj = -4.379592229097e+00 err = 1.5550466620e-04 time = 0.22 sec -[ Info: VUMPS init: obj = -4.379592229097e+00 err = 6.4841e-03 -[ Info: VUMPS conv 4: obj = -4.379819377211e+00 err = 1.7492244997e-04 time = 0.27 sec -[ Info: VUMPS init: obj = -4.379819377210e+00 err = 3.8754e-03 -┌ Warning: VUMPS cancel 10: obj = -4.379964033314e+00 err = 2.1228913871e-04 time = 1.09 sec -└ @ MPSKit ~/Projects/MPSKit.jl/ld-release/src/algorithms/groundstate/vumps.jl:96 -[ Info: VUMPS init: obj = -4.379964033314e+00 err = 2.8978e-03 -[ Info: VUMPS conv 3: obj = -4.380010384690e+00 err = 1.4775313775e-04 time = 0.45 sec -[ Info: VUMPS init: obj = -4.380010384690e+00 err = 2.0609e-03 -[ Info: VUMPS conv 3: obj = -4.380041751472e+00 err = 1.6327804840e-04 time = 0.79 sec -[ Info: VUMPS init: obj = -4.380041751471e+00 err = 1.2364e-03 -[ Info: VUMPS conv 2: obj = -4.380055778730e+00 err = 1.8367318970e-04 time = 0.63 sec -[ Info: VUMPS init: obj = -4.380055778730e+00 err = 8.5857e-04 -[ Info: VUMPS conv 2: obj = -4.380064749403e+00 err = 1.3905483353e-04 time = 0.86 sec -[ Info: VUMPS init: obj = -4.380064749403e+00 err = 5.2502e-04 -[ Info: VUMPS conv 1: obj = -4.380067974756e+00 err = 1.5646749713e-04 time = 0.61 sec -[ Info: VUMPS init: obj = -4.380067974756e+00 err = 3.3275e-04 -[ Info: VUMPS conv 1: obj = -4.380070351398e+00 err = 1.3124347695e-04 time = 0.90 sec -[ Info: VUMPS init: obj = -4.380070351398e+00 err = 2.0349e-04 -[ Info: VUMPS conv 1: obj = -4.380072125236e+00 err = 1.1121064710e-04 time = 1.33 sec -[ Info: VUMPS init: obj = -4.380072125236e+00 err = 1.3635e-04 -[ Info: VUMPS conv 1: obj = -4.380073467820e+00 err = 8.5044825938e-05 time = 1.86 sec -[ Info: VUMPS init: obj = -4.380073467820e+00 err = 9.7229e-05 -[ Info: VUMPS conv 1: obj = -4.380074455754e+00 err = 6.4434476042e-05 time = 3.04 sec -[ Info: VUMPS init: obj = -4.380074455754e+00 err = 7.3791e-05 -[ Info: VUMPS conv 1: obj = -4.380075159877e+00 err = 6.2156890313e-05 time = 7.86 sec -[ Info: VUMPS init: obj = -4.380075159877e+00 err = 5.9911e-05 -[ Info: VUMPS conv 1: obj = -4.380075661717e+00 err = 4.2516777791e-05 time = 9.17 sec -[ Info: VUMPS init: obj = -4.379308796614e+00 err = 7.9930e-03 -┌ Warning: VUMPS cancel 100: obj = -4.379692711577e+00 err = 1.5979759574e-05 time = 18.31 sec -└ @ MPSKit ~/Projects/MPSKit.jl/ld-release/src/algorithms/groundstate/vumps.jl:96 -[ Info: CG: initializing with f = -4.379692711577e+00, ‖∇f‖ = 5.7923e-05 -[ Info: CG: converged after 13 iterations and time 6.61 s: f = -4.379692712497e+00, ‖∇f‖ = 6.2098e-07 -┌ Info: Groundstate energy: -│ * numerical: -2.190015347514464 -└ * analytic: -2.190038374277775 - -```` - -## Excitations - -Because of the integrability, it is known that the Hubbard model has a rich excitation spectrum. -The elementary excitations are known as spinons and holons, which are domain walls in the spin and charge sectors, respectively. -The fact that the spin and charge sectors are separate is a phenomenon known as spin-charge separation. - -The domain walls can be constructed by noticing that there are two equivalent groundstates, which differ by a translation over a single site. -In other words, the groundstates are ``\psi_{AB}` and ``\psi_{BA}``, where ``A`` and ``B`` are the two sites. -These excitations can be constructed as follows: - -````julia -alg = QuasiparticleAnsatz(; tol = 1.0e-3) -momenta = range(-π, π; length = 33) -psi_AB = psi -envs_AB = environments(psi_AB, H_u1_su2, psi_AB); -psi_BA = circshift(psi, 1) -envs_BA = environments(psi_BA, H_u1_su2, psi_BA); - -spinon_charge = FermionParity(0) ⊠ U1Irrep(0) ⊠ SU2Irrep(1 // 2) -E_spinon, ϕ_spinon = excitations( - H_u1_su2, alg, momenta, psi_AB, envs_AB, psi_BA, envs_BA; - sector = spinon_charge, num = 1 -); - -holon_charge = FermionParity(1) ⊠ U1Irrep(-1) ⊠ SU2Irrep(0) -E_holon, ϕ_holon = excitations( - H_u1_su2, alg, momenta, psi_AB, envs_AB, psi_BA, envs_BA; - sector = holon_charge, num = 1 -); -```` - -```` -[ Info: Found excitations for momentum = -3.141592653589793 -[ Info: Found excitations for momentum = -2.945243112740431 -[ Info: Found excitations for momentum = -2.748893571891069 -[ Info: Found excitations for momentum = -2.552544031041707 -[ Info: Found excitations for momentum = -2.356194490192345 -[ Info: Found excitations for momentum = -2.1598449493429825 -[ Info: Found excitations for momentum = -1.9634954084936207 -[ Info: Found excitations for momentum = -1.7671458676442586 -[ Info: Found excitations for momentum = -1.5707963267948966 -[ Info: Found excitations for momentum = -1.3744467859455345 -[ Info: Found excitations for momentum = -1.1780972450961724 -[ Info: Found excitations for momentum = -0.9817477042468103 -[ Info: Found excitations for momentum = -0.7853981633974483 -[ Info: Found excitations for momentum = -0.5890486225480862 -[ Info: Found excitations for momentum = -0.39269908169872414 -[ Info: Found excitations for momentum = -0.19634954084936207 -[ Info: Found excitations for momentum = 0.0 -[ Info: Found excitations for momentum = 0.19634954084936207 -[ Info: Found excitations for momentum = 0.39269908169872414 -[ Info: Found excitations for momentum = 0.5890486225480862 -[ Info: Found excitations for momentum = 0.7853981633974483 -[ Info: Found excitations for momentum = 0.9817477042468103 -[ Info: Found excitations for momentum = 1.1780972450961724 -[ Info: Found excitations for momentum = 1.3744467859455345 -[ Info: Found excitations for momentum = 1.5707963267948966 -[ Info: Found excitations for momentum = 1.7671458676442586 -[ Info: Found excitations for momentum = 1.9634954084936207 -[ Info: Found excitations for momentum = 2.1598449493429825 -[ Info: Found excitations for momentum = 2.356194490192345 -[ Info: Found excitations for momentum = 2.552544031041707 -[ Info: Found excitations for momentum = 2.748893571891069 -[ Info: Found excitations for momentum = 2.945243112740431 -[ Info: Found excitations for momentum = 3.141592653589793 -[ Info: Found excitations for momentum = -3.141592653589793 -[ Info: Found excitations for momentum = -2.945243112740431 -[ Info: Found excitations for momentum = -2.748893571891069 -[ Info: Found excitations for momentum = -2.552544031041707 -[ Info: Found excitations for momentum = -2.356194490192345 -[ Info: Found excitations for momentum = -2.1598449493429825 -[ Info: Found excitations for momentum = -1.9634954084936207 -[ Info: Found excitations for momentum = -1.7671458676442586 -[ Info: Found excitations for momentum = -1.5707963267948966 -[ Info: Found excitations for momentum = -1.3744467859455345 -[ Info: Found excitations for momentum = -1.1780972450961724 -[ Info: Found excitations for momentum = -0.9817477042468103 -[ Info: Found excitations for momentum = -0.7853981633974483 -[ Info: Found excitations for momentum = -0.5890486225480862 -[ Info: Found excitations for momentum = -0.39269908169872414 -[ Info: Found excitations for momentum = -0.19634954084936207 -[ Info: Found excitations for momentum = 0.0 -[ Info: Found excitations for momentum = 0.19634954084936207 -[ Info: Found excitations for momentum = 0.39269908169872414 -[ Info: Found excitations for momentum = 0.5890486225480862 -[ Info: Found excitations for momentum = 0.7853981633974483 -[ Info: Found excitations for momentum = 0.9817477042468103 -[ Info: Found excitations for momentum = 1.1780972450961724 -[ Info: Found excitations for momentum = 1.3744467859455345 -[ Info: Found excitations for momentum = 1.5707963267948966 -[ Info: Found excitations for momentum = 1.7671458676442586 -[ Info: Found excitations for momentum = 1.9634954084936207 -[ Info: Found excitations for momentum = 2.1598449493429825 -[ Info: Found excitations for momentum = 2.356194490192345 -[ Info: Found excitations for momentum = 2.552544031041707 -[ Info: Found excitations for momentum = 2.748893571891069 -[ Info: Found excitations for momentum = 2.945243112740431 -[ Info: Found excitations for momentum = 3.141592653589793 - -```` - -Again, we can compare the numerical results to the analytic solution. -Here, the formulae for the excitation energies are expressed in terms of dressed momenta: - -````julia -function spinon_momentum(Λ, u; rtol = 1.0e-12) - integrandum(ω) = besselj0(ω) * sin(ω * Λ) / ω / cosh(ω * u) - return π / 2 - quadgk(integrandum, 0, Inf; rtol = rtol)[1] -end -function spinon_energy(Λ, u; rtol = 1.0e-12) - integrandum(ω) = besselj1(ω) * cos(ω * Λ) / ω / cosh(ω * u) - return 2 * quadgk(integrandum, 0, Inf; rtol = rtol)[1] -end - -function holon_momentum(k, u; rtol = 1.0e-12) - integrandum(ω) = besselj0(ω) * sin(ω * sin(k)) / ω / (1 + exp(2u * abs(ω))) - return π / 2 - k - 2 * quadgk(integrandum, 0, Inf; rtol = rtol)[1] -end -function holon_energy(k, u; rtol = 1.0e-12) - integrandum(ω) = besselj1(ω) * cos(ω * sin(k)) * exp(-ω * u) / ω / cosh(ω * u) - return 2 * cos(k) + 2u + 2 * quadgk(integrandum, 0, Inf; rtol = rtol)[1] -end - -Λs = range(-10, 10; length = 51) -P_spinon_analytic = rem2pi.(spinon_momentum.(Λs, U / 4), RoundNearest) -E_spinon_analytic = spinon_energy.(Λs, U / 4) -I_spinon = sortperm(P_spinon_analytic) -P_spinon_analytic = P_spinon_analytic[I_spinon] -E_spinon_analytic = E_spinon_analytic[I_spinon] -P_spinon_analytic = [reverse(-P_spinon_analytic); P_spinon_analytic] -E_spinon_analytic = [reverse(E_spinon_analytic); E_spinon_analytic]; - -ks = range(0, 2π; length = 51) -P_holon_analytic = rem2pi.(holon_momentum.(ks, U / 4), RoundNearest) -E_holon_analytic = holon_energy.(ks, U / 4) -I_holon = sortperm(P_holon_analytic) -P_holon_analytic = P_holon_analytic[I_holon] -E_holon_analytic = E_holon_analytic[I_holon]; - -p = let p_excitations = plot(; xaxis = "momentum", yaxis = "energy") - scatter!(p_excitations, momenta, real(E_spinon); label = "spinon") - plot!(p_excitations, P_spinon_analytic, E_spinon_analytic; label = "spinon (analytic)") - - scatter!(p_excitations, momenta, real(E_holon); label = "holon") - plot!(p_excitations, P_holon_analytic, E_holon_analytic; label = "holon (analytic)") - - p_excitations -end -```` - -![](figure-1.png) - -The plot shows some discrepancies between the numerical and analytic results. -First and foremost, we must realize that in the thermodynamic limit, the momentum of a domain wall is actually not well-defined. -Concretely, only the difference in momentum between the two groundstates is well-defined, as we can always shift the momentum by multiplying one of the groundstates by a phase. -Here, we can fix this shift by realizing that our choice of shifting the groundstates by a single site, differs from the formula by a factor ``\pi/2``. - -````julia -momenta_shifted = rem2pi.(momenta .- π / 2, RoundNearest) -p = let p_excitations = plot(; xaxis = "momentum", yaxis = "energy", xlims = (-π, π)) - scatter!(p_excitations, momenta_shifted, real(E_spinon); label = "spinon") - plot!(p_excitations, P_spinon_analytic, E_spinon_analytic; label = "spinon (analytic)") - - scatter!(p_excitations, momenta_shifted, real(E_holon); label = "holon") - plot!(p_excitations, P_holon_analytic, E_holon_analytic; label = "holon (analytic)") - - p_excitations -end -```` - -![](figure-2.png) - -The second discrepancy is that while the spinon dispersion is well-reproduced, the holon dispersion is not. -This is due to the fact that the excitation ansatz captures the lowest-energy excitation, and not the elementary single-particle excitation. -To make this explicit, we can consider the scattering states comprising of a holon and two spinons. -If these are truly scattering states, the energy of the scattering state should be the sum of the energies of the individual excitations, and the momentum is the sum of the momenta. -Thus, we can find the lowest-energy scattering states by minimizing the energy over the combination of momenta for the constituent elementary excitations. - -````julia -holon_dispersion_itp = linear_interpolation( - P_holon_analytic, E_holon_analytic; - extrapolation_bc = Line() -) -spinon_dispersion_itp = linear_interpolation( - P_spinon_analytic, E_spinon_analytic; - extrapolation_bc = Line() -) -function scattering_energy(p1, p2, p3) - p1, p2, p3 = rem2pi.((p1, p2, p3), RoundNearest) - return holon_dispersion_itp(p1) + spinon_dispersion_itp(p2) + spinon_dispersion_itp(p3) -end; - -E_scattering_min = map(momenta_shifted) do p - e = Inf - for i in 1:10 # repeat for stability - res = optimize((rand(2) .* (2π) .- π)) do (p₁, p₂) - p₃ = p - p₁ - p₂ - return scattering_energy(p₁, p₂, p₃) - end - - e = min(Optim.minimum(res), e) - end - return e -end -E_scattering_max = map(momenta_shifted) do p - e = -Inf - for i in 1:10 # repeat for stability - res = optimize((rand(Float64, 2) .* (2π) .- π)) do (p₁, p₂) - p₃ = p - p₁ - p₂ - return -scattering_energy(p₁, p₂, p₃) - end - - e = max(-Optim.minimum(res), e) - end - return e -end; - -p = let p_excitations = plot(; - xaxis = "momentum", yaxis = "energy", xlims = (-π, π), ylims = (-0.1, 5) - ) - scatter!(p_excitations, momenta_shifted, real(E_spinon); label = "spinon") - plot!(p_excitations, P_spinon_analytic, E_spinon_analytic; label = "spinon (analytic)") - - scatter!(p_excitations, momenta_shifted, real(E_holon); label = "holon") - plot!(p_excitations, P_holon_analytic, E_holon_analytic; label = "holon (analytic)") - - I = sortperm(momenta_shifted) - plot!( - p_excitations, momenta_shifted[I], E_scattering_min[I]; label = "scattering states", - fillrange = E_scattering_max[I], fillalpha = 0.3, fillstyle = :x - ) - - p_excitations -end -```` - -![](figure-3.png) - ---- - -*This page was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).* - diff --git a/docs/src/examples/quantum1d/8.bose-hubbard/figure-1.png b/docs/src/examples/quantum1d/8.bose-hubbard/figure-1.png deleted file mode 100644 index f3e51f8c6e28086a305cb3da7c36315935786aa9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16580 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 diff --git a/docs/src/examples/quantum1d/8.bose-hubbard/figure-3.png b/docs/src/examples/quantum1d/8.bose-hubbard/figure-3.png deleted file mode 100644 index 47fe594f524d0154e469b5fa55624f1451477e65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39277 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 diff --git a/docs/src/examples/quantum1d/8.bose-hubbard/figure-4.png b/docs/src/examples/quantum1d/8.bose-hubbard/figure-4.png deleted file mode 100644 index 5587376b0cd04143098c1b7d337adce0a490add1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36942 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 diff --git a/docs/src/examples/statmech/hard-hexagon/figure-1.png b/docs/src/examples/statmech/hard-hexagon/figure-1.png new file mode 100644 index 0000000000000000000000000000000000000000..57317a051aeaa2bbcff3ac1eb54d53c995d6a562 GIT binary patch literal 16674 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 literal 0 HcmV?d00001 diff --git a/docs/src/examples/classic2d/1.hard-hexagon/hexagon.svg b/docs/src/examples/statmech/hard-hexagon/hexagon.svg similarity index 100% rename from docs/src/examples/classic2d/1.hard-hexagon/hexagon.svg rename to docs/src/examples/statmech/hard-hexagon/hexagon.svg diff --git a/docs/src/examples/classic2d/1.hard-hexagon/index.md b/docs/src/examples/statmech/hard-hexagon/index.md similarity index 84% rename from docs/src/examples/classic2d/1.hard-hexagon/index.md rename to docs/src/examples/statmech/hard-hexagon/index.md index ed983612b..a1f7bdde0 100644 --- a/docs/src/examples/classic2d/1.hard-hexagon/index.md +++ b/docs/src/examples/statmech/hard-hexagon/index.md @@ -1,10 +1,10 @@ ```@meta -EditURL = "../../../../../examples/classic2d/1.hard-hexagon/main.jl" +EditURL = "../../../../../examples/statmech/hard-hexagon/main.jl" ``` -[![](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/QuantumKitHub/MPSKit.jl/gh-pages?filepath=dev/examples/classic2d/1.hard-hexagon/main.ipynb) -[![](https://img.shields.io/badge/show-nbviewer-579ACA.svg)](https://nbviewer.jupyter.org/github/QuantumKitHub/MPSKit.jl/blob/gh-pages/dev/examples/classic2d/1.hard-hexagon/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/classic2d/1.hard-hexagon) +[![](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/QuantumKitHub/MPSKit.jl/gh-pages?filepath=dev/examples/statmech/hard-hexagon/main.ipynb) +[![](https://img.shields.io/badge/show-nbviewer-579ACA.svg)](https://nbviewer.jupyter.org/github/QuantumKitHub/MPSKit.jl/blob/gh-pages/dev/examples/statmech/hard-hexagon/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/statmech/hard-hexagon) # The Hard Hexagon model @@ -17,12 +17,11 @@ Because TensorKit supports anyonic symmetries, so does MPSKit. To follow the tutorial you need the following packages. ````julia -using MPSKit, TensorKit, Plots, Polynomials -using .ExampleModels +using MPSKit, MPSKitModels, TensorKit, Plots, Polynomials ```` The [hard hexagon model](https://en.wikipedia.org/wiki/Hard_hexagon_model) is a 2-dimensional lattice model of a gas, where particles are allowed to be on the vertices of a triangular lattice, but no two particles may be adjacent. -This can be encoded in a transfer matrix with a local MPO tensor using anyonic symmetries, and the resulting MPO is defined in our shared [model helpers](https://github.com/QuantumKitHub/MPSKit.jl/blob/main/docs/src/assets/models.jl). +This can be encoded in a transfer matrix with a local MPO tensor using anyonic symmetries, and the resulting MPO has been implemented in MPSKitModels. In order to use these anyonic symmetries, we need to generalise the notion of the bond dimension and define how it interacts with the symmetry. Thus, we implement a way of converting integers to symmetric spaces of the given dimension, which provides a crude guess for how the final MPS would distribute its Schmidt spectrum. @@ -42,25 +41,25 @@ end One way to study statistical mechanics in infinite systems with tensor networks is by approximating the dominant eigenvector of the transfer matrix by an MPS. This dominant eigenvector contains a lot of hidden information. -For example, the free energy density can be extracted by computing the dominant eigenvalue of the transfer matrix. +For example, the free energy can be extracted by computing the expectation value of the mpo. Additionally, we can compute the entanglement entropy as well as the correlation length of the state: ````julia D = 10 V = virtual_space(D) ψ₀ = InfiniteMPS([P], [V]) -ψ, envs, info = leading_boundary( +ψ, envs, = leading_boundary( ψ₀, mpo, VUMPS(; verbosity = 0, alg_eigsolve = MPSKit.Defaults.alg_eigsolve(; ishermitian = false)) ) # use non-hermitian eigensolver -F = -log(real(leading_eigenvalue(ψ, mpo))) +F = real(expectation_value(ψ, mpo)) S = real(first(entropy(ψ))) ξ = correlation_length(ψ; sector = leftunit(ψ)) println("F = $F\tS = $S\tξ = $ξ") ```` ```` -F = 0.12340715308061671 S = 1.2807829622015565 ξ = 13.849682582674015 +F = 0.8839037051703854 S = 1.2807829621910287 ξ = 13.849682581985 ```` @@ -106,7 +105,7 @@ c = f.coeffs[2] ```` ```` -0.8025302932613355 +0.8025361167011884 ```` ````julia diff --git a/docs/src/examples/classic2d/1.hard-hexagon/main.ipynb b/docs/src/examples/statmech/hard-hexagon/main.ipynb similarity index 100% rename from docs/src/examples/classic2d/1.hard-hexagon/main.ipynb rename to docs/src/examples/statmech/hard-hexagon/main.ipynb diff --git a/docs/src/index.md b/docs/src/index.md index 26d608715..b08ef1f1e 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -46,7 +46,7 @@ features: - [Algorithms](@ref um_algorithms) - [Parallelism in julia](@ref) - [Lattices](@ref lattices) -- [Examples](@ref) +- [Examples](@ref examples_index) - [Library](@ref "Library documentation") - [References](@ref) — how to cite MPSKit, and publications that have used it - [Changelog](@ref) @@ -230,7 +230,7 @@ println(" = $(sum(real(E0)) / length(mps))") ### Additional Resources For more detailed information on the functionality and capabilities of MPSKit, refer to the -Manual section, or have a look at the [Examples](@ref) page. +Manual section, or have a look at the [Examples](@ref examples_index) page. Keep in mind that the documentation is still a work in progress, and that some features may not be fully documented yet. If you encounter any issues or have questions, please check the diff --git a/examples/Cache.toml b/examples/Cache.toml index b7b4b67b6..367b32a61 100644 --- a/examples/Cache.toml +++ b/examples/Cache.toml @@ -1,12 +1,16 @@ -[quantum1d] -"5.haldane-spt" = "036357a831de62bc8c11b47d1459cc4025d82907c093405a54f8dff58199c217" -"4.xxz-heisenberg" = "e233902efef4a795d219cdaa33cb7062ae10343d53d50f59a720888a4c5ac108" -"2.haldane" = "3731b764455869cd544549d5960607e6ef9e478772d38e1176622e944d32da94" -"6.hubbard" = "7b2755b20106bf7396873d98eb17c3e6eafff8911b25402bc1d3a8656a276827" -"1.ising-cft" = "f47f09646cd0f5ee1d64df56ba63e65641aeef677854ebe538ced17800f63ba1" -"8.bose-hubbard" = "b85f1b30afd2e8560aeb1f5f146c713805bfc4fa28a16d987800cee52bbe5c7c" -"3.ising-dqpt" = "036eef5420674454faa9ba2311c3230ce3b10b7a1db103d8fe554439a03ded6d" -"7.xy-finiteT" = "c1e7b05098090b86af3bf2b266392890d986821259b4c60e10aead3559d421fc" +[excitations] +"haldane" = "c09df36c3be5cd452bec564d22f6e2815474a9dab71dd5528013a3fb46b2f7c0" -[classic2d] -"1.hard-hexagon" = "3891f44506135f70a1ce2b05349e61754b5d57abf23da2f61fcea5594180a8fa" +[dynamics] +"ising-dqpt" = "f90e6a301a8bc6634f80d23957843ed0e721ac0fd6bf8c4fd07a152dbe264563" +"xy-finiteT" = "315b668d2e9ab114cbba396f4dbeb28cb2f7e97db280a0844f36dc17df26d3bc" + +[statmech] +"hard-hexagon" = "bd5e82948c6b7511e6c9c05565053113ce40df31102d70b544d82b6595306238" + +[groundstates] +"haldane-spt" = "c8fd3a8d406b9ff3ea9a34b596c5910d81e4eb710b665d7fa04e30f795a46086" +"hubbard" = "29e2469ac9307f1242bdfb76b97c6a2e04dc087f5d4b6c45c8b7a15df12ad36c" +"bose-hubbard" = "cf0d9a543e784dc6053e413780d19e1b59bf956dd4598752fdf664804dd68ce6" +"xxz-heisenberg" = "dae5f29dcad5fcfaffd12a7847916adb92c955276ce24166fd3f9c9534c50784" +"ising-cft" = "ebcae1e501347cb00a46d0889df1355707be77cf962f9ee0d16416393492529b" diff --git a/examples/README.md b/examples/README.md index 0aea9a7d9..74daf002d 100644 --- a/examples/README.md +++ b/examples/README.md @@ -8,14 +8,23 @@ In order to Trigger the file generation, run: ``julia examples/make.jl` By default, this will only generate files when the input file has not changed. This is -achieved by keeping a checksum of the `main.jl` file in each example in a `cache.toml`. +achieved by keeping a checksum of the `main.jl` file in each example in `Cache.toml`. Total recompilation can be achieved by deleting this file, or alternatively you can just delete the entries for which you wish to generate new files. ## Contributing Contributions are welcome! Please open an issue or a pull request if you have any questions -or suggestions. The code should be placed in a folder in either of the `classic2d` or -`quantum1d` folders, and the `main.jl` file should be the entry point. Any other files will +or suggestions. The code should be placed in a folder in one of the topic groups (`groundstates`, +`excitations`, `dynamics`, `statmech`), and the `main.jl` file should be the entry point. +A new topic group is picked up automatically: any subdirectory of `examples/` is built, so +only the sidebar grouping in `docs/make.jl` needs updating. Any other files will be copied over to the `docs/src/examples` folder, so you can use this to include images or -other files. \ No newline at end of file +other files. + +The folder name is the published URL of the page, so name it after the model or method and do +not prefix it with a number. Numeric prefixes force every later example to be renamed — and +therefore every URL to change — as soon as one is inserted in the middle. Examples are listed +alphabetically in the sidebar; the reading order for newcomers lives in the summaries on the +gallery index page (`docs/src/examples/index.md`), which is also where a new example should be +described. \ No newline at end of file diff --git a/examples/quantum1d/3.ising-dqpt/finite_timeev.png b/examples/dynamics/ising-dqpt/finite_timeev.png similarity index 100% rename from examples/quantum1d/3.ising-dqpt/finite_timeev.png rename to examples/dynamics/ising-dqpt/finite_timeev.png diff --git a/examples/quantum1d/3.ising-dqpt/infinite_timeev.png b/examples/dynamics/ising-dqpt/infinite_timeev.png similarity index 100% rename from examples/quantum1d/3.ising-dqpt/infinite_timeev.png rename to examples/dynamics/ising-dqpt/infinite_timeev.png diff --git a/examples/quantum1d/3.ising-dqpt/main.jl b/examples/dynamics/ising-dqpt/main.jl similarity index 94% rename from examples/quantum1d/3.ising-dqpt/main.jl rename to examples/dynamics/ising-dqpt/main.jl index 6545ae1f5..c2cc60a83 100644 --- a/examples/quantum1d/3.ising-dqpt/main.jl +++ b/examples/dynamics/ising-dqpt/main.jl @@ -30,7 +30,7 @@ First we construct the Hamiltonian in MPO form, and obtain the pre-quenched grou L = 20 H₀ = transverse_field_ising(; L, g = -0.5) ψ₀ = FiniteMPS(L, ℂ^2, ℂ^10) -ψ₀, _ = find_groundstate(ψ₀, H₀, DMRG()); +ψ₀, _ = find_groundstate(ψ₀, H₀, DMRG(; verbosity = 0)); md""" ## Finite MPS quenching @@ -59,7 +59,7 @@ Putting it all together, we get function finite_sim(L; dt = 0.05, finaltime = 5.0) ψ₀ = FiniteMPS(L, ℂ^2, ℂ^10) H₀ = transverse_field_ising(; L, g = -0.5) - ψ₀, _ = find_groundstate(ψ₀, H₀, DMRG()) + ψ₀, _ = find_groundstate(ψ₀, H₀, DMRG(; verbosity = 0)) H₁ = transverse_field_ising(; L, g = -2.0) ψₜ = deepcopy(ψ₀) @@ -87,7 +87,7 @@ Similarly we could start with an initial infinite state and find the pre-quench ψ₀ = InfiniteMPS([ℂ^2], [ℂ^10]) H₀ = transverse_field_ising(; g = -0.5) -ψ₀, _ = find_groundstate(ψ₀, H₀, VUMPS()); +ψ₀, _ = find_groundstate(ψ₀, H₀, VUMPS(; verbosity = 0)); md""" The dot product of two infinite matrix product states scales as ``\alpha ^N`` where ``α`` is the dominant eigenvalue of the transfer matrix. @@ -125,7 +125,7 @@ The final code is function infinite_sim(dt = 0.05, finaltime = 5.0) ψ₀ = InfiniteMPS([ℂ^2], [ℂ^10]) - ψ₀, _ = find_groundstate(ψ₀, H₀, VUMPS()) + ψ₀, _ = find_groundstate(ψ₀, H₀, VUMPS(; verbosity = 0)) ψₜ = deepcopy(ψ₀) envs = environments(ψₜ, H₁, ψₜ) diff --git a/examples/quantum1d/7.xy-finiteT/main.jl b/examples/dynamics/xy-finiteT/main.jl similarity index 97% rename from examples/quantum1d/7.xy-finiteT/main.jl rename to examples/dynamics/xy-finiteT/main.jl index a44fa8121..a54b68819 100644 --- a/examples/quantum1d/7.xy-finiteT/main.jl +++ b/examples/dynamics/xy-finiteT/main.jl @@ -53,8 +53,7 @@ The Hamiltonian can be diagonalized in terms of fermionic creation and annihilat E_0 = -\frac{1}{\pi} \text{EllipticE}\left( \sqrt{1 - \gamma^2} \right) ``` -!!! todo - Show the derivation of the ground state energy by diagonalizing the Hamiltonian in terms of fermionic operators. +The derivation, via a Jordan-Wigner transformation to free fermions followed by a Bogoliubov rotation, can be found in [Lieb, Schultz & Mattis, Ann. Phys. 16, 407 (1961)](https://doi.org/10.1016/0003-4916(61)90115-4). """ function groundstate_energy(J, N) @@ -92,7 +91,7 @@ D = 64 V_init = symmetry === Trivial ? ℂ^32 : U1Space(i => 10 for i in -1:(1 // 2):1) psi_init = FiniteMPS(N, physicalspace(H, 1), V_init) trunc = truncrank(D) -psi, envs, = find_groundstate(psi_init, H, DMRG2(; trunc, maxiter = 5)); +psi, envs, = find_groundstate(psi_init, H, DMRG2(; trunc, maxiter = 5, verbosity = 0)); E_0 = expectation_value(psi, H, envs) / N println("Numerical:\t", real(E_0)) @@ -138,8 +137,7 @@ The resulting expression is Z(\beta) = \prod_{k=1}^{N} \left( 1 + e^{-\beta \epsilon_k} \right)^{1/N} ``` -!!! todo - Show the derivation of the partition function for the XY model. +This expression follows from the same free-fermion diagonalization as the ground-state energy above: each single-particle mode $\epsilon_k$ is independently occupied or empty, giving the usual free-fermion partition function (see again [Lieb, Schultz & Mattis (1961)](https://doi.org/10.1016/0003-4916(61)90115-4)). """ function partition_function(β::Number, J::Number, N::Number) @@ -271,8 +269,6 @@ Z(\beta) = In other words, we can compute the partition function at $\beta$ by computing the overlap of two states evolved for $\beta / 2$, as long as the Hamiltonian is Hermitian. Otherwise, we could still use the same trick, but we would have to compute the evolved states twice, once for $H$ and once for $H^\dagger$. -!!! todo - Add a figure to illustrate this trick. """ double_logpartition(ρ₁, ρ₂ = ρ₁) = log(real(dot(ρ₁, ρ₂))) / length(ρ₁) diff --git a/examples/quantum1d/2.haldane/main.jl b/examples/excitations/haldane/main.jl similarity index 99% rename from examples/quantum1d/2.haldane/main.jl rename to examples/excitations/haldane/main.jl index a7213b12a..49c2a6486 100644 --- a/examples/quantum1d/2.haldane/main.jl +++ b/examples/excitations/haldane/main.jl @@ -107,7 +107,7 @@ virtual_space_inf = Rep[SU₂](1 // 2 => 16, 3 // 2 => 16, 5 // 2 => 8, 7 // 2 = ψ_inf, envs_inf, info_inf = find_groundstate(ψ₀_inf, H; verbosity = 0) kspace = range(0, π, 16) -Es, _ = excitations(H, QuasiparticleAnsatz(), kspace, ψ_inf, envs_inf; sector = SU2Irrep(1)) +Es, _ = excitations(H, QuasiparticleAnsatz(), kspace, ψ_inf, envs_inf; sector = SU2Irrep(1), verbosity = 0) ΔE, idx = findmin(real.(Es)) println("minimum @k = $(kspace[idx]):\t ΔE = $(ΔE)") diff --git a/examples/quantum1d/8.bose-hubbard/main.jl b/examples/groundstates/bose-hubbard/main.jl similarity index 100% rename from examples/quantum1d/8.bose-hubbard/main.jl rename to examples/groundstates/bose-hubbard/main.jl diff --git a/examples/quantum1d/5.haldane-spt/main.jl b/examples/groundstates/haldane-spt/main.jl similarity index 100% rename from examples/quantum1d/5.haldane-spt/main.jl rename to examples/groundstates/haldane-spt/main.jl diff --git a/examples/quantum1d/5.haldane-spt/spt-tensors.svg b/examples/groundstates/haldane-spt/spt-tensors.svg similarity index 100% rename from examples/quantum1d/5.haldane-spt/spt-tensors.svg rename to examples/groundstates/haldane-spt/spt-tensors.svg diff --git a/examples/quantum1d/6.hubbard/main.jl b/examples/groundstates/hubbard/main.jl similarity index 90% rename from examples/quantum1d/6.hubbard/main.jl rename to examples/groundstates/hubbard/main.jl index 2482f3db7..bd6e1c5c8 100644 --- a/examples/quantum1d/6.hubbard/main.jl +++ b/examples/groundstates/hubbard/main.jl @@ -9,7 +9,7 @@ a kinetic term that allows electrons to hop between neighboring sites, and a pot Often, a third term is included which serves as a chemical potential to control the number of electrons in the system. ```math -H = -t \sum_{\langle i, j \rangle, \sigma} c^{\dagger}_{i,\sigma} c_{j,\sigma} + U \sum_i n_{i,\uparrow} n_{i,\downarrow} - \mu \sum_{i,\sigma} n_{i,\sigma} +H = -t ∑_{⟨i, j⟩, σ} c^{†}_{i,σ} c_{j,σ} + U ∑_i n_{i,↑} n_{i,↓} - μ ∑_{i,σ} n_{i,σ} ``` At half-filling, the system exhibits particle-hole symmetry, which can be made explicit by rewriting the Hamiltonian slightly. @@ -17,13 +17,13 @@ First, we fix the overall energy scale by setting `t = 1`, and then shift the to This results in the following Hamiltonian: ```math -H = - \sum_{\langle i, j \rangle, \sigma} c^{\dagger}_{i,\sigma} c_{j,\sigma} + U / 4 \sum_i (1 - 2 n_{i,\uparrow}) (1 - 2 n_{i,\downarrow}) - \mu \sum_{i,\sigma} n_{i,\sigma} +H = - ∑_{⟨i, j⟩, σ} c^{†}_{i,σ} c_{j,σ} + U / 4 ∑_i (1 - 2 n_{i,↑}) (1 - 2 n_{i,↓}) - μ ∑_{i,σ} n_{i,σ} ``` Finally, setting `\mu = 0` and defining `u = U / 4` we obtain the Hubbard model at half-filling. ```math -H = - \sum_{\langle i, j \rangle, \sigma} c^{\dagger}_{i,\sigma} c_{j,\sigma} + u \sum_i (1 - 2 n_{i,\uparrow}) (1 - 2 n_{i,\downarrow}) +H = - ∑_{⟨i, j⟩, σ} c^{†}_{i,σ} c_{j,σ} + u ∑_i (1 - 2 n_{i,↑}) (1 - 2 n_{i,↓}) ``` """ @@ -37,9 +37,10 @@ using Plots using Interpolations using Optim -#src # for reproducibility: -#src using Random -#src Random.seed!(123) +# For reproducibility of this page, we fix the seed of the random number generator: + +using Random +Random.seed!(123); const t = 1.0 const mu = 0.0 @@ -47,10 +48,10 @@ const U = 3.0 md""" For this case, the ground state energy has an analytic solution, which can be used to benchmark the numerical results. -It follows from Eq. (6.82) in [](). +It follows from Eq. (6.82) in [Essler, Frahm, Göhmann, Klümper & Korepin, The One-Dimensional Hubbard Model](https://doi.org/10.1017/CBO9780511534843). ```math -e(u) = - u - 4 \int_0^{\infty} \frac{d\omega}{\omega} \frac{J_0(\omega) J_1(\omega)}{1 + \exp(2u \omega)} +e(u) = - u - 4 ∫₀^{∞} \frac{dω}{ω} \frac{J₀(ω) J₁(ω)}{1 + \exp(2u ω)} ``` We can easily verify this by comparing the numerical results to the analytic solution. @@ -58,7 +59,7 @@ We can easily verify this by comparing the numerical results to the analytic sol function hubbard_energy(u; rtol = 1.0e-12) integrandum(ω) = besselj0(ω) * besselj1(ω) / (1 + exp(2u * ω)) / ω - int, err = quadgk(integrandum, 0, Inf; rtol = rtol) + int, err = quadgk(integrandum, 0, Inf; rtol) return -u - 4 * int end @@ -68,7 +69,7 @@ function compute_groundstate( expansionfactor = (1 / 10), expansioniter = 20 ) - verbosity = 2 + verbosity = 0 psi, = find_groundstate(psi, H; tol = svalue * 10, verbosity) for _ in 1:expansioniter D = maximum(x -> dim(left_virtualspace(psi, x)), 1:length(psi)) @@ -87,7 +88,7 @@ function compute_groundstate( psi, = find_groundstate( psi, H, VUMPS(; tol = svalue / 100, verbosity, maxiter = 100) & - GradientGrassmann(; tol = svalue / 1000) + GradientGrassmann(; tol = svalue / 1000, verbosity) ) return psi @@ -108,7 +109,7 @@ md""" ## Symmetries The Hubbard model has a rich symmetry structure, which can be exploited to speed up simulations. -Apart from the fermionic parity, the model also has a $U(1)$ particle number symmetry, along with a $SU(2)$ spin symmetry. +Apart from the fermionic parity, the model also has a ``U(1)`` particle number symmetry, along with a ``SU(2)`` spin symmetry. Explicitly imposing these symmetries on the tensors can greatly reduce the computational cost of the simulation. Naively imposing these symmetries however, is not compatible with our desire to work at half-filling. @@ -140,7 +141,7 @@ The elementary excitations are known as spinons and holons, which are domain wal The fact that the spin and charge sectors are separate is a phenomenon known as spin-charge separation. The domain walls can be constructed by noticing that there are two equivalent groundstates, which differ by a translation over a single site. -In other words, the groundstates are ``\psi_{AB}` and ``\psi_{BA}``, where ``A`` and ``B`` are the two sites. +In other words, the groundstates are ``\psi_{AB}`` and ``\psi_{BA}``, where ``A`` and ``B`` are the two sites. These excitations can be constructed as follows: """ @@ -154,13 +155,13 @@ envs_BA = environments(psi_BA, H_u1_su2, psi_BA); spinon_charge = FermionParity(0) ⊠ U1Irrep(0) ⊠ SU2Irrep(1 // 2) E_spinon, ϕ_spinon = excitations( H_u1_su2, alg, momenta, psi_AB, envs_AB, psi_BA, envs_BA; - sector = spinon_charge, num = 1 + sector = spinon_charge, num = 1, verbosity = 0 ); holon_charge = FermionParity(1) ⊠ U1Irrep(-1) ⊠ SU2Irrep(0) E_holon, ϕ_holon = excitations( H_u1_su2, alg, momenta, psi_AB, envs_AB, psi_BA, envs_BA; - sector = holon_charge, num = 1 + sector = holon_charge, num = 1, verbosity = 0 ); md""" @@ -216,7 +217,7 @@ md""" The plot shows some discrepancies between the numerical and analytic results. First and foremost, we must realize that in the thermodynamic limit, the momentum of a domain wall is actually not well-defined. Concretely, only the difference in momentum between the two groundstates is well-defined, as we can always shift the momentum by multiplying one of the groundstates by a phase. -Here, we can fix this shift by realizing that our choice of shifting the groundstates by a single site, differs from the formula by a factor ``\pi/2``. +Here, we can fix this shift by realizing that our choice of shifting the groundstates by a single site, differs from the formula by a factor ``π/2``. """ momenta_shifted = rem2pi.(momenta .- π / 2, RoundNearest) diff --git a/examples/quantum1d/1.ising-cft/main.jl b/examples/groundstates/ising-cft/main.jl similarity index 99% rename from examples/quantum1d/1.ising-cft/main.jl rename to examples/groundstates/ising-cft/main.jl index c6fc12487..25b65bef4 100644 --- a/examples/quantum1d/1.ising-cft/main.jl +++ b/examples/groundstates/ising-cft/main.jl @@ -124,7 +124,7 @@ can reach higher system sizes. L_mps = 20 H_mps = periodic_boundary_conditions(transverse_field_ising(), L_mps) D = 64 -ψ, envs, info = find_groundstate(FiniteMPS(L_mps, ℂ^2, ℂ^D), H_mps, DMRG()); +ψ, envs, info = find_groundstate(FiniteMPS(L_mps, ℂ^2, ℂ^D), H_mps, DMRG(; verbosity = 0)); md""" Excitations on top of the ground state can be found through the use of the quasiparticle diff --git a/examples/quantum1d/1.ising-cft/translation_mpo.svg b/examples/groundstates/ising-cft/translation_mpo.svg similarity index 100% rename from examples/quantum1d/1.ising-cft/translation_mpo.svg rename to examples/groundstates/ising-cft/translation_mpo.svg diff --git a/examples/quantum1d/4.xxz-heisenberg/main.jl b/examples/groundstates/xxz-heisenberg/main.jl similarity index 91% rename from examples/quantum1d/4.xxz-heisenberg/main.jl rename to examples/groundstates/xxz-heisenberg/main.jl index 51c8ba027..51cbfd954 100644 --- a/examples/quantum1d/4.xxz-heisenberg/main.jl +++ b/examples/groundstates/xxz-heisenberg/main.jl @@ -9,9 +9,10 @@ using MPSKit, TensorKit, Plots include(joinpath(@__DIR__, "..", "..", "..", "docs", "src", "assets", "models.jl")) #hide using .ExampleModels -#src # for reproducibility: -#src using Random -#src Random.seed!(123) +# For reproducibility of this page, we fix the seed of the random number generator: + +using Random +Random.seed!(123); md""" ## Failure @@ -33,7 +34,7 @@ md""" The ground state can then be found by calling `find_groundstate`. """ -groundstate, cache, info = find_groundstate(state, H, VUMPS()); +groundstate, cache, info = find_groundstate(state, H, VUMPS(; verbosity = 1)); info md""" @@ -42,7 +43,7 @@ On its own, that is already quite curious. Maybe we can do better using another algorithm, such as gradient descent. """ -groundstate, cache, info = find_groundstate(state, H, GradientGrassmann(; maxiter = 20)); +groundstate, cache, info = find_groundstate(state, H, GradientGrassmann(; maxiter = 20, verbosity = 1)); info md""" @@ -76,7 +77,7 @@ Alternatively, our model helper can construct the Hamiltonian directly on a two- ## H2 = repeat(H, 2); -- copies the one-site version H2 = heisenberg_XXX(ComplexF64, Trivial; unitcell = 2, spin = 1 // 2) groundstate, envs, info = find_groundstate( - state, H2, VUMPS(; maxiter = 100, tol = 1.0e-12) + state, H2, VUMPS(; maxiter = 100, tol = 1.0e-12, verbosity = 1) ); md""" @@ -85,7 +86,7 @@ The reason behind this becomes more obvious at higher bond dimensions: """ groundstate, envs, info = find_groundstate( - state, H2, IDMRG2(; trunc = truncrank(50), maxiter = 20, tol = 1.0e-12) + state, H2, IDMRG2(; trunc = truncrank(50), maxiter = 20, tol = 1.0e-12, verbosity = 1) ); entanglementplot(groundstate) @@ -129,4 +130,4 @@ Even though the bond dimension is higher than in the example without symmetry, c println(dim(V1)) println(dim(V2)) -groundstate, cache, info = find_groundstate(state, H2, VUMPS(; maxiter = 400, tol = 1.0e-12)); +groundstate, cache, info = find_groundstate(state, H2, VUMPS(; maxiter = 400, tol = 1.0e-12, verbosity = 1)); diff --git a/examples/make.jl b/examples/make.jl index de842a665..4dec5fce6 100644 --- a/examples/make.jl +++ b/examples/make.jl @@ -80,6 +80,18 @@ function attach_notebook_badge(root, name, str) return join(map(markdown_only, (mybinder, nbviewer, download)), "\n") * "\n\n" * str end +# Log messages captured from an executed example carry the absolute source location of +# whatever emitted them, e.g. +# +# └ @ MPSKit /home/someone/checkout/src/algorithms/groundstate/vumps.jl:87 +# └ @ OptimKit /home/someone/.julia/packages/OptimKit/K7Ujj/src/cg.jl:188 +# +# Both depend on who ran the pipeline — the checkout path for a dev'ed package, and the +# depot slug for an installed one — so committing them makes the rendered pages differ +# per machine. The module name is already printed, so keep only the in-package path. +normalize_log_locations(content::AbstractString) = + replace(content, r"(@ [A-Za-z_][A-Za-z0-9_]* )\S*?/(src/\S*\.jl:\d+)" => s"\1\2") + function build_example(root, name) source_dir = joinpath(@__DIR__, "..", "examples", root, name) source_file = joinpath(source_dir, "main.jl") @@ -89,7 +101,9 @@ function build_example(root, name) Literate.markdown( source_file, target_dir; execute = true, name = "index", preprocess = str -> attach_notebook_badge(root, name, inline_models(str; hide = true)), - postprocess = content -> externalize_figures(content, target_dir), + postprocess = content -> normalize_log_locations( + externalize_figures(content, target_dir) + ), mdstrings = true, nbviewer_root_url = "https://nbviewer.jupyter.org/github/QuantumKitHub/MPSKit.jl/blob/gh-pages/dev", binder_root_url = "https://mybinder.org/v2/gh/QuantumKitHub/MPSKit.jl/gh-pages?filepath=dev", @@ -118,5 +132,9 @@ end # Scripts # ---------------------------------------------------------------------------------------- # -build("classic2d") -build("quantum1d") +# build every topic group: each subdirectory of examples/ is one group +for group in readdir(@__DIR__) + startswith(group, '.') && continue + isdir(joinpath(@__DIR__, group)) || continue + build(group) +end diff --git a/examples/classic2d/1.hard-hexagon/hexagon.svg b/examples/statmech/hard-hexagon/hexagon.svg similarity index 100% rename from examples/classic2d/1.hard-hexagon/hexagon.svg rename to examples/statmech/hard-hexagon/hexagon.svg diff --git a/examples/classic2d/1.hard-hexagon/main.jl b/examples/statmech/hard-hexagon/main.jl similarity index 100% rename from examples/classic2d/1.hard-hexagon/main.jl rename to examples/statmech/hard-hexagon/main.jl From 183e9084abf5d64a243b13840e310dec7f20f862 Mon Sep 17 00:00:00 2001 From: lkdvos Date: Wed, 5 Aug 2026 14:58:31 -0400 Subject: [PATCH 2/5] docs(examples): address review of the regrouped gallery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hide precompilation output. A `using` block reports precompilation progress whenever the pipeline runs against a cold depot, which says nothing about the example and whose timings differ per machine. `examples/make.jl` now drops any captured-output block that contains nothing else, and the twelve blocks that had been committed across four pages are gone. Use unicode in the markdown, not just in the code. Symbol macros become characters (`\beta` -> β, `\langle`/`\rangle` -> ⟨⟩, `\dagger` -> †, `\ket{ψ}` -> |ψ⟩, `\hat{a}` -> â), while structural LaTeX stays: `\frac`, `\sum` with limits, `\sqrt`, `\vec`, environments, and `\hat{n}`, which has no precomposed character. `\left`/`\right` keep their macro delimiters, since they need a LaTeX delimiter to size. Format the example markdown one sentence per line, leaving lists, tables, display math, admonitions and fenced blocks alone. Rework the gallery index. "Level"/difficulty becomes the more neutral "Complexity"; the ground states now open with the introductory Ising CFT example instead of the XXZ one; the XXZ summary describes choosing a unit cell and symmetry to suit the state, with the transfer and entanglement spectra as diagnostics, rather than a search that goes wrong; and the summaries no longer name functions or symmetry types, which belong on the pages themselves. The prose edits were applied to both `main.jl` and its rendered page so that a prose-only change stays a prose-only diff instead of re-running every example for new digits. Rendering all nine sources through Literate with `execute = false` reproduces the committed pages' prose exactly, the notebooks were regenerated, and `Cache.toml` is back in sync. Along the way: `xy-finiteT` had two overlapping sentences where one had lost its terminating period, the Hubbard prose said `\mu = 0` where its equations already used μ, and four misspellings sat in lines this pass rewrites anyway. Co-Authored-By: Claude Opus 5 (1M context) --- .../src/examples/dynamics/ising-dqpt/index.md | 35 +- .../examples/dynamics/ising-dqpt/main.ipynb | 28 +- .../src/examples/dynamics/xy-finiteT/index.md | 120 +++--- .../examples/dynamics/xy-finiteT/main.ipynb | 99 +++-- .../src/examples/excitations/haldane/index.md | 7 - .../groundstates/bose-hubbard/index.md | 258 +++++------ .../groundstates/bose-hubbard/main.ipynb | 404 ++++++------------ .../groundstates/haldane-spt/index.md | 88 ++-- .../groundstates/haldane-spt/main.ipynb | 88 ++-- .../examples/groundstates/hubbard/index.md | 32 +- .../examples/groundstates/hubbard/main.ipynb | 7 +- .../examples/groundstates/ising-cft/index.md | 46 +- .../groundstates/ising-cft/main.ipynb | 46 +- .../groundstates/xxz-heisenberg/index.md | 3 +- .../groundstates/xxz-heisenberg/main.ipynb | 3 +- docs/src/examples/index.md | 79 ++-- .../examples/statmech/hard-hexagon/index.md | 3 +- .../examples/statmech/hard-hexagon/main.ipynb | 3 +- examples/Cache.toml | 16 +- examples/dynamics/ising-dqpt/main.jl | 26 +- examples/dynamics/xy-finiteT/main.jl | 99 +++-- examples/groundstates/bose-hubbard/main.jl | 257 +++++------ examples/groundstates/haldane-spt/main.jl | 88 ++-- examples/groundstates/hubbard/main.jl | 7 +- examples/groundstates/ising-cft/main.jl | 46 +- examples/groundstates/xxz-heisenberg/main.jl | 3 +- examples/make.jl | 56 ++- examples/statmech/hard-hexagon/main.jl | 3 +- 28 files changed, 782 insertions(+), 1168 deletions(-) diff --git a/docs/src/examples/dynamics/ising-dqpt/index.md b/docs/src/examples/dynamics/ising-dqpt/index.md index 6f3a8fb35..e0c8d74c6 100644 --- a/docs/src/examples/dynamics/ising-dqpt/index.md +++ b/docs/src/examples/dynamics/ising-dqpt/index.md @@ -8,32 +8,26 @@ EditURL = "../../../../../examples/dynamics/ising-dqpt/main.jl" # DQPT in the Ising model -In this tutorial we will try to reproduce the results from -[this paper](https://arxiv.org/pdf/1206.2505.pdf). The needed packages are +In this tutorial we will try to reproduce the results from [this paper](https://arxiv.org/pdf/1206.2505.pdf). +The needed packages are ````julia using MPSKit, MPSKitModels, TensorKit ```` -```` -Precompiling packages... - 14306.2 ms ✓ MPSKitModels - 1 dependency successfully precompiled in 16 seconds. 74 already precompiled. - -```` - Dynamical quantum phase transitions (DQPT in short) are signatures of equilibrium phase transitions in a dynamical quantity - the Loschmidt echo. -This quantity is given by ``L(t) = \frac{-2}{N} ln(| < \psi(t) | \psi(0) > |) `` where ``N`` is the system size. +This quantity is given by ``L(t) = \frac{-2}{N} \ln |⟨ψ(t)|ψ(0)⟩|`` where ``N`` is the system size. One typically starts from a ground state and then quenches the Hamiltonian to a different point. -Non analycities in the Loschmidt echo are called 'dynamical quantum phase transitions'. +Non-analyticities in the Loschmidt echo are called 'dynamical quantum phase transitions'. In the mentioned paper they work with -``H(g) = - \sum^{N-1}_{i=1} \sigma^z_i \sigma^z_{i+1} + g \sum_{i=1}^N \sigma^x_i`` +``H(g) = - \sum^{N-1}_{i=1} σ^z_i σ^z_{i+1} + g \sum_{i=1}^N σ^x_i`` -and show that divergences occur when quenching across the critical point (g₀ → g₁) for ``t^*_n = t^*(n+\frac{1}{2})`` with ``t^* = \pi/e(g_1,k^*)``, ``cos(k^*) = (1+g_0 g_1) / (g_0 + g_1)``, `` e(g,k) = \sqrt{(g-cos k)^2 + sin^2 k}``. +and show that divergences occur when quenching across the critical point (g₀ → g₁) for ``t^*_n = t^*(n+\frac{1}{2})`` with ``t^* = π/e(g_1,k^*)``, ``cos(k^*) = (1+g_0 g_1) / (g_0 + g_1)``, `` e(g,k) = \sqrt{(g-cos k)^2 + sin^2 k}``. -The outline of the tutorial is as follows. We will pick ``g₀ = 0.5``, ``g₁ = 2.0``, and perform the time evolution at different system sizes and compare with the thermodynamic limit. +The outline of the tutorial is as follows. +We will pick ``g₀ = 0.5``, ``g₁ = 2.0``, and perform the time evolution at different system sizes and compare with the thermodynamic limit. For those ``g`` we expect non-analyticities to occur at ``t_n ≈ 2.35 (n + 1/2)``. First we construct the Hamiltonian in MPO form, and obtain the pre-quenched ground state: @@ -47,14 +41,15 @@ H₀ = transverse_field_ising(FiniteChain(L); g = -0.5) ## Finite MPS quenching -We can define a helper function that measures the loschmith echo +We can define a helper function that measures the Loschmidt echo ````julia echo(ψ₀::FiniteMPS, ψₜ::FiniteMPS) = -2 * log(abs(dot(ψ₀, ψₜ))) / length(ψ₀) @assert isapprox(echo(ψ₀, ψ₀), 0, atol = 1.0e-10) ```` -We will initially use a two-site TDVP scheme to dynamically increase the bond dimension while time evolving, and later on switch to a faster one-site scheme. A single timestep can be done using +We will initially use a two-site TDVP scheme to dynamically increase the bond dimension while time evolving, and later on switch to a faster one-site scheme. +A single timestep can be done using ````julia H₁ = transverse_field_ising(FiniteChain(L); g = -2.0) @@ -63,7 +58,8 @@ dt = 0.01 ψₜ, envs = timestep(ψₜ, H₁, 0, dt, TDVP2(; trunc = truncrank(20))); ```` -"envs" is a kind of cache object that keeps track of all environments in `ψ`. It is often advantageous to re-use the environment, so that MPSKit doesn't need to recalculate everything. +"envs" is a kind of cache object that keeps track of all environments in `ψ`. +It is often advantageous to re-use the environment, so that MPSKit doesn't need to recalculate everything. Putting it all together, we get @@ -106,7 +102,7 @@ H₀ = transverse_field_ising(; g = -0.5) ψ₀, _ = find_groundstate(ψ₀, H₀, VUMPS(; verbosity = 0)); ```` -The dot product of two infinite matrix product states scales as ``\alpha ^N`` where ``α`` is the dominant eigenvalue of the transfer matrix. +The dot product of two infinite matrix product states scales as ``α ^N`` where ``α`` is the dominant eigenvalue of the transfer matrix. It is this ``α`` that is returned when calling ````julia @@ -124,7 +120,8 @@ echo(ψ₀::InfiniteMPS, ψₜ::InfiniteMPS) = -2 * log(abs(dot(ψ₀, ψₜ))) @assert isapprox(echo(ψ₀, ψ₀), 0, atol = 1.0e-10) ```` -We make use of the `changebonds` machinery to grow the bond dimension. This can also be achieved through a two-site scheme. +We make use of the `changebonds` machinery to grow the bond dimension. +This can also be achieved through a two-site scheme. Multiple algorithms are available, but we will only focus on `OptimalExpand()`. Growing the bond dimension by ``5`` can be done by calling: diff --git a/docs/src/examples/dynamics/ising-dqpt/main.ipynb b/docs/src/examples/dynamics/ising-dqpt/main.ipynb index 682c5b3a1..2d8f90416 100644 --- a/docs/src/examples/dynamics/ising-dqpt/main.ipynb +++ b/docs/src/examples/dynamics/ising-dqpt/main.ipynb @@ -6,8 +6,8 @@ "source": [ "# DQPT in the Ising model\n", "\n", - "In this tutorial we will try to reproduce the results from\n", - "[this paper](https://arxiv.org/pdf/1206.2505.pdf). The needed packages are" + "In this tutorial we will try to reproduce the results from [this paper](https://arxiv.org/pdf/1206.2505.pdf).\n", + "The needed packages are" ] }, { @@ -24,17 +24,18 @@ "metadata": {}, "source": [ "Dynamical quantum phase transitions (DQPT in short) are signatures of equilibrium phase transitions in a dynamical quantity - the Loschmidt echo.\n", - "This quantity is given by $L(t) = \\frac{-2}{N} ln(| < \\psi(t) | \\psi(0) > |) $ where $N$ is the system size.\n", + "This quantity is given by $L(t) = \\frac{-2}{N} \\ln |⟨ψ(t)|ψ(0)⟩|$ where $N$ is the system size.\n", "One typically starts from a ground state and then quenches the Hamiltonian to a different point.\n", - "Non analycities in the Loschmidt echo are called 'dynamical quantum phase transitions'.\n", + "Non-analyticities in the Loschmidt echo are called 'dynamical quantum phase transitions'.\n", "\n", "In the mentioned paper they work with\n", "\n", - "$H(g) = - \\sum^{N-1}_{i=1} \\sigma^z_i \\sigma^z_{i+1} + g \\sum_{i=1}^N \\sigma^x_i$\n", + "$H(g) = - \\sum^{N-1}_{i=1} σ^z_i σ^z_{i+1} + g \\sum_{i=1}^N σ^x_i$\n", "\n", - "and show that divergences occur when quenching across the critical point (g₀ → g₁) for $t^*_n = t^*(n+\\frac{1}{2})$ with $t^* = \\pi/e(g_1,k^*)$, $cos(k^*) = (1+g_0 g_1) / (g_0 + g_1)$, $ e(g,k) = \\sqrt{(g-cos k)^2 + sin^2 k}$.\n", + "and show that divergences occur when quenching across the critical point (g₀ → g₁) for $t^*_n = t^*(n+\\frac{1}{2})$ with $t^* = π/e(g_1,k^*)$, $cos(k^*) = (1+g_0 g_1) / (g_0 + g_1)$, $ e(g,k) = \\sqrt{(g-cos k)^2 + sin^2 k}$.\n", "\n", - "The outline of the tutorial is as follows. We will pick $g₀ = 0.5$, $g₁ = 2.0$, and perform the time evolution at different system sizes and compare with the thermodynamic limit.\n", + "The outline of the tutorial is as follows.\n", + "We will pick $g₀ = 0.5$, $g₁ = 2.0$, and perform the time evolution at different system sizes and compare with the thermodynamic limit.\n", "For those $g$ we expect non-analyticities to occur at $t_n ≈ 2.35 (n + 1/2)$.\n", "\n", "First we construct the Hamiltonian in MPO form, and obtain the pre-quenched ground state:" @@ -58,7 +59,7 @@ "source": [ "## Finite MPS quenching\n", "\n", - "We can define a helper function that measures the loschmith echo" + "We can define a helper function that measures the Loschmidt echo" ] }, { @@ -75,7 +76,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We will initially use a two-site TDVP scheme to dynamically increase the bond dimension while time evolving, and later on switch to a faster one-site scheme. A single timestep can be done using" + "We will initially use a two-site TDVP scheme to dynamically increase the bond dimension while time evolving, and later on switch to a faster one-site scheme.\n", + "A single timestep can be done using" ] }, { @@ -94,7 +96,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\"envs\" is a kind of cache object that keeps track of all environments in `ψ`. It is often advantageous to re-use the environment, so that MPSKit doesn't need to recalculate everything.\n", + "\"envs\" is a kind of cache object that keeps track of all environments in `ψ`.\n", + "It is often advantageous to re-use the environment, so that MPSKit doesn't need to recalculate everything.\n", "\n", "Putting it all together, we get" ] @@ -158,7 +161,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The dot product of two infinite matrix product states scales as $\\alpha ^N$ where $α$ is the dominant eigenvalue of the transfer matrix.\n", + "The dot product of two infinite matrix product states scales as $α ^N$ where $α$ is the dominant eigenvalue of the transfer matrix.\n", "It is this $α$ that is returned when calling" ] }, @@ -192,7 +195,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We make use of the `changebonds` machinery to grow the bond dimension. This can also be achieved through a two-site scheme.\n", + "We make use of the `changebonds` machinery to grow the bond dimension.\n", + "This can also be achieved through a two-site scheme.\n", "Multiple algorithms are available, but we will only focus on `OptimalExpand()`.\n", "Growing the bond dimension by $5$ can be done by calling:" ] diff --git a/docs/src/examples/dynamics/xy-finiteT/index.md b/docs/src/examples/dynamics/xy-finiteT/index.md index 86dc23584..17baaf505 100644 --- a/docs/src/examples/dynamics/xy-finiteT/index.md +++ b/docs/src/examples/dynamics/xy-finiteT/index.md @@ -19,27 +19,6 @@ using LinearAlgebra using BenchmarkFreeFermions ```` -```` -Precompiling packages... - 2928.0 ms ✓ SpecialFunctions - 1 dependency successfully precompiled in 3 seconds. 12 already precompiled. -Precompiling packages... - 1182.9 ms ✓ JLFzf - 1251.9 ms ✓ Xorg_libXi_jll - 1647.3 ms ✓ GLFW_jll - 4694.5 ms ✓ Latexify - 2510.2 ms ✓ GR_jll - 1296.9 ms ✓ Latexify → SparseArraysExt - 14731.3 ms ✓ HTTP - 5752.3 ms ✓ GR - 46383.1 ms ✓ Plots - 9 dependencies successfully precompiled in 71 seconds. 171 already precompiled. -Precompiling packages... - 2884.9 ms ✓ ColorVectorSpace → SpecialFunctionsExt - 1 dependency successfully precompiled in 3 seconds. 20 already precompiled. - -```` - # Finite temperature XY model This example shows how to simulate the finite temperature behavior of the XY model in 1D. @@ -48,7 +27,7 @@ As a result, many properties have analytical expressions that can be used to ver Here, we use [BenchmarkFreeFermions.jl](https://github.com/Qiaoyi-Li/BenchmarkFreeFermions.jl/) to compare our results. ```math - H = J \sum_{i=1}^{N} \left( \sigma^x_i \sigma^x_{i+1} + \sigma^y_i \sigma^y_{i+1} \right) + H = J \sum_{i=1}^{N} \left( σ^x_i σ^x_{i+1} + σ^y_i σ^y_{i+1} \right) ``` Here we will consider the anti-ferromagnetic ($J > 0$) chain, and restrict ourselves to $J = 1/2$. @@ -80,11 +59,10 @@ XY_hamiltonian (generic function with 3 methods) ## Diagonalization of the Hamiltonian -The Hamiltonian can be diagonalized through a Bogoliubov transformation, leading to the following expression for the ground state energy -The Hamiltonian can be diagonalized in terms of fermionic creation and annihilation operators, leading to the following expression in terms of [an incomplete elliptic integral of the second kind](https://en.wikipedia.org/wiki/Elliptic_integral). +The Hamiltonian can be diagonalized in terms of fermionic creation and annihilation operators, which yields an expression for the ground state energy in terms of [an incomplete elliptic integral of the second kind](https://en.wikipedia.org/wiki/Elliptic_integral). ```math - E_0 = -\frac{1}{\pi} \text{EllipticE}\left( \sqrt{1 - \gamma^2} \right) + E_0 = -\frac{1}{π} \text{EllipticE}\left( \sqrt{1 - γ^2} \right) ``` The derivation, via a Jordan-Wigner transformation to free fermions followed by a Bogoliubov rotation, can be found in [Lieb, Schultz & Mattis, Ann. Phys. 16, 407 (1961)](https://doi.org/10.1016/0003-4916(61)90115-4). @@ -157,39 +135,39 @@ To go beyond the ground state, we can extract several properties at finite tempe This is given by ```math - Z(\beta) = \text{Tr} \left( e^{-\beta H} \right) + Z(β) = \text{Tr} \left( e^{-β H} \right) ``` -where $\beta = 1 / T$ is the inverse temperature. +where $β = 1 / T$ is the inverse temperature. Given the partition function, we can compute the free energy as ```math - F(\beta) = -\frac{1}{\beta} \log Z(\beta) + F(β) = -\frac{1}{β} \log Z(β) ``` We can also compute observables using ```math - \langle O \rangle = \frac{1}{Z} \text{Tr} \left( O e^{-\beta H} \right) + ⟨O⟩ = \frac{1}{Z} \text{Tr} \left( O e^{-β H} \right) ``` In particular, we can compute the energy as ```math - U = \langle H \rangle = \frac{1}{Z} \text{Tr} \left( H e^{-\beta H} \right) + U = ⟨H⟩ = \frac{1}{Z} \text{Tr} \left( H e^{-β H} \right) ``` Finally, the specific heat can be computed as ```math - \chi = \frac{\partial U}{\partial T} = -\beta^2 \frac{\partial U}{\partial \beta} + χ = \frac{∂ U}{∂ T} = -β^2 \frac{∂ U}{∂ β} ``` Luckily, the partition function can be computed analytically for the XY model. The resulting expression is ```math - Z(\beta) = \prod_{k=1}^{N} \left( 1 + e^{-\beta \epsilon_k} \right)^{1/N} + Z(β) = \prod_{k=1}^{N} \left( 1 + e^{-β ε_k} \right)^{1/N} ``` -This expression follows from the same free-fermion diagonalization as the ground-state energy above: each single-particle mode $\epsilon_k$ is independently occupied or empty, giving the usual free-fermion partition function (see again [Lieb, Schultz & Mattis (1961)](https://doi.org/10.1016/0003-4916(61)90115-4)). +This expression follows from the same free-fermion diagonalization as the ground-state energy above: each single-particle mode $ε_k$ is independently occupied or empty, giving the usual free-fermion partition function (see again [Lieb, Schultz & Mattis (1961)](https://doi.org/10.1016/0003-4916(61)90115-4)). ````julia function partition_function(β::Number, J::Number, N::Number) @@ -212,10 +190,10 @@ F_analytic = free_energy.(βs, J, N); ### MPO approach We can numerically compute the partition function by explicitly computing the trace of the time-evolution operator. -To that end, we first need to build the time-evolution operator $e^{-\beta H}$, and then compute its trace. +To that end, we first need to build the time-evolution operator $e^{-β H}$, and then compute its trace. In order to build the time-evolution operator, we can repurpose the `make_time_mpo` function, which constructs the time-evolution operator for the ground state. -However, since we are interested in $e^{-\beta H}$, instead of $e^{-iH dt}$, we work with $dt = -i \beta$. +However, since we are interested in $e^{-β H}$, instead of $e^{-iH dt}$, we work with $dt = -i β$. In particular, we can approximate the exponential using a Taylor series through the `TaylorCluster` algorithm. ````julia @@ -257,11 +235,11 @@ end Some observations: - The first order approximation fails to capture the behavior of the partition function. -- The higher order approximations are in good agreement with the analytical result, as long as $\beta$ is not too large. -- The computational cost of the approximations does not depend on $\beta$, but on the order of the approximation. +- The higher order approximations are in good agreement with the analytical result, as long as $β$ is not too large. +- The computational cost of the approximations does not depend on $β$, but on the order of the approximation. To address the first point, we can have a look at the particular form of the time-evolution operator. -Here we see that for this particular Hamiltonian, all the terms with factors $d\tau$ are either zero or have trace zero. +Here we see that for this particular Hamiltonian, all the terms with factors $dτ$ are either zero or have trace zero. As a result, the trace of the time-evolution operator is equal to the trace of the identity, hence the result is always $2$. ```math @@ -272,9 +250,9 @@ H &= \begin{pmatrix} 0 & 0 & 1 \end{pmatrix} \\ -e^{\tau H} &= \begin{pmatrix} - 1 + \tau D + \frac{\tau^2}{2} D^2 & C + \frac{\tau}{2} (CD + DC) \\ - \tau (B + \frac{\tau}{2} (BD + DB)) & A + \frac{\tau^2}{2} (AD + DA + CB + BC) +e^{τ H} &= \begin{pmatrix} + 1 + τ D + \frac{τ^2}{2} D^2 & C + \frac{τ}{2} (CD + DC) \\ + τ (B + \frac{τ}{2} (BD + DB)) & A + \frac{τ^2}{2} (AD + DA + CB + BC) \end{pmatrix} \end{align} ``` @@ -308,20 +286,20 @@ end ![](figure-2.png) -We can now clearly see that, somewhat unsurprisingly, the error increases the larger $\beta$ becomes. -Given that we are computing Taylor expansions around $\beta = 0$, this is to be expected. +We can now clearly see that, somewhat unsurprisingly, the error increases the larger $β$ becomes. +Given that we are computing Taylor expansions around $β = 0$, this is to be expected. However, there is a trick we can use to improve our results slightly. To that end, we first rewrite the partition function as ```math -Z(\beta) = - \text{Tr} \left( e^{-\beta H} \right) = - \text{Tr} \left( e^{-\beta H / 2} e^{-\beta H / 2} \right) = - \left\langle e^{-\beta H^\dagger / 2}, e^{-\beta H / 2} \right\rangle +Z(β) = + \text{Tr} \left( e^{-β H} \right) = + \text{Tr} \left( e^{-β H / 2} e^{-β H / 2} \right) = + \left\langle e^{-β H^† / 2}, e^{-β H / 2} \right\rangle ``` -In other words, we can compute the partition function at $\beta$ by computing the overlap of two states evolved for $\beta / 2$, as long as the Hamiltonian is Hermitian. -Otherwise, we could still use the same trick, but we would have to compute the evolved states twice, once for $H$ and once for $H^\dagger$. +In other words, we can compute the partition function at $β$ by computing the overlap of two states evolved for $β / 2$, as long as the Hamiltonian is Hermitian. +Otherwise, we could still use the same trick, but we would have to compute the evolved states twice, once for $H$ and once for $H^†$. ````julia double_logpartition(ρ₁, ρ₂ = ρ₁) = log(real(dot(ρ₁, ρ₂))) / length(ρ₁) @@ -361,15 +339,15 @@ end ### MPO multiplication approach (linear) -While the Taylor series approach is useful, we can only push that so far, since we are always expanding around $\beta = 0$. -However, inspired by the trick we used to improve the results, we can use MPO multiplication techniques to compute partition functions at larger $\beta$. -In particular, we can implement the following algorithm to scan over a linear range of $\beta$ values. +While the Taylor series approach is useful, we can only push that so far, since we are always expanding around $β = 0$. +However, inspired by the trick we used to improve the results, we can use MPO multiplication techniques to compute partition functions at larger $β$. +In particular, we can implement the following algorithm to scan over a linear range of $β$ values. ```math \begin{align} -Z(2\beta) &= Z(\beta) \cdot Z(\beta) \\ -Z(3\beta) &= Z(\beta) \cdot Z(\beta) \cdot Z(\beta) = Z(\beta) \cdot Z(2\beta) \\ -\vdots &= \vdots +Z(2β) &= Z(β) · Z(β) \\ +Z(3β) &= Z(β) · Z(β) · Z(β) = Z(β) · Z(2β) \\ +⋮ &= ⋮ \end{align} ``` @@ -436,10 +414,10 @@ end ![](figure-4.png) -This approach clearly improves the accuracy of the results, indicating that we can indeed compute partition functions at larger $\beta$ values. -However, the computational cost of this approach (at fixed maximal bond dimension) is now linear in $\beta$, since we need to compute the partition function at each $\beta$ value. -Often, this is fine, since we are typically interested in a range of $\beta$ values, rather than a single one. -However, to really push this to larger $\beta$ values, this can still turn out to be a bottleneck. +This approach clearly improves the accuracy of the results, indicating that we can indeed compute partition functions at larger $β$ values. +However, the computational cost of this approach (at fixed maximal bond dimension) is now linear in $β$, since we need to compute the partition function at each $β$ value. +Often, this is fine, since we are typically interested in a range of $β$ values, rather than a single one. +However, to really push this to larger $β$ values, this can still turn out to be a bottleneck. We also have to be careful with the accuracy of our results. In particular, the error in the partition function will accumulate over the iterations, which might turn the results into garbage. @@ -447,23 +425,23 @@ Typically, the entanglement entropy of the density matrix is a good measure of t Apart from the bond dimension, we have two other parameters to tune: the accuracy of the initial density matrix, and the size of the step. The accuracy of the initial density matrix can be improved by increasing the order of the Taylor expansion, but this will result in a larger MPO bond dimension. -On the other hand, if we improve the accuracy of the initial density matrix, we could also increase the step size, which would reduce the number of iterations required to reach a certain $\beta$ value. +On the other hand, if we improve the accuracy of the initial density matrix, we could also increase the step size, which would reduce the number of iterations required to reach a certain $β$ value. Keeping these parameters in balance is necessary to obtain accurate results, and this might require some trial and error. ### MPO multiplication approach (exponential) -If we wish to push the results to even larger $\beta$ values, we can note that taking linear steps in $\beta$ is not the only option. -To that end, we can use another trick to scan over an exponential range of $\beta$ values: [exponentiating by squaring](https://en.wikipedia.org/wiki/Exponentiation_by_squaring). -In particular, we note that computing $x^n$ for integer (large) $n$ can typically be done more efficiently than computing $x \cdot x \cdot \dots \cdot x$. +If we wish to push the results to even larger $β$ values, we can note that taking linear steps in $β$ is not the only option. +To that end, we can use another trick to scan over an exponential range of $β$ values: [exponentiating by squaring](https://en.wikipedia.org/wiki/Exponentiation_by_squaring). +In particular, we note that computing $x^n$ for integer (large) $n$ can typically be done more efficiently than computing $x · x · … · x$. To do so, we note that multiplication is associative, and regroup the factors in such a way that we can compute the result in a logarithmic number of steps. Here, we assume $n = 2^m$ for some integer $m$, and note that this could be generalized to any $n$ by decomposing $n$ into a sum of powers of $2$. Then, we can write ```math -x^n = x^{2^m} = x^{2^{m-1}} \cdot x^{2^{m-1}} = (x^{2^{m-2}} \cdot x^{2^{m-2}}) \cdot (x^{2^{m-2}} \cdot x^{2^{m-2}}) = \dots +x^n = x^{2^m} = x^{2^{m-1}} · x^{2^{m-1}} = (x^{2^{m-2}} · x^{2^{m-2}}) · (x^{2^{m-2}} · x^{2^{m-2}}) = … ``` -In other words, we can scan a range of exponentially increasing $\beta$ values by squaring the density matrix at each step. +In other words, we can scan a range of exponentially increasing $β$ values by squaring the density matrix at each step. ````julia βs_exp = 2.0 .^ (-3:3) @@ -516,7 +494,7 @@ end ![](figure-5.png) -Clearly, the exponential approach allows us to reach larger $\beta$ values much quicker, but there is again a trade-off. +Clearly, the exponential approach allows us to reach larger $β$ values much quicker, but there is again a trade-off. Since the size of the steps are increasing, we need to be more careful with the accuracy of our approximations. !!! warning @@ -528,14 +506,14 @@ Since the size of the steps are increasing, we need to be more careful with the Finally, we can also note that the partition function is characterized by the following differential equation: ```math -\frac{dZ}{d\beta} = -H \cdot Z -\implies Z(\beta) = e^{-\beta H} \cdot Z(0) +\frac{dZ}{dβ} = -H · Z +⟹ Z(β) = e^{-β H} · Z(0) ``` -In other words, we can compute the partition function at $\beta$ by evolving the partition function at $0$ for a time $d\tau = -i \beta$. +In other words, we can compute the partition function at $β$ by evolving the partition function at $0$ for a time $dτ = -i β$. The starting point for this approach could be either achieved through one of the techniques we have already discussed, but we can also start from the infinite temperature state directly. -In particular, this state is given by the identity MPO, and we can evolve this state to compute the partition function at any $\beta$ value. +In particular, this state is given by the identity MPO, and we can evolve this state to compute the partition function at any $β$ value. ````julia Z_tdvp = zeros(length(βs)) @@ -587,7 +565,7 @@ end ![](figure-6.png) !!! note - We could further improve the accuracy of the TDVP approach by evolving with $(H \otimes \mathbb{1} + \mathbb{1} \otimes H^\dagger)$, rather than $H \otimes \mathbb{1}$ which is the current implementation. + We could further improve the accuracy of the TDVP approach by evolving with $(H ⊗ \mathbb{1} + \mathbb{1} ⊗ H^†)$, rather than $H ⊗ \mathbb{1}$ which is the current implementation. This is known to improve the stability of the positive semidefinite property of the density matrix, and could lead to more accurate results. --- diff --git a/docs/src/examples/dynamics/xy-finiteT/main.ipynb b/docs/src/examples/dynamics/xy-finiteT/main.ipynb index 1af3f9bf8..306e6edd8 100644 --- a/docs/src/examples/dynamics/xy-finiteT/main.ipynb +++ b/docs/src/examples/dynamics/xy-finiteT/main.ipynb @@ -30,7 +30,7 @@ "Here, we use [BenchmarkFreeFermions.jl](https://github.com/Qiaoyi-Li/BenchmarkFreeFermions.jl/) to compare our results.\n", "\n", "$$\n", - " H = J \\sum_{i=1}^{N} \\left( \\sigma^x_i \\sigma^x_{i+1} + \\sigma^y_i \\sigma^y_{i+1} \\right)\n", + " H = J \\sum_{i=1}^{N} \\left( σ^x_i σ^x_{i+1} + σ^y_i σ^y_{i+1} \\right)\n", "$$\n", "\n", "Here we will consider the anti-ferromagnetic ($J > 0$) chain, and restrict ourselves to $J = 1/2$." @@ -73,11 +73,10 @@ "source": [ "## Diagonalization of the Hamiltonian\n", "\n", - "The Hamiltonian can be diagonalized through a Bogoliubov transformation, leading to the following expression for the ground state energy\n", - "The Hamiltonian can be diagonalized in terms of fermionic creation and annihilation operators, leading to the following expression in terms of [an incomplete elliptic integral of the second kind](https://en.wikipedia.org/wiki/Elliptic_integral).\n", + "The Hamiltonian can be diagonalized in terms of fermionic creation and annihilation operators, which yields an expression for the ground state energy in terms of [an incomplete elliptic integral of the second kind](https://en.wikipedia.org/wiki/Elliptic_integral).\n", "\n", "$$\n", - " E_0 = -\\frac{1}{\\pi} \\text{EllipticE}\\left( \\sqrt{1 - \\gamma^2} \\right)\n", + " E_0 = -\\frac{1}{π} \\text{EllipticE}\\left( \\sqrt{1 - γ^2} \\right)\n", "$$\n", "\n", "The derivation, via a Jordan-Wigner transformation to free fermions followed by a Bogoliubov rotation, can be found in [Lieb, Schultz & Mattis, Ann. Phys. 16, 407 (1961)](https://doi.org/10.1016/0003-4916(61)90115-4)." @@ -162,39 +161,39 @@ "This is given by\n", "\n", "$$\n", - " Z(\\beta) = \\text{Tr} \\left( e^{-\\beta H} \\right)\n", + " Z(β) = \\text{Tr} \\left( e^{-β H} \\right)\n", "$$\n", "\n", - "where $\\beta = 1 / T$ is the inverse temperature.\n", + "where $β = 1 / T$ is the inverse temperature.\n", "\n", "Given the partition function, we can compute the free energy as\n", "$$\n", - " F(\\beta) = -\\frac{1}{\\beta} \\log Z(\\beta)\n", + " F(β) = -\\frac{1}{β} \\log Z(β)\n", "$$\n", "\n", "We can also compute observables using\n", "$$\n", - " \\langle O \\rangle = \\frac{1}{Z} \\text{Tr} \\left( O e^{-\\beta H} \\right)\n", + " ⟨O⟩ = \\frac{1}{Z} \\text{Tr} \\left( O e^{-β H} \\right)\n", "$$\n", "\n", "In particular, we can compute the energy as\n", "$$\n", - " U = \\langle H \\rangle = \\frac{1}{Z} \\text{Tr} \\left( H e^{-\\beta H} \\right)\n", + " U = ⟨H⟩ = \\frac{1}{Z} \\text{Tr} \\left( H e^{-β H} \\right)\n", "$$\n", "\n", "Finally, the specific heat can be computed as\n", "$$\n", - " \\chi = \\frac{\\partial U}{\\partial T} = -\\beta^2 \\frac{\\partial U}{\\partial \\beta}\n", + " χ = \\frac{∂ U}{∂ T} = -β^2 \\frac{∂ U}{∂ β}\n", "$$\n", "\n", "Luckily, the partition function can be computed analytically for the XY model.\n", "The resulting expression is\n", "\n", "$$\n", - " Z(\\beta) = \\prod_{k=1}^{N} \\left( 1 + e^{-\\beta \\epsilon_k} \\right)^{1/N}\n", + " Z(β) = \\prod_{k=1}^{N} \\left( 1 + e^{-β ε_k} \\right)^{1/N}\n", "$$\n", "\n", - "This expression follows from the same free-fermion diagonalization as the ground-state energy above: each single-particle mode $\\epsilon_k$ is independently occupied or empty, giving the usual free-fermion partition function (see again [Lieb, Schultz & Mattis (1961)](https://doi.org/10.1016/0003-4916(61)90115-4))." + "This expression follows from the same free-fermion diagonalization as the ground-state energy above: each single-particle mode $ε_k$ is independently occupied or empty, giving the usual free-fermion partition function (see again [Lieb, Schultz & Mattis (1961)](https://doi.org/10.1016/0003-4916(61)90115-4))." ] }, { @@ -227,10 +226,10 @@ "### MPO approach\n", "\n", "We can numerically compute the partition function by explicitly computing the trace of the time-evolution operator.\n", - "To that end, we first need to build the time-evolution operator $e^{-\\beta H}$, and then compute its trace.\n", + "To that end, we first need to build the time-evolution operator $e^{-β H}$, and then compute its trace.\n", "\n", "In order to build the time-evolution operator, we can repurpose the `make_time_mpo` function, which constructs the time-evolution operator for the ground state.\n", - "However, since we are interested in $e^{-\\beta H}$, instead of $e^{-iH dt}$, we work with $dt = -i \\beta$.\n", + "However, since we are interested in $e^{-β H}$, instead of $e^{-iH dt}$, we work with $dt = -i β$.\n", "In particular, we can approximate the exponential using a Taylor series through the `TaylorCluster` algorithm." ] }, @@ -280,8 +279,8 @@ "source": [ "Some observations:\n", "- The first order approximation fails to capture the behavior of the partition function.\n", - "- The higher order approximations are in good agreement with the analytical result, as long as $\\beta$ is not too large.\n", - "- The computational cost of the approximations does not depend on $\\beta$, but on the order of the approximation." + "- The higher order approximations are in good agreement with the analytical result, as long as $β$ is not too large.\n", + "- The computational cost of the approximations does not depend on $β$, but on the order of the approximation." ] }, { @@ -289,7 +288,7 @@ "metadata": {}, "source": [ "To address the first point, we can have a look at the particular form of the time-evolution operator.\n", - "Here we see that for this particular Hamiltonian, all the terms with factors $d\\tau$ are either zero or have trace zero.\n", + "Here we see that for this particular Hamiltonian, all the terms with factors $dτ$ are either zero or have trace zero.\n", "As a result, the trace of the time-evolution operator is equal to the trace of the identity, hence the result is always $2$.\n", "\n", "$$\n", @@ -300,9 +299,9 @@ " 0 & 0 & 1\n", "\\end{pmatrix} \\\\\n", "\n", - "e^{\\tau H} &= \\begin{pmatrix}\n", - " 1 + \\tau D + \\frac{\\tau^2}{2} D^2 & C + \\frac{\\tau}{2} (CD + DC) \\\\\n", - " \\tau (B + \\frac{\\tau}{2} (BD + DB)) & A + \\frac{\\tau^2}{2} (AD + DA + CB + BC)\n", + "e^{τ H} &= \\begin{pmatrix}\n", + " 1 + τ D + \\frac{τ^2}{2} D^2 & C + \\frac{τ}{2} (CD + DC) \\\\\n", + " τ (B + \\frac{τ}{2} (BD + DB)) & A + \\frac{τ^2}{2} (AD + DA + CB + BC)\n", "\\end{pmatrix}\n", "\\end{align}\n", "$$\n", @@ -344,20 +343,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can now clearly see that, somewhat unsurprisingly, the error increases the larger $\\beta$ becomes.\n", - "Given that we are computing Taylor expansions around $\\beta = 0$, this is to be expected.\n", + "We can now clearly see that, somewhat unsurprisingly, the error increases the larger $β$ becomes.\n", + "Given that we are computing Taylor expansions around $β = 0$, this is to be expected.\n", "\n", "However, there is a trick we can use to improve our results slightly.\n", "To that end, we first rewrite the partition function as\n", "$$\n", - "Z(\\beta) =\n", - " \\text{Tr} \\left( e^{-\\beta H} \\right) =\n", - " \\text{Tr} \\left( e^{-\\beta H / 2} e^{-\\beta H / 2} \\right) =\n", - " \\left\\langle e^{-\\beta H^\\dagger / 2}, e^{-\\beta H / 2} \\right\\rangle\n", + "Z(β) =\n", + " \\text{Tr} \\left( e^{-β H} \\right) =\n", + " \\text{Tr} \\left( e^{-β H / 2} e^{-β H / 2} \\right) =\n", + " \\left\\langle e^{-β H^† / 2}, e^{-β H / 2} \\right\\rangle\n", "$$\n", "\n", - "In other words, we can compute the partition function at $\\beta$ by computing the overlap of two states evolved for $\\beta / 2$, as long as the Hamiltonian is Hermitian.\n", - "Otherwise, we could still use the same trick, but we would have to compute the evolved states twice, once for $H$ and once for $H^\\dagger$." + "In other words, we can compute the partition function at $β$ by computing the overlap of two states evolved for $β / 2$, as long as the Hamiltonian is Hermitian.\n", + "Otherwise, we could still use the same trick, but we would have to compute the evolved states twice, once for $H$ and once for $H^†$." ] }, { @@ -405,15 +404,15 @@ "source": [ "### MPO multiplication approach (linear)\n", "\n", - "While the Taylor series approach is useful, we can only push that so far, since we are always expanding around $\\beta = 0$.\n", - "However, inspired by the trick we used to improve the results, we can use MPO multiplication techniques to compute partition functions at larger $\\beta$.\n", - "In particular, we can implement the following algorithm to scan over a linear range of $\\beta$ values.\n", + "While the Taylor series approach is useful, we can only push that so far, since we are always expanding around $β = 0$.\n", + "However, inspired by the trick we used to improve the results, we can use MPO multiplication techniques to compute partition functions at larger $β$.\n", + "In particular, we can implement the following algorithm to scan over a linear range of $β$ values.\n", "\n", "$$\n", "\\begin{align}\n", - "Z(2\\beta) &= Z(\\beta) \\cdot Z(\\beta) \\\\\n", - "Z(3\\beta) &= Z(\\beta) \\cdot Z(\\beta) \\cdot Z(\\beta) = Z(\\beta) \\cdot Z(2\\beta) \\\\\n", - "\\vdots &= \\vdots\n", + "Z(2β) &= Z(β) · Z(β) \\\\\n", + "Z(3β) &= Z(β) · Z(β) · Z(β) = Z(β) · Z(2β) \\\\\n", + "⋮ &= ⋮\n", "\\end{align}\n", "$$\n", "\n", @@ -489,10 +488,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This approach clearly improves the accuracy of the results, indicating that we can indeed compute partition functions at larger $\\beta$ values.\n", - "However, the computational cost of this approach (at fixed maximal bond dimension) is now linear in $\\beta$, since we need to compute the partition function at each $\\beta$ value.\n", - "Often, this is fine, since we are typically interested in a range of $\\beta$ values, rather than a single one.\n", - "However, to really push this to larger $\\beta$ values, this can still turn out to be a bottleneck.\n", + "This approach clearly improves the accuracy of the results, indicating that we can indeed compute partition functions at larger $β$ values.\n", + "However, the computational cost of this approach (at fixed maximal bond dimension) is now linear in $β$, since we need to compute the partition function at each $β$ value.\n", + "Often, this is fine, since we are typically interested in a range of $β$ values, rather than a single one.\n", + "However, to really push this to larger $β$ values, this can still turn out to be a bottleneck.\n", "\n", "We also have to be careful with the accuracy of our results.\n", "In particular, the error in the partition function will accumulate over the iterations, which might turn the results into garbage.\n", @@ -500,7 +499,7 @@ "\n", "Apart from the bond dimension, we have two other parameters to tune: the accuracy of the initial density matrix, and the size of the step.\n", "The accuracy of the initial density matrix can be improved by increasing the order of the Taylor expansion, but this will result in a larger MPO bond dimension.\n", - "On the other hand, if we improve the accuracy of the initial density matrix, we could also increase the step size, which would reduce the number of iterations required to reach a certain $\\beta$ value.\n", + "On the other hand, if we improve the accuracy of the initial density matrix, we could also increase the step size, which would reduce the number of iterations required to reach a certain $β$ value.\n", "Keeping these parameters in balance is necessary to obtain accurate results, and this might require some trial and error." ] }, @@ -510,18 +509,18 @@ "source": [ "### MPO multiplication approach (exponential)\n", "\n", - "If we wish to push the results to even larger $\\beta$ values, we can note that taking linear steps in $\\beta$ is not the only option.\n", - "To that end, we can use another trick to scan over an exponential range of $\\beta$ values: [exponentiating by squaring](https://en.wikipedia.org/wiki/Exponentiation_by_squaring).\n", - "In particular, we note that computing $x^n$ for integer (large) $n$ can typically be done more efficiently than computing $x \\cdot x \\cdot \\dots \\cdot x$.\n", + "If we wish to push the results to even larger $β$ values, we can note that taking linear steps in $β$ is not the only option.\n", + "To that end, we can use another trick to scan over an exponential range of $β$ values: [exponentiating by squaring](https://en.wikipedia.org/wiki/Exponentiation_by_squaring).\n", + "In particular, we note that computing $x^n$ for integer (large) $n$ can typically be done more efficiently than computing $x · x · … · x$.\n", "To do so, we note that multiplication is associative, and regroup the factors in such a way that we can compute the result in a logarithmic number of steps.\n", "Here, we assume $n = 2^m$ for some integer $m$, and note that this could be generalized to any $n$ by decomposing $n$ into a sum of powers of $2$.\n", "Then, we can write\n", "\n", "$$\n", - "x^n = x^{2^m} = x^{2^{m-1}} \\cdot x^{2^{m-1}} = (x^{2^{m-2}} \\cdot x^{2^{m-2}}) \\cdot (x^{2^{m-2}} \\cdot x^{2^{m-2}}) = \\dots\n", + "x^n = x^{2^m} = x^{2^{m-1}} · x^{2^{m-1}} = (x^{2^{m-2}} · x^{2^{m-2}}) · (x^{2^{m-2}} · x^{2^{m-2}}) = …\n", "$$\n", "\n", - "In other words, we can scan a range of exponentially increasing $\\beta$ values by squaring the density matrix at each step." + "In other words, we can scan a range of exponentially increasing $β$ values by squaring the density matrix at each step." ] }, { @@ -582,7 +581,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Clearly, the exponential approach allows us to reach larger $\\beta$ values much quicker, but there is again a trade-off.\n", + "Clearly, the exponential approach allows us to reach larger $β$ values much quicker, but there is again a trade-off.\n", "Since the size of the steps are increasing, we need to be more careful with the accuracy of our approximations.\n", "\n", "> **Warning**\n", @@ -600,14 +599,14 @@ "Finally, we can also note that the partition function is characterized by the following differential equation:\n", "\n", "$$\n", - "\\frac{dZ}{d\\beta} = -H \\cdot Z\n", - "\\implies Z(\\beta) = e^{-\\beta H} \\cdot Z(0)\n", + "\\frac{dZ}{dβ} = -H · Z\n", + "⟹ Z(β) = e^{-β H} · Z(0)\n", "$$\n", "\n", - "In other words, we can compute the partition function at $\\beta$ by evolving the partition function at $0$ for a time $d\\tau = -i \\beta$.\n", + "In other words, we can compute the partition function at $β$ by evolving the partition function at $0$ for a time $dτ = -i β$.\n", "\n", "The starting point for this approach could be either achieved through one of the techniques we have already discussed, but we can also start from the infinite temperature state directly.\n", - "In particular, this state is given by the identity MPO, and we can evolve this state to compute the partition function at any $\\beta$ value." + "In particular, this state is given by the identity MPO, and we can evolve this state to compute the partition function at any $β$ value." ] }, { @@ -668,7 +667,7 @@ "source": [ "> **Note**\n", ">\n", - "> We could further improve the accuracy of the TDVP approach by evolving with $(H \\otimes \\mathbb{1} + \\mathbb{1} \\otimes H^\\dagger)$, rather than $H \\otimes \\mathbb{1}$ which is the current implementation.\n", + "> We could further improve the accuracy of the TDVP approach by evolving with $(H ⊗ \\mathbb{1} + \\mathbb{1} ⊗ H^†)$, rather than $H ⊗ \\mathbb{1}$ which is the current implementation.\n", "> This is known to improve the stability of the positive semidefinite property of the density matrix, and could lead to more accurate results." ] }, diff --git a/docs/src/examples/excitations/haldane/index.md b/docs/src/examples/excitations/haldane/index.md index f26c31407..af8cd0401 100644 --- a/docs/src/examples/excitations/haldane/index.md +++ b/docs/src/examples/excitations/haldane/index.md @@ -15,13 +15,6 @@ To follow the tutorial you need the following packages: using MPSKit, MPSKitModels, TensorKit, Plots, Polynomials ```` -```` -Precompiling packages... - 1343.7 ms ✓ Polynomials → PolynomialsRecipesBaseExt - 1 dependency successfully precompiled in 2 seconds. 18 already precompiled. - -```` - The Heisenberg model is defined by the following Hamiltonian: ```math diff --git a/docs/src/examples/groundstates/bose-hubbard/index.md b/docs/src/examples/groundstates/bose-hubbard/index.md index b751dd089..9570db4e5 100644 --- a/docs/src/examples/groundstates/bose-hubbard/index.md +++ b/docs/src/examples/groundstates/bose-hubbard/index.md @@ -18,82 +18,65 @@ default(fontfamily = "Computer Modern", label = nothing, dpi = 100, framestyle = # 1D Bose-Hubbard model -In this tutorial, we will explore the physics of the one-dimensional Bose–Hubbard model -using matrix product states. For the most part, we replicate the results presented in -[**Phys. Rev. B 105, -134502**](https://journals.aps.org/prb/abstract/10.1103/PhysRevB.105.134502), which can be -consulted for any statements in this tutorial that are not otherwise cited. The Hamiltonian -under study is defined as follows: +In this tutorial, we will explore the physics of the one-dimensional Bose–Hubbard model using matrix product states. +For the most part, we replicate the results presented in [**Phys. Rev. B 105, 134502**](https://journals.aps.org/prb/abstract/10.1103/PhysRevB.105.134502), which can be consulted for any statements in this tutorial that are not otherwise cited. +The Hamiltonian under study is defined as follows: -$$H = -t \sum_{i} (\hat{a}_i^{\dagger} \hat{a}_{i+1} + \hat{a}_{i+1}^{\dagger} \hat{a}_i) + \frac{U}{2} \sum_i \hat{n}_i(\hat{n}_i - 1) - \mu \sum_i \hat{n}_i$$ +$$H = -t \sum_{i} (â_i^{†} â_{i+1} + â_{i+1}^{†} â_i) + \frac{U}{2} \sum_i \hat{n}_i(\hat{n}_i - 1) - μ \sum_i \hat{n}_i$$ -where the bosonic creation and annihilation operators satisfy the canonical commutation -relations (CCR): +where the bosonic creation and annihilation operators satisfy the canonical commutation relations (CCR): -$$[\hat{a}_i, \hat{a}_j^{\dagger}] = \delta_{ij}.$$ +$$[â_i, â_j^{†}] = δ_{ij}.$$ -Each lattice site hosts a local Hilbert space corresponding to bosonic occupation states -$|n\rangle$, where $(n = 0, 1, 2, \ldots)$. Since this space is formally -infinite-dimensional, numerical simulations typically impose a truncation at some maximum -occupation number $(n_{\text{max}})$. Such a treatment is justified since it can be observed -that the simulation results quickly converge with the cutoff if the filling fraction is kept -sufficiently low. +Each lattice site hosts a local Hilbert space corresponding to bosonic occupation states $|n⟩$, where $(n = 0, 1, 2, …)$. +Since this space is formally infinite-dimensional, numerical simulations typically impose a truncation at some maximum occupation number $(n_{\text{max}})$. +Such a treatment is justified since it can be observed that the simulation results quickly converge with the cutoff if the filling fraction is kept sufficiently low. -Within this truncated space, the local creation and annihilation operators are represented -by finite-dimensional matrices. For example, with cutoff $n_{\text{max}}$, the annihilation -operator takes the form +Within this truncated space, the local creation and annihilation operators are represented by finite-dimensional matrices. +For example, with cutoff $n_{\text{max}}$, the annihilation operator takes the form ```math -\hat{a} = +â = \begin{bmatrix} -0 & \sqrt{1} & 0 & 0 & \cdots & 0 \\ -0 & 0 & \sqrt{2} & 0 & \cdots & 0 \\ -0 & 0 & 0 & \sqrt{3} & \cdots & 0 \\ -\vdots & & & \ddots & \ddots & \vdots \\ -0 & 0 & 0 & \cdots & 0 & \sqrt{n_{\text{max}}} \\ -0 & 0 & 0 & \cdots & 0 & 0 +0 & \sqrt{1} & 0 & 0 & ⋯ & 0 \\ +0 & 0 & \sqrt{2} & 0 & ⋯ & 0 \\ +0 & 0 & 0 & \sqrt{3} & ⋯ & 0 \\ +⋮ & & & ⋱ & ⋱ & ⋮ \\ +0 & 0 & 0 & ⋯ & 0 & \sqrt{n_{\text{max}}} \\ +0 & 0 & 0 & ⋯ & 0 & 0 \end{bmatrix} ``` and the creation operator is simply its Hermitian conjugate, ```math -\hat{a}^\dagger = +â^† = \begin{bmatrix} -0 & 0 & 0 & \cdots & 0 & 0 \\ -\sqrt{1} & 0 & 0 & \cdots & 0 & 0 \\ -0 & \sqrt{2} & 0 & \cdots & 0 & 0 \\ -\vdots & & \ddots & \ddots & & \vdots \\ -0 & 0 & 0 & \cdots & 0 & 0 \\ -0 & 0 & 0 & \cdots & \sqrt{n_{\text{max}}} & 0 +0 & 0 & 0 & ⋯ & 0 & 0 \\ +\sqrt{1} & 0 & 0 & ⋯ & 0 & 0 \\ +0 & \sqrt{2} & 0 & ⋯ & 0 & 0 \\ +⋮ & & ⋱ & ⋱ & & ⋮ \\ +0 & 0 & 0 & ⋯ & 0 & 0 \\ +0 & 0 & 0 & ⋯ & \sqrt{n_{\text{max}}} & 0 \end{bmatrix} ``` The number operator is then given by -$$\hat{n} = \hat{a}^\dagger \hat{a} = \mathrm{diag}(0, 1, 2, \ldots, n_{\text{max}}).$$ +$$\hat{n} = â^† â = \mathrm{diag}(0, 1, 2, …, n_{\text{max}}).$$ Before moving on, notice that the Hamiltonian is uniform and translationally invariant. -Typically, such models are studied on a finite chain of $N$ sites with periodic boundary -conditions, but this introduces finite-size effects that are rather annoying to deal with. -In contrast, the MPS framework allows us to work directly in the thermodynamic limit, -avoiding such artifacts. We will follow this line of exploration in this tutorial and leave -finite systems for another example. - -In order to work in the thermodynamic limit, we will have to create an -[`InfiniteMPS`](@ref). A complete specification of the MPS requires us to define the -physical space and the virtual space of the constituent tensors. At this point is it useful -to note that `MPSKit.jl` is powered by -[`TensorKit.jl`](https://github.com/QuantumKitHub/TensorKit.jl) under the hood and has some -very generic interfaces in order to allow imposing symmetries of all kinds. As a result, it -is sometimes necessary to be a bit more explicit about what we want to do in terms of the -vector spaces involved. In this case, we will not consider any symmetries and simply take -the most naive approach of working within the [`Trivial`](@extref TensorKitSectors.Trivial) -sector. The physical space is then `ℂ^(nmax+1)`, and the virtual space is `ℂ^D` where $D$ is -some integer chosen to be the bond dimension of the MPS, and `ℂ` is an alias for -[`ComplexSpace`](@extref TensorKit.ComplexSpace) (typeset as `\bbC`). As $D$ is increased, -one increases the amount of entanglement, i.e, quantum correlations that can be captured by -the state. +Typically, such models are studied on a finite chain of $N$ sites with periodic boundary conditions, but this introduces finite-size effects that are rather annoying to deal with. +In contrast, the MPS framework allows us to work directly in the thermodynamic limit, avoiding such artifacts. +We will follow this line of exploration in this tutorial and leave finite systems for another example. + +In order to work in the thermodynamic limit, we will have to create an [`InfiniteMPS`](@ref). +A complete specification of the MPS requires us to define the physical space and the virtual space of the constituent tensors. +At this point is it useful to note that `MPSKit.jl` is powered by [`TensorKit.jl`](https://github.com/QuantumKitHub/TensorKit.jl) under the hood and has some very generic interfaces in order to allow imposing symmetries of all kinds. +As a result, it is sometimes necessary to be a bit more explicit about what we want to do in terms of the vector spaces involved. +In this case, we will not consider any symmetries and simply take the most naive approach of working within the [`Trivial`](@extref TensorKitSectors.Trivial) sector. +The physical space is then `ℂ^(nmax+1)`, and the virtual space is `ℂ^D` where $D$ is some integer chosen to be the bond dimension of the MPS, and `ℂ` is an alias for [`ComplexSpace`](@extref TensorKit.ComplexSpace) (typeset as `\bbC`). +As $D$ is increased, one increases the amount of entanglement, i.e, quantum correlations that can be captured by the state. ````julia cutoff, D = 4, 5 @@ -110,12 +93,10 @@ initial_state = InfiniteMPS(ℂ^(cutoff + 1), ℂ^D) ```` -This simply initializes a tensor filled with random entries (check out the documentation for -other useful constructors). Next, we need the creation and annihilation operators. While we -could construct them from scratch, here we will use -[`MPSKitModels.jl`](https://github.com/QuantumKitHub/MPSKitModels.jl) instead that has -predefined operators and models for most well-known lattice models. In particular, we can -use [`MPSKitModels.a_min`](@extref) to create the bosonic annihilation operator. +This simply initializes a tensor filled with random entries (check out the documentation for other useful constructors). +Next, we need the creation and annihilation operators. +While we could construct them from scratch, here we will use [`MPSKitModels.jl`](https://github.com/QuantumKitHub/MPSKitModels.jl) instead that has predefined operators and models for most well-known lattice models. +In particular, we can use [`MPSKitModels.a_min`](@extref) to create the bosonic annihilation operator. ````julia a_op = a_min(cutoff = cutoff) # creates a bosonic annihilation operator without any symmetries @@ -123,10 +104,8 @@ display(a_op[]) display((a_op' * a_op)[]) ```` -The [] accessor lets us see the underlying array, and indeed the operators are exactly what -we require. Similarly, the Bose Hubbard model is also predefined in -[`MPSKitModels.bose_hubbard_model`](@extref) (although we will construct our own variant -later on). +The [] accessor lets us see the underlying array, and indeed the operators are exactly what we require. +Similarly, the Bose Hubbard model is also predefined in [`MPSKitModels.bose_hubbard_model`](@extref) (although we will construct our own variant later on). ````julia hamiltonian = bose_hubbard_model(InfiniteChain(1); cutoff = cutoff, U = 1, mu = 0.5, t = 0.2) # It is not strictly required to pass InfiniteChain() and is only included for clarity; one may instead pass FiniteChain(N) as well @@ -142,11 +121,9 @@ hamiltonian = bose_hubbard_model(InfiniteChain(1); cutoff = cutoff, U = 1, mu = ```` -This has created the Hamiltonian operator as a [matrix product operator](@ref -InfiniteMPOHamiltonian) (MPO) which is a convenient form to use in conjunction with MPS. -Finally, the ground state optimization may be performed with either [`iDMRG`](@ref IDMRG) or -[`VUMPS`](@ref). Both should take similar arguments but it is known that VUMPS is typically -more efficient for these systems so we proceed with that. +This has created the Hamiltonian operator as a [matrix product operator](@ref InfiniteMPOHamiltonian) (MPO) which is a convenient form to use in conjunction with MPS. +Finally, the ground state optimization may be performed with either [`iDMRG`](@ref IDMRG) or [`VUMPS`](@ref). +Both should take similar arguments but it is known that VUMPS is typically more efficient for these systems so we proceed with that. ````julia ground_state, _, _ = find_groundstate(initial_state, hamiltonian, VUMPS(tol = 1.0e-6, verbosity = 2, maxiter = 200)) @@ -160,9 +137,8 @@ Energy: -0.675698155160498 - 6.668144181512403e-17im ```` -This automatically runs the algorithm until a certain [error measure](@ref -MPSKit.calc_galerkin) falls below the specified tolerance or the maximum iterations is -reached. Let us wrap all this into a convenient function. +This automatically runs the algorithm until a certain [error measure](@ref MPSKit.calc_galerkin) falls below the specified tolerance or the maximum iterations is reached. +Let us wrap all this into a convenient function. ````julia function get_ground_state(mu, t, cutoff, D; kwargs...) @@ -186,11 +162,10 @@ ground_state = get_ground_state(0.5, 0.01, cutoff, D; tol = 1.0e-6, verbosity = ```` -Now that we have the state, we may compute observables using the [`expectation_value`](@ref) -function. It typically expects a `Pair`, `(i1, i2, .., ik) => op` where `op` is a -`TensorMap` or `InfiniteMPO` acting over `k` sites. In case of the Hamiltonian, it is not -necessary to specify the indices as it spans the whole lattice. We can now plot the -correlation function $\langle \hat{a}^{\dagger}_i \hat{a}_j\rangle$. +Now that we have the state, we may compute observables using the [`expectation_value`](@ref) function. +It typically expects a `Pair`, `(i1, i2, .., ik) => op` where `op` is a `TensorMap` or `InfiniteMPO` acting over `k` sites. +In case of the Hamiltonian, it is not necessary to specify the indices as it spans the whole lattice. +We can now plot the correlation function $⟨â^{†}_i â_j⟩$. ````julia plot(map(i -> real.(expectation_value(ground_state, (0, i) => a_op' ⊗ a_op)), 1:50), lw = 2, xlabel = "Site index", ylabel = "Correlation function", yscale = :log10) @@ -199,8 +174,8 @@ hline!([abs2(expectation_value(ground_state, (0,) => a_op))], ls = :dash, c = :b ![](figure-1.png) -We see that the correlations drop off exponentially, indicating the existence of a gapped -Mott insulating phase. Let us now shift our parameters to probe other phases. +We see that the correlations drop off exponentially, indicating the existence of a gapped Mott insulating phase. +Let us now shift our parameters to probe other phases. ````julia ground_state = get_ground_state(0.5, 0.2, cutoff, D; tol = 1.0e-6, verbosity = 2, maxiter = 500) @@ -211,20 +186,13 @@ hline!([abs2(expectation_value(ground_state, (0,) => a_op))], ls = :dash, c = :b ![](figure-2.png) -In this case, the correlation function drops off algebraically and eventually saturates as -$\lim_{i \to \infty}\langle\hat{a}_i^{\dagger} \hat{a}_j\rangle ≈ \langle \hat{a}_i^{\dagger}\rangle \langle \hat{a}_j \rangle = |\langle a_i \rangle|^2 \neq 0$. -This is a signature of long-range order and suggests the existence of a Bose-Einstein -condensate. However, this is a bit odd since at zero temperature, the Bose Hubbard model is -not expected to break any continuous symmetries ($U(1)$ in this case, corresponding to -particle number conservation) due to the -[Mermin-Wagner theorem](https://en.wikipedia.org/wiki/Mermin%E2%80%93Wagner_theorem). The -source of this contradiction lies in the fact that the true 1D superfluid ground state is an -extended critical phase exhibiting algebraic decay, however, a finite bond-dimension MPS can -only capture exponentially decaying correlations. As a result, the finite bond dimension -effectively introduces a length scale into the system in a similar manner as finite-size -effects. We can see this clearly by increasing the bond dimension. We also see that the -correlation length seems to depend algebraically on the bond dimension as expected from -finite-entanglement scaling arguments. +In this case, the correlation function drops off algebraically and eventually saturates as $\lim_{i → ∞}⟨â_i^{†} â_j⟩ ≈ ⟨â_i^{†}⟩ ⟨â_j⟩ = |⟨a_i⟩|^2 ≠ 0$. +This is a signature of long-range order and suggests the existence of a Bose-Einstein condensate. +However, this is a bit odd since at zero temperature, the Bose Hubbard model is not expected to break any continuous symmetries ($U(1)$ in this case, corresponding to particle number conservation) due to the [Mermin-Wagner theorem](https://en.wikipedia.org/wiki/Mermin%E2%80%93Wagner_theorem). +The source of this contradiction lies in the fact that the true 1D superfluid ground state is an extended critical phase exhibiting algebraic decay, however, a finite bond-dimension MPS can only capture exponentially decaying correlations. +As a result, the finite bond dimension effectively introduces a length scale into the system in a similar manner as finite-size effects. +We can see this clearly by increasing the bond dimension. +We also see that the correlation length seems to depend algebraically on the bond dimension as expected from finite-entanglement scaling arguments. ````julia cutoff = 4 @@ -273,11 +241,8 @@ scatter!( ![](figure-3.png) -This shows that any finite bond dimension MPS necessarily breaks the symmetry of the system, -forming a Bose-Einstein condensate which introduces erroneous long-distance behaviour of -correlation functions. In case of finite bond dimension, it is thus reasonable to associate -the finite expectation value of the field operator to the 'quasicondensate' density of the -system which vanishes as $D \to \infty$. +This shows that any finite bond dimension MPS necessarily breaks the symmetry of the system, forming a Bose-Einstein condensate which introduces erroneous long-distance behaviour of correlation functions. +In case of finite bond dimension, it is thus reasonable to associate the finite expectation value of the field operator to the 'quasicondensate' density of the system which vanishes as $D → ∞$. ````julia quasicondensate_density = map(state -> abs2(expectation_value(state, (0,) => a_op)), states) @@ -294,40 +259,35 @@ quasicondensate_density = map(state -> abs2(expectation_value(state, (0,) => a_o 0.22799752254820496 ```` -We may now also visualize the momentum distribution function, which is obtained as the -Fourier transform of the single-particle density matrix. Starting from the definition of the -momentum occupation operators: +We may now also visualize the momentum distribution function, which is obtained as the Fourier transform of the single-particle density matrix. +Starting from the definition of the momentum occupation operators: ```math -\hat{a}_k = \frac{1}{\sqrt{L}} \sum_j e^{-ikj} \hat{a}_j, \qquad -\hat{a}_k^\dagger = \frac{1}{\sqrt{L}} \sum_{j'} e^{ikj'} \hat{a}_{j'}^\dagger +â_k = \frac{1}{\sqrt{L}} \sum_j e^{-ikj} â_j, \qquad +â_k^† = \frac{1}{\sqrt{L}} \sum_{j'} e^{ikj'} â_{j'}^† ``` the momentum distribution is ```math -\langle \hat{n}_k \rangle = \langle \hat{a}_k^\dagger \hat{a}_k \rangle -= \frac{1}{L} \sum_{j',j} e^{ik(j'-j)} \langle \hat{a}_{j'}^\dagger \hat{a}_j \rangle. +⟨\hat{n}_k⟩ = ⟨â_k^† â_k⟩ += \frac{1}{L} \sum_{j',j} e^{ik(j'-j)} ⟨â_{j'}^† â_j⟩. ``` -For a translationally invariant system, the correlation depends only on the distance -$r = j' - j$: +For a translationally invariant system, the correlation depends only on the distance $r = j' - j$: -$$\langle \hat{a}_{j'}^\dagger \hat{a}_j \rangle = C(r) = \langle \hat{a}_r^\dagger \hat{a}_0 \rangle.$$ +$$⟨â_{j'}^† â_j⟩ = C(r) = ⟨â_r^† â_0⟩.$$ Changing variables ($j' = j + r$) gives -$$\langle \hat{n}_k \rangle = \frac{1}{L} \sum_j \sum_r e^{ikr} C(r).$$ +$$⟨\hat{n}_k⟩ = \frac{1}{L} \sum_j \sum_r e^{ikr} C(r).$$ The sum over $j$ yields a factor of $L$, which cancels the prefactor, leading to -$$\langle \hat{n}_k \rangle = \sum_{r \in \mathbb{Z}} e^{ikr} \langle \hat{a}_r^\dagger \hat{a}_0 \rangle$$ +$$⟨\hat{n}_k⟩ = \sum_{r ∈ \mathbb{Z}} e^{ikr} ⟨â_r^† â_0⟩$$ -However, we know that a finite bond dimension MPS introduces a non-zero quasi-condensate -density which would give rise to an $\mathcal{O}(N)$ divergence in the momentum distribution -that is not indicative of the true physics of the system. Since we know this contribution -vanishes in the infinite bond dimension limit, we instead work with -$\langle \hat{a}_r^{\dagger} \hat{a}_0 \rangle_c = \langle \hat{a}_r^{\dagger} \hat{a}_0 \rangle - |\langle \hat{a}\rangle|^2$. +However, we know that a finite bond dimension MPS introduces a non-zero quasi-condensate density which would give rise to an $\mathcal{O}(N)$ divergence in the momentum distribution that is not indicative of the true physics of the system. +Since we know this contribution vanishes in the infinite bond dimension limit, we instead work with $⟨â_r^{†} â_0⟩_c = ⟨â_r^{†} â_0⟩ - |⟨â⟩|^2$. ````julia ks = range(-0.05, 0.15, 500) @@ -346,39 +306,23 @@ plot(ks, momentum_distribution, lab = "D = " .* string.(permutedims(Ds)), lw = 1 ![](figure-4.png) -We see that the density seems to peak around $k=0$, this time seemingly becoming more -prominent as $D \to \infty$ which seems to suggest again that there is a condensate. -However, going by the Penrose-Onsager criterion, the existence of a condensate can be -quantified by requiring the leading eigenvalue of the single particle density matrix (i.e, -$\langle \hat{n}_{k=0}\rangle = \sum_j \langle \hat{a}_j^{\dagger} \hat{a}_0\rangle$) to -diverge as $O(N)$ in the thermodynamic limit. In this case, since the correlations decay as -a power law, there is naturally a divergence at low momenta. But this does not imply the -existence of a condensate since the order of divergence is much weaker. However, this does -indicate the remnants of some kind of condensation in the 1D model despite the quantum -fluctuations, leading to the practical utility of defining the concept of a quasicondensate -where there is still a notion of phase coherence over short distances. - -What this means for us is that, as far as MPS simulations go, we may still utilize the -quasicondensate density as an effective order parameter, although it will be less robust as -the bond dimension is increased. Alternatively, we realize that the true phase is -characterized as being a superfluid (a concept distinct from Bose-Einstein condensation) and -can be identified by a non-zero value of the superfluid stiffness (also known as helicity -modulus, $\Upsilon$) as defined by Leggett. Upon applying a phase twist $\Phi$ to the -boundaries of the system, a superfluid phase would suffer an increase in energy whereas an -insulating phase would not. In the thermodynamic limit, one could show that the boundary -conditions may be considered as periodic and instead uniformly distribute the phase across -the chain as $\hat{a}_i \to \hat{a}_i e^{i\Phi/L}$. Concretely, in the limit of -$\Phi/L \to 0$, we have: - -$$\frac{E[\Phi] - E[0]}{L} \approx \frac{1}{2} \Upsilon(L) \bigg (\frac{\Phi}{L}\bigg)^2 + \cdots$$ - -In order to find the ground state under these twisted boundary conditions, we must construct -our own variant of the Bose-Hubbard Hamiltonian. Typically you would want to take a peek at -the -[source code](https://github.com/QuantumKitHub/MPSKitModels.jl/blob/f4c36d9660a9eab05fa253ffd5c20dc6b7df44cc/src/models/hamiltonians.jl#L379-L409) -of `MPSKitModels.jl` to see how these models are defined and tweak it as per your needs. -Here we see that applying twisted boundary conditions is equivalent to adding a prefactor of -$e^{\pm i\phi}$ in front of the hopping amplitudes. +We see that the density seems to peak around $k=0$, this time seemingly becoming more prominent as $D → ∞$ which seems to suggest again that there is a condensate. +However, going by the Penrose-Onsager criterion, the existence of a condensate can be quantified by requiring the leading eigenvalue of the single particle density matrix (i.e, $⟨\hat{n}_{k=0}⟩ = \sum_j ⟨â_j^{†} â_0⟩$) to diverge as $O(N)$ in the thermodynamic limit. +In this case, since the correlations decay as a power law, there is naturally a divergence at low momenta. +But this does not imply the existence of a condensate since the order of divergence is much weaker. +However, this does indicate the remnants of some kind of condensation in the 1D model despite the quantum fluctuations, leading to the practical utility of defining the concept of a quasicondensate where there is still a notion of phase coherence over short distances. + +What this means for us is that, as far as MPS simulations go, we may still utilize the quasicondensate density as an effective order parameter, although it will be less robust as the bond dimension is increased. +Alternatively, we realize that the true phase is characterized as being a superfluid (a concept distinct from Bose-Einstein condensation) and can be identified by a non-zero value of the superfluid stiffness (also known as helicity modulus, $Υ$) as defined by Leggett. +Upon applying a phase twist $Φ$ to the boundaries of the system, a superfluid phase would suffer an increase in energy whereas an insulating phase would not. +In the thermodynamic limit, one could show that the boundary conditions may be considered as periodic and instead uniformly distribute the phase across the chain as $â_i → â_i e^{iΦ/L}$. +Concretely, in the limit of $Φ/L → 0$, we have: + +$$\frac{E[Φ] - E[0]}{L} ≈ \frac{1}{2} Υ(L) \bigg (\frac{Φ}{L}\bigg)^2 + ⋯$$ + +In order to find the ground state under these twisted boundary conditions, we must construct our own variant of the Bose-Hubbard Hamiltonian. +Typically you would want to take a peek at the [source code](https://github.com/QuantumKitHub/MPSKitModels.jl/blob/f4c36d9660a9eab05fa253ffd5c20dc6b7df44cc/src/models/hamiltonians.jl#L379-L409) of `MPSKitModels.jl` to see how these models are defined and tweak it as per your needs. +Here we see that applying twisted boundary conditions is equivalent to adding a prefactor of $e^{± iφ}$ in front of the hopping amplitudes. ````julia function bose_hubbard_model_twisted_bc( @@ -428,14 +372,9 @@ superfluid_stiffness_profile(0.01, 0.3, 5, 4) # mott insulator ![](figure-5.png) -Now that we know what phases to expect, we can plot the phase diagram by scanning over a -range of parameters. In general, one could do better by performing a bisection algorithm for -each chemical potential to determine the value of the hopping parameter at the transition -point, however the 1D Bose-Hubbard model may have two transition points at the same chemical -potential which makes this a bit cumbersome to implement robustly. Furthermore, we stick to -using the quasi-condensate density as an order parameter since extracting the superfluid -density accurately requires a more robust scheme to compute second derivatives which takes -us away from the focus of this tutorial. +Now that we know what phases to expect, we can plot the phase diagram by scanning over a range of parameters. +In general, one could do better by performing a bisection algorithm for each chemical potential to determine the value of the hopping parameter at the transition point, however the 1D Bose-Hubbard model may have two transition points at the same chemical potential which makes this a bit cumbersome to implement robustly. +Furthermore, we stick to using the quasi-condensate density as an order parameter since extracting the superfluid density accurately requires a more robust scheme to compute second derivatives which takes us away from the focus of this tutorial. ````julia cutoff, D = 4, 10 @@ -457,11 +396,8 @@ heatmap(ts, mus, order_parameters, xlabel = L"t/U", ylabel = L"\mu/U", title = L ![](figure-6.png) -Although the bond dimension here is quite low, we already see the deformation of the Mott -insulator lobes to give way to the well known BKT transition that happens at commensurate -density. One can go further and estimate the critical exponents using finite-entanglement -scaling procedures on the correlation functions, but these may now be performed with ease -using what we have learnt in this tutorial. +Although the bond dimension here is quite low, we already see the deformation of the Mott insulator lobes to give way to the well known BKT transition that happens at commensurate density. +One can go further and estimate the critical exponents using finite-entanglement scaling procedures on the correlation functions, but these may now be performed with ease using what we have learnt in this tutorial. --- diff --git a/docs/src/examples/groundstates/bose-hubbard/main.ipynb b/docs/src/examples/groundstates/bose-hubbard/main.ipynb index 47d1e89ed..5fbec9399 100644 --- a/docs/src/examples/groundstates/bose-hubbard/main.ipynb +++ b/docs/src/examples/groundstates/bose-hubbard/main.ipynb @@ -7,114 +7,7 @@ "outputs": [], "source": [ "using Markdown\n", - "using TensorKitTensors.BosonOperators: b_min, b_plus_b_min, b_min_b_plus, b_num\n", - "using MPSKit, TensorKit\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 MPSKit, MPSKitModels, TensorKit\n", "using Plots, LaTeXStrings\n", "\n", "\n", @@ -128,82 +21,65 @@ "source": [ "# 1D Bose-Hubbard model\n", "\n", - "In this tutorial, we will explore the physics of the one-dimensional Bose–Hubbard model\n", - "using matrix product states. For the most part, we replicate the results presented in\n", - "[**Phys. Rev. B 105,\n", - "134502**](https://journals.aps.org/prb/abstract/10.1103/PhysRevB.105.134502), which can be\n", - "consulted for any statements in this tutorial that are not otherwise cited. The Hamiltonian\n", - "under study is defined as follows:\n", + "In this tutorial, we will explore the physics of the one-dimensional Bose–Hubbard model using matrix product states.\n", + "For the most part, we replicate the results presented in [**Phys. Rev. B 105, 134502**](https://journals.aps.org/prb/abstract/10.1103/PhysRevB.105.134502), which can be consulted for any statements in this tutorial that are not otherwise cited.\n", + "The Hamiltonian under study is defined as follows:\n", "\n", - "$$H = -t \\sum_{i} (\\hat{a}_i^{\\dagger} \\hat{a}_{i+1} + \\hat{a}_{i+1}^{\\dagger} \\hat{a}_i) + \\frac{U}{2} \\sum_i \\hat{n}_i(\\hat{n}_i - 1) - \\mu \\sum_i \\hat{n}_i$$\n", + "$$H = -t \\sum_{i} (â_i^{†} â_{i+1} + â_{i+1}^{†} â_i) + \\frac{U}{2} \\sum_i \\hat{n}_i(\\hat{n}_i - 1) - μ \\sum_i \\hat{n}_i$$\n", "\n", - "where the bosonic creation and annihilation operators satisfy the canonical commutation\n", - "relations (CCR):\n", + "where the bosonic creation and annihilation operators satisfy the canonical commutation relations (CCR):\n", "\n", - "$$[\\hat{a}_i, \\hat{a}_j^{\\dagger}] = \\delta_{ij}.$$\n", + "$$[â_i, â_j^{†}] = δ_{ij}.$$\n", "\n", - "Each lattice site hosts a local Hilbert space corresponding to bosonic occupation states\n", - "$|n\\rangle$, where $(n = 0, 1, 2, \\ldots)$. Since this space is formally\n", - "infinite-dimensional, numerical simulations typically impose a truncation at some maximum\n", - "occupation number $(n_{\\text{max}})$. Such a treatment is justified since it can be observed\n", - "that the simulation results quickly converge with the cutoff if the filling fraction is kept\n", - "sufficiently low.\n", + "Each lattice site hosts a local Hilbert space corresponding to bosonic occupation states $|n⟩$, where $(n = 0, 1, 2, …)$.\n", + "Since this space is formally infinite-dimensional, numerical simulations typically impose a truncation at some maximum occupation number $(n_{\\text{max}})$.\n", + "Such a treatment is justified since it can be observed that the simulation results quickly converge with the cutoff if the filling fraction is kept sufficiently low.\n", "\n", - "Within this truncated space, the local creation and annihilation operators are represented\n", - "by finite-dimensional matrices. For example, with cutoff $n_{\\text{max}}$, the annihilation\n", - "operator takes the form\n", + "Within this truncated space, the local creation and annihilation operators are represented by finite-dimensional matrices.\n", + "For example, with cutoff $n_{\\text{max}}$, the annihilation operator takes the form\n", "\n", "$$\n", - "\\hat{a} =\n", + "â =\n", "\\begin{bmatrix}\n", - "0 & \\sqrt{1} & 0 & 0 & \\cdots & 0 \\\\\n", - "0 & 0 & \\sqrt{2} & 0 & \\cdots & 0 \\\\\n", - "0 & 0 & 0 & \\sqrt{3} & \\cdots & 0 \\\\\n", - "\\vdots & & & \\ddots & \\ddots & \\vdots \\\\\n", - "0 & 0 & 0 & \\cdots & 0 & \\sqrt{n_{\\text{max}}} \\\\\n", - "0 & 0 & 0 & \\cdots & 0 & 0\n", + "0 & \\sqrt{1} & 0 & 0 & ⋯ & 0 \\\\\n", + "0 & 0 & \\sqrt{2} & 0 & ⋯ & 0 \\\\\n", + "0 & 0 & 0 & \\sqrt{3} & ⋯ & 0 \\\\\n", + "⋮ & & & ⋱ & ⋱ & ⋮ \\\\\n", + "0 & 0 & 0 & ⋯ & 0 & \\sqrt{n_{\\text{max}}} \\\\\n", + "0 & 0 & 0 & ⋯ & 0 & 0\n", "\\end{bmatrix}\n", "$$\n", "\n", "and the creation operator is simply its Hermitian conjugate,\n", "\n", "$$\n", - "\\hat{a}^\\dagger =\n", + "â^† =\n", "\\begin{bmatrix}\n", - "0 & 0 & 0 & \\cdots & 0 & 0 \\\\\n", - "\\sqrt{1} & 0 & 0 & \\cdots & 0 & 0 \\\\\n", - "0 & \\sqrt{2} & 0 & \\cdots & 0 & 0 \\\\\n", - "\\vdots & & \\ddots & \\ddots & & \\vdots \\\\\n", - "0 & 0 & 0 & \\cdots & 0 & 0 \\\\\n", - "0 & 0 & 0 & \\cdots & \\sqrt{n_{\\text{max}}} & 0\n", + "0 & 0 & 0 & ⋯ & 0 & 0 \\\\\n", + "\\sqrt{1} & 0 & 0 & ⋯ & 0 & 0 \\\\\n", + "0 & \\sqrt{2} & 0 & ⋯ & 0 & 0 \\\\\n", + "⋮ & & ⋱ & ⋱ & & ⋮ \\\\\n", + "0 & 0 & 0 & ⋯ & 0 & 0 \\\\\n", + "0 & 0 & 0 & ⋯ & \\sqrt{n_{\\text{max}}} & 0\n", "\\end{bmatrix}\n", "$$\n", "\n", "The number operator is then given by\n", "\n", - "$$\\hat{n} = \\hat{a}^\\dagger \\hat{a} = \\mathrm{diag}(0, 1, 2, \\ldots, n_{\\text{max}}).$$\n", + "$$\\hat{n} = â^† â = \\mathrm{diag}(0, 1, 2, …, n_{\\text{max}}).$$\n", "\n", "Before moving on, notice that the Hamiltonian is uniform and translationally invariant.\n", - "Typically, such models are studied on a finite chain of $N$ sites with periodic boundary\n", - "conditions, but this introduces finite-size effects that are rather annoying to deal with.\n", - "In contrast, the MPS framework allows us to work directly in the thermodynamic limit,\n", - "avoiding such artifacts. We will follow this line of exploration in this tutorial and leave\n", - "finite systems for another example.\n", - "\n", - "In order to work in the thermodynamic limit, we will have to create an\n", - "`InfiniteMPS`. A complete specification of the MPS requires us to define the\n", - "physical space and the virtual space of the constituent tensors. At this point is it useful\n", - "to note that `MPSKit.jl` is powered by\n", - "[`TensorKit.jl`](https://github.com/QuantumKitHub/TensorKit.jl) under the hood and has some\n", - "very generic interfaces in order to allow imposing symmetries of all kinds. As a result, it\n", - "is sometimes necessary to be a bit more explicit about what we want to do in terms of the\n", - "vector spaces involved. In this case, we will not consider any symmetries and simply take\n", - "the most naive approach of working within the `Trivial`\n", - "sector. The physical space is then `ℂ^(nmax+1)`, and the virtual space is `ℂ^D` where $D$ is\n", - "some integer chosen to be the bond dimension of the MPS, and `ℂ` is an alias for\n", - "`ComplexSpace` (typeset as `\\bbC`). As $D$ is increased,\n", - "one increases the amount of entanglement, i.e, quantum correlations that can be captured by\n", - "the state." + "Typically, such models are studied on a finite chain of $N$ sites with periodic boundary conditions, but this introduces finite-size effects that are rather annoying to deal with.\n", + "In contrast, the MPS framework allows us to work directly in the thermodynamic limit, avoiding such artifacts.\n", + "We will follow this line of exploration in this tutorial and leave finite systems for another example.\n", + "\n", + "In order to work in the thermodynamic limit, we will have to create an `InfiniteMPS`.\n", + "A complete specification of the MPS requires us to define the physical space and the virtual space of the constituent tensors.\n", + "At this point is it useful to note that `MPSKit.jl` is powered by [`TensorKit.jl`](https://github.com/QuantumKitHub/TensorKit.jl) under the hood and has some very generic interfaces in order to allow imposing symmetries of all kinds.\n", + "As a result, it is sometimes necessary to be a bit more explicit about what we want to do in terms of the vector spaces involved.\n", + "In this case, we will not consider any symmetries and simply take the most naive approach of working within the `Trivial` sector.\n", + "The physical space is then `ℂ^(nmax+1)`, and the virtual space is `ℂ^D` where $D$ is some integer chosen to be the bond dimension of the MPS, and `ℂ` is an alias for `ComplexSpace` (typeset as `\\bbC`).\n", + "As $D$ is increased, one increases the amount of entanglement, i.e, quantum correlations that can be captured by the state." ] }, { @@ -220,12 +96,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This simply initializes a tensor filled with random entries (check out the documentation for\n", - "other useful constructors). Next, we need the creation and annihilation operators. While we\n", - "could construct them from scratch, here we will use\n", - "[TensorKitTensors.jl](https://github.com/QuantumKitHub/TensorKitTensors.jl), which provides\n", - "predefined operators. In particular, `BosonOperators.b_min` creates the bosonic annihilation\n", - "operator." + "This simply initializes a tensor filled with random entries (check out the documentation for other useful constructors).\n", + "Next, we need the creation and annihilation operators.\n", + "While we could construct them from scratch, here we will use [`MPSKitModels.jl`](https://github.com/QuantumKitHub/MPSKitModels.jl) instead that has predefined operators and models for most well-known lattice models.\n", + "In particular, we can use `MPSKitModels.a_min` to create the bosonic annihilation operator." ] }, { @@ -234,7 +108,7 @@ "metadata": {}, "outputs": [], "source": [ - "a_op = b_min(cutoff = cutoff) # creates a bosonic annihilation operator without any symmetries\n", + "a_op = a_min(cutoff = cutoff) # creates a bosonic annihilation operator without any symmetries\n", "display(a_op[])\n", "display((a_op' * a_op)[])" ] @@ -243,10 +117,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The [] accessor lets us see the underlying array, and indeed the operators are exactly what\n", - "we require. The shared [model helpers](https://github.com/QuantumKitHub/MPSKit.jl/blob/main/docs/src/assets/models.jl) define\n", - "`bose_hubbard_model` using these operators, although we will construct our own variant\n", - "later on." + "The [] accessor lets us see the underlying array, and indeed the operators are exactly what we require.\n", + "Similarly, the Bose Hubbard model is also predefined in `MPSKitModels.bose_hubbard_model` (although we will construct our own variant later on)." ] }, { @@ -255,18 +127,16 @@ "metadata": {}, "outputs": [], "source": [ - "hamiltonian = bose_hubbard_model(; cutoff = cutoff, U = 1, mu = 0.5, t = 0.2) # Infinite chain by default; pass L = N for an open finite chain" + "hamiltonian = bose_hubbard_model(InfiniteChain(1); cutoff = cutoff, U = 1, mu = 0.5, t = 0.2) # It is not strictly required to pass InfiniteChain() and is only included for clarity; one may instead pass FiniteChain(N) as well" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "This has created the Hamiltonian operator as a [matrix product operator](@ref\n", - "InfiniteMPOHamiltonian) (MPO) which is a convenient form to use in conjunction with MPS.\n", - "Finally, the ground state optimization may be performed with either `iDMRG` or\n", - "`VUMPS`. Both should take similar arguments but it is known that VUMPS is typically\n", - "more efficient for these systems so we proceed with that." + "This has created the Hamiltonian operator as a matrix product operator (MPO) which is a convenient form to use in conjunction with MPS.\n", + "Finally, the ground state optimization may be performed with either `iDMRG` or `VUMPS`.\n", + "Both should take similar arguments but it is known that VUMPS is typically more efficient for these systems so we proceed with that." ] }, { @@ -283,9 +153,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This automatically runs the algorithm until a certain [error measure](@ref\n", - "MPSKit.calc_galerkin) falls below the specified tolerance or the maximum iterations is\n", - "reached. Let us wrap all this into a convenient function." + "This automatically runs the algorithm until a certain error measure falls below the specified tolerance or the maximum iterations is reached.\n", + "Let us wrap all this into a convenient function." ] }, { @@ -295,7 +164,7 @@ "outputs": [], "source": [ "function get_ground_state(mu, t, cutoff, D; kwargs...)\n", - " hamiltonian = bose_hubbard_model(; cutoff = cutoff, U = 1, mu = mu, t = t)\n", + " hamiltonian = bose_hubbard_model(InfiniteChain(); cutoff = cutoff, U = 1, mu = mu, t = t)\n", " state = InfiniteMPS(ℂ^(cutoff + 1), ℂ^D)\n", " state, _, _ = find_groundstate(state, hamiltonian, VUMPS(; kwargs...))\n", "\n", @@ -309,11 +178,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now that we have the state, we may compute observables using the `expectation_value`\n", - "function. It typically expects a `Pair`, `(i1, i2, .., ik) => op` where `op` is a\n", - "`TensorMap` or `InfiniteMPO` acting over `k` sites. In case of the Hamiltonian, it is not\n", - "necessary to specify the indices as it spans the whole lattice. We can now plot the\n", - "correlation function $\\langle \\hat{a}^{\\dagger}_i \\hat{a}_j\\rangle$." + "Now that we have the state, we may compute observables using the `expectation_value` function.\n", + "It typically expects a `Pair`, `(i1, i2, .., ik) => op` where `op` is a `TensorMap` or `InfiniteMPO` acting over `k` sites.\n", + "In case of the Hamiltonian, it is not necessary to specify the indices as it spans the whole lattice.\n", + "We can now plot the correlation function $⟨â^{†}_i â_j⟩$." ] }, { @@ -330,8 +198,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We see that the correlations drop off exponentially, indicating the existence of a gapped\n", - "Mott insulating phase. Let us now shift our parameters to probe other phases." + "We see that the correlations drop off exponentially, indicating the existence of a gapped Mott insulating phase.\n", + "Let us now shift our parameters to probe other phases." ] }, { @@ -350,20 +218,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In this case, the correlation function drops off algebraically and eventually saturates as\n", - "$\\lim_{i \\to \\infty}\\langle\\hat{a}_i^{\\dagger} \\hat{a}_j\\rangle ≈ \\langle \\hat{a}_i^{\\dagger}\\rangle \\langle \\hat{a}_j \\rangle = |\\langle a_i \\rangle|^2 \\neq 0$.\n", - "This is a signature of long-range order and suggests the existence of a Bose-Einstein\n", - "condensate. However, this is a bit odd since at zero temperature, the Bose Hubbard model is\n", - "not expected to break any continuous symmetries ($U(1)$ in this case, corresponding to\n", - "particle number conservation) due to the\n", - "[Mermin-Wagner theorem](https://en.wikipedia.org/wiki/Mermin%E2%80%93Wagner_theorem). The\n", - "source of this contradiction lies in the fact that the true 1D superfluid ground state is an\n", - "extended critical phase exhibiting algebraic decay, however, a finite bond-dimension MPS can\n", - "only capture exponentially decaying correlations. As a result, the finite bond dimension\n", - "effectively introduces a length scale into the system in a similar manner as finite-size\n", - "effects. We can see this clearly by increasing the bond dimension. We also see that the\n", - "correlation length seems to depend algebraically on the bond dimension as expected from\n", - "finite-entanglement scaling arguments." + "In this case, the correlation function drops off algebraically and eventually saturates as $\\lim_{i → ∞}⟨â_i^{†} â_j⟩ ≈ ⟨â_i^{†}⟩ ⟨â_j⟩ = |⟨a_i⟩|^2 ≠ 0$.\n", + "This is a signature of long-range order and suggests the existence of a Bose-Einstein condensate.\n", + "However, this is a bit odd since at zero temperature, the Bose Hubbard model is not expected to break any continuous symmetries ($U(1)$ in this case, corresponding to particle number conservation) due to the [Mermin-Wagner theorem](https://en.wikipedia.org/wiki/Mermin%E2%80%93Wagner_theorem).\n", + "The source of this contradiction lies in the fact that the true 1D superfluid ground state is an extended critical phase exhibiting algebraic decay, however, a finite bond-dimension MPS can only capture exponentially decaying correlations.\n", + "As a result, the finite bond dimension effectively introduces a length scale into the system in a similar manner as finite-size effects.\n", + "We can see this clearly by increasing the bond dimension.\n", + "We also see that the correlation length seems to depend algebraically on the bond dimension as expected from finite-entanglement scaling arguments." ] }, { @@ -383,7 +244,7 @@ "\n", "npoints = 400\n", "two_point_correlation = zeros(length(Ds), npoints)\n", - "a_op = b_min(cutoff = cutoff)\n", + "a_op = a_min(cutoff = cutoff)\n", "\n", "Threads.@threads for idx in eachindex(Ds)\n", " two_point_correlation[idx, :] .= real.(expectation_value(states[idx], (1, i) => a_op' ⊗ a_op) for i in 1:npoints)\n", @@ -420,11 +281,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This shows that any finite bond dimension MPS necessarily breaks the symmetry of the system,\n", - "forming a Bose-Einstein condensate which introduces erroneous long-distance behaviour of\n", - "correlation functions. In case of finite bond dimension, it is thus reasonable to associate\n", - "the finite expectation value of the field operator to the 'quasicondensate' density of the\n", - "system which vanishes as $D \\to \\infty$." + "This shows that any finite bond dimension MPS necessarily breaks the symmetry of the system, forming a Bose-Einstein condensate which introduces erroneous long-distance behaviour of correlation functions.\n", + "In case of finite bond dimension, it is thus reasonable to associate the finite expectation value of the field operator to the 'quasicondensate' density of the system which vanishes as $D → ∞$." ] }, { @@ -440,40 +298,35 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We may now also visualize the momentum distribution function, which is obtained as the\n", - "Fourier transform of the single-particle density matrix. Starting from the definition of the\n", - "momentum occupation operators:\n", + "We may now also visualize the momentum distribution function, which is obtained as the Fourier transform of the single-particle density matrix.\n", + "Starting from the definition of the momentum occupation operators:\n", "\n", "$$\n", - "\\hat{a}_k = \\frac{1}{\\sqrt{L}} \\sum_j e^{-ikj} \\hat{a}_j, \\qquad\n", - "\\hat{a}_k^\\dagger = \\frac{1}{\\sqrt{L}} \\sum_{j'} e^{ikj'} \\hat{a}_{j'}^\\dagger\n", + "â_k = \\frac{1}{\\sqrt{L}} \\sum_j e^{-ikj} â_j, \\qquad\n", + "â_k^† = \\frac{1}{\\sqrt{L}} \\sum_{j'} e^{ikj'} â_{j'}^†\n", "$$\n", "\n", "the momentum distribution is\n", "\n", "$$\n", - "\\langle \\hat{n}_k \\rangle = \\langle \\hat{a}_k^\\dagger \\hat{a}_k \\rangle\n", - "= \\frac{1}{L} \\sum_{j',j} e^{ik(j'-j)} \\langle \\hat{a}_{j'}^\\dagger \\hat{a}_j \\rangle.\n", + "⟨\\hat{n}_k⟩ = ⟨â_k^† â_k⟩\n", + "= \\frac{1}{L} \\sum_{j',j} e^{ik(j'-j)} ⟨â_{j'}^† â_j⟩.\n", "$$\n", "\n", - "For a translationally invariant system, the correlation depends only on the distance\n", - "$r = j' - j$:\n", + "For a translationally invariant system, the correlation depends only on the distance $r = j' - j$:\n", "\n", - "$$\\langle \\hat{a}_{j'}^\\dagger \\hat{a}_j \\rangle = C(r) = \\langle \\hat{a}_r^\\dagger \\hat{a}_0 \\rangle.$$\n", + "$$⟨â_{j'}^† â_j⟩ = C(r) = ⟨â_r^† â_0⟩.$$\n", "\n", "Changing variables ($j' = j + r$) gives\n", "\n", - "$$\\langle \\hat{n}_k \\rangle = \\frac{1}{L} \\sum_j \\sum_r e^{ikr} C(r).$$\n", + "$$⟨\\hat{n}_k⟩ = \\frac{1}{L} \\sum_j \\sum_r e^{ikr} C(r).$$\n", "\n", "The sum over $j$ yields a factor of $L$, which cancels the prefactor, leading to\n", "\n", - "$$\\langle \\hat{n}_k \\rangle = \\sum_{r \\in \\mathbb{Z}} e^{ikr} \\langle \\hat{a}_r^\\dagger \\hat{a}_0 \\rangle$$\n", + "$$⟨\\hat{n}_k⟩ = \\sum_{r ∈ \\mathbb{Z}} e^{ikr} ⟨â_r^† â_0⟩$$\n", "\n", - "However, we know that a finite bond dimension MPS introduces a non-zero quasi-condensate\n", - "density which would give rise to an $\\mathcal{O}(N)$ divergence in the momentum distribution\n", - "that is not indicative of the true physics of the system. Since we know this contribution\n", - "vanishes in the infinite bond dimension limit, we instead work with\n", - "$\\langle \\hat{a}_r^{\\dagger} \\hat{a}_0 \\rangle_c = \\langle \\hat{a}_r^{\\dagger} \\hat{a}_0 \\rangle - |\\langle \\hat{a}\\rangle|^2$." + "However, we know that a finite bond dimension MPS introduces a non-zero quasi-condensate density which would give rise to an $\\mathcal{O}(N)$ divergence in the momentum distribution that is not indicative of the true physics of the system.\n", + "Since we know this contribution vanishes in the infinite bond dimension limit, we instead work with $⟨â_r^{†} â_0⟩_c = ⟨â_r^{†} â_0⟩ - |⟨â⟩|^2$." ] }, { @@ -500,38 +353,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We see that the density seems to peak around $k=0$, this time seemingly becoming more\n", - "prominent as $D \\to \\infty$ which seems to suggest again that there is a condensate.\n", - "However, going by the Penrose-Onsager criterion, the existence of a condensate can be\n", - "quantified by requiring the leading eigenvalue of the single particle density matrix (i.e,\n", - "$\\langle \\hat{n}_{k=0}\\rangle = \\sum_j \\langle \\hat{a}_j^{\\dagger} \\hat{a}_0\\rangle$) to\n", - "diverge as $O(N)$ in the thermodynamic limit. In this case, since the correlations decay as\n", - "a power law, there is naturally a divergence at low momenta. But this does not imply the\n", - "existence of a condensate since the order of divergence is much weaker. However, this does\n", - "indicate the remnants of some kind of condensation in the 1D model despite the quantum\n", - "fluctuations, leading to the practical utility of defining the concept of a quasicondensate\n", - "where there is still a notion of phase coherence over short distances.\n", - "\n", - "What this means for us is that, as far as MPS simulations go, we may still utilize the\n", - "quasicondensate density as an effective order parameter, although it will be less robust as\n", - "the bond dimension is increased. Alternatively, we realize that the true phase is\n", - "characterized as being a superfluid (a concept distinct from Bose-Einstein condensation) and\n", - "can be identified by a non-zero value of the superfluid stiffness (also known as helicity\n", - "modulus, $\\Upsilon$) as defined by Leggett. Upon applying a phase twist $\\Phi$ to the\n", - "boundaries of the system, a superfluid phase would suffer an increase in energy whereas an\n", - "insulating phase would not. In the thermodynamic limit, one could show that the boundary\n", - "conditions may be considered as periodic and instead uniformly distribute the phase across\n", - "the chain as $\\hat{a}_i \\to \\hat{a}_i e^{i\\Phi/L}$. Concretely, in the limit of\n", - "$\\Phi/L \\to 0$, we have:\n", - "\n", - "$$\\frac{E[\\Phi] - E[0]}{L} \\approx \\frac{1}{2} \\Upsilon(L) \\bigg (\\frac{\\Phi}{L}\\bigg)^2 + \\cdots$$\n", - "\n", - "In order to find the ground state under these twisted boundary conditions, we must construct\n", - "our own variant of the Bose-Hubbard Hamiltonian. Typically you would want to take a peek at\n", - "the\n", - "[model helper source](https://github.com/QuantumKitHub/MPSKit.jl/blob/main/docs/src/assets/models.jl) to see how these models are defined and tweak it as per your needs.\n", - "Here we see that applying twisted boundary conditions is equivalent to adding a prefactor of\n", - "$e^{\\pm i\\phi}$ in front of the hopping amplitudes." + "We see that the density seems to peak around $k=0$, this time seemingly becoming more prominent as $D → ∞$ which seems to suggest again that there is a condensate.\n", + "However, going by the Penrose-Onsager criterion, the existence of a condensate can be quantified by requiring the leading eigenvalue of the single particle density matrix (i.e, $⟨\\hat{n}_{k=0}⟩ = \\sum_j ⟨â_j^{†} â_0⟩$) to diverge as $O(N)$ in the thermodynamic limit.\n", + "In this case, since the correlations decay as a power law, there is naturally a divergence at low momenta.\n", + "But this does not imply the existence of a condensate since the order of divergence is much weaker.\n", + "However, this does indicate the remnants of some kind of condensation in the 1D model despite the quantum fluctuations, leading to the practical utility of defining the concept of a quasicondensate where there is still a notion of phase coherence over short distances.\n", + "\n", + "What this means for us is that, as far as MPS simulations go, we may still utilize the quasicondensate density as an effective order parameter, although it will be less robust as the bond dimension is increased.\n", + "Alternatively, we realize that the true phase is characterized as being a superfluid (a concept distinct from Bose-Einstein condensation) and can be identified by a non-zero value of the superfluid stiffness (also known as helicity modulus, $Υ$) as defined by Leggett.\n", + "Upon applying a phase twist $Φ$ to the boundaries of the system, a superfluid phase would suffer an increase in energy whereas an insulating phase would not.\n", + "In the thermodynamic limit, one could show that the boundary conditions may be considered as periodic and instead uniformly distribute the phase across the chain as $â_i → â_i e^{iΦ/L}$.\n", + "Concretely, in the limit of $Φ/L → 0$, we have:\n", + "\n", + "$$\\frac{E[Φ] - E[0]}{L} ≈ \\frac{1}{2} Υ(L) \\bigg (\\frac{Φ}{L}\\bigg)^2 + ⋯$$\n", + "\n", + "In order to find the ground state under these twisted boundary conditions, we must construct our own variant of the Bose-Hubbard Hamiltonian.\n", + "Typically you would want to take a peek at the [source code](https://github.com/QuantumKitHub/MPSKitModels.jl/blob/f4c36d9660a9eab05fa253ffd5c20dc6b7df44cc/src/models/hamiltonians.jl#L379-L409) of `MPSKitModels.jl` to see how these models are defined and tweak it as per your needs.\n", + "Here we see that applying twisted boundary conditions is equivalent to adding a prefactor of $e^{± iφ}$ in front of the hopping amplitudes." ] }, { @@ -541,19 +379,25 @@ "outputs": [], "source": [ "function bose_hubbard_model_twisted_bc(\n", - " elt::Type{<:Number} = ComplexF64, symmetry::Type{<:Sector} = Trivial;\n", + " elt::Type{<:Number} = ComplexF64, symmetry::Type{<:Sector} = Trivial,\n", + " lattice::AbstractLattice = InfiniteChain(1);\n", " cutoff::Integer = 5, t = 1.0, U = 1.0, mu = 0.0, phi = 0\n", " )\n", "\n", - " a_pm = b_plus_b_min(elt, symmetry; cutoff = cutoff)\n", - " a_mp = b_min_b_plus(elt, symmetry; cutoff = cutoff)\n", - " N = b_num(elt, symmetry; cutoff = cutoff)\n", + " a_pm = a_plusmin(elt, symmetry; cutoff = cutoff)\n", + " a_mp = a_minplus(elt, symmetry; cutoff = cutoff)\n", + " N = a_number(elt, symmetry; cutoff = cutoff)\n", "\n", " interaction_term = N * (N - id(domain(N)))\n", "\n", - " hopping = -t * (exp(1im * phi) * a_pm + exp(-1im * phi) * a_mp)\n", - " onsite = U / 2 * interaction_term - mu * N\n", - " return chain_hamiltonian(hopping, onsite)\n", + " return H = @mpoham begin\n", + " sum(nearest_neighbours(lattice)) do (i, j)\n", + " return -t * (exp(1im * phi) * a_pm{i, j} + exp(1im * -phi) * a_mp{i, j})\n", + " end +\n", + " sum(vertices(lattice)) do i\n", + " return U / 2 * interaction_term{i} - mu * N{i}\n", + " end\n", + " end\n", "end\n", "\n", "function superfluid_stiffness_profile(t, mu, D, cutoff, ϵ = 1.0e-4, npoints = 11)\n", @@ -583,14 +427,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now that we know what phases to expect, we can plot the phase diagram by scanning over a\n", - "range of parameters. In general, one could do better by performing a bisection algorithm for\n", - "each chemical potential to determine the value of the hopping parameter at the transition\n", - "point, however the 1D Bose-Hubbard model may have two transition points at the same chemical\n", - "potential which makes this a bit cumbersome to implement robustly. Furthermore, we stick to\n", - "using the quasi-condensate density as an order parameter since extracting the superfluid\n", - "density accurately requires a more robust scheme to compute second derivatives which takes\n", - "us away from the focus of this tutorial." + "Now that we know what phases to expect, we can plot the phase diagram by scanning over a range of parameters.\n", + "In general, one could do better by performing a bisection algorithm for each chemical potential to determine the value of the hopping parameter at the transition point, however the 1D Bose-Hubbard model may have two transition points at the same chemical potential which makes this a bit cumbersome to implement robustly.\n", + "Furthermore, we stick to using the quasi-condensate density as an order parameter since extracting the superfluid density accurately requires a more robust scheme to compute second derivatives which takes us away from the focus of this tutorial." ] }, { @@ -603,11 +442,11 @@ "mus = range(0, 0.75, 40)\n", "ts = range(0, 0.3, 40)\n", "\n", - "a_op = b_min(cutoff = cutoff)\n", + "a_op = a_min(cutoff = cutoff)\n", "order_parameters = zeros(length(ts), length(mus))\n", "\n", "Threads.@threads for (i, j) in collect(Iterators.product(eachindex(mus), eachindex(ts)))\n", - " hamiltonian = bose_hubbard_model(; cutoff = cutoff, U = 1, mu = mus[i], t = ts[j])\n", + " hamiltonian = bose_hubbard_model(InfiniteChain(); cutoff = cutoff, U = 1, mu = mus[i], t = ts[j])\n", " init_state = InfiniteMPS(ℂ^(cutoff + 1), ℂ^D)\n", " state, _, _ = find_groundstate(init_state, hamiltonian, VUMPS(; tol = 1.0e-8, verbosity = 0))\n", " order_parameters[i, j] = abs(expectation_value(state, 0 => a_op))\n", @@ -620,11 +459,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Although the bond dimension here is quite low, we already see the deformation of the Mott\n", - "insulator lobes to give way to the well known BKT transition that happens at commensurate\n", - "density. One can go further and estimate the critical exponents using finite-entanglement\n", - "scaling procedures on the correlation functions, but these may now be performed with ease\n", - "using what we have learnt in this tutorial." + "Although the bond dimension here is quite low, we already see the deformation of the Mott insulator lobes to give way to the well known BKT transition that happens at commensurate density.\n", + "One can go further and estimate the critical exponents using finite-entanglement scaling procedures on the correlation functions, but these may now be performed with ease using what we have learnt in this tutorial." ] }, { @@ -639,15 +475,15 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.13.1", + "display_name": "Julia 1.12.6", "language": "julia", - "name": "julia-1.13" + "name": "julia-1.12" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.13.1" + "version": "1.12.6" } }, "nbformat": 4, diff --git a/docs/src/examples/groundstates/haldane-spt/index.md b/docs/src/examples/groundstates/haldane-spt/index.md index 51c9d03f7..764fdf398 100644 --- a/docs/src/examples/groundstates/haldane-spt/index.md +++ b/docs/src/examples/groundstates/haldane-spt/index.md @@ -8,31 +8,24 @@ EditURL = "../../../../../examples/groundstates/haldane-spt/main.jl" # Spin 1 Heisenberg model -The quantum Heisenberg model is a model often used in the study of critical points and phase -transitions of magnetic systems, in which the spins are treated quantum mechanically. It -models magnetic interactions between neighbouring spins through the so-called Heisenberg -interaction term, which causes the spins to either align ($J > 0$) or anti-align ($J < 0$), -thus modeling a (anti-) ferromagnetic system. Here, we will focus on the case of $S = 1$, -with anti-ferromagnetic interactions. +The quantum Heisenberg model is a model often used in the study of critical points and phase transitions of magnetic systems, in which the spins are treated quantum mechanically. +It models magnetic interactions between neighbouring spins through the so-called Heisenberg interaction term, which causes the spins to either align ($J > 0$) or anti-align ($J < 0$), thus modeling a (anti-) ferromagnetic system. +Here, we will focus on the case of $S = 1$, with anti-ferromagnetic interactions. ```math -H = -J \sum_{\langle i, j \rangle} \vec{S}_i \cdot \vec{S}_j +H = -J \sum_{⟨i, j⟩} \vec{S}_i · \vec{S}_j ``` -Importantly, the Hamiltonian of the isotropic model is invariant under $SU(2)$ rotations, -which can be exploited to increase efficiency, as well as interpretability of the MPS -simulations. To see this, we can make use of the following derivation for the interaction -term: +Importantly, the Hamiltonian of the isotropic model is invariant under $SU(2)$ rotations, which can be exploited to increase efficiency, as well as interpretability of the MPS simulations. +To see this, we can make use of the following derivation for the interaction term: ```math -(\vec{S}_i + \vec{S}_j)^2 = \vec{S}_i^2 + 2 \vec{S}_i \cdot \vec{S}_j + \vec{S}_j^2 -\implies \vec{S}_i \cdot \vec{S}_j = \frac{1}{2} \left( (\vec{S}_i + \vec{S}_j)^2 - \vec{S}_i^2 - \vec{S}_j^2 \right) +(\vec{S}_i + \vec{S}_j)^2 = \vec{S}_i^2 + 2 \vec{S}_i · \vec{S}_j + \vec{S}_j^2 +⟹ \vec{S}_i · \vec{S}_j = \frac{1}{2} \left( (\vec{S}_i + \vec{S}_j)^2 - \vec{S}_i^2 - \vec{S}_j^2 \right) ``` -Here, we recognize the quadratic -[Casimir element](https://en.wikipedia.org/wiki/Casimir_element) $\vec{S}^2$, which commutes -with the elements of $SU(2)$. Consequently, the Hamiltonian also commutes with all elements -of $SU(2)$. +Here, we recognize the quadratic [Casimir element](https://en.wikipedia.org/wiki/Casimir_element) $\vec{S}^2$, which commutes with the elements of $SU(2)$. +Consequently, the Hamiltonian also commutes with all elements of $SU(2)$. ````julia using TensorKit @@ -65,33 +58,27 @@ H = heisenberg_hamiltonian() ## Symmetry-Protected Topological Order -The representations of $SU(2)$ possess additional structure, known as a -$\mathbb{Z}_2$-grading. This means, that they can be partitioned in integer $(+)$ and -half-integer $(-)$ spins, and the fusion rules will respect this grading. In other words, -the following table holds: +The representations of $SU(2)$ possess additional structure, known as a $\mathbb{Z}_2$-grading. +This means, that they can be partitioned in integer $(+)$ and half-integer $(-)$ spins, and the fusion rules will respect this grading. +In other words, the following table holds: -| $s_1$ | $s_2$ | $s_1 \otimes s_2$ | +| $s_1$ | $s_2$ | $s_1 ⊗ s_2$ | | --- | --- | --- | | $+$ | $+$ | $+$ | | $+$ | $-$ | $-$ | | $-$ | $+$ | $-$ | | $-$ | $-$ | $+$ | -This has important consequences for the MPS representation of an $SU(2)$-symmetric state. If -the physical spin consists of only integer representations, this means that the left and -right virtual spaces of the MPS tensor belong to the same grading, i.e. are either both -integer, or both half-integer. Thus, naively constructing a MPS tensor which contains spins -from both classes, will necessarily be the direct sum of the two, which yields a -non-injective MPS. +This has important consequences for the MPS representation of an $SU(2)$-symmetric state. +If the physical spin consists of only integer representations, this means that the left and right virtual spaces of the MPS tensor belong to the same grading, i.e. are either both integer, or both half-integer. +Thus, naively constructing a MPS tensor which contains spins from both classes, will necessarily be the direct sum of the two, which yields a non-injective MPS. ```math -\ket{\psi} = \ket{\psi_+} \oplus \ket{\psi_-} +|ψ⟩ = |ψ_+⟩ ⊕ |ψ_-⟩ ``` -Because of this direct sum, many of the usual MPS algorithms will fail, as they typically -cannot deal with non-injective MPS. The resulting MPS will have multiple values of the -transfer matrix spectrum that have a magnitude close to 1, which is a clear sign of a -non-injective MPS. +Because of this direct sum, many of the usual MPS algorithms will fail, as they typically cannot deal with non-injective MPS. +The resulting MPS will have multiple values of the transfer matrix spectrum that have a magnitude close to 1, which is a clear sign of a non-injective MPS. ````julia ℋ = SU2Space(1 => 1) @@ -104,21 +91,15 @@ transferplot(ψ; sectors, title = "Transfer matrix spectrum", legend = :outertop ![](figure-1.png) -Nevertheless, using the symmetry, this can be remedied rather easily, by imposing the -ground state to belong to a single class, and comparing the results. We can readily obtain 3 -different criteria for determining the SPT phase of the ground state. +Nevertheless, using the symmetry, this can be remedied rather easily, by imposing the ground state to belong to a single class, and comparing the results. +We can readily obtain 3 different criteria for determining the SPT phase of the ground state. -Firstly, we can compare variational energies for states of similar bond dimensions. As we -expect the state of the wrong SPT phase to have to expend some of its expressiveness in -correcting the SPT, it should have a harder time reaching lower energies. +Firstly, we can compare variational energies for states of similar bond dimensions. +As we expect the state of the wrong SPT phase to have to expend some of its expressiveness in correcting the SPT, it should have a harder time reaching lower energies. -Secondly, when inspecting the spectrum of the transfer matrix, we should see that the wrong -SPT phase has a dominant value that is not in the trivial sector, which leads to a -non-injective MPS. +Secondly, when inspecting the spectrum of the transfer matrix, we should see that the wrong SPT phase has a dominant value that is not in the trivial sector, which leads to a non-injective MPS. -Finally, the entanglement spectrum of the wrong SPT phase will show degeneracies of all -singular values, which can again be attributed to an attempt to mimic the spectrum of the -right SPT phase. +Finally, the entanglement spectrum of the wrong SPT phase will show degeneracies of all singular values, which can again be attributed to an attempt to mimic the spectrum of the right SPT phase. ````julia V_plus = SU2Space(0 => 10, 1 => 5, 2 => 3) @@ -164,21 +145,18 @@ plot(entanglementp_plus, entanglementp_minus; layout = (1, 2), size = (800, 400) ![](figure-3.png) -As we can see, the ground state can be found in the non-trivial SPT phase, $\ket{\psi_-}$. We -can obtain an intuitive understanding of $\ket{\psi_+}$ by considering the following -diagram. If we denote the MPS tensors that make up the ground state as $A_-$, we can -construct a state in the trivial SPT phase that approximates the ground state as follows: +As we can see, the ground state can be found in the non-trivial SPT phase, $|ψ_-⟩$. +We can obtain an intuitive understanding of $|ψ_+⟩$ by considering the following diagram. +If we denote the MPS tensors that make up the ground state as $A_-$, we can construct a state in the trivial SPT phase that approximates the ground state as follows: ```@raw html SPT tensors ``` -In other words, we can factorize a purely virtual isomorphism of $S = 1/2$ in order to -obtain the ground state. This then also explains the degeneracies in the entanglement -spectrum as well as in the transfer matrix spectrum. Finally, we can further confirm this -intuition by looking at the entanglement entropy of the ground state. As we can see, the -entanglement entropy of the state in the wrong SPT phase is exactly $log(2)$ higher than the -one in the right SPT phase, which is exactly what we would expect from the diagram above. +In other words, we can factorize a purely virtual isomorphism of $S = 1/2$ in order to obtain the ground state. +This then also explains the degeneracies in the entanglement spectrum as well as in the transfer matrix spectrum. +Finally, we can further confirm this intuition by looking at the entanglement entropy of the ground state. +As we can see, the entanglement entropy of the state in the wrong SPT phase is exactly $log(2)$ higher than the one in the right SPT phase, which is exactly what we would expect from the diagram above. ````julia S_minus = sum(real, entropy(ψ_minus)) diff --git a/docs/src/examples/groundstates/haldane-spt/main.ipynb b/docs/src/examples/groundstates/haldane-spt/main.ipynb index 3f0c3574d..3f2a918be 100644 --- a/docs/src/examples/groundstates/haldane-spt/main.ipynb +++ b/docs/src/examples/groundstates/haldane-spt/main.ipynb @@ -6,31 +6,24 @@ "source": [ "# Spin 1 Heisenberg model\n", "\n", - "The quantum Heisenberg model is a model often used in the study of critical points and phase\n", - "transitions of magnetic systems, in which the spins are treated quantum mechanically. It\n", - "models magnetic interactions between neighbouring spins through the so-called Heisenberg\n", - "interaction term, which causes the spins to either align ($J > 0$) or anti-align ($J < 0$),\n", - "thus modeling a (anti-) ferromagnetic system. Here, we will focus on the case of $S = 1$,\n", - "with anti-ferromagnetic interactions.\n", + "The quantum Heisenberg model is a model often used in the study of critical points and phase transitions of magnetic systems, in which the spins are treated quantum mechanically.\n", + "It models magnetic interactions between neighbouring spins through the so-called Heisenberg interaction term, which causes the spins to either align ($J > 0$) or anti-align ($J < 0$), thus modeling a (anti-) ferromagnetic system.\n", + "Here, we will focus on the case of $S = 1$, with anti-ferromagnetic interactions.\n", "\n", "$$\n", - "H = -J \\sum_{\\langle i, j \\rangle} \\vec{S}_i \\cdot \\vec{S}_j\n", + "H = -J \\sum_{⟨i, j⟩} \\vec{S}_i · \\vec{S}_j\n", "$$\n", "\n", - "Importantly, the Hamiltonian of the isotropic model is invariant under $SU(2)$ rotations,\n", - "which can be exploited to increase efficiency, as well as interpretability of the MPS\n", - "simulations. To see this, we can make use of the following derivation for the interaction\n", - "term:\n", + "Importantly, the Hamiltonian of the isotropic model is invariant under $SU(2)$ rotations, which can be exploited to increase efficiency, as well as interpretability of the MPS simulations.\n", + "To see this, we can make use of the following derivation for the interaction term:\n", "\n", "$$\n", - "(\\vec{S}_i + \\vec{S}_j)^2 = \\vec{S}_i^2 + 2 \\vec{S}_i \\cdot \\vec{S}_j + \\vec{S}_j^2\n", - "\\implies \\vec{S}_i \\cdot \\vec{S}_j = \\frac{1}{2} \\left( (\\vec{S}_i + \\vec{S}_j)^2 - \\vec{S}_i^2 - \\vec{S}_j^2 \\right)\n", + "(\\vec{S}_i + \\vec{S}_j)^2 = \\vec{S}_i^2 + 2 \\vec{S}_i · \\vec{S}_j + \\vec{S}_j^2\n", + "⟹ \\vec{S}_i · \\vec{S}_j = \\frac{1}{2} \\left( (\\vec{S}_i + \\vec{S}_j)^2 - \\vec{S}_i^2 - \\vec{S}_j^2 \\right)\n", "$$\n", "\n", - "Here, we recognize the quadratic\n", - "[Casimir element](https://en.wikipedia.org/wiki/Casimir_element) $\\vec{S}^2$, which commutes\n", - "with the elements of $SU(2)$. Consequently, the Hamiltonian also commutes with all elements\n", - "of $SU(2)$." + "Here, we recognize the quadratic [Casimir element](https://en.wikipedia.org/wiki/Casimir_element) $\\vec{S}^2$, which commutes with the elements of $SU(2)$.\n", + "Consequently, the Hamiltonian also commutes with all elements of $SU(2)$." ] }, { @@ -63,33 +56,27 @@ "source": [ "## Symmetry-Protected Topological Order\n", "\n", - "The representations of $SU(2)$ possess additional structure, known as a\n", - "$\\mathbb{Z}_2$-grading. This means, that they can be partitioned in integer $(+)$ and\n", - "half-integer $(-)$ spins, and the fusion rules will respect this grading. In other words,\n", - "the following table holds:\n", + "The representations of $SU(2)$ possess additional structure, known as a $\\mathbb{Z}_2$-grading.\n", + "This means, that they can be partitioned in integer $(+)$ and half-integer $(-)$ spins, and the fusion rules will respect this grading.\n", + "In other words, the following table holds:\n", "\n", - "| $s_1$ | $s_2$ | $s_1 \\otimes s_2$ |\n", + "| $s_1$ | $s_2$ | $s_1 ⊗ s_2$ |\n", "| --- | --- | --- |\n", "| $+$ | $+$ | $+$ |\n", "| $+$ | $-$ | $-$ |\n", "| $-$ | $+$ | $-$ |\n", "| $-$ | $-$ | $+$ |\n", "\n", - "This has important consequences for the MPS representation of an $SU(2)$-symmetric state. If\n", - "the physical spin consists of only integer representations, this means that the left and\n", - "right virtual spaces of the MPS tensor belong to the same grading, i.e. are either both\n", - "integer, or both half-integer. Thus, naively constructing a MPS tensor which contains spins\n", - "from both classes, will necessarily be the direct sum of the two, which yields a\n", - "non-injective MPS.\n", + "This has important consequences for the MPS representation of an $SU(2)$-symmetric state.\n", + "If the physical spin consists of only integer representations, this means that the left and right virtual spaces of the MPS tensor belong to the same grading, i.e. are either both integer, or both half-integer.\n", + "Thus, naively constructing a MPS tensor which contains spins from both classes, will necessarily be the direct sum of the two, which yields a non-injective MPS.\n", "\n", "$$\n", - "\\ket{\\psi} = \\ket{\\psi_+} \\oplus \\ket{\\psi_-}\n", + "|ψ⟩ = |ψ_+⟩ ⊕ |ψ_-⟩\n", "$$\n", "\n", - "Because of this direct sum, many of the usual MPS algorithms will fail, as they typically\n", - "cannot deal with non-injective MPS. The resulting MPS will have multiple values of the\n", - "transfer matrix spectrum that have a magnitude close to 1, which is a clear sign of a\n", - "non-injective MPS." + "Because of this direct sum, many of the usual MPS algorithms will fail, as they typically cannot deal with non-injective MPS.\n", + "The resulting MPS will have multiple values of the transfer matrix spectrum that have a magnitude close to 1, which is a clear sign of a non-injective MPS." ] }, { @@ -110,21 +97,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Nevertheless, using the symmetry, this can be remedied rather easily, by imposing the\n", - "ground state to belong to a single class, and comparing the results. We can readily obtain 3\n", - "different criteria for determining the SPT phase of the ground state.\n", + "Nevertheless, using the symmetry, this can be remedied rather easily, by imposing the ground state to belong to a single class, and comparing the results.\n", + "We can readily obtain 3 different criteria for determining the SPT phase of the ground state.\n", "\n", - "Firstly, we can compare variational energies for states of similar bond dimensions. As we\n", - "expect the state of the wrong SPT phase to have to expend some of its expressiveness in\n", - "correcting the SPT, it should have a harder time reaching lower energies.\n", + "Firstly, we can compare variational energies for states of similar bond dimensions.\n", + "As we expect the state of the wrong SPT phase to have to expend some of its expressiveness in correcting the SPT, it should have a harder time reaching lower energies.\n", "\n", - "Secondly, when inspecting the spectrum of the transfer matrix, we should see that the wrong\n", - "SPT phase has a dominant value that is not in the trivial sector, which leads to a\n", - "non-injective MPS.\n", + "Secondly, when inspecting the spectrum of the transfer matrix, we should see that the wrong SPT phase has a dominant value that is not in the trivial sector, which leads to a non-injective MPS.\n", "\n", - "Finally, the entanglement spectrum of the wrong SPT phase will show degeneracies of all\n", - "singular values, which can again be attributed to an attempt to mimic the spectrum of the\n", - "right SPT phase." + "Finally, the entanglement spectrum of the wrong SPT phase will show degeneracies of all singular values, which can again be attributed to an attempt to mimic the spectrum of the right SPT phase." ] }, { @@ -159,21 +140,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "As we can see, the ground state can be found in the non-trivial SPT phase, $\\ket{\\psi_-}$. We\n", - "can obtain an intuitive understanding of $\\ket{\\psi_+}$ by considering the following\n", - "diagram. If we denote the MPS tensors that make up the ground state as $A_-$, we can\n", - "construct a state in the trivial SPT phase that approximates the ground state as follows:\n", + "As we can see, the ground state can be found in the non-trivial SPT phase, $|ψ_-⟩$.\n", + "We can obtain an intuitive understanding of $|ψ_+⟩$ by considering the following diagram.\n", + "If we denote the MPS tensors that make up the ground state as $A_-$, we can construct a state in the trivial SPT phase that approximates the ground state as follows:\n", "\n", "\n", "\"SPT\n", "\n", "\n", - "In other words, we can factorize a purely virtual isomorphism of $S = 1/2$ in order to\n", - "obtain the ground state. This then also explains the degeneracies in the entanglement\n", - "spectrum as well as in the transfer matrix spectrum. Finally, we can further confirm this\n", - "intuition by looking at the entanglement entropy of the ground state. As we can see, the\n", - "entanglement entropy of the state in the wrong SPT phase is exactly $log(2)$ higher than the\n", - "one in the right SPT phase, which is exactly what we would expect from the diagram above." + "In other words, we can factorize a purely virtual isomorphism of $S = 1/2$ in order to obtain the ground state.\n", + "This then also explains the degeneracies in the entanglement spectrum as well as in the transfer matrix spectrum.\n", + "Finally, we can further confirm this intuition by looking at the entanglement entropy of the ground state.\n", + "As we can see, the entanglement entropy of the state in the wrong SPT phase is exactly $log(2)$ higher than the one in the right SPT phase, which is exactly what we would expect from the diagram above." ] }, { diff --git a/docs/src/examples/groundstates/hubbard/index.md b/docs/src/examples/groundstates/hubbard/index.md index 0082d0899..625511c00 100644 --- a/docs/src/examples/groundstates/hubbard/index.md +++ b/docs/src/examples/groundstates/hubbard/index.md @@ -13,8 +13,7 @@ using Markdown # Hubbard chain at half filling The Hubbard model is a model of interacting fermions on a lattice, which is often used as a somewhat realistic model for electrons in a solid. -The Hamiltonian consists of two terms that describe competing forces of each electron: -a kinetic term that allows electrons to hop between neighboring sites, and a potential term reflecting on-site interactions between electrons. +The Hamiltonian consists of two terms that describe competing forces of each electron: a kinetic term that allows electrons to hop between neighboring sites, and a potential term reflecting on-site interactions between electrons. Often, a third term is included which serves as a chemical potential to control the number of electrons in the system. ```math @@ -29,7 +28,7 @@ This results in the following Hamiltonian: H = - ∑_{⟨i, j⟩, σ} c^{†}_{i,σ} c_{j,σ} + U / 4 ∑_i (1 - 2 n_{i,↑}) (1 - 2 n_{i,↓}) - μ ∑_{i,σ} n_{i,σ} ``` -Finally, setting `\mu = 0` and defining `u = U / 4` we obtain the Hubbard model at half-filling. +Finally, setting `μ = 0` and defining `u = U / 4` we obtain the Hubbard model at half-filling. ```math H = - ∑_{⟨i, j⟩, σ} c^{†}_{i,σ} c_{j,σ} + u ∑_i (1 - 2 n_{i,↑}) (1 - 2 n_{i,↓}) @@ -46,31 +45,6 @@ using Interpolations using Optim ```` -```` -Precompiling packages... - 3407.9 ms ✓ Interpolations - 1 dependency successfully precompiled in 4 seconds. 29 already precompiled. -Precompiling packages... - 1357.0 ms ✓ TensorOperations → TensorOperationsChainRulesCoreExt - 1 dependency successfully precompiled in 2 seconds. 20 already precompiled. -Precompiling packages... - 3507.7 ms ✓ TensorKit → TensorKitChainRulesCoreExt - 1 dependency successfully precompiled in 5 seconds. 55 already precompiled. -Precompiling packages... - 949.2 ms ✓ KrylovKit → KrylovKitChainRulesCoreExt - 1 dependency successfully precompiled in 1 seconds. 12 already precompiled. -Precompiling packages... - 1923.6 ms ✓ SpecialFunctions → SpecialFunctionsChainRulesCoreExt - 1 dependency successfully precompiled in 2 seconds. 18 already precompiled. -Precompiling packages... - 691.7 ms ✓ DifferentiationInterface → DifferentiationInterfaceChainRulesCoreExt - 1 dependency successfully precompiled in 1 seconds. 11 already precompiled. -Precompiling packages... - 656.3 ms ✓ ArrayInterface → ArrayInterfaceChainRulesCoreExt - 1 dependency successfully precompiled in 1 seconds. 10 already precompiled. - -```` - For reproducibility of this page, we fix the seed of the random number generator: ````julia @@ -194,7 +168,7 @@ The elementary excitations are known as spinons and holons, which are domain wal The fact that the spin and charge sectors are separate is a phenomenon known as spin-charge separation. The domain walls can be constructed by noticing that there are two equivalent groundstates, which differ by a translation over a single site. -In other words, the groundstates are ``\psi_{AB}`` and ``\psi_{BA}``, where ``A`` and ``B`` are the two sites. +In other words, the groundstates are ``ψ_{AB}`` and ``ψ_{BA}``, where ``A`` and ``B`` are the two sites. These excitations can be constructed as follows: ````julia diff --git a/docs/src/examples/groundstates/hubbard/main.ipynb b/docs/src/examples/groundstates/hubbard/main.ipynb index 772559955..f1ca52f67 100644 --- a/docs/src/examples/groundstates/hubbard/main.ipynb +++ b/docs/src/examples/groundstates/hubbard/main.ipynb @@ -16,8 +16,7 @@ "# Hubbard chain at half filling\n", "\n", "The Hubbard model is a model of interacting fermions on a lattice, which is often used as a somewhat realistic model for electrons in a solid.\n", - "The Hamiltonian consists of two terms that describe competing forces of each electron:\n", - "a kinetic term that allows electrons to hop between neighboring sites, and a potential term reflecting on-site interactions between electrons.\n", + "The Hamiltonian consists of two terms that describe competing forces of each electron: a kinetic term that allows electrons to hop between neighboring sites, and a potential term reflecting on-site interactions between electrons.\n", "Often, a third term is included which serves as a chemical potential to control the number of electrons in the system.\n", "\n", "$$\n", @@ -32,7 +31,7 @@ "H = - ∑_{⟨i, j⟩, σ} c^{†}_{i,σ} c_{j,σ} + U / 4 ∑_i (1 - 2 n_{i,↑}) (1 - 2 n_{i,↓}) - μ ∑_{i,σ} n_{i,σ}\n", "$$\n", "\n", - "Finally, setting `\\mu = 0` and defining `u = U / 4` we obtain the Hubbard model at half-filling.\n", + "Finally, setting `μ = 0` and defining `u = U / 4` we obtain the Hubbard model at half-filling.\n", "\n", "$$\n", "H = - ∑_{⟨i, j⟩, σ} c^{†}_{i,σ} c_{j,σ} + u ∑_i (1 - 2 n_{i,↑}) (1 - 2 n_{i,↓})\n", @@ -299,7 +298,7 @@ "The fact that the spin and charge sectors are separate is a phenomenon known as spin-charge separation.\n", "\n", "The domain walls can be constructed by noticing that there are two equivalent groundstates, which differ by a translation over a single site.\n", - "In other words, the groundstates are $\\psi_{AB}$ and $\\psi_{BA}$, where $A$ and $B$ are the two sites.\n", + "In other words, the groundstates are $ψ_{AB}$ and $ψ_{BA}$, where $A$ and $B$ are the two sites.\n", "These excitations can be constructed as follows:" ] }, diff --git a/docs/src/examples/groundstates/ising-cft/index.md b/docs/src/examples/groundstates/ising-cft/index.md index 77113f9cc..8162b37f8 100644 --- a/docs/src/examples/groundstates/ising-cft/index.md +++ b/docs/src/examples/groundstates/ising-cft/index.md @@ -8,17 +8,15 @@ EditURL = "../../../../../examples/groundstates/ising-cft/main.jl" # The Ising CFT spectrum -This tutorial is meant to show the finite size CFT spectrum for the quantum Ising model. We -do this by first employing an exact diagonalization technique, and then extending the -analysis to larger system sizes through the use of MPS techniques. +This tutorial is meant to show the finite size CFT spectrum for the quantum Ising model. +We do this by first employing an exact diagonalization technique, and then extending the analysis to larger system sizes through the use of MPS techniques. ````julia using MPSKit, MPSKitModels, TensorKit, Plots, KrylovKit using LinearAlgebra: eigvals, diagm, Hermitian ```` -The Hamiltonian is defined on a finite lattice with periodic boundary conditions, -which can be implemented as follows: +The Hamiltonian is defined on a finite lattice with periodic boundary conditions, which can be implemented as follows: ````julia L = 12 @@ -47,11 +45,8 @@ H = periodic_boundary_conditions(transverse_field_ising(), L) ## Exact diagonalisation -In MPSKit, there is support for exact diagonalisation by leveraging the fact that applying -the Hamiltonian to an untruncated MPS will result in an effective Hamiltonian on the center -site which implements the action of the entire Hamiltonian. Thus, optimizing the middle -tensor is equivalent to optimixing a state in the entire Hilbert space, as all other tensors -are just unitary matrices that mix the basis. +In MPSKit, there is support for exact diagonalisation by leveraging the fact that applying the Hamiltonian to an untruncated MPS will result in an effective Hamiltonian on the center site which implements the action of the entire Hamiltonian. +Thus, optimizing the middle tensor is equivalent to optimizing a state in the entire Hilbert space, as all other tensors are just unitary matrices that mix the basis. ````julia energies, states = exact_diagonalization(H; num = 18, alg = Lanczos(; krylovdim = 200)); @@ -69,9 +64,8 @@ plot( ## Extracting momentum -Given a state, it is possible to assign a momentum label -through the use of the translation operator. This operator can be defined in MPO language -either diagramatically as +Given a state, it is possible to assign a momentum label through the use of the translation operator. +This operator can be defined in MPO language either diagrammatically as ```@raw html translation operator @@ -91,13 +85,11 @@ end O_shift (generic function with 1 method) ```` -We can then calculate the momentum of the ground state as the expectation value of this -operator. However, there is a subtlety because of the degeneracies in the energy -eigenvalues. The eigensolver will find an orthonormal basis within each energy subspace, but -this basis is not necessarily a basis of eigenstates of the translation operator. In order -to fix this, we diagonalize the translation operator within each energy subspace. -The resulting energy levels have one-to-one correspondence to the operators in CFT, where -the momentum is related to their conformal spin as $P_n = \frac{2\pi}{L}S_n$. +We can then calculate the momentum of the ground state as the expectation value of this operator. +However, there is a subtlety because of the degeneracies in the energy eigenvalues. +The eigensolver will find an orthonormal basis within each energy subspace, but this basis is not necessarily a basis of eigenstates of the translation operator. +In order to fix this, we diagonalize the translation operator within each energy subspace. +The resulting energy levels have one-to-one correspondence to the operators in CFT, where the momentum is related to their conformal spin as $P_n = \frac{2π}{L}S_n$. ````julia function fix_degeneracies(basis) @@ -146,10 +138,8 @@ append!(momenta, fix_degeneracies(states[17:18])) -1.5707963267948966 ```` -We can compute the scaling dimensions $\Delta_n$ of the operators in the CFT from the -energy gap of the corresponding excitations as $E_n - E_0 = \frac{2\pi v}{L} \Delta_n$, -where $v = 2$. If we plot these scaling dimensions against the conformal spin $S_n$ from -above, we retrieve the familiar spectrum of the Ising CFT. +We can compute the scaling dimensions $Δ_n$ of the operators in the CFT from the energy gap of the corresponding excitations as $E_n - E_0 = \frac{2π v}{L} Δ_n$, where $v = 2$. +If we plot these scaling dimensions against the conformal spin $S_n$ from above, we retrieve the familiar spectrum of the Ising CFT. ````julia v = 2.0 @@ -170,8 +160,7 @@ p ## Finite bond dimension -If we limit the maximum bond dimension of the MPS, we get an approximate solution, but we -can reach higher system sizes. +If we limit the maximum bond dimension of the MPS, we get an approximate solution, but we can reach higher system sizes. ````julia L_mps = 20 @@ -180,9 +169,8 @@ D = 64 ψ, envs, δ = find_groundstate(FiniteMPS(L_mps, ℂ^2, ℂ^D), H_mps, DMRG(; verbosity = 0)); ```` -Excitations on top of the ground state can be found through the use of the quasiparticle -ansatz. This returns quasiparticle states, which can be converted to regular `FiniteMPS` -objects. +Excitations on top of the ground state can be found through the use of the quasiparticle ansatz. +This returns quasiparticle states, which can be converted to regular `FiniteMPS` objects. ````julia E_ex, qps = excitations(H_mps, QuasiparticleAnsatz(), ψ, envs; num = 18) diff --git a/docs/src/examples/groundstates/ising-cft/main.ipynb b/docs/src/examples/groundstates/ising-cft/main.ipynb index e21dc19cc..0e6d15199 100644 --- a/docs/src/examples/groundstates/ising-cft/main.ipynb +++ b/docs/src/examples/groundstates/ising-cft/main.ipynb @@ -6,9 +6,8 @@ "source": [ "# The Ising CFT spectrum\n", "\n", - "This tutorial is meant to show the finite size CFT spectrum for the quantum Ising model. We\n", - "do this by first employing an exact diagonalization technique, and then extending the\n", - "analysis to larger system sizes through the use of MPS techniques." + "This tutorial is meant to show the finite size CFT spectrum for the quantum Ising model.\n", + "We do this by first employing an exact diagonalization technique, and then extending the analysis to larger system sizes through the use of MPS techniques." ] }, { @@ -25,8 +24,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The Hamiltonian is defined on a finite lattice with periodic boundary conditions,\n", - "which can be implemented as follows:" + "The Hamiltonian is defined on a finite lattice with periodic boundary conditions, which can be implemented as follows:" ] }, { @@ -45,11 +43,8 @@ "source": [ "## Exact diagonalisation\n", "\n", - "In MPSKit, there is support for exact diagonalisation by leveraging the fact that applying\n", - "the Hamiltonian to an untruncated MPS will result in an effective Hamiltonian on the center\n", - "site which implements the action of the entire Hamiltonian. Thus, optimizing the middle\n", - "tensor is equivalent to optimixing a state in the entire Hilbert space, as all other tensors\n", - "are just unitary matrices that mix the basis." + "In MPSKit, there is support for exact diagonalisation by leveraging the fact that applying the Hamiltonian to an untruncated MPS will result in an effective Hamiltonian on the center site which implements the action of the entire Hamiltonian.\n", + "Thus, optimizing the middle tensor is equivalent to optimizing a state in the entire Hilbert space, as all other tensors are just unitary matrices that mix the basis." ] }, { @@ -81,9 +76,8 @@ "source": [ "## Extracting momentum\n", "\n", - "Given a state, it is possible to assign a momentum label\n", - "through the use of the translation operator. This operator can be defined in MPO language\n", - "either diagramatically as\n", + "Given a state, it is possible to assign a momentum label through the use of the translation operator.\n", + "This operator can be defined in MPO language either diagrammatically as\n", "\n", "\n", "\"translation\n", @@ -109,13 +103,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can then calculate the momentum of the ground state as the expectation value of this\n", - "operator. However, there is a subtlety because of the degeneracies in the energy\n", - "eigenvalues. The eigensolver will find an orthonormal basis within each energy subspace, but\n", - "this basis is not necessarily a basis of eigenstates of the translation operator. In order\n", - "to fix this, we diagonalize the translation operator within each energy subspace.\n", - "The resulting energy levels have one-to-one correspondence to the operators in CFT, where\n", - "the momentum is related to their conformal spin as $P_n = \\frac{2\\pi}{L}S_n$." + "We can then calculate the momentum of the ground state as the expectation value of this operator.\n", + "However, there is a subtlety because of the degeneracies in the energy eigenvalues.\n", + "The eigensolver will find an orthonormal basis within each energy subspace, but this basis is not necessarily a basis of eigenstates of the translation operator.\n", + "In order to fix this, we diagonalize the translation operator within each energy subspace.\n", + "The resulting energy levels have one-to-one correspondence to the operators in CFT, where the momentum is related to their conformal spin as $P_n = \\frac{2π}{L}S_n$." ] }, { @@ -152,10 +144,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can compute the scaling dimensions $\\Delta_n$ of the operators in the CFT from the\n", - "energy gap of the corresponding excitations as $E_n - E_0 = \\frac{2\\pi v}{L} \\Delta_n$,\n", - "where $v = 2$. If we plot these scaling dimensions against the conformal spin $S_n$ from\n", - "above, we retrieve the familiar spectrum of the Ising CFT." + "We can compute the scaling dimensions $Δ_n$ of the operators in the CFT from the energy gap of the corresponding excitations as $E_n - E_0 = \\frac{2π v}{L} Δ_n$, where $v = 2$.\n", + "If we plot these scaling dimensions against the conformal spin $S_n$ from above, we retrieve the familiar spectrum of the Ising CFT." ] }, { @@ -184,8 +174,7 @@ "source": [ "## Finite bond dimension\n", "\n", - "If we limit the maximum bond dimension of the MPS, we get an approximate solution, but we\n", - "can reach higher system sizes." + "If we limit the maximum bond dimension of the MPS, we get an approximate solution, but we can reach higher system sizes." ] }, { @@ -204,9 +193,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Excitations on top of the ground state can be found through the use of the quasiparticle\n", - "ansatz. This returns quasiparticle states, which can be converted to regular `FiniteMPS`\n", - "objects." + "Excitations on top of the ground state can be found through the use of the quasiparticle ansatz.\n", + "This returns quasiparticle states, which can be converted to regular `FiniteMPS` objects." ] }, { diff --git a/docs/src/examples/groundstates/xxz-heisenberg/index.md b/docs/src/examples/groundstates/xxz-heisenberg/index.md index 687bc0cb8..f487be24a 100644 --- a/docs/src/examples/groundstates/xxz-heisenberg/index.md +++ b/docs/src/examples/groundstates/xxz-heisenberg/index.md @@ -42,7 +42,8 @@ H = heisenberg_XXX(; spin = 1 // 2) ```` -We then need an initial state, which we shall later optimize. In this example we work directly in the thermodynamic limit. +We then need an initial state, which we shall later optimize. +In this example we work directly in the thermodynamic limit. ````julia state = InfiniteMPS(2, 20) diff --git a/docs/src/examples/groundstates/xxz-heisenberg/main.ipynb b/docs/src/examples/groundstates/xxz-heisenberg/main.ipynb index 8f1685258..a1bda9266 100644 --- a/docs/src/examples/groundstates/xxz-heisenberg/main.ipynb +++ b/docs/src/examples/groundstates/xxz-heisenberg/main.ipynb @@ -60,7 +60,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We then need an initial state, which we shall later optimize. In this example we work directly in the thermodynamic limit." + "We then need an initial state, which we shall later optimize.\n", + "In this example we work directly in the thermodynamic limit." ] }, { diff --git a/docs/src/examples/index.md b/docs/src/examples/index.md index 43f7d66b6..f224a71d5 100644 --- a/docs/src/examples/index.md +++ b/docs/src/examples/index.md @@ -16,51 +16,53 @@ using .ExampleModels ``` The examples are grouped by the kind of computation they demonstrate rather than by the physical system. -Within each group, the summaries below are ordered roughly by increasing difficulty: start at the top if you are new to MPSKit, and work down as you get comfortable with symmetries, infinite systems, and the less common algorithms. -(The sidebar lists the same pages alphabetically.) +Every summary states the complexity of the example, so you can begin with an introductory one and move on to those that combine symmetries, infinite systems, and the less common algorithms. +The sidebar lists the same pages alphabetically. ## Ground states -### [The XXZ model](groundstates/xxz-heisenberg/index.md) - -![](groundstates/xxz-heisenberg/figure-2.png) - -Walks through a ground-state search that first goes wrong: single-site `VUMPS` and `GradientGrassmann` stall on the spin-1/2 Heisenberg antiferromagnet, and `transferplot`/`entanglementplot` reveal a near-non-injective state with several almost-degenerate transfer-matrix eigenvalues. -The fix is a two-site unit cell together with the `SU2Irrep`-symmetric Hamiltonian, after which `IDMRG2` and `VUMPS` converge cleanly. -A useful, diagnostic-driven example for recognizing and debugging convergence failures. -**Level: intermediate.** - -### [Hubbard chain at half filling](groundstates/hubbard/index.md) +### [The Ising CFT spectrum](groundstates/ising-cft/index.md) -![](groundstates/hubbard/figure-2.png) +![](groundstates/ising-cft/figure-2.png) -Studies the 1D Hubbard model at half filling with fermionic `InfiniteMPS`, first benchmarking a plain `VUMPS`/`GradientGrassmann` ground-state search against the exact Bethe-ansatz integral for the energy, then imposing the full particle-number and spin symmetry (`U1Irrep`, `SU2Irrep`, with `MPSKit.add_physical_charge` to pin the filling) and constructing the spinon/holon excitation spectrum with the `QuasiparticleAnsatz`. -Combines fermionic symmetry sectors with a more elaborate ground-state recipe (staged bond-dimension growth via `changebonds`/`OptimalExpand`, `SvdCut`, and mixed `VUMPS`/`GradientGrassmann` refinement). -**Level: advanced.** +Extracts the finite-size conformal spectrum of the critical transverse-field Ising chain, first by brute-force exact diagonalization on a small periodic chain, then by extending to larger sizes with finite DMRG and the quasiparticle ansatz, using a translation MPO to assign a momentum label to each state. +It works without any symmetries, which makes it a good entry point into the finite-MPS workflow. +**Complexity: introductory.** -### [1D Bose-Hubbard model](groundstates/bose-hubbard/index.md) +### [The XXZ model](groundstates/xxz-heisenberg/index.md) -![](groundstates/bose-hubbard/figure-6.png) +![](groundstates/xxz-heisenberg/figure-2.png) -The most comprehensive ground-state example in the gallery: works directly in the thermodynamic limit with a truncated bosonic local Hilbert space, extracts correlation functions and the correlation length as a function of bond dimension, computes the momentum distribution, and maps out the Mott-insulator/superfluid structure of the phase diagram from the ground-state response to an applied phase twist. -Touches most of the ground-state toolbox (`InfiniteMPS`, `find_groundstate`, bond-dimension control, `expectation_value`-based observables) in a single, longer study. -**Level: advanced.** +Shows how to pick a unit cell and a symmetry that suit the state you are after, using the spin-1/2 Heisenberg antiferromagnet as the case study. +The transfer-matrix and entanglement spectra serve as diagnostics: they reveal several almost-degenerate transfer-matrix eigenvalues, which is the signature of a state that a single-site ansatz cannot represent. +A two-site unit cell together with the SU(2)-symmetric Hamiltonian resolves this, after which both two-site IDMRG and VUMPS converge cleanly. +A good example for learning to read these diagnostics and act on them. +**Complexity: intermediate.** ### [Spin 1 Heisenberg model](groundstates/haldane-spt/index.md) ![](groundstates/haldane-spt/figure-3.png) -Distinguishes the two symmetry-protected topological phases of the SU(2)-symmetric spin-1 Heisenberg chain by restricting the virtual `SU2Space` to integer or half-integer charges, then compares the two resulting ground states through their energy, transfer-matrix spectrum (`transferplot`), entanglement spectrum (`entanglementplot`), and entanglement entropy (`entropy`). +Distinguishes the two symmetry-protected topological phases of the SU(2)-symmetric spin-1 Heisenberg chain by restricting the virtual space to integer or half-integer charges, then compares the two resulting ground states through their energy, transfer-matrix spectrum, entanglement spectrum, and entanglement entropy. Builds directly on the symmetry machinery introduced in the Haldane gap example. -**Level: intermediate/advanced.** +**Complexity: intermediate to advanced.** -### [The Ising CFT spectrum](groundstates/ising-cft/index.md) +### [Hubbard chain at half filling](groundstates/hubbard/index.md) -![](groundstates/ising-cft/figure-2.png) +![](groundstates/hubbard/figure-2.png) + +Studies the one-dimensional Hubbard model at half filling with a fermionic infinite MPS. +It first benchmarks a plain ground-state search against the exact Bethe-ansatz integral for the energy, then imposes the full particle-number and spin symmetry, pinning the filling by adding a charge to the physical space, and finally constructs the spinon and holon excitation spectrum with the quasiparticle ansatz. +Combines fermionic symmetry sectors with a more elaborate ground-state recipe, growing the bond dimension in stages before refining. +**Complexity: advanced.** + +### [1D Bose-Hubbard model](groundstates/bose-hubbard/index.md) + +![](groundstates/bose-hubbard/figure-6.png) -Extracts the finite-size conformal spectrum of the critical transverse-field Ising chain, first by brute-force `exact_diagonalization` on a small periodic chain, then by extending to larger sizes with finite `DMRG` and the `QuasiparticleAnsatz`, using a translation MPO to assign a momentum label to each state. -No symmetries are used, which makes this a good entry point into the finite-MPS workflow. -**Level: introductory.** +The most comprehensive ground-state example in the gallery: it works directly in the thermodynamic limit with a truncated bosonic local Hilbert space, extracts correlation functions and the correlation length as a function of bond dimension, computes the momentum distribution, and maps out the Mott-insulator and superfluid structure of the phase diagram from the ground-state response to an applied phase twist. +Touches most of the ground-state toolbox in a single, longer study. +**Complexity: advanced.** ## Excitations & dispersions @@ -68,9 +70,9 @@ No symmetries are used, which makes this a good entry point into the finite-MPS ![](excitations/haldane/figure-3.png) -Computes the Haldane gap of the spin-1 Heisenberg antiferromagnet in two complementary ways: finite-size `DMRG` with the `QuasiparticleAnsatz`, extrapolated over system size, and a direct infinite-chain `VUMPS` calculation with a momentum-resolved excitation scan. -Introduces `SU2Irrep`/`SU2Space` symmetric tensors for both `FiniteMPS` and `InfiniteMPS`. -**Level: intermediate.** +Computes the Haldane gap of the spin-1 Heisenberg antiferromagnet in two complementary ways: finite-size DMRG with the quasiparticle ansatz, extrapolated over system size, and a direct infinite-chain VUMPS calculation with a momentum-resolved excitation scan. +Introduces SU(2)-symmetric tensors for both finite and infinite MPS. +**Complexity: intermediate.** ## Dynamics & finite temperature @@ -78,17 +80,18 @@ Introduces `SU2Irrep`/`SU2Space` symmetric tensors for both `FiniteMPS` and `Inf ![](dynamics/ising-dqpt/infinite_timeev.png) -Quenches the transverse-field Ising chain across its critical point and tracks the Loschmidt echo in search of non-analyticities (dynamical quantum phase transitions), on both a finite chain (`TDVP2`/`TDVP`) and directly in the thermodynamic limit (`changebonds` with `OptimalExpand`, then `TDVP`). +Quenches the transverse-field Ising chain across its critical point and tracks the Loschmidt echo in search of non-analyticities, the dynamical quantum phase transitions of the title. +This is done both on a finite chain, with two-site and then single-site TDVP, and directly in the thermodynamic limit, where the bond dimension is grown explicitly before evolving. A compact introduction to real-time evolution and environment reuse, still without symmetries. -**Level: introductory/intermediate.** +**Complexity: introductory to intermediate.** ### [Finite temperature XY model](dynamics/xy-finiteT/index.md) ![](dynamics/xy-finiteT/figure-1.png) Simulates the finite-temperature XY chain by purifying the infinite-temperature density matrix and evolving it in imaginary time, then compares the resulting partition function and free energy against exact diagonalization and, via BenchmarkFreeFermions.jl, the exact free-fermion solution. -A technical, comparison-heavy example built around `MPSKit.infinite_temperature_density_matrix` and imaginary-time evolution rather than ground-state search. -**Level: advanced.** +A technical, comparison-heavy example built around imaginary-time evolution of a density matrix rather than a ground-state search. +**Complexity: advanced.** ## Statistical mechanics @@ -96,6 +99,6 @@ A technical, comparison-heavy example built around `MPSKit.infinite_temperature_ ![](statmech/hard-hexagon/figure-1.png) -Extracts the central charge of the hard hexagon lattice gas by finding the leading boundary MPS of its transfer matrix with `VUMPS` (using Fibonacci-anyon virtual spaces), then fitting the CFT-predicted scaling relation between entanglement entropy and correlation length as the bond dimension is increased. -The only classical statistical-mechanics example in the gallery, and the only one demonstrating non-abelian anyonic symmetries (`FibonacciAnyon`) in MPSKit. -**Level: advanced.** +Extracts the central charge of the hard hexagon lattice gas by finding the leading boundary MPS of its transfer matrix with VUMPS, using Fibonacci-anyon virtual spaces, then fitting the CFT-predicted scaling relation between entanglement entropy and correlation length as the bond dimension is increased. +The only classical statistical-mechanics example in the gallery, and the only one demonstrating non-abelian anyonic symmetries in MPSKit. +**Complexity: advanced.** diff --git a/docs/src/examples/statmech/hard-hexagon/index.md b/docs/src/examples/statmech/hard-hexagon/index.md index a1f7bdde0..da3e0ab23 100644 --- a/docs/src/examples/statmech/hard-hexagon/index.md +++ b/docs/src/examples/statmech/hard-hexagon/index.md @@ -71,7 +71,8 @@ This can be exploited to formulate a scaling hypothesis [pollmann2009](@cite), w First we need to know the entropy and correlation length at several different bond dimensions. Our approach will be to re-use the previous approximated dominant eigenvector, and then expanding its bond dimension and re-running VUMPS. -According to the scaling hypothesis we should have ``S ∝ \frac{c}{6} log(ξ)``. Therefore we should find ``c`` using +According to the scaling hypothesis we should have ``S ∝ \frac{c}{6} log(ξ)``. +Therefore we should find ``c`` using ````julia function scaling_simulations( diff --git a/docs/src/examples/statmech/hard-hexagon/main.ipynb b/docs/src/examples/statmech/hard-hexagon/main.ipynb index d8cbd100d..0791de51e 100644 --- a/docs/src/examples/statmech/hard-hexagon/main.ipynb +++ b/docs/src/examples/statmech/hard-hexagon/main.ipynb @@ -200,7 +200,8 @@ "\n", "First we need to know the entropy and correlation length at several different bond dimensions.\n", "Our approach will be to re-use the previous approximated dominant eigenvector, and then expanding its bond dimension and re-running VUMPS.\n", - "According to the scaling hypothesis we should have $S ∝ \\frac{c}{6} log(ξ)$. Therefore we should find $c$ using" + "According to the scaling hypothesis we should have $S ∝ \\frac{c}{6} log(ξ)$.\n", + "Therefore we should find $c$ using" ] }, { diff --git a/examples/Cache.toml b/examples/Cache.toml index 367b32a61..16e6368d8 100644 --- a/examples/Cache.toml +++ b/examples/Cache.toml @@ -2,15 +2,15 @@ "haldane" = "c09df36c3be5cd452bec564d22f6e2815474a9dab71dd5528013a3fb46b2f7c0" [dynamics] -"ising-dqpt" = "f90e6a301a8bc6634f80d23957843ed0e721ac0fd6bf8c4fd07a152dbe264563" -"xy-finiteT" = "315b668d2e9ab114cbba396f4dbeb28cb2f7e97db280a0844f36dc17df26d3bc" +"ising-dqpt" = "dec15a8c3187b1d0f92577e48e1ac2c719711414eb3e5e57bbb878f8d2621580" +"xy-finiteT" = "ab355f357560061f9aaba461e0aa3d7686929d7ba610ee0d91fb97f6708db55b" [statmech] -"hard-hexagon" = "bd5e82948c6b7511e6c9c05565053113ce40df31102d70b544d82b6595306238" +"hard-hexagon" = "6ef3f8f094c60d0562b209aa0541f30bccf0e593a095550d539b083b416ba30c" [groundstates] -"haldane-spt" = "c8fd3a8d406b9ff3ea9a34b596c5910d81e4eb710b665d7fa04e30f795a46086" -"hubbard" = "29e2469ac9307f1242bdfb76b97c6a2e04dc087f5d4b6c45c8b7a15df12ad36c" -"bose-hubbard" = "cf0d9a543e784dc6053e413780d19e1b59bf956dd4598752fdf664804dd68ce6" -"xxz-heisenberg" = "dae5f29dcad5fcfaffd12a7847916adb92c955276ce24166fd3f9c9534c50784" -"ising-cft" = "ebcae1e501347cb00a46d0889df1355707be77cf962f9ee0d16416393492529b" +"haldane-spt" = "f29ae05d4f2b6c60e0e9d283444acb6d22b106d0b7c92f360642cc0c1d5ba1c1" +"hubbard" = "6cd857ca7bf28c5524254cdc49d14ba02153f22d8437872c56e96baa4ea7950f" +"bose-hubbard" = "439cf4165079bd64b2e9420f7be8def0dac9beba72f083e04c3d48097c3c19bb" +"xxz-heisenberg" = "c6c200059f14bd05a8c4d7e65fe670231d22715ed500f1f5baf164993c15f840" +"ising-cft" = "387d4986e2925f1ee227f6c7fa088418e605aaab6a7d7e5f52037c739063ce06" diff --git a/examples/dynamics/ising-dqpt/main.jl b/examples/dynamics/ising-dqpt/main.jl index c2cc60a83..3c83366f3 100644 --- a/examples/dynamics/ising-dqpt/main.jl +++ b/examples/dynamics/ising-dqpt/main.jl @@ -1,8 +1,8 @@ md""" # DQPT in the Ising model -In this tutorial we will try to reproduce the results from -[this paper](https://arxiv.org/pdf/1206.2505.pdf). The needed packages are +In this tutorial we will try to reproduce the results from [this paper](https://arxiv.org/pdf/1206.2505.pdf). +The needed packages are """ using MPSKit, TensorKit @@ -11,17 +11,18 @@ using .ExampleModels md""" Dynamical quantum phase transitions (DQPT in short) are signatures of equilibrium phase transitions in a dynamical quantity - the Loschmidt echo. -This quantity is given by ``L(t) = \frac{-2}{N} ln(| < \psi(t) | \psi(0) > |) `` where ``N`` is the system size. +This quantity is given by ``L(t) = \frac{-2}{N} \ln |⟨ψ(t)|ψ(0)⟩|`` where ``N`` is the system size. One typically starts from a ground state and then quenches the Hamiltonian to a different point. -Non analycities in the Loschmidt echo are called 'dynamical quantum phase transitions'. +Non-analyticities in the Loschmidt echo are called 'dynamical quantum phase transitions'. In the mentioned paper they work with -``H(g) = - \sum^{N-1}_{i=1} \sigma^z_i \sigma^z_{i+1} + g \sum_{i=1}^N \sigma^x_i`` +``H(g) = - \sum^{N-1}_{i=1} σ^z_i σ^z_{i+1} + g \sum_{i=1}^N σ^x_i`` -and show that divergences occur when quenching across the critical point (g₀ → g₁) for ``t^*_n = t^*(n+\frac{1}{2})`` with ``t^* = \pi/e(g_1,k^*)``, ``cos(k^*) = (1+g_0 g_1) / (g_0 + g_1)``, `` e(g,k) = \sqrt{(g-cos k)^2 + sin^2 k}``. +and show that divergences occur when quenching across the critical point (g₀ → g₁) for ``t^*_n = t^*(n+\frac{1}{2})`` with ``t^* = π/e(g_1,k^*)``, ``cos(k^*) = (1+g_0 g_1) / (g_0 + g_1)``, `` e(g,k) = \sqrt{(g-cos k)^2 + sin^2 k}``. -The outline of the tutorial is as follows. We will pick ``g₀ = 0.5``, ``g₁ = 2.0``, and perform the time evolution at different system sizes and compare with the thermodynamic limit. +The outline of the tutorial is as follows. +We will pick ``g₀ = 0.5``, ``g₁ = 2.0``, and perform the time evolution at different system sizes and compare with the thermodynamic limit. For those ``g`` we expect non-analyticities to occur at ``t_n ≈ 2.35 (n + 1/2)``. First we construct the Hamiltonian in MPO form, and obtain the pre-quenched ground state: @@ -42,7 +43,8 @@ echo(ψ₀::FiniteMPS, ψₜ::FiniteMPS) = -2 * log(abs(dot(ψ₀, ψₜ))) / le @assert isapprox(echo(ψ₀, ψ₀), 0, atol = 1.0e-10) md""" -We will initially use a two-site TDVP scheme to dynamically increase the bond dimension while time evolving, and later on switch to a faster one-site scheme. A single timestep can be done using +We will initially use a two-site TDVP scheme to dynamically increase the bond dimension while time evolving, and later on switch to a faster one-site scheme. +A single timestep can be done using """ H₁ = transverse_field_ising(; L, g = -2.0) @@ -51,7 +53,8 @@ dt = 0.01 ψₜ, envs, info = timestep(ψₜ, H₁, 0, dt, TDVP2(; trunc = truncrank(20))); md""" -"envs" is a kind of cache object that keeps track of all environments in `ψ`. It is often advantageous to re-use the environment, so that MPSKit doesn't need to recalculate everything. +"envs" is a kind of cache object that keeps track of all environments in `ψ`. +It is often advantageous to re-use the environment, so that MPSKit doesn't need to recalculate everything. Putting it all together, we get """ @@ -90,7 +93,7 @@ H₀ = transverse_field_ising(; g = -0.5) ψ₀, _ = find_groundstate(ψ₀, H₀, VUMPS(; verbosity = 0)); md""" -The dot product of two infinite matrix product states scales as ``\alpha ^N`` where ``α`` is the dominant eigenvalue of the transfer matrix. +The dot product of two infinite matrix product states scales as ``α ^N`` where ``α`` is the dominant eigenvalue of the transfer matrix. It is this ``α`` that is returned when calling """ @@ -104,7 +107,8 @@ echo(ψ₀::InfiniteMPS, ψₜ::InfiniteMPS) = -2 * log(abs(dot(ψ₀, ψₜ))) @assert isapprox(echo(ψ₀, ψ₀), 0, atol = 1.0e-10) md""" -We make use of the `changebonds` machinery to grow the bond dimension. This can also be achieved through a two-site scheme. +We make use of the `changebonds` machinery to grow the bond dimension. +This can also be achieved through a two-site scheme. Multiple algorithms are available, but we will only focus on `OptimalExpand()`. Growing the bond dimension by ``5`` can be done by calling: """ diff --git a/examples/dynamics/xy-finiteT/main.jl b/examples/dynamics/xy-finiteT/main.jl index a54b68819..ea457a35f 100644 --- a/examples/dynamics/xy-finiteT/main.jl +++ b/examples/dynamics/xy-finiteT/main.jl @@ -24,7 +24,7 @@ As a result, many properties have analytical expressions that can be used to ver Here, we use [BenchmarkFreeFermions.jl](https://github.com/Qiaoyi-Li/BenchmarkFreeFermions.jl/) to compare our results. ```math - H = J \sum_{i=1}^{N} \left( \sigma^x_i \sigma^x_{i+1} + \sigma^y_i \sigma^y_{i+1} \right) + H = J \sum_{i=1}^{N} \left( σ^x_i σ^x_{i+1} + σ^y_i σ^y_{i+1} \right) ``` Here we will consider the anti-ferromagnetic ($J > 0$) chain, and restrict ourselves to $J = 1/2$. @@ -46,11 +46,10 @@ end md""" ## Diagonalization of the Hamiltonian -The Hamiltonian can be diagonalized through a Bogoliubov transformation, leading to the following expression for the ground state energy -The Hamiltonian can be diagonalized in terms of fermionic creation and annihilation operators, leading to the following expression in terms of [an incomplete elliptic integral of the second kind](https://en.wikipedia.org/wiki/Elliptic_integral). +The Hamiltonian can be diagonalized in terms of fermionic creation and annihilation operators, which yields an expression for the ground state energy in terms of [an incomplete elliptic integral of the second kind](https://en.wikipedia.org/wiki/Elliptic_integral). ```math - E_0 = -\frac{1}{\pi} \text{EllipticE}\left( \sqrt{1 - \gamma^2} \right) + E_0 = -\frac{1}{π} \text{EllipticE}\left( \sqrt{1 - γ^2} \right) ``` The derivation, via a Jordan-Wigner transformation to free fermions followed by a Bogoliubov rotation, can be found in [Lieb, Schultz & Mattis, Ann. Phys. 16, 407 (1961)](https://doi.org/10.1016/0003-4916(61)90115-4). @@ -105,39 +104,39 @@ To go beyond the ground state, we can extract several properties at finite tempe This is given by ```math - Z(\beta) = \text{Tr} \left( e^{-\beta H} \right) + Z(β) = \text{Tr} \left( e^{-β H} \right) ``` -where $\beta = 1 / T$ is the inverse temperature. +where $β = 1 / T$ is the inverse temperature. Given the partition function, we can compute the free energy as ```math - F(\beta) = -\frac{1}{\beta} \log Z(\beta) + F(β) = -\frac{1}{β} \log Z(β) ``` We can also compute observables using ```math - \langle O \rangle = \frac{1}{Z} \text{Tr} \left( O e^{-\beta H} \right) + ⟨O⟩ = \frac{1}{Z} \text{Tr} \left( O e^{-β H} \right) ``` In particular, we can compute the energy as ```math - U = \langle H \rangle = \frac{1}{Z} \text{Tr} \left( H e^{-\beta H} \right) + U = ⟨H⟩ = \frac{1}{Z} \text{Tr} \left( H e^{-β H} \right) ``` Finally, the specific heat can be computed as ```math - \chi = \frac{\partial U}{\partial T} = -\beta^2 \frac{\partial U}{\partial \beta} + χ = \frac{∂ U}{∂ T} = -β^2 \frac{∂ U}{∂ β} ``` Luckily, the partition function can be computed analytically for the XY model. The resulting expression is ```math - Z(\beta) = \prod_{k=1}^{N} \left( 1 + e^{-\beta \epsilon_k} \right)^{1/N} + Z(β) = \prod_{k=1}^{N} \left( 1 + e^{-β ε_k} \right)^{1/N} ``` -This expression follows from the same free-fermion diagonalization as the ground-state energy above: each single-particle mode $\epsilon_k$ is independently occupied or empty, giving the usual free-fermion partition function (see again [Lieb, Schultz & Mattis (1961)](https://doi.org/10.1016/0003-4916(61)90115-4)). +This expression follows from the same free-fermion diagonalization as the ground-state energy above: each single-particle mode $ε_k$ is independently occupied or empty, giving the usual free-fermion partition function (see again [Lieb, Schultz & Mattis (1961)](https://doi.org/10.1016/0003-4916(61)90115-4)). """ function partition_function(β::Number, J::Number, N::Number) @@ -160,10 +159,10 @@ md""" ### MPO approach We can numerically compute the partition function by explicitly computing the trace of the time-evolution operator. -To that end, we first need to build the time-evolution operator $e^{-\beta H}$, and then compute its trace. +To that end, we first need to build the time-evolution operator $e^{-β H}$, and then compute its trace. In order to build the time-evolution operator, we can repurpose the `make_time_mpo` function, which constructs the time-evolution operator for the ground state. -However, since we are interested in $e^{-\beta H}$, instead of $e^{-iH dt}$, we work with $dt = -i \beta$. +However, since we are interested in $e^{-β H}$, instead of $e^{-iH dt}$, we work with $dt = -i β$. In particular, we can approximate the exponential using a Taylor series through the `TaylorCluster` algorithm. """ @@ -203,13 +202,13 @@ end md""" Some observations: - The first order approximation fails to capture the behavior of the partition function. -- The higher order approximations are in good agreement with the analytical result, as long as $\beta$ is not too large. -- The computational cost of the approximations does not depend on $\beta$, but on the order of the approximation. +- The higher order approximations are in good agreement with the analytical result, as long as $β$ is not too large. +- The computational cost of the approximations does not depend on $β$, but on the order of the approximation. """ md""" To address the first point, we can have a look at the particular form of the time-evolution operator. -Here we see that for this particular Hamiltonian, all the terms with factors $d\tau$ are either zero or have trace zero. +Here we see that for this particular Hamiltonian, all the terms with factors $dτ$ are either zero or have trace zero. As a result, the trace of the time-evolution operator is equal to the trace of the identity, hence the result is always $2$. ```math @@ -220,9 +219,9 @@ H &= \begin{pmatrix} 0 & 0 & 1 \end{pmatrix} \\ -e^{\tau H} &= \begin{pmatrix} - 1 + \tau D + \frac{\tau^2}{2} D^2 & C + \frac{\tau}{2} (CD + DC) \\ - \tau (B + \frac{\tau}{2} (BD + DB)) & A + \frac{\tau^2}{2} (AD + DA + CB + BC) +e^{τ H} &= \begin{pmatrix} + 1 + τ D + \frac{τ^2}{2} D^2 & C + \frac{τ}{2} (CD + DC) \\ + τ (B + \frac{τ}{2} (BD + DB)) & A + \frac{τ^2}{2} (AD + DA + CB + BC) \end{pmatrix} \end{align} ``` @@ -254,20 +253,20 @@ p_taylor_diff = let end md""" -We can now clearly see that, somewhat unsurprisingly, the error increases the larger $\beta$ becomes. -Given that we are computing Taylor expansions around $\beta = 0$, this is to be expected. +We can now clearly see that, somewhat unsurprisingly, the error increases the larger $β$ becomes. +Given that we are computing Taylor expansions around $β = 0$, this is to be expected. However, there is a trick we can use to improve our results slightly. To that end, we first rewrite the partition function as ```math -Z(\beta) = - \text{Tr} \left( e^{-\beta H} \right) = - \text{Tr} \left( e^{-\beta H / 2} e^{-\beta H / 2} \right) = - \left\langle e^{-\beta H^\dagger / 2}, e^{-\beta H / 2} \right\rangle +Z(β) = + \text{Tr} \left( e^{-β H} \right) = + \text{Tr} \left( e^{-β H / 2} e^{-β H / 2} \right) = + \left\langle e^{-β H^† / 2}, e^{-β H / 2} \right\rangle ``` -In other words, we can compute the partition function at $\beta$ by computing the overlap of two states evolved for $\beta / 2$, as long as the Hamiltonian is Hermitian. -Otherwise, we could still use the same trick, but we would have to compute the evolved states twice, once for $H$ and once for $H^\dagger$. +In other words, we can compute the partition function at $β$ by computing the overlap of two states evolved for $β / 2$, as long as the Hamiltonian is Hermitian. +Otherwise, we could still use the same trick, but we would have to compute the evolved states twice, once for $H$ and once for $H^†$. """ @@ -306,15 +305,15 @@ end md""" ### MPO multiplication approach (linear) -While the Taylor series approach is useful, we can only push that so far, since we are always expanding around $\beta = 0$. -However, inspired by the trick we used to improve the results, we can use MPO multiplication techniques to compute partition functions at larger $\beta$. -In particular, we can implement the following algorithm to scan over a linear range of $\beta$ values. +While the Taylor series approach is useful, we can only push that so far, since we are always expanding around $β = 0$. +However, inspired by the trick we used to improve the results, we can use MPO multiplication techniques to compute partition functions at larger $β$. +In particular, we can implement the following algorithm to scan over a linear range of $β$ values. ```math \begin{align} -Z(2\beta) &= Z(\beta) \cdot Z(\beta) \\ -Z(3\beta) &= Z(\beta) \cdot Z(\beta) \cdot Z(\beta) = Z(\beta) \cdot Z(2\beta) \\ -\vdots &= \vdots +Z(2β) &= Z(β) · Z(β) \\ +Z(3β) &= Z(β) · Z(β) · Z(β) = Z(β) · Z(2β) \\ +⋮ &= ⋮ \end{align} ``` @@ -379,10 +378,10 @@ p_mpo_mul_diff = let end md""" -This approach clearly improves the accuracy of the results, indicating that we can indeed compute partition functions at larger $\beta$ values. -However, the computational cost of this approach (at fixed maximal bond dimension) is now linear in $\beta$, since we need to compute the partition function at each $\beta$ value. -Often, this is fine, since we are typically interested in a range of $\beta$ values, rather than a single one. -However, to really push this to larger $\beta$ values, this can still turn out to be a bottleneck. +This approach clearly improves the accuracy of the results, indicating that we can indeed compute partition functions at larger $β$ values. +However, the computational cost of this approach (at fixed maximal bond dimension) is now linear in $β$, since we need to compute the partition function at each $β$ value. +Often, this is fine, since we are typically interested in a range of $β$ values, rather than a single one. +However, to really push this to larger $β$ values, this can still turn out to be a bottleneck. We also have to be careful with the accuracy of our results. In particular, the error in the partition function will accumulate over the iterations, which might turn the results into garbage. @@ -390,25 +389,25 @@ Typically, the entanglement entropy of the density matrix is a good measure of t Apart from the bond dimension, we have two other parameters to tune: the accuracy of the initial density matrix, and the size of the step. The accuracy of the initial density matrix can be improved by increasing the order of the Taylor expansion, but this will result in a larger MPO bond dimension. -On the other hand, if we improve the accuracy of the initial density matrix, we could also increase the step size, which would reduce the number of iterations required to reach a certain $\beta$ value. +On the other hand, if we improve the accuracy of the initial density matrix, we could also increase the step size, which would reduce the number of iterations required to reach a certain $β$ value. Keeping these parameters in balance is necessary to obtain accurate results, and this might require some trial and error. """ md""" ### MPO multiplication approach (exponential) -If we wish to push the results to even larger $\beta$ values, we can note that taking linear steps in $\beta$ is not the only option. -To that end, we can use another trick to scan over an exponential range of $\beta$ values: [exponentiating by squaring](https://en.wikipedia.org/wiki/Exponentiation_by_squaring). -In particular, we note that computing $x^n$ for integer (large) $n$ can typically be done more efficiently than computing $x \cdot x \cdot \dots \cdot x$. +If we wish to push the results to even larger $β$ values, we can note that taking linear steps in $β$ is not the only option. +To that end, we can use another trick to scan over an exponential range of $β$ values: [exponentiating by squaring](https://en.wikipedia.org/wiki/Exponentiation_by_squaring). +In particular, we note that computing $x^n$ for integer (large) $n$ can typically be done more efficiently than computing $x · x · … · x$. To do so, we note that multiplication is associative, and regroup the factors in such a way that we can compute the result in a logarithmic number of steps. Here, we assume $n = 2^m$ for some integer $m$, and note that this could be generalized to any $n$ by decomposing $n$ into a sum of powers of $2$. Then, we can write ```math -x^n = x^{2^m} = x^{2^{m-1}} \cdot x^{2^{m-1}} = (x^{2^{m-2}} \cdot x^{2^{m-2}}) \cdot (x^{2^{m-2}} \cdot x^{2^{m-2}}) = \dots +x^n = x^{2^m} = x^{2^{m-1}} · x^{2^{m-1}} = (x^{2^{m-2}} · x^{2^{m-2}}) · (x^{2^{m-2}} · x^{2^{m-2}}) = … ``` -In other words, we can scan a range of exponentially increasing $\beta$ values by squaring the density matrix at each step. +In other words, we can scan a range of exponentially increasing $β$ values by squaring the density matrix at each step. """ βs_exp = 2.0 .^ (-3:3) @@ -459,7 +458,7 @@ p_mpo_mul_exp_diff = let end md""" -Clearly, the exponential approach allows us to reach larger $\beta$ values much quicker, but there is again a trade-off. +Clearly, the exponential approach allows us to reach larger $β$ values much quicker, but there is again a trade-off. Since the size of the steps are increasing, we need to be more careful with the accuracy of our approximations. !!! warning @@ -473,14 +472,14 @@ md""" Finally, we can also note that the partition function is characterized by the following differential equation: ```math -\frac{dZ}{d\beta} = -H \cdot Z -\implies Z(\beta) = e^{-\beta H} \cdot Z(0) +\frac{dZ}{dβ} = -H · Z +⟹ Z(β) = e^{-β H} · Z(0) ``` -In other words, we can compute the partition function at $\beta$ by evolving the partition function at $0$ for a time $d\tau = -i \beta$. +In other words, we can compute the partition function at $β$ by evolving the partition function at $0$ for a time $dτ = -i β$. The starting point for this approach could be either achieved through one of the techniques we have already discussed, but we can also start from the infinite temperature state directly. -In particular, this state is given by the identity MPO, and we can evolve this state to compute the partition function at any $\beta$ value. +In particular, this state is given by the identity MPO, and we can evolve this state to compute the partition function at any $β$ value. """ Z_tdvp = zeros(length(βs)) @@ -530,6 +529,6 @@ end md""" !!! note - We could further improve the accuracy of the TDVP approach by evolving with $(H \otimes \mathbb{1} + \mathbb{1} \otimes H^\dagger)$, rather than $H \otimes \mathbb{1}$ which is the current implementation. + We could further improve the accuracy of the TDVP approach by evolving with $(H ⊗ \mathbb{1} + \mathbb{1} ⊗ H^†)$, rather than $H ⊗ \mathbb{1}$ which is the current implementation. This is known to improve the stability of the positive semidefinite property of the density matrix, and could lead to more accurate results. """ diff --git a/examples/groundstates/bose-hubbard/main.jl b/examples/groundstates/bose-hubbard/main.jl index 51f7b67a6..a06049764 100644 --- a/examples/groundstates/bose-hubbard/main.jl +++ b/examples/groundstates/bose-hubbard/main.jl @@ -15,94 +15,75 @@ default(fontfamily = "Computer Modern", label = nothing, dpi = 100, framestyle = md""" # 1D Bose-Hubbard model -In this tutorial, we will explore the physics of the one-dimensional Bose–Hubbard model -using matrix product states. For the most part, we replicate the results presented in -[**Phys. Rev. B 105, -134502**](https://journals.aps.org/prb/abstract/10.1103/PhysRevB.105.134502), which can be -consulted for any statements in this tutorial that are not otherwise cited. The Hamiltonian -under study is defined as follows: +In this tutorial, we will explore the physics of the one-dimensional Bose–Hubbard model using matrix product states. +For the most part, we replicate the results presented in [**Phys. Rev. B 105, 134502**](https://journals.aps.org/prb/abstract/10.1103/PhysRevB.105.134502), which can be consulted for any statements in this tutorial that are not otherwise cited. +The Hamiltonian under study is defined as follows: -$$H = -t \sum_{i} (\hat{a}_i^{\dagger} \hat{a}_{i+1} + \hat{a}_{i+1}^{\dagger} \hat{a}_i) + \frac{U}{2} \sum_i \hat{n}_i(\hat{n}_i - 1) - \mu \sum_i \hat{n}_i$$ +$$H = -t \sum_{i} (â_i^{†} â_{i+1} + â_{i+1}^{†} â_i) + \frac{U}{2} \sum_i \hat{n}_i(\hat{n}_i - 1) - μ \sum_i \hat{n}_i$$ -where the bosonic creation and annihilation operators satisfy the canonical commutation -relations (CCR): +where the bosonic creation and annihilation operators satisfy the canonical commutation relations (CCR): -$$[\hat{a}_i, \hat{a}_j^{\dagger}] = \delta_{ij}.$$ +$$[â_i, â_j^{†}] = δ_{ij}.$$ -Each lattice site hosts a local Hilbert space corresponding to bosonic occupation states -$|n\rangle$, where $(n = 0, 1, 2, \ldots)$. Since this space is formally -infinite-dimensional, numerical simulations typically impose a truncation at some maximum -occupation number $(n_{\text{max}})$. Such a treatment is justified since it can be observed -that the simulation results quickly converge with the cutoff if the filling fraction is kept -sufficiently low. +Each lattice site hosts a local Hilbert space corresponding to bosonic occupation states $|n⟩$, where $(n = 0, 1, 2, …)$. +Since this space is formally infinite-dimensional, numerical simulations typically impose a truncation at some maximum occupation number $(n_{\text{max}})$. +Such a treatment is justified since it can be observed that the simulation results quickly converge with the cutoff if the filling fraction is kept sufficiently low. -Within this truncated space, the local creation and annihilation operators are represented -by finite-dimensional matrices. For example, with cutoff $n_{\text{max}}$, the annihilation -operator takes the form +Within this truncated space, the local creation and annihilation operators are represented by finite-dimensional matrices. +For example, with cutoff $n_{\text{max}}$, the annihilation operator takes the form ```math -\hat{a} = +â = \begin{bmatrix} -0 & \sqrt{1} & 0 & 0 & \cdots & 0 \\ -0 & 0 & \sqrt{2} & 0 & \cdots & 0 \\ -0 & 0 & 0 & \sqrt{3} & \cdots & 0 \\ -\vdots & & & \ddots & \ddots & \vdots \\ -0 & 0 & 0 & \cdots & 0 & \sqrt{n_{\text{max}}} \\ -0 & 0 & 0 & \cdots & 0 & 0 +0 & \sqrt{1} & 0 & 0 & ⋯ & 0 \\ +0 & 0 & \sqrt{2} & 0 & ⋯ & 0 \\ +0 & 0 & 0 & \sqrt{3} & ⋯ & 0 \\ +⋮ & & & ⋱ & ⋱ & ⋮ \\ +0 & 0 & 0 & ⋯ & 0 & \sqrt{n_{\text{max}}} \\ +0 & 0 & 0 & ⋯ & 0 & 0 \end{bmatrix} ``` and the creation operator is simply its Hermitian conjugate, ```math -\hat{a}^\dagger = +â^† = \begin{bmatrix} -0 & 0 & 0 & \cdots & 0 & 0 \\ -\sqrt{1} & 0 & 0 & \cdots & 0 & 0 \\ -0 & \sqrt{2} & 0 & \cdots & 0 & 0 \\ -\vdots & & \ddots & \ddots & & \vdots \\ -0 & 0 & 0 & \cdots & 0 & 0 \\ -0 & 0 & 0 & \cdots & \sqrt{n_{\text{max}}} & 0 +0 & 0 & 0 & ⋯ & 0 & 0 \\ +\sqrt{1} & 0 & 0 & ⋯ & 0 & 0 \\ +0 & \sqrt{2} & 0 & ⋯ & 0 & 0 \\ +⋮ & & ⋱ & ⋱ & & ⋮ \\ +0 & 0 & 0 & ⋯ & 0 & 0 \\ +0 & 0 & 0 & ⋯ & \sqrt{n_{\text{max}}} & 0 \end{bmatrix} ``` The number operator is then given by -$$\hat{n} = \hat{a}^\dagger \hat{a} = \mathrm{diag}(0, 1, 2, \ldots, n_{\text{max}}).$$ +$$\hat{n} = â^† â = \mathrm{diag}(0, 1, 2, …, n_{\text{max}}).$$ Before moving on, notice that the Hamiltonian is uniform and translationally invariant. -Typically, such models are studied on a finite chain of $N$ sites with periodic boundary -conditions, but this introduces finite-size effects that are rather annoying to deal with. -In contrast, the MPS framework allows us to work directly in the thermodynamic limit, -avoiding such artifacts. We will follow this line of exploration in this tutorial and leave -finite systems for another example. - -In order to work in the thermodynamic limit, we will have to create an -[`InfiniteMPS`](@ref). A complete specification of the MPS requires us to define the -physical space and the virtual space of the constituent tensors. At this point is it useful -to note that `MPSKit.jl` is powered by -[`TensorKit.jl`](https://github.com/QuantumKitHub/TensorKit.jl) under the hood and has some -very generic interfaces in order to allow imposing symmetries of all kinds. As a result, it -is sometimes necessary to be a bit more explicit about what we want to do in terms of the -vector spaces involved. In this case, we will not consider any symmetries and simply take -the most naive approach of working within the [`Trivial`](@extref TensorKitSectors.Trivial) -sector. The physical space is then `ℂ^(nmax+1)`, and the virtual space is `ℂ^D` where $D$ is -some integer chosen to be the bond dimension of the MPS, and `ℂ` is an alias for -[`ComplexSpace`](@extref TensorKit.ComplexSpace) (typeset as `\bbC`). As $D$ is increased, -one increases the amount of entanglement, i.e, quantum correlations that can be captured by -the state. +Typically, such models are studied on a finite chain of $N$ sites with periodic boundary conditions, but this introduces finite-size effects that are rather annoying to deal with. +In contrast, the MPS framework allows us to work directly in the thermodynamic limit, avoiding such artifacts. +We will follow this line of exploration in this tutorial and leave finite systems for another example. + +In order to work in the thermodynamic limit, we will have to create an [`InfiniteMPS`](@ref). +A complete specification of the MPS requires us to define the physical space and the virtual space of the constituent tensors. +At this point is it useful to note that `MPSKit.jl` is powered by [`TensorKit.jl`](https://github.com/QuantumKitHub/TensorKit.jl) under the hood and has some very generic interfaces in order to allow imposing symmetries of all kinds. +As a result, it is sometimes necessary to be a bit more explicit about what we want to do in terms of the vector spaces involved. +In this case, we will not consider any symmetries and simply take the most naive approach of working within the [`Trivial`](@extref TensorKitSectors.Trivial) sector. +The physical space is then `ℂ^(nmax+1)`, and the virtual space is `ℂ^D` where $D$ is some integer chosen to be the bond dimension of the MPS, and `ℂ` is an alias for [`ComplexSpace`](@extref TensorKit.ComplexSpace) (typeset as `\bbC`). +As $D$ is increased, one increases the amount of entanglement, i.e, quantum correlations that can be captured by the state. """ cutoff, D = 4, 5 initial_state = InfiniteMPS(ℂ^(cutoff + 1), ℂ^D) md""" -This simply initializes a tensor filled with random entries (check out the documentation for -other useful constructors). Next, we need the creation and annihilation operators. While we -could construct them from scratch, here we will use -[TensorKitTensors.jl](https://github.com/QuantumKitHub/TensorKitTensors.jl), which provides -predefined operators. In particular, `BosonOperators.b_min` creates the bosonic annihilation -operator. +This simply initializes a tensor filled with random entries (check out the documentation for other useful constructors). +Next, we need the creation and annihilation operators. +While we could construct them from scratch, here we will use [TensorKitTensors.jl](https://github.com/QuantumKitHub/TensorKitTensors.jl), which provides predefined operators. +In particular, `BosonOperators.b_min` creates the bosonic annihilation operator. """ a_op = b_min(cutoff = cutoff) # creates a bosonic annihilation operator without any symmetries @@ -111,30 +92,25 @@ display((a_op' * a_op)[]) md""" -The [] accessor lets us see the underlying array, and indeed the operators are exactly what -we require. The shared [model helpers](https://github.com/QuantumKitHub/MPSKit.jl/blob/main/docs/src/assets/models.jl) define -`bose_hubbard_model` using these operators, although we will construct our own variant -later on. +The [] accessor lets us see the underlying array, and indeed the operators are exactly what we require. +The shared [model helpers](https://github.com/QuantumKitHub/MPSKit.jl/blob/main/docs/src/assets/models.jl) define `bose_hubbard_model` using these operators, although we will construct our own variant later on. """ hamiltonian = bose_hubbard_model(; cutoff = cutoff, U = 1, mu = 0.5, t = 0.2) # Infinite chain by default; pass L = N for an open finite chain md""" -This has created the Hamiltonian operator as a [matrix product operator](@ref -InfiniteMPOHamiltonian) (MPO) which is a convenient form to use in conjunction with MPS. -Finally, the ground state optimization may be performed with either [`iDMRG`](@ref IDMRG) or -[`VUMPS`](@ref). Both should take similar arguments but it is known that VUMPS is typically -more efficient for these systems so we proceed with that. +This has created the Hamiltonian operator as a [matrix product operator](@ref InfiniteMPOHamiltonian) (MPO) which is a convenient form to use in conjunction with MPS. +Finally, the ground state optimization may be performed with either [`iDMRG`](@ref IDMRG) or [`VUMPS`](@ref). +Both should take similar arguments but it is known that VUMPS is typically more efficient for these systems so we proceed with that. """ ground_state, _, _ = find_groundstate(initial_state, hamiltonian, VUMPS(tol = 1.0e-6, verbosity = 2, maxiter = 200)) println("Energy: ", expectation_value(ground_state, hamiltonian)) md""" -This automatically runs the algorithm until a certain [error measure](@ref -MPSKit.calc_galerkin) falls below the specified tolerance or the maximum iterations is -reached. Let us wrap all this into a convenient function. +This automatically runs the algorithm until a certain [error measure](@ref MPSKit.calc_galerkin) falls below the specified tolerance or the maximum iterations is reached. +Let us wrap all this into a convenient function. """ function get_ground_state(mu, t, cutoff, D; kwargs...) @@ -149,19 +125,18 @@ ground_state = get_ground_state(0.5, 0.01, cutoff, D; tol = 1.0e-6, verbosity = md""" -Now that we have the state, we may compute observables using the [`expectation_value`](@ref) -function. It typically expects a `Pair`, `(i1, i2, .., ik) => op` where `op` is a -`TensorMap` or `InfiniteMPO` acting over `k` sites. In case of the Hamiltonian, it is not -necessary to specify the indices as it spans the whole lattice. We can now plot the -correlation function $\langle \hat{a}^{\dagger}_i \hat{a}_j\rangle$. +Now that we have the state, we may compute observables using the [`expectation_value`](@ref) function. +It typically expects a `Pair`, `(i1, i2, .., ik) => op` where `op` is a `TensorMap` or `InfiniteMPO` acting over `k` sites. +In case of the Hamiltonian, it is not necessary to specify the indices as it spans the whole lattice. +We can now plot the correlation function $⟨â^{†}_i â_j⟩$. """ plot(map(i -> real.(expectation_value(ground_state, (0, i) => a_op' ⊗ a_op)), 1:50), lw = 2, xlabel = "Site index", ylabel = "Correlation function", yscale = :log10) hline!([abs2(expectation_value(ground_state, (0,) => a_op))], ls = :dash, c = :black) md""" -We see that the correlations drop off exponentially, indicating the existence of a gapped -Mott insulating phase. Let us now shift our parameters to probe other phases. +We see that the correlations drop off exponentially, indicating the existence of a gapped Mott insulating phase. +Let us now shift our parameters to probe other phases. """ ground_state = get_ground_state(0.5, 0.2, cutoff, D; tol = 1.0e-6, verbosity = 2, maxiter = 500) @@ -170,20 +145,13 @@ plot(map(i -> real.(expectation_value(ground_state, (0, i) => a_op' ⊗ a_op)), hline!([abs2(expectation_value(ground_state, (0,) => a_op))], ls = :dash, c = :black) md""" -In this case, the correlation function drops off algebraically and eventually saturates as -$\lim_{i \to \infty}\langle\hat{a}_i^{\dagger} \hat{a}_j\rangle ≈ \langle \hat{a}_i^{\dagger}\rangle \langle \hat{a}_j \rangle = |\langle a_i \rangle|^2 \neq 0$. -This is a signature of long-range order and suggests the existence of a Bose-Einstein -condensate. However, this is a bit odd since at zero temperature, the Bose Hubbard model is -not expected to break any continuous symmetries ($U(1)$ in this case, corresponding to -particle number conservation) due to the -[Mermin-Wagner theorem](https://en.wikipedia.org/wiki/Mermin%E2%80%93Wagner_theorem). The -source of this contradiction lies in the fact that the true 1D superfluid ground state is an -extended critical phase exhibiting algebraic decay, however, a finite bond-dimension MPS can -only capture exponentially decaying correlations. As a result, the finite bond dimension -effectively introduces a length scale into the system in a similar manner as finite-size -effects. We can see this clearly by increasing the bond dimension. We also see that the -correlation length seems to depend algebraically on the bond dimension as expected from -finite-entanglement scaling arguments. +In this case, the correlation function drops off algebraically and eventually saturates as $\lim_{i → ∞}⟨â_i^{†} â_j⟩ ≈ ⟨â_i^{†}⟩ ⟨â_j⟩ = |⟨a_i⟩|^2 ≠ 0$. +This is a signature of long-range order and suggests the existence of a Bose-Einstein condensate. +However, this is a bit odd since at zero temperature, the Bose Hubbard model is not expected to break any continuous symmetries ($U(1)$ in this case, corresponding to particle number conservation) due to the [Mermin-Wagner theorem](https://en.wikipedia.org/wiki/Mermin%E2%80%93Wagner_theorem). +The source of this contradiction lies in the fact that the true 1D superfluid ground state is an extended critical phase exhibiting algebraic decay, however, a finite bond-dimension MPS can only capture exponentially decaying correlations. +As a result, the finite bond dimension effectively introduces a length scale into the system in a similar manner as finite-size effects. +We can see this clearly by increasing the bond dimension. +We also see that the correlation length seems to depend algebraically on the bond dimension as expected from finite-entanglement scaling arguments. """ cutoff = 4 @@ -230,50 +198,42 @@ scatter!( ) md""" -This shows that any finite bond dimension MPS necessarily breaks the symmetry of the system, -forming a Bose-Einstein condensate which introduces erroneous long-distance behaviour of -correlation functions. In case of finite bond dimension, it is thus reasonable to associate -the finite expectation value of the field operator to the 'quasicondensate' density of the -system which vanishes as $D \to \infty$. +This shows that any finite bond dimension MPS necessarily breaks the symmetry of the system, forming a Bose-Einstein condensate which introduces erroneous long-distance behaviour of correlation functions. +In case of finite bond dimension, it is thus reasonable to associate the finite expectation value of the field operator to the 'quasicondensate' density of the system which vanishes as $D → ∞$. """ quasicondensate_density = map(state -> abs2(expectation_value(state, (0,) => a_op)), states) md""" -We may now also visualize the momentum distribution function, which is obtained as the -Fourier transform of the single-particle density matrix. Starting from the definition of the -momentum occupation operators: +We may now also visualize the momentum distribution function, which is obtained as the Fourier transform of the single-particle density matrix. +Starting from the definition of the momentum occupation operators: ```math -\hat{a}_k = \frac{1}{\sqrt{L}} \sum_j e^{-ikj} \hat{a}_j, \qquad -\hat{a}_k^\dagger = \frac{1}{\sqrt{L}} \sum_{j'} e^{ikj'} \hat{a}_{j'}^\dagger +â_k = \frac{1}{\sqrt{L}} \sum_j e^{-ikj} â_j, \qquad +â_k^† = \frac{1}{\sqrt{L}} \sum_{j'} e^{ikj'} â_{j'}^† ``` the momentum distribution is ```math -\langle \hat{n}_k \rangle = \langle \hat{a}_k^\dagger \hat{a}_k \rangle -= \frac{1}{L} \sum_{j',j} e^{ik(j'-j)} \langle \hat{a}_{j'}^\dagger \hat{a}_j \rangle. +⟨\hat{n}_k⟩ = ⟨â_k^† â_k⟩ += \frac{1}{L} \sum_{j',j} e^{ik(j'-j)} ⟨â_{j'}^† â_j⟩. ``` -For a translationally invariant system, the correlation depends only on the distance -$r = j' - j$: +For a translationally invariant system, the correlation depends only on the distance $r = j' - j$: -$$\langle \hat{a}_{j'}^\dagger \hat{a}_j \rangle = C(r) = \langle \hat{a}_r^\dagger \hat{a}_0 \rangle.$$ +$$⟨â_{j'}^† â_j⟩ = C(r) = ⟨â_r^† â_0⟩.$$ Changing variables ($j' = j + r$) gives -$$\langle \hat{n}_k \rangle = \frac{1}{L} \sum_j \sum_r e^{ikr} C(r).$$ +$$⟨\hat{n}_k⟩ = \frac{1}{L} \sum_j \sum_r e^{ikr} C(r).$$ The sum over $j$ yields a factor of $L$, which cancels the prefactor, leading to -$$\langle \hat{n}_k \rangle = \sum_{r \in \mathbb{Z}} e^{ikr} \langle \hat{a}_r^\dagger \hat{a}_0 \rangle$$ +$$⟨\hat{n}_k⟩ = \sum_{r ∈ \mathbb{Z}} e^{ikr} ⟨â_r^† â_0⟩$$ -However, we know that a finite bond dimension MPS introduces a non-zero quasi-condensate -density which would give rise to an $\mathcal{O}(N)$ divergence in the momentum distribution -that is not indicative of the true physics of the system. Since we know this contribution -vanishes in the infinite bond dimension limit, we instead work with -$\langle \hat{a}_r^{\dagger} \hat{a}_0 \rangle_c = \langle \hat{a}_r^{\dagger} \hat{a}_0 \rangle - |\langle \hat{a}\rangle|^2$. +However, we know that a finite bond dimension MPS introduces a non-zero quasi-condensate density which would give rise to an $\mathcal{O}(N)$ divergence in the momentum distribution that is not indicative of the true physics of the system. +Since we know this contribution vanishes in the infinite bond dimension limit, we instead work with $⟨â_r^{†} â_0⟩_c = ⟨â_r^{†} â_0⟩ - |⟨â⟩|^2$. """ ks = range(-0.05, 0.15, 500) @@ -290,38 +250,23 @@ momentum_distribution = vcat(momentum_distribution...)' plot(ks, momentum_distribution, lab = "D = " .* string.(permutedims(Ds)), lw = 1.5, xlabel = "Momentum k", ylabel = L"\langle n_k \rangle", ylim = [0, 50]) md""" -We see that the density seems to peak around $k=0$, this time seemingly becoming more -prominent as $D \to \infty$ which seems to suggest again that there is a condensate. -However, going by the Penrose-Onsager criterion, the existence of a condensate can be -quantified by requiring the leading eigenvalue of the single particle density matrix (i.e, -$\langle \hat{n}_{k=0}\rangle = \sum_j \langle \hat{a}_j^{\dagger} \hat{a}_0\rangle$) to -diverge as $O(N)$ in the thermodynamic limit. In this case, since the correlations decay as -a power law, there is naturally a divergence at low momenta. But this does not imply the -existence of a condensate since the order of divergence is much weaker. However, this does -indicate the remnants of some kind of condensation in the 1D model despite the quantum -fluctuations, leading to the practical utility of defining the concept of a quasicondensate -where there is still a notion of phase coherence over short distances. - -What this means for us is that, as far as MPS simulations go, we may still utilize the -quasicondensate density as an effective order parameter, although it will be less robust as -the bond dimension is increased. Alternatively, we realize that the true phase is -characterized as being a superfluid (a concept distinct from Bose-Einstein condensation) and -can be identified by a non-zero value of the superfluid stiffness (also known as helicity -modulus, $\Upsilon$) as defined by Leggett. Upon applying a phase twist $\Phi$ to the -boundaries of the system, a superfluid phase would suffer an increase in energy whereas an -insulating phase would not. In the thermodynamic limit, one could show that the boundary -conditions may be considered as periodic and instead uniformly distribute the phase across -the chain as $\hat{a}_i \to \hat{a}_i e^{i\Phi/L}$. Concretely, in the limit of -$\Phi/L \to 0$, we have: - -$$\frac{E[\Phi] - E[0]}{L} \approx \frac{1}{2} \Upsilon(L) \bigg (\frac{\Phi}{L}\bigg)^2 + \cdots$$ - -In order to find the ground state under these twisted boundary conditions, we must construct -our own variant of the Bose-Hubbard Hamiltonian. Typically you would want to take a peek at -the -[model helper source](https://github.com/QuantumKitHub/MPSKit.jl/blob/main/docs/src/assets/models.jl) to see how these models are defined and tweak it as per your needs. -Here we see that applying twisted boundary conditions is equivalent to adding a prefactor of -$e^{\pm i\phi}$ in front of the hopping amplitudes. +We see that the density seems to peak around $k=0$, this time seemingly becoming more prominent as $D → ∞$ which seems to suggest again that there is a condensate. +However, going by the Penrose-Onsager criterion, the existence of a condensate can be quantified by requiring the leading eigenvalue of the single particle density matrix (i.e, $⟨\hat{n}_{k=0}⟩ = \sum_j ⟨â_j^{†} â_0⟩$) to diverge as $O(N)$ in the thermodynamic limit. +In this case, since the correlations decay as a power law, there is naturally a divergence at low momenta. +But this does not imply the existence of a condensate since the order of divergence is much weaker. +However, this does indicate the remnants of some kind of condensation in the 1D model despite the quantum fluctuations, leading to the practical utility of defining the concept of a quasicondensate where there is still a notion of phase coherence over short distances. + +What this means for us is that, as far as MPS simulations go, we may still utilize the quasicondensate density as an effective order parameter, although it will be less robust as the bond dimension is increased. +Alternatively, we realize that the true phase is characterized as being a superfluid (a concept distinct from Bose-Einstein condensation) and can be identified by a non-zero value of the superfluid stiffness (also known as helicity modulus, $Υ$) as defined by Leggett. +Upon applying a phase twist $Φ$ to the boundaries of the system, a superfluid phase would suffer an increase in energy whereas an insulating phase would not. +In the thermodynamic limit, one could show that the boundary conditions may be considered as periodic and instead uniformly distribute the phase across the chain as $â_i → â_i e^{iΦ/L}$. +Concretely, in the limit of $Φ/L → 0$, we have: + +$$\frac{E[Φ] - E[0]}{L} ≈ \frac{1}{2} Υ(L) \bigg (\frac{Φ}{L}\bigg)^2 + ⋯$$ + +In order to find the ground state under these twisted boundary conditions, we must construct our own variant of the Bose-Hubbard Hamiltonian. +Typically you would want to take a peek at the [model helper source](https://github.com/QuantumKitHub/MPSKit.jl/blob/main/docs/src/assets/models.jl) to see how these models are defined and tweak it as per your needs. +Here we see that applying twisted boundary conditions is equivalent to adding a prefactor of $e^{± iφ}$ in front of the hopping amplitudes. """ function bose_hubbard_model_twisted_bc( @@ -363,14 +308,9 @@ superfluid_stiffness_profile(0.2, 0.3, 5, 4) # superfluid superfluid_stiffness_profile(0.01, 0.3, 5, 4) # mott insulator md""" -Now that we know what phases to expect, we can plot the phase diagram by scanning over a -range of parameters. In general, one could do better by performing a bisection algorithm for -each chemical potential to determine the value of the hopping parameter at the transition -point, however the 1D Bose-Hubbard model may have two transition points at the same chemical -potential which makes this a bit cumbersome to implement robustly. Furthermore, we stick to -using the quasi-condensate density as an order parameter since extracting the superfluid -density accurately requires a more robust scheme to compute second derivatives which takes -us away from the focus of this tutorial. +Now that we know what phases to expect, we can plot the phase diagram by scanning over a range of parameters. +In general, one could do better by performing a bisection algorithm for each chemical potential to determine the value of the hopping parameter at the transition point, however the 1D Bose-Hubbard model may have two transition points at the same chemical potential which makes this a bit cumbersome to implement robustly. +Furthermore, we stick to using the quasi-condensate density as an order parameter since extracting the superfluid density accurately requires a more robust scheme to compute second derivatives which takes us away from the focus of this tutorial. """ cutoff, D = 4, 10 @@ -390,9 +330,6 @@ end heatmap(ts, mus, order_parameters, xlabel = L"t/U", ylabel = L"\mu/U", title = L"\langle \hat{a}_i \rangle") md""" -Although the bond dimension here is quite low, we already see the deformation of the Mott -insulator lobes to give way to the well known BKT transition that happens at commensurate -density. One can go further and estimate the critical exponents using finite-entanglement -scaling procedures on the correlation functions, but these may now be performed with ease -using what we have learnt in this tutorial. +Although the bond dimension here is quite low, we already see the deformation of the Mott insulator lobes to give way to the well known BKT transition that happens at commensurate density. +One can go further and estimate the critical exponents using finite-entanglement scaling procedures on the correlation functions, but these may now be performed with ease using what we have learnt in this tutorial. """ diff --git a/examples/groundstates/haldane-spt/main.jl b/examples/groundstates/haldane-spt/main.jl index 2fd4b7294..d566a35f5 100644 --- a/examples/groundstates/haldane-spt/main.jl +++ b/examples/groundstates/haldane-spt/main.jl @@ -1,31 +1,24 @@ md""" # Spin 1 Heisenberg model -The quantum Heisenberg model is a model often used in the study of critical points and phase -transitions of magnetic systems, in which the spins are treated quantum mechanically. It -models magnetic interactions between neighbouring spins through the so-called Heisenberg -interaction term, which causes the spins to either align ($J > 0$) or anti-align ($J < 0$), -thus modeling a (anti-) ferromagnetic system. Here, we will focus on the case of $S = 1$, -with anti-ferromagnetic interactions. +The quantum Heisenberg model is a model often used in the study of critical points and phase transitions of magnetic systems, in which the spins are treated quantum mechanically. +It models magnetic interactions between neighbouring spins through the so-called Heisenberg interaction term, which causes the spins to either align ($J > 0$) or anti-align ($J < 0$), thus modeling a (anti-) ferromagnetic system. +Here, we will focus on the case of $S = 1$, with anti-ferromagnetic interactions. ```math -H = -J \sum_{\langle i, j \rangle} \vec{S}_i \cdot \vec{S}_j +H = -J \sum_{⟨i, j⟩} \vec{S}_i · \vec{S}_j ``` -Importantly, the Hamiltonian of the isotropic model is invariant under $SU(2)$ rotations, -which can be exploited to increase efficiency, as well as interpretability of the MPS -simulations. To see this, we can make use of the following derivation for the interaction -term: +Importantly, the Hamiltonian of the isotropic model is invariant under $SU(2)$ rotations, which can be exploited to increase efficiency, as well as interpretability of the MPS simulations. +To see this, we can make use of the following derivation for the interaction term: ```math -(\vec{S}_i + \vec{S}_j)^2 = \vec{S}_i^2 + 2 \vec{S}_i \cdot \vec{S}_j + \vec{S}_j^2 -\implies \vec{S}_i \cdot \vec{S}_j = \frac{1}{2} \left( (\vec{S}_i + \vec{S}_j)^2 - \vec{S}_i^2 - \vec{S}_j^2 \right) +(\vec{S}_i + \vec{S}_j)^2 = \vec{S}_i^2 + 2 \vec{S}_i · \vec{S}_j + \vec{S}_j^2 +⟹ \vec{S}_i · \vec{S}_j = \frac{1}{2} \left( (\vec{S}_i + \vec{S}_j)^2 - \vec{S}_i^2 - \vec{S}_j^2 \right) ``` -Here, we recognize the quadratic -[Casimir element](https://en.wikipedia.org/wiki/Casimir_element) $\vec{S}^2$, which commutes -with the elements of $SU(2)$. Consequently, the Hamiltonian also commutes with all elements -of $SU(2)$. +Here, we recognize the quadratic [Casimir element](https://en.wikipedia.org/wiki/Casimir_element) $\vec{S}^2$, which commutes with the elements of $SU(2)$. +Consequently, the Hamiltonian also commutes with all elements of $SU(2)$. """ using TensorKit @@ -48,33 +41,27 @@ H = heisenberg_hamiltonian() md""" ## Symmetry-Protected Topological Order -The representations of $SU(2)$ possess additional structure, known as a -$\mathbb{Z}_2$-grading. This means, that they can be partitioned in integer $(+)$ and -half-integer $(-)$ spins, and the fusion rules will respect this grading. In other words, -the following table holds: +The representations of $SU(2)$ possess additional structure, known as a $\mathbb{Z}_2$-grading. +This means, that they can be partitioned in integer $(+)$ and half-integer $(-)$ spins, and the fusion rules will respect this grading. +In other words, the following table holds: -| $s_1$ | $s_2$ | $s_1 \otimes s_2$ | +| $s_1$ | $s_2$ | $s_1 ⊗ s_2$ | | --- | --- | --- | | $+$ | $+$ | $+$ | | $+$ | $-$ | $-$ | | $-$ | $+$ | $-$ | | $-$ | $-$ | $+$ | -This has important consequences for the MPS representation of an $SU(2)$-symmetric state. If -the physical spin consists of only integer representations, this means that the left and -right virtual spaces of the MPS tensor belong to the same grading, i.e. are either both -integer, or both half-integer. Thus, naively constructing a MPS tensor which contains spins -from both classes, will necessarily be the direct sum of the two, which yields a -non-injective MPS. +This has important consequences for the MPS representation of an $SU(2)$-symmetric state. +If the physical spin consists of only integer representations, this means that the left and right virtual spaces of the MPS tensor belong to the same grading, i.e. are either both integer, or both half-integer. +Thus, naively constructing a MPS tensor which contains spins from both classes, will necessarily be the direct sum of the two, which yields a non-injective MPS. ```math -\ket{\psi} = \ket{\psi_+} \oplus \ket{\psi_-} +|ψ⟩ = |ψ_+⟩ ⊕ |ψ_-⟩ ``` -Because of this direct sum, many of the usual MPS algorithms will fail, as they typically -cannot deal with non-injective MPS. The resulting MPS will have multiple values of the -transfer matrix spectrum that have a magnitude close to 1, which is a clear sign of a -non-injective MPS. +Because of this direct sum, many of the usual MPS algorithms will fail, as they typically cannot deal with non-injective MPS. +The resulting MPS will have multiple values of the transfer matrix spectrum that have a magnitude close to 1, which is a clear sign of a non-injective MPS. """ ℋ = SU2Space(1 => 1) @@ -85,21 +72,15 @@ sectors = SU2Irrep[0, 1 // 2, 1, 3 // 2] transferplot(ψ; sectors, title = "Transfer matrix spectrum", legend = :outertop) md""" -Nevertheless, using the symmetry, this can be remedied rather easily, by imposing the -ground state to belong to a single class, and comparing the results. We can readily obtain 3 -different criteria for determining the SPT phase of the ground state. +Nevertheless, using the symmetry, this can be remedied rather easily, by imposing the ground state to belong to a single class, and comparing the results. +We can readily obtain 3 different criteria for determining the SPT phase of the ground state. -Firstly, we can compare variational energies for states of similar bond dimensions. As we -expect the state of the wrong SPT phase to have to expend some of its expressiveness in -correcting the SPT, it should have a harder time reaching lower energies. +Firstly, we can compare variational energies for states of similar bond dimensions. +As we expect the state of the wrong SPT phase to have to expend some of its expressiveness in correcting the SPT, it should have a harder time reaching lower energies. -Secondly, when inspecting the spectrum of the transfer matrix, we should see that the wrong -SPT phase has a dominant value that is not in the trivial sector, which leads to a -non-injective MPS. +Secondly, when inspecting the spectrum of the transfer matrix, we should see that the wrong SPT phase has a dominant value that is not in the trivial sector, which leads to a non-injective MPS. -Finally, the entanglement spectrum of the wrong SPT phase will show degeneracies of all -singular values, which can again be attributed to an attempt to mimic the spectrum of the -right SPT phase. +Finally, the entanglement spectrum of the wrong SPT phase will show degeneracies of all singular values, which can again be attributed to an attempt to mimic the spectrum of the right SPT phase. """ V_plus = SU2Space(0 => 10, 1 => 5, 2 => 3) @@ -134,21 +115,18 @@ plot(entanglementp_plus, entanglementp_minus; layout = (1, 2), size = (800, 400) md""" -As we can see, the ground state can be found in the non-trivial SPT phase, $\ket{\psi_-}$. We -can obtain an intuitive understanding of $\ket{\psi_+}$ by considering the following -diagram. If we denote the MPS tensors that make up the ground state as $A_-$, we can -construct a state in the trivial SPT phase that approximates the ground state as follows: +As we can see, the ground state can be found in the non-trivial SPT phase, $|ψ_-⟩$. +We can obtain an intuitive understanding of $|ψ_+⟩$ by considering the following diagram. +If we denote the MPS tensors that make up the ground state as $A_-$, we can construct a state in the trivial SPT phase that approximates the ground state as follows: ```@raw html SPT tensors ``` -In other words, we can factorize a purely virtual isomorphism of $S = 1/2$ in order to -obtain the ground state. This then also explains the degeneracies in the entanglement -spectrum as well as in the transfer matrix spectrum. Finally, we can further confirm this -intuition by looking at the entanglement entropy of the ground state. As we can see, the -entanglement entropy of the state in the wrong SPT phase is exactly $log(2)$ higher than the -one in the right SPT phase, which is exactly what we would expect from the diagram above. +In other words, we can factorize a purely virtual isomorphism of $S = 1/2$ in order to obtain the ground state. +This then also explains the degeneracies in the entanglement spectrum as well as in the transfer matrix spectrum. +Finally, we can further confirm this intuition by looking at the entanglement entropy of the ground state. +As we can see, the entanglement entropy of the state in the wrong SPT phase is exactly $log(2)$ higher than the one in the right SPT phase, which is exactly what we would expect from the diagram above. """ S_minus = sum(real, entropy(ψ_minus)) diff --git a/examples/groundstates/hubbard/main.jl b/examples/groundstates/hubbard/main.jl index bd6e1c5c8..ef0f9f398 100644 --- a/examples/groundstates/hubbard/main.jl +++ b/examples/groundstates/hubbard/main.jl @@ -4,8 +4,7 @@ md""" # Hubbard chain at half filling The Hubbard model is a model of interacting fermions on a lattice, which is often used as a somewhat realistic model for electrons in a solid. -The Hamiltonian consists of two terms that describe competing forces of each electron: -a kinetic term that allows electrons to hop between neighboring sites, and a potential term reflecting on-site interactions between electrons. +The Hamiltonian consists of two terms that describe competing forces of each electron: a kinetic term that allows electrons to hop between neighboring sites, and a potential term reflecting on-site interactions between electrons. Often, a third term is included which serves as a chemical potential to control the number of electrons in the system. ```math @@ -20,7 +19,7 @@ This results in the following Hamiltonian: H = - ∑_{⟨i, j⟩, σ} c^{†}_{i,σ} c_{j,σ} + U / 4 ∑_i (1 - 2 n_{i,↑}) (1 - 2 n_{i,↓}) - μ ∑_{i,σ} n_{i,σ} ``` -Finally, setting `\mu = 0` and defining `u = U / 4` we obtain the Hubbard model at half-filling. +Finally, setting `μ = 0` and defining `u = U / 4` we obtain the Hubbard model at half-filling. ```math H = - ∑_{⟨i, j⟩, σ} c^{†}_{i,σ} c_{j,σ} + u ∑_i (1 - 2 n_{i,↑}) (1 - 2 n_{i,↓}) @@ -141,7 +140,7 @@ The elementary excitations are known as spinons and holons, which are domain wal The fact that the spin and charge sectors are separate is a phenomenon known as spin-charge separation. The domain walls can be constructed by noticing that there are two equivalent groundstates, which differ by a translation over a single site. -In other words, the groundstates are ``\psi_{AB}`` and ``\psi_{BA}``, where ``A`` and ``B`` are the two sites. +In other words, the groundstates are ``ψ_{AB}`` and ``ψ_{BA}``, where ``A`` and ``B`` are the two sites. These excitations can be constructed as follows: """ diff --git a/examples/groundstates/ising-cft/main.jl b/examples/groundstates/ising-cft/main.jl index 25b65bef4..b2acd743c 100644 --- a/examples/groundstates/ising-cft/main.jl +++ b/examples/groundstates/ising-cft/main.jl @@ -1,9 +1,8 @@ md""" # The Ising CFT spectrum -This tutorial is meant to show the finite size CFT spectrum for the quantum Ising model. We -do this by first employing an exact diagonalization technique, and then extending the -analysis to larger system sizes through the use of MPS techniques. +This tutorial is meant to show the finite size CFT spectrum for the quantum Ising model. +We do this by first employing an exact diagonalization technique, and then extending the analysis to larger system sizes through the use of MPS techniques. """ using MPSKit, TensorKit, Plots, KrylovKit @@ -12,8 +11,7 @@ using .ExampleModels using LinearAlgebra: eigvals, diagm, Hermitian md""" -The Hamiltonian is defined on a finite lattice with periodic boundary conditions, -which can be implemented as follows: +The Hamiltonian is defined on a finite lattice with periodic boundary conditions, which can be implemented as follows: """ L = 12 @@ -22,11 +20,8 @@ H = periodic_boundary_conditions(transverse_field_ising(), L) md""" ## Exact diagonalisation -In MPSKit, there is support for exact diagonalisation by leveraging the fact that applying -the Hamiltonian to an untruncated MPS will result in an effective Hamiltonian on the center -site which implements the action of the entire Hamiltonian. Thus, optimizing the middle -tensor is equivalent to optimixing a state in the entire Hilbert space, as all other tensors -are just unitary matrices that mix the basis. +In MPSKit, there is support for exact diagonalisation by leveraging the fact that applying the Hamiltonian to an untruncated MPS will result in an effective Hamiltonian on the center site which implements the action of the entire Hamiltonian. +Thus, optimizing the middle tensor is equivalent to optimizing a state in the entire Hilbert space, as all other tensors are just unitary matrices that mix the basis. """ energies, states = exact_diagonalization(H; num = 18, alg = Lanczos(; krylovdim = 200)); @@ -44,9 +39,8 @@ md""" md""" ## Extracting momentum -Given a state, it is possible to assign a momentum label -through the use of the translation operator. This operator can be defined in MPO language -either diagramatically as +Given a state, it is possible to assign a momentum label through the use of the translation operator. +This operator can be defined in MPO language either diagrammatically as ```@raw html translation operator @@ -62,13 +56,11 @@ function O_shift(L) end md""" -We can then calculate the momentum of the ground state as the expectation value of this -operator. However, there is a subtlety because of the degeneracies in the energy -eigenvalues. The eigensolver will find an orthonormal basis within each energy subspace, but -this basis is not necessarily a basis of eigenstates of the translation operator. In order -to fix this, we diagonalize the translation operator within each energy subspace. -The resulting energy levels have one-to-one correspondence to the operators in CFT, where -the momentum is related to their conformal spin as $P_n = \frac{2\pi}{L}S_n$. +We can then calculate the momentum of the ground state as the expectation value of this operator. +However, there is a subtlety because of the degeneracies in the energy eigenvalues. +The eigensolver will find an orthonormal basis within each energy subspace, but this basis is not necessarily a basis of eigenstates of the translation operator. +In order to fix this, we diagonalize the translation operator within each energy subspace. +The resulting energy levels have one-to-one correspondence to the operators in CFT, where the momentum is related to their conformal spin as $P_n = \frac{2π}{L}S_n$. """ function fix_degeneracies(basis) @@ -95,10 +87,8 @@ append!(momenta, fix_degeneracies(states[13:16])) append!(momenta, fix_degeneracies(states[17:18])) md""" -We can compute the scaling dimensions $\Delta_n$ of the operators in the CFT from the -energy gap of the corresponding excitations as $E_n - E_0 = \frac{2\pi v}{L} \Delta_n$, -where $v = 2$. If we plot these scaling dimensions against the conformal spin $S_n$ from -above, we retrieve the familiar spectrum of the Ising CFT. +We can compute the scaling dimensions $Δ_n$ of the operators in the CFT from the energy gap of the corresponding excitations as $E_n - E_0 = \frac{2π v}{L} Δ_n$, where $v = 2$. +If we plot these scaling dimensions against the conformal spin $S_n$ from above, we retrieve the familiar spectrum of the Ising CFT. """ v = 2.0 @@ -117,8 +107,7 @@ p md""" ## Finite bond dimension -If we limit the maximum bond dimension of the MPS, we get an approximate solution, but we -can reach higher system sizes. +If we limit the maximum bond dimension of the MPS, we get an approximate solution, but we can reach higher system sizes. """ L_mps = 20 @@ -127,9 +116,8 @@ D = 64 ψ, envs, info = find_groundstate(FiniteMPS(L_mps, ℂ^2, ℂ^D), H_mps, DMRG(; verbosity = 0)); md""" -Excitations on top of the ground state can be found through the use of the quasiparticle -ansatz. This returns quasiparticle states, which can be converted to regular `FiniteMPS` -objects. +Excitations on top of the ground state can be found through the use of the quasiparticle ansatz. +This returns quasiparticle states, which can be converted to regular `FiniteMPS` objects. """ E_ex, qps = excitations(H_mps, QuasiparticleAnsatz(), ψ, envs; num = 18) diff --git a/examples/groundstates/xxz-heisenberg/main.jl b/examples/groundstates/xxz-heisenberg/main.jl index 51cbfd954..1ca9716c5 100644 --- a/examples/groundstates/xxz-heisenberg/main.jl +++ b/examples/groundstates/xxz-heisenberg/main.jl @@ -25,7 +25,8 @@ Working directly in the thermodynamic limit, this is achieved as follows: H = heisenberg_XXX(; spin = 1 // 2) md""" -We then need an initial state, which we shall later optimize. In this example we work directly in the thermodynamic limit. +We then need an initial state, which we shall later optimize. +In this example we work directly in the thermodynamic limit. """ state = InfiniteMPS(2, 20) diff --git a/examples/make.jl b/examples/make.jl index 4dec5fce6..4cbad9ee5 100644 --- a/examples/make.jl +++ b/examples/make.jl @@ -92,6 +92,58 @@ end normalize_log_locations(content::AbstractString) = replace(content, r"(@ [A-Za-z_][A-Za-z0-9_]* )\S*?/(src/\S*\.jl:\d+)" => s"\1\2") +# A `using` block emits precompilation progress whenever the pipeline happens to run +# against a cold depot, e.g. +# +# Precompiling packages... +# 14306.2 ms ✓ MPSKitModels +# 1 dependency successfully precompiled in 16 seconds. 74 already precompiled. +# +# That says nothing about the example and its timings differ per machine, so drop any +# captured-output block whose every line is precompilation progress. Blocks that mix +# precompilation with real output are left alone. +function strip_precompilation_output(content::AbstractString) + is_precompilation_line(line) = !isnothing( + match( + r"""^\s*(?: + Precompiling\ .* # the header + | [\d.]+\s*ms\s*[✓✗].* # per-package timings + | \d+\ dependenc(?:y|ies)\ successfully\ precompiled.* + | \d+\ already\ precompiled\..* + )?\s*$"""x, line + ) + ) + + lines = collect(eachsplit(content, '\n')) + kept = similar(lines, 0) + i = firstindex(lines) + while i <= lastindex(lines) + # Walk fenced blocks as blocks. Both ````julia (code) and bare ```` (captured + # output) open one and a bare ```` closes it, so a closing fence must never be + # mistaken for the start of the next block. + if startswith(lines[i], "````") + close = findnext(l -> rstrip(l) == "````", lines, i + 1) + if !isnothing(close) + body = @view lines[(i + 1):(close - 1)] + if rstrip(lines[i]) == "````" && + any(contains("Precompiling"), body) && + all(is_precompilation_line, body) + # drop the block, and the blank line that followed it + i = close + 1 + i <= lastindex(lines) && isempty(rstrip(lines[i])) && (i += 1) + continue + end + append!(kept, @view lines[i:close]) + i = close + 1 + continue + end + end + push!(kept, lines[i]) + i += 1 + end + return join(kept, '\n') +end + function build_example(root, name) source_dir = joinpath(@__DIR__, "..", "examples", root, name) source_file = joinpath(source_dir, "main.jl") @@ -101,8 +153,8 @@ function build_example(root, name) Literate.markdown( source_file, target_dir; execute = true, name = "index", preprocess = str -> attach_notebook_badge(root, name, inline_models(str; hide = true)), - postprocess = content -> normalize_log_locations( - externalize_figures(content, target_dir) + postprocess = content -> strip_precompilation_output( + normalize_log_locations(externalize_figures(content, target_dir)) ), mdstrings = true, nbviewer_root_url = "https://nbviewer.jupyter.org/github/QuantumKitHub/MPSKit.jl/blob/gh-pages/dev", diff --git a/examples/statmech/hard-hexagon/main.jl b/examples/statmech/hard-hexagon/main.jl index 864ad1785..5972d088f 100644 --- a/examples/statmech/hard-hexagon/main.jl +++ b/examples/statmech/hard-hexagon/main.jl @@ -64,7 +64,8 @@ This can be exploited to formulate a scaling hypothesis [pollmann2009](@cite), w First we need to know the entropy and correlation length at several different bond dimensions. Our approach will be to re-use the previous approximated dominant eigenvector, and then expanding its bond dimension and re-running VUMPS. -According to the scaling hypothesis we should have ``S ∝ \frac{c}{6} log(ξ)``. Therefore we should find ``c`` using +According to the scaling hypothesis we should have ``S ∝ \frac{c}{6} log(ξ)``. +Therefore we should find ``c`` using """ function scaling_simulations( From 767b372558f90690c15fac1c9460c27c6a7c6008 Mon Sep 17 00:00:00 2001 From: lkdvos Date: Mon, 12 Oct 2026 18:11:26 -0400 Subject: [PATCH 3/5] docs(examples): regenerate example pages after rebasing onto main Rebasing onto main brought in the shared `models.jl` helpers and the reworked example sources, so the committed pages no longer matched their scripts. Rerun `examples/make.jl` for every example and refresh `Cache.toml`. Co-Authored-By: Claude Opus 5.5 --- .../src/examples/dynamics/ising-dqpt/index.md | 23 +-- .../examples/dynamics/ising-dqpt/main.ipynb | 132 +++++++++++++-- .../examples/dynamics/xy-finiteT/figure-6.png | Bin 42270 -> 42278 bytes .../src/examples/dynamics/xy-finiteT/index.md | 14 +- .../examples/dynamics/xy-finiteT/main.ipynb | 123 ++++++++++++-- .../src/examples/excitations/haldane/index.md | 24 +-- .../groundstates/bose-hubbard/figure-1.png | Bin 16503 -> 16816 bytes .../groundstates/bose-hubbard/figure-3.png | Bin 39306 -> 39338 bytes .../groundstates/bose-hubbard/figure-4.png | Bin 36945 -> 36926 bytes .../groundstates/bose-hubbard/figure-5.png | Bin 32117 -> 36102 bytes .../groundstates/bose-hubbard/figure-6.png | Bin 15424 -> 15426 bytes .../groundstates/bose-hubbard/index.md | 64 ++++---- .../groundstates/bose-hubbard/main.ipynb | 155 +++++++++++++++--- .../groundstates/haldane-spt/figure-1.png | Bin 34236 -> 34065 bytes .../groundstates/haldane-spt/figure-2.png | Bin 32088 -> 33791 bytes .../groundstates/haldane-spt/figure-3.png | Bin 37375 -> 40636 bytes .../groundstates/haldane-spt/index.md | 10 +- .../groundstates/hubbard/figure-1.png | Bin 41850 -> 42405 bytes .../groundstates/hubbard/figure-2.png | Bin 40056 -> 40487 bytes .../groundstates/hubbard/figure-3.png | Bin 50511 -> 50008 bytes .../examples/groundstates/hubbard/index.md | 12 +- .../examples/groundstates/hubbard/main.ipynb | 2 +- .../groundstates/ising-cft/figure-1.png | Bin 15044 -> 15444 bytes .../groundstates/ising-cft/figure-2.png | Bin 24587 -> 25028 bytes .../groundstates/ising-cft/figure-3.png | Bin 22801 -> 23590 bytes .../examples/groundstates/ising-cft/index.md | 35 ++-- .../groundstates/ising-cft/main.ipynb | 116 ++++++++++++- .../groundstates/xxz-heisenberg/figure-1.png | Bin 12994 -> 13854 bytes .../groundstates/xxz-heisenberg/figure-2.png | Bin 21619 -> 21848 bytes .../groundstates/xxz-heisenberg/index.md | 37 +++-- .../groundstates/xxz-heisenberg/main.ipynb | 132 +++++++++++++-- .../statmech/hard-hexagon/figure-1.png | Bin 16674 -> 16711 bytes .../examples/statmech/hard-hexagon/index.md | 15 +- examples/Cache.toml | 22 +-- 34 files changed, 718 insertions(+), 198 deletions(-) diff --git a/docs/src/examples/dynamics/ising-dqpt/index.md b/docs/src/examples/dynamics/ising-dqpt/index.md index e0c8d74c6..b7909fd67 100644 --- a/docs/src/examples/dynamics/ising-dqpt/index.md +++ b/docs/src/examples/dynamics/ising-dqpt/index.md @@ -12,7 +12,8 @@ In this tutorial we will try to reproduce the results from [this paper](https:// The needed packages are ````julia -using MPSKit, MPSKitModels, TensorKit +using MPSKit, TensorKit +using .ExampleModels ```` Dynamical quantum phase transitions (DQPT in short) are signatures of equilibrium phase transitions in a dynamical quantity - the Loschmidt echo. @@ -34,14 +35,14 @@ First we construct the Hamiltonian in MPO form, and obtain the pre-quenched grou ````julia L = 20 -H₀ = transverse_field_ising(FiniteChain(L); g = -0.5) +H₀ = transverse_field_ising(; L, g = -0.5) ψ₀ = FiniteMPS(L, ℂ^2, ℂ^10) ψ₀, _ = find_groundstate(ψ₀, H₀, DMRG(; verbosity = 0)); ```` ## Finite MPS quenching -We can define a helper function that measures the Loschmidt echo +We can define a helper function that measures the Loschmidt echo: ````julia echo(ψ₀::FiniteMPS, ψₜ::FiniteMPS) = -2 * log(abs(dot(ψ₀, ψₜ))) / length(ψ₀) @@ -52,10 +53,10 @@ We will initially use a two-site TDVP scheme to dynamically increase the bond di A single timestep can be done using ````julia -H₁ = transverse_field_ising(FiniteChain(L); g = -2.0) +H₁ = transverse_field_ising(; L, g = -2.0) ψₜ = deepcopy(ψ₀) dt = 0.01 -ψₜ, envs = timestep(ψₜ, H₁, 0, dt, TDVP2(; trunc = truncrank(20))); +ψₜ, envs, info = timestep(ψₜ, H₁, 0, dt, TDVP2(; trunc = truncrank(20))); ```` "envs" is a kind of cache object that keeps track of all environments in `ψ`. @@ -66,10 +67,10 @@ Putting it all together, we get ````julia function finite_sim(L; dt = 0.05, finaltime = 5.0) ψ₀ = FiniteMPS(L, ℂ^2, ℂ^10) - H₀ = transverse_field_ising(FiniteChain(L); g = -0.5) + H₀ = transverse_field_ising(; L, g = -0.5) ψ₀, _ = find_groundstate(ψ₀, H₀, DMRG(; verbosity = 0)) - H₁ = transverse_field_ising(FiniteChain(L); g = -2.0) + H₁ = transverse_field_ising(; L, g = -2.0) ψₜ = deepcopy(ψ₀) envs = environments(ψₜ, H₁, ψₜ) @@ -78,7 +79,7 @@ function finite_sim(L; dt = 0.05, finaltime = 5.0) for t in times[2:end] alg = t > 3 * dt ? TDVP() : TDVP2(; trunc = truncrank(50)) - ψₜ, envs = timestep(ψₜ, H₁, 0, dt, alg, envs) + ψₜ, envs, info = timestep(ψₜ, H₁, 0, dt, alg, envs) push!(echos, echo(ψₜ, ψ₀)) end @@ -110,7 +111,7 @@ dot(ψ₀, ψ₀) ```` ```` -1.0000000000000047 + 1.040736567930811e-16im +0.9999999999999983 - 1.927726781553242e-16im ```` so the Loschmidt echo takes on the pleasant form @@ -135,7 +136,7 @@ a single timestep is easy ````julia dt = 0.01 -ψₜ, envs = timestep(ψₜ, H₁, 0, dt, TDVP(), envs); +ψₜ, envs, info = timestep(ψₜ, H₁, 0, dt, TDVP(), envs); ```` With performance in mind we should once again try to re-use these "envs" cache objects. @@ -156,7 +157,7 @@ function infinite_sim(dt = 0.05, finaltime = 5.0) if t < 50dt # if t is sufficiently small, we increase the bond dimension ψₜ, envs = changebonds(ψₜ, H₁, OptimalExpand(; trunc = truncrank(1)), envs) end - ψₜ, envs = timestep(ψₜ, H₁, 0, dt, TDVP(), envs) + ψₜ, envs, info = timestep(ψₜ, H₁, 0, dt, TDVP(), envs) push!(echos, echo(ψₜ, ψ₀)) end diff --git a/docs/src/examples/dynamics/ising-dqpt/main.ipynb b/docs/src/examples/dynamics/ising-dqpt/main.ipynb index 2d8f90416..7093b71a5 100644 --- a/docs/src/examples/dynamics/ising-dqpt/main.ipynb +++ b/docs/src/examples/dynamics/ising-dqpt/main.ipynb @@ -16,7 +16,113 @@ "metadata": {}, "outputs": [], "source": [ - "using MPSKit, MPSKitModels, TensorKit" + "using MPSKit, TensorKit\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" ] }, { @@ -48,7 +154,7 @@ "outputs": [], "source": [ "L = 20\n", - "H₀ = transverse_field_ising(FiniteChain(L); g = -0.5)\n", + "H₀ = transverse_field_ising(; L, g = -0.5)\n", "ψ₀ = FiniteMPS(L, ℂ^2, ℂ^10)\n", "ψ₀, _ = find_groundstate(ψ₀, H₀, DMRG(; verbosity = 0));" ] @@ -59,7 +165,7 @@ "source": [ "## Finite MPS quenching\n", "\n", - "We can define a helper function that measures the Loschmidt echo" + "We can define a helper function that measures the Loschmidt echo:" ] }, { @@ -86,10 +192,10 @@ "metadata": {}, "outputs": [], "source": [ - "H₁ = transverse_field_ising(FiniteChain(L); g = -2.0)\n", + "H₁ = transverse_field_ising(; L, g = -2.0)\n", "ψₜ = deepcopy(ψ₀)\n", "dt = 0.01\n", - "ψₜ, envs = timestep(ψₜ, H₁, 0, dt, TDVP2(; trunc = truncrank(20)));" + "ψₜ, envs, info = timestep(ψₜ, H₁, 0, dt, TDVP2(; trunc = truncrank(20)));" ] }, { @@ -110,10 +216,10 @@ "source": [ "function finite_sim(L; dt = 0.05, finaltime = 5.0)\n", " ψ₀ = FiniteMPS(L, ℂ^2, ℂ^10)\n", - " H₀ = transverse_field_ising(FiniteChain(L); g = -0.5)\n", + " H₀ = transverse_field_ising(; L, g = -0.5)\n", " ψ₀, _ = find_groundstate(ψ₀, H₀, DMRG(; verbosity = 0))\n", "\n", - " H₁ = transverse_field_ising(FiniteChain(L); g = -2.0)\n", + " H₁ = transverse_field_ising(; L, g = -2.0)\n", " ψₜ = deepcopy(ψ₀)\n", " envs = environments(ψₜ, H₁, ψₜ)\n", "\n", @@ -122,7 +228,7 @@ "\n", " for t in times[2:end]\n", " alg = t > 3 * dt ? TDVP() : TDVP2(; trunc = truncrank(50))\n", - " ψₜ, envs = timestep(ψₜ, H₁, 0, dt, alg, envs)\n", + " ψₜ, envs, info = timestep(ψₜ, H₁, 0, dt, alg, envs)\n", " push!(echos, echo(ψₜ, ψ₀))\n", " end\n", "\n", @@ -226,7 +332,7 @@ "outputs": [], "source": [ "dt = 0.01\n", - "ψₜ, envs = timestep(ψₜ, H₁, 0, dt, TDVP(), envs);" + "ψₜ, envs, info = timestep(ψₜ, H₁, 0, dt, TDVP(), envs);" ] }, { @@ -257,7 +363,7 @@ " if t < 50dt # if t is sufficiently small, we increase the bond dimension\n", " ψₜ, envs = changebonds(ψₜ, H₁, OptimalExpand(; trunc = truncrank(1)), envs)\n", " end\n", - " ψₜ, envs = timestep(ψₜ, H₁, 0, dt, TDVP(), envs)\n", + " ψₜ, envs, info = timestep(ψₜ, H₁, 0, dt, TDVP(), envs)\n", " push!(echos, echo(ψₜ, ψ₀))\n", " end\n", "\n", @@ -284,15 +390,15 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.12.6", + "display_name": "Julia 1.13.1", "language": "julia", - "name": "julia-1.12" + "name": "julia-1.13" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.12.6" + "version": "1.13.1" } }, "nbformat": 4, diff --git a/docs/src/examples/dynamics/xy-finiteT/figure-6.png b/docs/src/examples/dynamics/xy-finiteT/figure-6.png index 16501b948c802166a3e6e6fcad5dfdc5601f8303..37ddfbd45fca1b8ed1ab0e3d7edb1ff3fa627172 100644 GIT binary patch delta 23253 zcmYg&by!tzu=P<<4~j@iHz*|~NP~1sN{4ib(g+9}5l~VAN$F1Ml2W>)OC&_3rAzu7 ze)qf2bN4^;;5j?q{m#rv8Jp=VzxX8gZa z0wwOLSjQ1!{QCHDli)VrKELbqDvlXJQqg^I={`n=fg60F< zBq4Xl@9{iuZ&Tfo-tRW!3NZGYP}S7bjJ&7peY{rn=FOY$IM(VMrH{6A_+KV(zHF0? zyKFZQ{j-)$xK7~fvA_AL=w8XbO&|`LuO;Gcdi9iXk&vX5OWsJ+9=#?5*%T{fgq{<#l>H%Kbe5u+QUUwUHq% z;pst_%tFxhQnUB?#+sU=e}9x+e3QuN)fRGoY?LhGb@|E_20TnuN?zW|XrUevn?5pL z@98Eh+mT?FF<3A-UednDN3iW6{3pYuboJrk6<=oM7Blqu)=@p}i2Og1F zF_rr7l-r24y;4<;WFySQx9K{$f>dVl1jQHVD;;CT-!d||`n5#+JiwV?i#B)rJ6>Y( zJ-($y66KSam{?eNUunqP+}w8Tvy>|0ywsn%QGYP)bLmPC#j+D;DYZ=Z^&HA`WpnxM zmq9HCg0Y;;9VWt${V*{xMMOkMNJx^Bl6bJyn4`k~J8lxODJm-J*S&NwG&Fql2){?z z%9y@eK@yGf>5_|*!OHjY2^c(!KlwSkJ4g5G`Wo?Jq}sEjMKi30NLsNz+TVu09-Y;jAnw$QftZ%cimud$q<-Mjr{CkfR__pHi z`T6@(h`g%im#~q}xsz(M+%)Vrfd>iiFOI(5xpA}zYeBF3Zl54D6o_?H!^rZ-JuR+eII)^!|hk$RK&+11uBB2Om-#h{#L9BxG|T=qAUEiyW^kQ(JlTu5ioJ=&FsIq4(i@jFIh={q8X>2L?Ry?%Xt{rB%PcJ`vBB`eS4%6e2m z_!YeH;w8UiYs3!@ z;?w2F18-QrQ}Br1TiQZA=jv@G-#+#8xoIc9uvH|PGhp@b+4zT~q|YjhZDABY(`DY% zNCYH^c}e8(^8GsMhdGSb`IyT89rDe~&2-m8a3 zKi3>p>ZQ>49zR;xWL&K1>bf69$Z}UP)_!kgMD+aRfq=l#+39haWuN!X zcizaz$nV7KPP96yQn3j0#)Hc!`zmgiAM;OUc8@b6y`Dx+y}5owYx*SXGwl+BOOf*rG8qxavMhhROCBIEg35;2?~~!IdLJCcm)g=QkNbRn#xyJ{Z!56> zDaY>m)TgwZU%!4mu_s#DqwVduTUta=7!;gSIYx;f)>T?c159 z8|j+NJ)@looMO>y4z!BO${W-5wY9Z^s7JXPYzAL;$4d}XVGkin{@?5Cy*sZQ92|Zs z`O$X^s+#*;uWLHmX%uzud|^*jl@!`QT4>5LR8E-tCFoc;dO?HY&*&w`YG^lv)$N0B5>81r+&vT!0>f?bslSd|C%); zCv%Kjtb}t}Xk8fK(Nb8rSGq$2)YSCM;AwA}OB-NzfAH&h%vwU& z{kKKUQ{09wdV+cFGCHtA+eATj4V`<7rsSJ_*$8e=Z!b1Bwq~vdJVU$a@!v8iYi=vU zNT)N@1PWA2;k_oo^CUqr5m~j+m#wd6AE{JG664}-ZO%5w7Fh`V7ZJOo%5fW@`4D z#MNtCuty07o4YdCQr{~&^J~#$tsv|sM+bIIZu}yFcdZV^&`FZ=uGzNlm)`tnuokgv~r{IKON` z0!Q82$Vom8GqZf5ri_%7QXH2Q63a?ON*e$1;=n*Lva=hNn#qlQHmG{`gO>cf=_Whu zpMeBi-k^YMH0P{eTRsxe;PErtE*%StAxF?m8n$Mo^r)r{)E*{>>S1ar3)eVdJ^`TS<7fo z#V9I!OvsEeRB@K=Nws{TzL~t6-k3^mRB%t%6O(yb?&XOsJk{yxX~12E#ZSLA`QPLZ z%ioFhyErh6J?Gj&?Kp7_$qej@J&f>}_w`1j~IEk-ekwOaJyk zza^!dZCu?0bAQZvBuuzKLUgm8F#3sawl&1>L>H@pRCFb+x>k5*VbAE31rCiU#bqWf z_pYcUuBf+#PC1IpZ0gl=f5H~R#uBb!lfT?qPzp-h-q}h1cvC4)i`FiE$@kgh$j?dD zN722d-i>7ZkLY}GL% zV=7s5o97}?<_FyKxAVHxc;>C8y#k{`i<;WTy4u=1^Baw-vA=GD&8o z{zUu@_VWt33#nZ`Cz(q+U)md2-}w4oV2+K(bMM`y0n_%dwW->w{QUe)hNMMxb#->b zx@tgr>e-J&NqO=@_d8Xj@Ar_(%}}OGMSikHFzO2=0l>xbfO4R!#Qdz|PD7)w1zklov|4h~< zD(o62N!z(H4`bEqDaR#LcHB?ML^(J%yP{Y;_y6kDd+d#um|j8wRIjY8#A^N+6BCKh zGvNhFhmpG%=1}>BQ}Jut=^Lw6Fb3Cg+#_zjk7IJypl5w11jX zTWei|wej2Baf1ftGo2GOSYgDo@~zCLJ}T!eiSUXmzW58+7^TkVHb>NGF6+Sz zxyZYjSy@T^P79DP7#J9c1Niy*_aIq7?E@gPaHCwV|0Cu30sC{Bo4*}ZziPPgF?}!( zA!Mi;@#hV4EL!Q>AT7TtUmG?Wmbj+xdFbl-#F|LE{=<#oKSDx6*pxyqk+YM-k$f#k zMafy#C?8pR6CF)HsE&_;ES#U6+BMuqqfkC>TQYPPqxdwP2M`yUFm1ZUnNK3~F& zZnY3gG97NM>fXka-@)s;@i~>zVsW&)m!XHns;A_PeGa(VimW++!eiR6Pm&We_t9Vfo8jAHxe-TmL589!jHa@ObcN zCu^LF^lP}DjTaX+o_WkR`CA0$9&Ta<(pl;1i=?)k+^ebRW|bw&4=U}uV{vNm(M8%X zkU}_J=uO+(TRKv*Ne_hyZ2YyO4Qd?CB_$E~#i&;&3&_2ljvez6RHD zTIkU!w^CJ88_ZJrWX4riC_nV)Wl}j^;&9wV@%zgYI(G_~74G*4sm2~wefd{euUB2x z_cg_Eqoc6?I|UKO$SrIVf8F;2*ScltBMSAZ_Lqk&*C%UW*Z*upkXk0;t_Nm|zZ=$1 zku|B``<%<4*xBpil3nRV*Vv! zn}@r*Qj!oqE9*0Wa{~iw#`ZBhOpg5?{0AjGZq$8&?A^*e^$4}-8k$Y>%h9b>{=YJ0 z*=+XD1&0Ir{eNg)n)*(0730$8?lQha0D@HmYWCd&i`H zCoN!SgflBdIBigM)FY_odCJ$OX>Duj?PeOh7O+zp`VVztkzih{<9y3UYt4;#v%q6lSv}uVcR+2ebzXLaHx_-P zVEKp3lj#xq1A>azHyW=gdAAj=#kqMu8F${qPMWm+r%XKU-L@_sDm}CtPA4NBN@~9T zD2d1beJqu#`Nt@5b9pa;mX@}(v^1VKVZn?lEsdSHb$m#3o~Jfq^5!za%Nrw9_lJc0 z^SR#@&4(@@|Gj4IhY+fKKJ~?Abu=w4?V-Vx+#@2h+1@oXR)JxYmtSp}C{T}-S9Ove zloGV6v9^;EOXs;$0Npy_gg=P@OsuXh`@xwdaJ-akS-ornK$n2VW(#SJ!=d3QA63IZvwSFeJC zf_f-4@Sol&HJdvABzPmI#)^re-APxs-M-*8XFsc{S*Y}=YzcQKv31x(4*F)!Yw>1$ z3j?kdjdE=r_E?>y*3ntoT^(wyeJj>iP>;m4FQLq;HT>SS(E1`cxU>XOCTg<^MZBZ+|XS zpSbE8eAe}iZg3J;Y{Bwqx5jDlapGel0)pMc#pJ#O{+*SPe9#}b-JF$t*gDz_o(2~a z;&R>T{J`CA#dsfS9VAd#wi5o%>7o0=j4>$Pxjf03grabaWRJWFQ%*r)*$?CHAAVuG zr|zRcAJWk_{@qeJvH@}qxOeXa`qweEwO|A(aBznG##5wiWe9Wh#A?lmZP~5Dz&B-t zPhjFcPN^ow55@_{iV@i{P$3wpt}>FLrI*|8Pn95h`0O8YywQk@5%})izkhS@vlZhU z|8#^uJe80wMM+tS59{L5NNHxwobcasfBQyeMkKvbPtf(Do8*VX`T6-ZDCPkA0QEpM z2Yitz;^krXC;h#Q-BDx?rk<+rFAQd_c)<^@zH|H(g}fXYAHMkA61L;$zZR74Ql4Zc z8tA=^^o2sIiHfF9uKsTBoa+Zrz8i$dl-JDkc z&u3?IrqKy`2KqvoAJ{Q?wBoF^8L6tVz+nBcLn8l`-(Kjaa^qxQoXILk0^gH{Dq}nwBIzVDQGNpRT-2 zsWi>&aIDVl0`eFI4osS+Li-vF{9q{)61FH4JaNemhd2!U{1!D{|KR?+>NuKy=zEfW zz(4OvR%1kVIFJN!r;KYJ>t(GOiCVyRVHKE+Uqzv)QF4-E8f@ZG4Y5?Iw-Te{PEIbWSF?3DK>1yx~GGbYW@L)O9&wik*P_^yPTvp z4j&!4KU|8;?dHsZ@)$sVMbr8D?{EZfovUk$1c`~$2TySlW|EP+=-dwWtLU2csS_4 z4~Sz!4uVMPUa}HycOsQ%2^mh&4l=R6UueoFE&GyNMi1AKyfrgcGDyxImyNs8owfbq4pU;#3gNIot%?QMt2nGdl35jgwWD)mm zGZ`5fr`9pQ5b|G_SRTrZS(#gReOIR{329jD=h=T=uPcJeDf}QyKiB>qknyX>k9$8G z)B@7tHEzNnBm1;9*AAzdnjGK>Jt@QK;xetny1J>X11O12N)nG#OM_gmRp@9Ph4NdPfk6Lrl|3&j*2DVjqHmuh4>b zujUP!P-oT=i?Gw4goYN4%hqmQy*d83lOM~*2_i$4AT;FS&~JEkm?Z33`C{g*S8$^z zSric!5byx(ZRfR**NMWON2f_yW<4ku;n`{r(fcX5@6lcLGao&;Pe~_XF}u86V?Wz; z_2wONc*LEB?>{T;eu4lipULH>uk1mZ7f(vXy+Q!bQ9O+HUGa>> z@-@^WR55LVU(t>96)7}xYbFYn+Kh7vc}GZd9VKLq@wT7k3YGFB7ttWCTn(V|a6k^8 zsB_=xO%zm45@N!uSTp)9ja`f$i@4u3>Df3VaGn|5=Ogx@_g$u)SLe+REJ@mdV&mq3 zTV$H5swGfD_EyJ?8oj3`#e|Fe=d|JkG0;abmLUWy6BVnsMNdA&#JFw#LcYbu#y%7d z_}+2(&TPy5L0WFoE;g!om-Cg0cj2ErvGgyMQST-c6c(DAnid(Kf+hCRrscaOYs^qX+n;d2Zz91NbQYl>;lR%PL1 z?058dhW1$GBb3*P(I{fRQ-U5}91Jl#DKhVcF%{`M{fsyY@tLtM>!(-bvPGBoe@ zq#w5L(V%@(EKKAAKP>QJaJvWcBw0qXvwp9yYTSr5vP+oITiLbC0|8E5@qq0+$V(G_S*sPO*$(~c#Ayi=-+tr{xT+J7I6|OMB zc+&=VFyoHxmpjH!bZkyGB7JEWj-8Vx%!vG{(Z0F~3=HBEK08W7v;~ZE4aJE3V#oV> z0VS)5o8oZtg+WpT-&jhjb$KY8O6Vnr>tAgnBO~KQ0Ia~HiHL||pqK`=hU&-%rrmm} z?tC>r__@J}sdUxSi^&riq4N>AM9N~jD!J)Xso!lU5iddmH$f31VmB1>+<#_oU;F{R zv$F%*e>H3ir^VjZwzlU#D+_UB%&mmmL|@bl57r?pF}Ld{O#5$W&7}6ZGogK{71~Jo zljcZ-yPbq=|M0~xTCHzAzEe!lJs>2r!`it`-bY+5Bcn#%zF81Huk)2yJ851gNCK09 zkj5~b+`xmUI&+v5-x$~%1l0qVl{w27uxa9?VP=*Q6Qeb!xne?c1v@F0*@OlbS3=-7 zcpYCx;b3g-?)Ct|7|vCfU~l52-zP`%sh63Z*r>egA&+suTN&0oiS)Cv%)OS)7GQSi zwh9)moGLDjhsR39IPS<$RB@=BR8}G_XHbd~f5^Fe>;qiT9*SnX4h;5$A@>;pXIZ2B zWX2>Jz=M+#9{3@(JO;aAkn@D%UXgbn6()vQetp#%dfiC1NX=+L4PNTw>{_qmhe2ue9;dcq`ylM;*Sg;4;NW0p zw(0uFq@Jai+c#2IUynR^@Zb_ksBdv$;Y)2TFD-o-r|gHeI-?}ZqLaO>H!?;uAGAmv z1Te(bk~U+5ctqr7-$z7;&k-jv=%kLc67wa^>d?e-lAHcI;}4mSMM_DVP4RGjY0%gl zoB<~2yHb~e(1KDJ%(OU?em4X&_Zfpy8Mkswao|Y^aOG48BoLL$gs$<&WJ3?R6=)|R z+mXGfO9hrJER2tjuXH?CpaTty84#f@ew3O+y3q&Tn3%2g2kyu0;g(?4_)oJ2eZjWO)V z`qXK1Moh3+(=C&CpG5zm6vddmWcu<|#)lV_UjA2DJ1?XB>aM>0O3a7y`B36li=sp~ z-+ax%9X{`#WGRP@qQ>HT!-WN3xED3Kw*`5i=8Dbdb+FL=>0xvrGzzbmNryc{hU`V31K>H+BT$fizEq@km|724oFcu)w4C6Yw61=`!?Deb zq9A%kUr^j|eB`K*8Nb~fE3&J!foK#pcLoX-i**&1LLBfLw4%r$)MeOPSsyW#TT#AG z@d!}V8Ems0vz98f*1yG1R6Y$k7ABmWyn^QSkOD6+QdL)1msRhdoxKPh;EPyZ5u`fc z*eu5&8f&b2o$BH?C%VkzT#;_8GStRoH81K{SfiKa(xz!i>zB96mmWq5N?C0*%a`w^ zf9KwNqEZ;UN|pc8TVsrBCW?i4^6lHNJoD6h8WK9=L&sVX9ou+HnxZLtjx@g z4i1QQN$nLBDrM6{bdiOu7;a<2iD63?cKzH-7%d&&W-mh^KpbVlffLYQ|*07I^Dw zB>p?!XB|9N1@-VwdW~>O3c&#yP;mSyvz@*C^So3ax@wiAi4S> zvjwlu6IytB)_}}%bSUdD9L*59WJg6;`Gg8n%S^BKJHau_Frl4yxbG@s+p*7A`~ZpomQf5#*IZ`(vipl@YR&Y^sV zUp11*>4Bd0ky-!${HL7S+Z`9h&Cm+kTcuy4W_;YC z8ZPN4$DtpF1aX9@(4vEaqtL#;Oc+q;$BZ}{^i3IjY!a&EW#Ly)9O7Zr#J(xjpqV_v z!F?}VP~b(1+n7l&9>DqZmr>v4V5d0>VLDso93Oai6bdVohqNmsfD78oST;c#>SkA^ zG?#cu?j{ct zE>~Rr*nkzItzfo~$6^`SW5`+&qg#_hE&!cMyqZXD8wJ^CQnA&&-8S5${^A2o8<{$= zU(NXOWY9wjULz7=nFN&}C_-|`LF9@GX~=xl#F&7VlG{w~x=`Sm(*Um42+&Rd#k*cfbC=!Jfnr0QsG; zOzsu#LIH{V-hNGsRc5XVLLF&|IQ@Ahb&rlHO0LYep{81KT@qRLksTDXFOZre*xelt z(sdJ#Zy0Kb$c2t#IWL%jWm@QyC-b>a%nx|XbDzxLE?;q0)1p`RV19O5P#`!i;CAqr zPx|wAG_(F}b>pJ3Tp$i|Vxi#3?z&R{HDn8b?8sNA5a~oiod|vC+7wXB8AXXjM%~au zqP%4M4Se3nWHgOxecna<4C0k~)f!S+WpJ0$E&X&|u06tmCY%l(q?|zqa)T!xMg|`> zR1-4TTQx5gxWoDU7Svf98XD%Pu1QtoQDI^Oa~12kjm|e0m)X6% z(qqS{m{9e173x|=zvP&Ysd4WTVh>qym+td$mGP9pT5XkU(-T!HP#W6rdk^S`pFqv* zj$wxu69#Hi=sk7e)|_GfEv)jJpjPzDy%lu-rZST$MxgHljPcJUdiZ@~SYPng#fL4@KkDiu8mnTV_%g8?Kp&;GmhWzQCgpZGb zN@*#$2r?T>zA(0K1;!2`oe$o=sTE;K?A1ruYj;j7B-hQ>`%{ieVOc=Ji@c1IcVw?V ze9z&=2bsx^JCmu0FFe_yj_)``e}3+_Am6JN58L*qd>v)?OJgO`#7s1h|2`7xuTCI= zHO;T7bCh7$T_tI!65-R2_Z*lOZW;k|Tq6TsO?u6oZ&ENkkzXV}9_nR!s^X1WRtQjZ zH0K>N@;~y}7>X1V)RWi3tg$;poQG{hyf%G0!Kfw<^XAub_lp{p%kai!s+B z@RCk65)~E2YCbtR0h|Fnl{&khm6l1D#TK4ueuxb(FXY(q%ikzYYCf}Eoooih8u{K! zi$~LW`OYPil78A}&G;VR6y&iTWkr1jAqBbs9$UYqj1e6j61j-apFiJXu2Iv`=`007 z#4hyI-`^iYYlPe)W808MuM99`Ft5? z*n}^vx4uer?dVznr}GjQUB)>QWB26%ZG#j1@8xqdchXt3_~S^zwGB}>XjL5_Y>0a7 zS^;YSlOYQA`}c3ZUAmXRFJ{1Yx00=)sR`-}7d<^a^il-`z7!YZpzK$MbHSm+Y1&rz z?{~21*+0|JT1gq1>({P<99Jn;64z8*RpsXFT#%Dv)k5Z%Vu7^wf4M%!OFlIzxH!E5 zAdF&Lz7ARXyMGXT+2e+SH7*z9hj)d}g-p1VeRC{K4N2GC%A`)7xK!<*o$M%UX=$Op z!rNK={>cs6-xrtN=@sOCKDh)wrvWSI<1OZ@XXhoCnsowR7#tc>CGeV$(h~Xi>kWv_ zS5WKINPX?A!);u;l_bj==jB20&D9;PA)44lRWBUdy3IySj> z-@#3>`(LdX6&h=p4%XSO_vMJNzo>BiYqI{1dZ+lEq?OsFH=8CU3A8M_%416};u0pt zeddxsqM>UF1}zO0m8aaK(9Zf^${Jt{o>OE6`irBV4ah)kAtoM&E3IT-sC$Ro^GzKW z@(V1n+W5xu@?i!m8il@jb9JWi91Lhi!bIM?12P*8$InCQ{8>ItesQq{K&@B#EO+YG zO)(2G_4w;!qnR_4zkeU7?f#*Iq*_Dg+tbN~M{}K+0LL$cOS3#Fw`diilj;*$(os`a z2Urin4LKp9f7(*?eLbsq;Di8~p$(-6q9trbi@qd-xq_}P`5|Ai(a}-pBHmS?GicbH8_l6IJEm+`s^L1yQTOoLj|76fcT9UZbXBhcBHD4%I=rUUVy zGlIcweKIgGFxNrz(W9>wwqqdlTtUeyDq>+_6)ZA-`ug=NNQyucC(30~RrvTvSXG|N z=Kv2O1}9{xdH3DN3FDi**Ts|q7i$XsAO=h^4P`EvUdEFm{)JRZL#*BLf@~cptaP|) z9tqb`KAIyu6ZGQZ;&<-r?yeR!(xTN&>AOKB;Dioz)r@!TK363~N5Vt9cnxL-^lzZ$ z7ZSngM)k`r6Jt&(G3Wn|L>VqDd8O%Ba^d_3WLq*#q00P;i6Ddc|UiB#3O-11+|)>9u*nZS3djUxYSRhr}q;! zaeHg4@pw8i1m+E_W)o9WCChp!Qet9aC?Bym*C>Qu+5<(#YW_P}b77i5p^S`XfPam+ z*QQFmCB?di82=m^a%vBwu(r0|vzBbw8`bOE6QNnEQ8hE~nkTF|xb6Ixr?2WKD@Mt? z)NPeF+LE;NOccGCfyJeJA*5cE;6#D**A|~{L$C2Q8#xGVb z9#&5G{Urj_qpB_4^u3sf2$OXj>W*jIgJF|Gd#PI4n2EFx(`hF!KAUKc(2IBZT=Fx= zLZNU+1K!FL5fVacZDgD&TvotkMI(6#6d-tU6y%e?l-u3i-67?I3f<~Jj(Vgz49hPe zA(8B!rkP*wzGERK_Bub`7M8=dhutsbu8ey8&&6nh#e~~bB?Hs9!g_pHS|QgfMG~{8 zb=;^6JqV^0bVZ&)x<~my4`y&sZT2v^s_Fm~4X8HozCnZ{3rE8ZltE^qLQb|qd8bjR zKZ}cR{ryL>m-azM%gf6nr=S2stpmBJ*HL+>($BMdKDuQ=5r4Yh8oF$UQG#3@Fh