XXZ1D — Spin-1/2 XXZ Chain
The XXZ1D OBC dense-ED full observable surface was introduced in v0.17. Method signatures and kwarg names (beta, i, j, ℓ, …) may change in v0.19. The infinite-system finite-temperature surface is currently restricted to the XX point (Δ = 0) via the free-fermion (Jordan-Wigner) integrals; general-Δ TBA / NLIE is tracked in issue #108.
Hamiltonian
\[H = J \sum_{i} \bigl[\, S^x_i S^x_{i+1} + S^y_i S^y_{i+1} + \Delta\, S^z_i S^z_{i+1} \,\bigr]\]
with $\mathbf{S}_i = \tfrac{1}{2}\boldsymbol{\sigma}_i$, exchange coupling $J$ (default 1.0), and anisotropy $\Delta$ (default 0.0, the XX point).
Phases
| Regime | Phase | Closed form on the GS energy |
|---|---|---|
| $\Delta < -1$ | Gapped ferromagnet (Ising-like FM) | — (TBA, deferred) |
| $\Delta = -1$ | Saturated ferromagnet | $e_0/J = -1/4$ |
| $-1 < \Delta < 1$ | Luttinger liquid, $c = 1$ | — (general $\Delta$ TBA) |
| $\Delta = 0$ | XX / free fermion | $e_0/J = -1/\pi$ |
| $\Delta = 1$ | Isotropic AF Heisenberg | $e_0/J = 1/4 - \ln 2$ (Hulthén 1938) |
| $\Delta > 1$ | Gapped Néel AFM | — (TBA, deferred) |
Coverage Matrix
OBC rows are dense-ED (Hilbert dim $2^N$, cap $N \le 12$). Infinite rows are analytic / Bethe-ansatz closed forms.
| Quantity | OBC | Infinite |
|---|---|---|
Energy{:total} (any $\Delta$) | dense-ED | — |
Energy{:per_site} | conversion via $E/N$ | GS at $\Delta \in \{-1, 0, 1\}$; finite-T at Δ = 0 (issue #108 for general Δ) |
FreeEnergy / ThermalEntropy / SpecificHeat | dense-ED | Δ = 0 free-fermion (QuadGK); other Δ NaN+warn (issue #108) |
MagnetizationX / Y / Z (+ …Local) | dense-ED | — |
SusceptibilityXX / YY / ZZ | variance | — |
XXCorrelation / YY / ZZ (:static, :connected) | dense-ED | — |
VonNeumannEntropy / RenyiEntropy | partial trace | — |
MassGap | dense-ED ($E_1 - E_0$) | $0$ on $-1 < \Delta \le 1$, NaN otherwise |
CentralCharge | — | $1$ on critical regime, NaN otherwise |
LuttingerParameter | — | $K = \pi / (2(\pi - \gamma))$, $\gamma = \arccos\Delta$ |
LuttingerVelocity | — | $u = (\pi J / 2)\,\sin\gamma / \gamma$ |
EnergyLocal | dense-ED (symmetric bond split) | — |
SpinWaveVelocity is a type-level alias of LuttingerVelocity.
XX Point (Δ = 0) — Free-Fermion Thermo at Infinite()
After Jordan-Wigner the XX chain is non-interacting; the single-particle dispersion (in the spin convention Sᵅ = σᵅ/2) is
\[\varepsilon(k) = -J \cos k, \quad k \in [-\pi, \pi].\]
QAtlas exposes per-site FreeEnergy, Energy{:per_site}, ThermalEntropy, and SpecificHeat at Infinite() for Δ = 0 via adaptive Gauss-Kronrod quadrature on [0, π]:
\[\begin{aligned} f(\beta) &= -\frac{1}{\pi\beta} \int_0^\pi \log\!\left(2\cosh\tfrac{\beta\varepsilon(k)}{2}\right) dk, \ e(\beta) &= -\frac{1}{2\pi} \int_0^\pi \varepsilon(k)\,\tanh\tfrac{\beta\varepsilon(k)}{2}\,dk, \ s(\beta) &= \beta\,\bigl(e(\beta) - f(\beta)\bigr), \ C(\beta) &= \frac{1}{\pi} \int_0^\pi \bigl(\tfrac{\beta\varepsilon}{2}\bigr)^2 \operatorname{sech}^2\!\tfrac{\beta\varepsilon}{2}\,dk. \end{aligned}\]
m = XXZ1D(J=1.0, Δ=0.0)
QAtlas.fetch(m, Energy(), Infinite(); beta=10.0) # → ≈ -1/π = -0.3183
QAtlas.fetch(m, FreeEnergy(), Infinite(); beta=1.0)
QAtlas.fetch(m, ThermalEntropy(), Infinite(); beta=0.01) # → ≈ log 2
QAtlas.fetch(m, SpecificHeat(), Infinite(); beta=1.0) # → > 0For any Δ ≠ 0 these four calls emit a @warn and return NaN — the general-Δ thermal Bethe ansatz / NLIE is tracked in issue #108.
v0.17 Highlights — Dense-ED Full Suite
A single _xxz1d_thermal_kernel(model, N, β) performs one eigendecomposition of the $2^N \times 2^N$ Hamiltonian and reuses the spectrum / eigenvectors across every observable on the OBC row. The hard cap is N ≤ 12 (Hilbert dimension 2^12 = 4096).
using QAtlas
m = XXZ1D(J=1.0, Δ=0.5)
β = 1.0
QAtlas.fetch(m, FreeEnergy(), OBC(6); beta=β)
QAtlas.fetch(m, SpecificHeat(), OBC(6); beta=β)
QAtlas.fetch(m, MagnetizationZ(), OBC(6); beta=β) # = 0 (U(1) conservation)
QAtlas.fetch(m, ZZCorrelation{:static}(), OBC(6); beta=β, i=2, j=4)
QAtlas.fetch(m, RenyiEntropy(2.0), OBC(6); ℓ=3, beta=Inf)Δ = 1 isotropic point: SU(2) symmetry identities
At $\Delta = 1$ the chain is SU(2)-symmetric, so every observable satisfies the harness-checked identities
\[\chi_{xx} = \chi_{yy} = \chi_{zz}, \qquad m_\alpha = 0\ \ (\alpha \in \{x,y,z\}).\]
m_iso = XXZ1D(J=1.0, Δ=1.0)
QAtlas.fetch(m_iso, SusceptibilityXX(), OBC(6); beta=1.0) # =
QAtlas.fetch(m_iso, SusceptibilityYY(), OBC(6); beta=1.0) # =
QAtlas.fetch(m_iso, SusceptibilityZZ(), OBC(6); beta=1.0)These three calls return the same value to ED precision, and are checked by the SU(2) row of SYMMETRY_IDENTITIES (PR #133).
Critical-regime CFT data
For $-1 < \Delta < 1$ the chain flows to a $c = 1$ compactified-boson CFT with continuously varying compactification radius. QAtlas exposes the standard triplet:
QAtlas.fetch(XXZ1D(; Δ=0.3), CentralCharge(), Infinite()) # → 1.0
QAtlas.fetch(XXZ1D(; Δ=0.0), LuttingerParameter(), Infinite()) # → 1.0
QAtlas.fetch(XXZ1D(; Δ=1.0), LuttingerVelocity(), Infinite()) # → π/2
QAtlas.fetch(XXZ1D(; Δ=1.5), CentralCharge(), Infinite()) # → NaN (+ warn)Full derivation: XXZ Luttinger parameters from Bethe ansatz.
References
- H. Bethe, Z. Physik 71, 205 (1931).
- L. Hulthén, Ark. Mat. Astron. Fys. 26A, No. 11 (1938) — $\Delta = 1$ value.
- C. N. Yang, C. P. Yang, Phys. Rev. 150, 321 (1966) — general-$\Delta$ Bethe-ansatz integral equation.
- M. Takahashi, Thermodynamics of One-Dimensional Solvable Models (Cambridge UP, 1999), Ch. 4.
- T. Giamarchi, Quantum Physics in One Dimension (Oxford, 2004), Ch. 6.
Related
- Heisenberg1D — isotropic SU(2) point ($\Delta = 1$); a thin delegator to
XXZ1D(Δ=1.0). - S1Heisenberg1D — spin-1 generalisation; gapped Haldane phase, distinct universality.
- TFIM — $c = 1/2$ Ising chain for contrast with the $c = 1$ XXZ critical line.
<!– ATLAS:HUBS:START – auto-generated by docs/atlas/generate.jl. Do not edit by hand; edits between these markers are overwritten on next regen. –>
Verified hubs
In the Verified Atlas, these 2 models register 34 hubs (quantity / BC pair). The badge column shows the R1 assurance level; click a hub link to see the exact verify(...) calls, references, and corroboration mechanism.
| Model | Quantity | BC | Assurance | Cards |
|---|---|---|---|---|
S1XXZ1D | Energy | Infinite | 🔵 coherent | 4 |
S1XXZ1D | MassGap | Infinite | 🔵 coherent | 3 |
XXZ1D | CentralCharge | Infinite | 🟢 corroborated-at-p | 1 |
XXZ1D | Energy | Infinite | 🟢 corroborated-at-p | 12 |
XXZ1D | Energy | OBC | 🟢 corroborated-at-p | 15 |
XXZ1D | EnergyLocal | OBC | 🟠 uncorroborated-but-feasible | 0 |
XXZ1D | FreeEnergy | Infinite | 🔵 coherent | 1 |
XXZ1D | FreeEnergy | OBC | 🟢 corroborated-at-p | 21 |
XXZ1D | GroundStateEnergyDensity | Infinite | 🟢 corroborated-at-p | 3 |
XXZ1D | LoschmidtEcho | Infinite | 🟢 corroborated-at-p | 2 |
XXZ1D | LuttingerParameter | Infinite | 🟢 corroborated-at-p | 9 |
XXZ1D | LuttingerVelocity | Infinite | 🟢 corroborated-at-p | 2 |
XXZ1D | MagnetizationX | OBC | 🔵 coherent | 24 |
XXZ1D | MagnetizationXLocal | OBC | 🟠 uncorroborated-but-feasible | 0 |
XXZ1D | MagnetizationY | OBC | 🔵 coherent | 24 |
XXZ1D | MagnetizationYLocal | OBC | 🟠 uncorroborated-but-feasible | 0 |
XXZ1D | MagnetizationZ | OBC | 🔵 coherent | 24 |
XXZ1D | MagnetizationZLocal | OBC | 🟠 uncorroborated-but-feasible | 0 |
XXZ1D | MassGap | Infinite | 🟢 corroborated-at-p | 1 |
XXZ1D | MassGap | OBC | 🟢 corroborated-at-p | 15 |
XXZ1D | NMRRelaxationExponent | Infinite | 🟢 corroborated-at-p | 1 |
XXZ1D | RenyiEntropy | Infinite | 🟠 uncorroborated-but-feasible | 0 |
XXZ1D | RenyiEntropy | OBC | 🟢 corroborated-at-p | 96 |
XXZ1D | SpecificHeat | Infinite | 🟠 uncorroborated-but-feasible | 0 |
XXZ1D | SpecificHeat | OBC | 🟢 corroborated-at-p | 30 |
XXZ1D | SusceptibilityXX | OBC | 🟢 corroborated-at-p | 12 |
XXZ1D | SusceptibilityYY | OBC | 🟢 corroborated-at-p | 12 |
XXZ1D | SusceptibilityZZ | OBC | 🟢 corroborated-at-p | 31 |
XXZ1D | ThermalEntropy | Infinite | 🔵 coherent | 1 |
XXZ1D | ThermalEntropy | OBC | 🟢 corroborated-at-p | 30 |
XXZ1D | UniversalityClass | Infinite | 🟠 uncorroborated-but-feasible | 0 |
XXZ1D | VonNeumannEntropy | Infinite | 🟠 uncorroborated-but-feasible | 0 |
XXZ1D | VonNeumannEntropy | OBC | 🟢 corroborated-at-p | 48 |
XXZ1D | ZZStructureFactor | Infinite | 🟠 uncorroborated-but-feasible | 0 |
<!– ATLAS:HUBS:END –>
<!– ATLAS:DOCS:START – auto-generated by docs/atlas/generate.jl. Do not edit by hand; edits between these markers are overwritten on next regen. –>
API
Every fetch(::Model, …) method registered for these models — together with the model struct(s) and exported helpers — generated directly from the source (in lock-step with @register):
QAtlas.S1XXZ1D — Type
S1XXZ1D(; J::Real = 1.0, Δ::Real = 1.0) <: AbstractQAtlasModelSpin-1 antiferromagnetic XXZ chain,
H = J Σᵢ [Sˣᵢ Sˣᵢ₊₁ + Sʸᵢ Sʸᵢ₊₁ + Δ Sᶻᵢ Sᶻᵢ₊₁], S = 1, J > 0.The default Δ = 1.0 places the model at the SU(2)-symmetric Haldane point, where Phase-1 closed-form MassGap is available by delegation to S1Heisenberg1D.
QAtlas.fetch — Method
fetch(model::S1XXZ1D, ::Energy{:per_site}, ::Infinite; J, Δ, kwargs...) -> Float64Ground-state energy per site of the spin-1 XXZ chain.
Phase 1: supported only at the Heisenberg point Δ = 1, where the result is delegated to S1Heisenberg1D,
e₀ ≈ -1.40148403897 J (White-Huse 1993 DMRG).For Δ ≠ 1 no closed-form literature constant is available (XY1 / large-Δ Néel phase diagram, Schulz 1986; Tzeng-Yang-Hsu 2017); a DomainError is raised — Phase 2 will plug in DMRG / TLL.
QAtlas.fetch — Method
fetch(model::S1XXZ1D, ::MassGap, ::Infinite; J, Δ, kwargs...) -> Float64Bulk mass gap of the spin-1 XXZ chain.
Phase 1: supported only at the Heisenberg point Δ = 1, where the Haldane gap is delegated to S1Heisenberg1D,
Δ_∞ ≈ 0.41048 J (White-Huse 1993 DMRG).For Δ ≠ 1 the result is not a closed-form literature constant (XY1 / large-Δ Néel phase diagram, Schulz 1986; Tzeng-Yang-Hsu 2017) and a DomainError is raised — Phase 2 will plug in DMRG / TLL.
QAtlas.XXZ1D — Type
XXZ1D(; J::Real = 1.0, Δ::Real = 0.0) <: AbstractQAtlasModelSpin-1/2 XXZ chain
H = J Σ_i [ S^x_i S^x_{i+1} + S^y_i S^y_{i+1} + Δ S^z_i S^z_{i+1} ]Convention: J > 0 is antiferromagnetic. Δ = 1 is the isotropic Heisenberg AF point, Δ = 0 is the XX (free-fermion) point, Δ = -1 is the isotropic ferromagnet. For |Δ| < 1 the chain is critical (Luttinger liquid, central charge c = 1).
Currently registered fetches:
| Quantity | BC | Coverage |
|---|---|---|
Energy | Infinite | Exact ground-state energy density via Yang-Yang Bethe ansatz integral |
UniversalityClass | Infinite | :XY in critical phase -1 < Δ < 1, and :Heisenberg at Δ = 1 |
QAtlas.fetch — Method
fetch(model::XXZ1D, ::CentralCharge, ::Infinite) -> Float64Central charge of the XXZ chain:
-1 < Δ < 1→c = 1(Luttinger liquid)- otherwise →
NaN(non-critical)
QAtlas.fetch — Method
fetch(model::XXZ1D, ::Energy{:total}, ::OBC; beta) -> Float64Total thermal energy ⟨H⟩_β for the spin-½ OBC chain at finite size, computed by dense ED. Works for any Δ and any N ≤ 12. Intended as a reference for MPS thermal methods (TPQMPS / Purification / METTS).
⟨H⟩_β = Tr(H exp(-βH)) / Tr(exp(-βH))Convention matches fetch(::TFIM, ::Energy, ::OBC): finite-size boundary conditions return total energy; only Infinite() returns per-site (⟨H⟩/N, the only finite quantity in the thermodynamic limit).
QAtlas.fetch — Method
fetch(model::XXZ1D, ::GroundStateEnergyDensity, ::Infinite) -> Float64Alias for fetch(::XXZ1D, ::Energy, ::Infinite) kept so that the GroundStateEnergyDensity quantity — already exported by Heisenberg.jl — works uniformly across 1D Bethe-ansatz chains.
QAtlas.fetch — Method
fetch(model::XXZ1D, ::LuttingerParameter, ::Infinite) -> Float64Luttinger-liquid parameter K = π / (2(π − γ)), with γ = arccos(Δ), valid for -1 < Δ ≤ 1.
Canonical values:
Δ = 0(XX free fermion) →K = 1Δ = 1(AF Heisenberg) →K = 1/2Δ → -1(FM boundary) →K → ∞
QAtlas.fetch — Method
fetch(model::XXZ1D, ::LuttingerVelocity, ::Infinite) -> Float64
fetch(model::XXZ1D, ::SpinWaveVelocity, ::Infinite) -> Float64Sound velocity of the low-energy Luttinger-liquid mode,
u(Δ) = J · (π/2) · sin(γ)/γ, γ = arccos(Δ).Canonical values:
Δ = 0(XX) →u = J(= free-fermion v_F)Δ = 1(AF) →u = (π/2) J(des Cloizeaux-Pearson)
SpinWaveVelocity dispatches here via the const SpinWaveVelocity = LuttingerVelocity type alias (both are the same physical quantity for 1D critical spin chains).
QAtlas.fetch — Method
fetch(model::XXZ1D, ::NMRRelaxationExponent, ::Infinite; kwargs...) -> Float64Leading low-temperature NMR spin-lattice relaxation exponent θ_NMR = 1/(2K) − 1 for the critical Luttinger-liquid phase (-1 < Δ ≤ 1), where K is the Luttinger parameter (K = 1 at Δ = 0, K = 1/2 at the Heisenberg point Δ = 1).
This is the contact-hyperfine result probing the dominant transverse staggered susceptibility, whose operator has scaling dimension Δ_op = 1/(4K), so θ_NMR = 2Δ_op − 1 = 1/(2K) − 1 (Chitra & Giamarchi 1997, Eq. 27: leading A⊥ T^{1/(2K)−1} term, dominant over the subdominant longitudinal A∥ T^{2K−1} for K > 1/2). Checks: T^{−1/2} at the XX point (K = 1) and T^0 (constant, up to logs) at the Heisenberg point (K = 1/2).
QAtlas.fetch — Method
fetch(model::XXZ1D, ::ZZStructureFactor, ::Infinite;
q::Real, ω::Real, J::Real = model.J, method::Symbol = :exact_2spinon,
kwargs...) -> Float64Exact two-spinon longitudinal dynamical structure factor S^{zz}(q, ω) of the spin-1/2 antiferromagnetic XXZ chain in the massive regime Δ > 1.
QAtlas.fetch — Method
fetch(model::XXZ1D, ::EnergyLocal, ::OBC; beta) -> Vector{Float64}Site-local energy density ε_i of the OBC XXZ chain at inverse temperature beta, defined so that Σᵢ ε_i = ⟨H⟩_β. Each bond b_{i,i+1} = (J/4)(σˣσˣ + σʸσʸ + Δ σᶻσᶻ) is split symmetrically between its two endpoints:
ε_i = ½ ⟨b_{i-1,i}⟩_β + ½ ⟨b_{i,i+1}⟩_βwith the missing bonds at i = 1 / i = N taken to be zero.
QAtlas.fetch — Method
fetch(model::XXZ1D, ::FreeEnergy, ::OBC; beta) -> Float64Per-site Helmholtz free energy f(β) = -log Z / (Nβ) of the spin-½ OBC XXZ chain at finite N ≤ 12, computed by dense ED.
QAtlas.fetch — Method
fetch(model::XXZ1D, ::LogarithmicNegativity, ::Infinite;
ℓ_A::Real, ℓ_B::Real, kwargs...) -> Float64CC-Tonni 2012 logarithmic negativity of two adjacent intervals in the critical Luttinger-liquid regime -1 < Δ <= 1. Delegates to Universality(:XY) for -1 < Δ < 1 and Universality(:Heisenberg) at Δ = 1.
QAtlas.fetch — Method
fetch(model::XXZ1D, ::MagnetizationX, ::OBC; beta) -> Float64Per-site bulk magnetisation ⟨Σᵢ σˣᵢ⟩_β / N of the OBC XXZ chain.
QAtlas.fetch — Method
fetch(model::XXZ1D, ::MagnetizationXLocal{:equilibrium}, ::OBC; beta) -> Vector{Float64}Site-resolved [⟨σˣ_i⟩_β for i = 1:N]. Identically zero up to dense-ED round-off because σˣ_i flips a single Sᶻ and the XXZ Hamiltonian conserves total Sᶻ.
QAtlas.fetch — Method
fetch(model::XXZ1D, ::MagnetizationY, ::OBC; beta) -> Float64Per-site bulk magnetisation ⟨Σᵢ σʸᵢ⟩_β / N. Identically zero for the XXZ Hamiltonian (the eigenvectors of a real-symmetric H — the XXZ matrix in the σᶻ-product basis is real symmetric — give purely imaginary expectations of σʸ that cancel mode-by-mode). Returned by explicit calculation rather than hard-coded zero so the caller still sees the dense-ED noise floor.
QAtlas.fetch — Method
fetch(model::XXZ1D, ::MagnetizationYLocal, ::OBC; beta) -> Vector{Float64}Site-resolved [⟨σʸ_i⟩_β for i = 1:N]. Identically zero by the same U(1) argument as MagnetizationXLocal plus parity (σʸ_i is purely imaginary in the σᶻ basis).
QAtlas.fetch — Method
fetch(model::XXZ1D, ::MagnetizationZ, ::OBC; beta) -> Float64Per-site bulk magnetisation ⟨Σᵢ σᶻᵢ⟩_β / N. Σᵢ σᶻᵢ commutes with H (U(1) symmetry), so the thermal average is Tr(M_z exp(-βH))/Z; for even N and any real β the σᶻ-product basis groups symmetrically between sectors of opposite total Sᶻ and the average is zero. For odd N the unique smallest-Sᶻ-magnitude sector is half-filled ±½ (still S_z = ±½), so the average is again zero up to round-off.
QAtlas.fetch — Method
fetch(model::XXZ1D, ::MagnetizationZLocal, ::OBC; beta) -> Vector{Float64}Site-resolved [⟨σᶻ_i⟩_β for i = 1:N]. Each ⟨σᶻi⟩ is identically zero up to round-off in the canonical Boltzmann ensemble (sectors of opposite Sz come in equal weight pairs).
QAtlas.fetch — Method
fetch(model::XXZ1D, ::MassGap, ::Infinite) -> Float64Mass gap of the spin-½ XXZ chain in the thermodynamic limit:
- Critical regime
-1 < Δ ≤ 1: gapless Luttinger liquid, returns0.0. - Gapped regimes (
Δ > 1antiferromagnetic Ising-like,Δ < -1ferromagnetic Ising-like): closed-form gap is non-trivial (Bethe ansatz integrals), not yet implemented; returnsNaNwith a warning.
QAtlas.fetch — Method
fetch(model::XXZ1D, ::MassGap, ::OBC) -> Float64Energy gap E₁ - E₀ between the two lowest eigenvalues of the OBC XXZ Hamiltonian at finite N ≤ 12.
QAtlas.fetch — Method
fetch(model::XXZ1D, ::MutualInformation, ::Infinite;
ℓ_A::Real, ℓ_B::Real, beta::Real=Inf, kwargs...) -> Float64Calabrese-Cardy mutual information of two adjacent intervals in the critical Luttinger-liquid regime -1 < Δ <= 1 of the XXZ chain. Delegates to Universality(:XY) for -1 < Δ < 1 and to Universality(:Heisenberg) at Δ = 1.
Throws DomainError outside the critical regime.
QAtlas.fetch — Method
fetch(::XXZ1D, q::RenyiEntropy, ::Infinite; ℓ, beta=Inf, kwargs...) -> Float64Single-interval Renyi-α entanglement entropy. Same critical-regime guard as the VN case; delegates to Universality(:XY) (or Universality(:Heisenberg) at Δ = 1).
QAtlas.fetch — Method
fetch(model::XXZ1D, q::RenyiEntropy, ::OBC; ℓ, beta=Inf) -> Float64Rényi entropy of order α = q.α for the first ℓ sites,
S_α = log(Tr ρ_A^α) / (1 - α).α = 1 is rejected at the RenyiEntropy constructor; use VonNeumannEntropy() for that limit.
QAtlas.fetch — Method
fetch(model::XXZ1D, ::SpecificHeat, ::OBC; beta) -> Float64Per-site heat capacity c(β) = β² · Var(H) / N, computed exactly from the energy variance in the eigenbasis (no numerical differentiation).
QAtlas.fetch — Method
fetch(model::XXZ1D, ::SusceptibilityXX, ::OBC; beta) -> Float64Static transverse Kubo susceptibility per site (response-derivative convention) χ_xx(β) = ∂⟨M_x⟩/∂h_x at h_x = 0, with M_x = Σᵢ σˣᵢ. Equivalent to β·Var(M_x)/N only when [H, M_x] = 0, which the XXZ Hamiltonian does not satisfy on the x-axis; see issue #576.
QAtlas.fetch — Method
fetch(model::XXZ1D, ::SusceptibilityYY, ::OBC; beta) -> Float64Static y-axis Kubo susceptibility per site (response-derivative convention) χ_yy(β) = ∂⟨M_y⟩/∂h_y at h_y = 0. Equivalent to β·Var(M_y)/N only when [H, M_y] = 0; the XXZ Hamiltonian does not satisfy this on the y-axis. See issue #576.
QAtlas.fetch — Method
fetch(model::XXZ1D, ::SusceptibilityZZ, ::OBC; beta) -> Float64Static longitudinal susceptibility per site, χ_zz(β) = (β/N) Var(M_z). At Δ = 1 (Heisenberg) this equals χ_xx = χ_yy by SU(2) symmetry.
QAtlas.fetch — Method
fetch(model::XXZ1D, ::ThermalEntropy, ::OBC; beta) -> Float64Per-site Gibbs entropy s(β) = β · (ε - f) of the OBC XXZ chain.
QAtlas.fetch — Method
fetch(model::XXZ1D, ::VonNeumannEntropy, ::OBC; ℓ, beta=Inf) -> Float64Von Neumann entanglement entropy S = -Tr ρ_A log ρ_A of the first ℓ sites of the OBC XXZ chain at inverse temperature beta (or the ground state when beta = Inf).
Computed by exact ED + partial trace; cost O(2^{2N}) memory and O(2^{3ℓ}) for the eigen of ρ_A. Capped by _MAX_ED_SITES.
QAtlas.fetch — Method
fetch(::XXZ1D, ::VonNeumannEntropy{:equilibrium}, ::Infinite;
ℓ::Int, beta::Real = Inf, kwargs...) -> Float64Single-interval von Neumann entanglement entropy of the XXZ chain in the thermodynamic limit, valid in the critical Luttinger-liquid regime -1 < Δ < 1 (and at the Δ = 1 SU(2) Heisenberg point). Delegates to the c = 1 Calabrese-Cardy form via Universality(:XY) (or Universality(:Heisenberg) at Δ = 1 for symmetry).
QAtlas.fetch — Method
fetch(model::XXZ1D, ::Energy{:per_site}, ::Infinite; [beta]) -> Float64Per-site energy of the infinite XXZ chain.
Without
beta: ground-state energy density. Closed-form values at the three canonical pointsΔ ∈ {-1, 0, 1}; warns and returnsNaNotherwise (general-Δ Bethe ansatz is a follow-up).With
beta: thermal energy density⟨H⟩_β / N. AtΔ = 0evaluated by Gauss-Kronrod quadrature of the free-fermion integrale(β) = -(1/(2π)) ∫₀^π ε(k) tanh(β ε(k) / 2) dk, ε(k) = -J cos k.The β → ∞ limit reproduces
-J/π(matching XXZ.jl's_xxz1d_energy_free_fermion). At general Δ the thermal Bethe ansatz (issue #108) is required; a warning is emitted andNaNreturned.
QAtlas.fetch — Method
fetch(model::XXZ1D, ::FreeEnergy, ::Infinite; beta::Real, kwargs...)Per-site Helmholtz free energy of the infinite XXZ chain. Currently only Δ = 0 (XX / free fermion) is implemented:
f(β) = -(1/(πβ)) ∫₀^π log(2 cosh(β ε(k) / 2)) dk, ε(k) = -J cos k.For other Δ the thermal Bethe ansatz (issue #108) is required; this method emits a warning and returns NaN.
References: Mahan, Many-Particle Physics, §1.3; Coleman, Introduction to Many-Body Physics, §2.4; Takahashi (1999), §4.
QAtlas.fetch — Method
fetch(model::XXZ1D, ::SpecificHeat, ::Infinite; beta::Real, kwargs...)Per-site heat capacity of the infinite XXZ chain. At Δ = 0,
C(β) = (1/π) ∫₀^π (β ε / 2)² sech²(β ε / 2) dk, ε(k) = -J cos k.For -1 < Δ < 1 (Δ ≠ 0) routes through the Klümper NLIE (issue #521). See _xxz_klumper_specific_heat for the finite-difference details.
QAtlas.fetch — Method
fetch(model::XXZ1D, ::ThermalEntropy, ::Infinite; beta::Real, kwargs...)Per-site Gibbs entropy of the infinite XXZ chain. Implemented at Δ = 0 only via
s(β) = (1/π) ∫₀^π [ log(2 cosh(βε/2)) - (βε/2) tanh(βε/2) ] dk,
ε(k) = -J cos k,equivalent to s(β) = β (e(β) - f(β)). In the high-T limit (β → 0) this saturates to log 2 per site. Returns NaN (with a warning) for general Δ pending issue #108.
QAtlas.fetch — Method
fetch(model::XXZ1D, ::EntanglementGrowthSlope, ::Infinite;
beta_eff::Real, kwargs...) -> Float64Calabrese-Cardy 2005 linear-growth slope of half-system entanglement after a quench at the XX point of the XXZ chain. The chain is gapless with central charge c = 1 and LR velocity v = 2 |J|, so
dS_A / dt = pi c v / (3 beta_eff) = 2 pi |J| / (3 beta_eff).Delegates to Universality(:XY) (c = 1).
QAtlas.fetch — Method
fetch(model::XXZ1D, ::EntanglementSaturationDensity, ::Infinite;
beta_eff::Real, kwargs...) -> Float64Long-time saturation of post-quench half-system entanglement entropy at the XX point (Delta = 0). The XX chain is gapless with c = 1, so delegates to Universality(:XY) returning pi / (6 beta_eff).
Off-XX (Delta != 0) throws DomainError – interacting regime deferred.
QAtlas.fetch — Method
fetch(model::XXZ1D, ::LiebRobinsonVelocity, ::Infinite;
J = model.J, Delta = model.Δ, kwargs...) -> Float64Maximum group velocity of the free-fermion XX chain (Delta = 0). The single-particle dispersion is epsilon(k) = -2 J cos k, and its group-velocity maximum is
v_LR = 2 |J|,attained at k = pi / 2. For Delta != 0 the LR bound is more involved (interacting regime) and is deferred — this dispatch throws DomainError.
QAtlas.fetch — Method
fetch(model_f::XXZ1D, ::LoschmidtEcho{:rate}, ::Infinite;
initial::XXZ1D, t::Real) -> Float64Loschmidt rate function
λ(t) = - lim_{N→∞} (1/N) log |⟨ψ₀ | e^{-iH_f t} | ψ₀⟩|²for the XX → XX quench H_XX(J₀) → H_XX(J_f) of the infinite Δ = 0 chain (Calabrese-Essler-Fagotti, J. Stat. Mech. (2012) P07016, specialised to the Gaussian-state-to-Gaussian-state, no-pairing sub-case).
Because H_XX(J) Jordan–Wigner-transforms to a tight-binding fermion chain without pairing, both H_XX(J₀) and H_XX(J_f) are diagonalised in the same plane-wave basis c(k). The Loschmidt amplitude therefore factorises into single-mode phases,
⟨ψ₀ | e^{-iH_f t} | ψ₀⟩
= ∏_k exp{ -i ε_{J_f}(k) t · (n_k(J₀) - 1/2) },whose modulus is identically 1 (each factor is a pure phase). Equivalently, |ψ₀⟩ = |GS(J₀)⟩ is a number eigenstate of H_f because both Hamiltonians are diagonal in the same {n̂_k}, so e^{-iH_f t}|ψ₀⟩ = e^{-iE_f^{(J₀)} t}|ψ₀⟩ is a pure phase. Hence
λ(t) ≡ 0 for every (J₀, J_f), including sgn J₀ ≠ sgn J_f.The static overlap |⟨GS(J₀)|GS(J_f)⟩| does vanish at sign-flip (Anderson orthogonality of complementary Fermi seas), but that is a different quantity from the Loschmidt autocorrelation and does not enter λ(t).
This trivial result holds because the only XX → XX quench expressible in the current XXZ1D model class is GS-to-GS without any Bogoliubov-rotation knob. A non-trivial Loschmidt rate appears in quenches from non-Gaussian initial states (Néel / dimer; CEF 2012) or under XY-pairing dynamics, both of which are Phase-2 follow-ups (see issues #143, #146).
Arguments
model_f::XXZ1D— final Hamiltonian. Must haveΔ = 0(otherwiseDomainError); a follow-up issue (#108 / #143) coversΔ ≠ 0.initial::XXZ1D— initial Hamiltonian whose ground state is the pre-quench state|ψ₀⟩. Must also haveΔ = 0.t::Real— real evolution time.
Returns
0.0 (the trivial Phase-1 value, valid for every t ≥ 0 and every sign combination of (initial.J, model_f.J)).
Examples
julia> m = XXZ1D(; J=1.0, Δ=0.0);
julia> fetch(m, LoschmidtEcho(; mode=:rate), Infinite(); initial=m, t=1.0)
0.0
julia> fetch(m, LoschmidtEcho(; mode=:rate), Infinite();
initial=XXZ1D(; J=0.5, Δ=0.0), t=1.0)
0.0
julia> fetch(m, LoschmidtEcho(; mode=:rate), Infinite();
initial=XXZ1D(; J=-1.0, Δ=0.0), t=1.0) # sign-flip — also 0
0.0References
- P. Calabrese, F.H.L. Essler, M. Fagotti, J. Stat. Mech. (2012) P07016 — XX-quench dynamics, Loschmidt amplitude.
- M. Heyl, A. Polkovnikov, S. Kehrein, Phys. Rev. Lett. 110, 135704 (2013) — definition of the dynamical Loschmidt rate λ(t).
- F.H.L. Essler, M. Fagotti, J. Stat. Mech. (2016) 064002.
<!– ATLAS:DOCS:END –>