Heisenberg1D — Spin-1/2 AFM Heisenberg Chain
Heisenberg1D is a thin delegator over XXZ1D with $\Delta = 1$. The struct itself carries no fields; the exchange coupling $J$ is passed as a kwarg at fetch time. Method signatures may change in v0.19. There is also a known wrinkle in the ITensorModels.to_qatlas(::Heisenberg1D) bridge where $J$ can be lost in conversion — for non-unit $J$ prefer XXZ1D(; J, Δ=1.0) directly.
Hamiltonian
\[H = J \sum_{i} \mathbf{S}_i \cdot \mathbf{S}_{i+1}, \qquad \mathbf{S}_i = \tfrac{1}{2}\boldsymbol{\sigma}_i, \qquad J > 0\ \text{(antiferromagnetic)}.\]
The chain is gapless; the low-energy theory is a $c = 1$ Luttinger liquid (free compactified boson). The ground state is a singlet ($S_\text{tot} = 0$) for any finite even $N$ with AFM coupling.
Status: thin delegator over XXZ1D(Δ = 1)
Every OBC observable on Heisenberg1D is implemented by forwarding to XXZ1D(Δ=1.0, J=J):
QAtlas.fetch(Heisenberg1D(), Energy(), OBC(6); beta=1.0, J=1.5)
# == QAtlas.fetch(XXZ1D(J=1.5, Δ=1.0), Energy(), OBC(6); beta=1.0)For $J = 1$ the kwarg can be omitted (default 1.0).
Coverage Matrix
All OBC rows delegate to XXZ1D(Δ=1) dense-ED ($N \le 12$). The infinite-chain ground-state energy density is the original Hulthén value.
| Quantity | OBC | Infinite |
|---|---|---|
Energy / FreeEnergy / ThermalEntropy / SpecificHeat | via XXZ1D | — |
MagnetizationX / Y / Z (+ …Local) | via XXZ1D | — |
SusceptibilityXX / YY / ZZ | via XXZ1D | — |
XXCorrelation / YY / ZZ (:static, :connected) | via XXZ1D | — |
VonNeumannEntropy / RenyiEntropy | via XXZ1D | — |
MassGap | via XXZ1D ED gap | $0$ (gapless Luttinger) |
CentralCharge | — | $1$ (free boson) |
GroundStateEnergyDensity | — | $J(1/4 - \ln 2)$ (Hulthén 1938) |
ExactSpectrum | $N = 2$ OBC dimer + $N = 4$ PBC ring | — |
The closed-form $N = 2$ dimer and $N = 4$ ring spectra are exposed through ExactSpectrum and used as harness anchors.
SU(2) Symmetry Identities
is_su2_symmetric(::Heisenberg1D) === true, so the SU(2) row of SYMMETRY_IDENTITIES (PR #133) is automatically applied by the test harness. The identities checked numerically are
\[\chi_{xx} = \chi_{yy} = \chi_{zz}, \qquad m_\alpha = 0\ \ (\alpha \in \{x, y, z\}).\]
These hold to ED precision because the dense-ED kernel diagonalises the full SU(2)-symmetric Hamiltonian without breaking the rotation.
Quick-look code
using QAtlas
m = Heisenberg1D()
β = 1.0
N = 6
QAtlas.fetch(m, Energy(), OBC(N); beta=β, J=1.0)
QAtlas.fetch(m, SpecificHeat(), OBC(N); beta=β, J=1.0)
QAtlas.fetch(m, MassGap(), OBC(N); J=1.0)
QAtlas.fetch(m, MassGap(), Infinite(); J=1.0) # 0
QAtlas.fetch(m, GroundStateEnergyDensity(), Infinite(); J=1.0) # J(1/4 - ln 2)
# Closed-form spectra (used as test anchors)
QAtlas.fetch(m, ExactSpectrum(); N=2, J=1.0, bc=:OBC) # dimer
QAtlas.fetch(m, ExactSpectrum(); N=4, J=1.0, bc=:PBC) # 4-site ringClosed-form anchors
Dimer ($N = 2$, OBC)
The two-site Hilbert space splits into a singlet and a triplet:
\[\text{Spec}(H) = \left\{-\tfrac{3J}{4},\; \tfrac{J}{4},\; \tfrac{J}{4},\; \tfrac{J}{4}\right\}\]
Singlet–triplet gap $\Delta = J$; full derivation in Heisenberg dimer: singlet–triplet.
4-site PBC ring
The 16-dimensional spectrum decomposes into a unique singlet ground state at $E_0 = -2J$, a triplet at $-J$, mixed states at $0$, and a quintet at $+J$. Used as a finite-size cross-check against the Bethe ansatz.
Thermodynamic-limit ground-state energy
\[e_0 = J\!\left(\tfrac{1}{4} - \ln 2\right) \approx -0.4431\,J\]
Full Bethe-ansatz derivation in Bethe ansatz: Heisenberg $e_0$.
References
- H. Bethe, Z. Physik 71, 205 (1931) — original Bethe ansatz.
- L. Hulthén, Ark. Mat. Astron. Fys. 26A, No. 11 (1938) — $e_0 = J(1/4 - \ln 2)$.
- A. Auerbach, Interacting Electrons and Quantum Magnetism (Springer, 1994).
- T. Giamarchi, Quantum Physics in One Dimension (Oxford, 2004), Ch. 6.
Related
- XXZ1D — anisotropic generalisation; Heisenberg lives at $\Delta = 1$.
- S1Heisenberg1D — spin-1 cousin in the Haldane phase (gapped, topologically non-trivial).
- TFIM — $c = 1/2$ Ising critical line for contrast.
<!– 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 5 models register 57 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 |
|---|---|---|---|---|
DMIHeisenberg1D | Energy | Infinite | 🟢 corroborated-at-p | 6 |
Heisenberg1D | ConformalTower | PBC | 🟠 uncorroborated-but-feasible | 0 |
Heisenberg1D | Energy | OBC | 🟢 corroborated-at-p | 42 |
Heisenberg1D | EnergyLocal | OBC | 🟠 uncorroborated-but-feasible | 0 |
Heisenberg1D | FreeEnergy | Infinite | 🟠 uncorroborated-but-feasible | 0 |
Heisenberg1D | FreeEnergy | OBC | 🟢 corroborated-at-p | 36 |
Heisenberg1D | GroundStateEnergyDensity | Infinite | 🟢 corroborated-at-p | 6 |
Heisenberg1D | LuttingerParameter | Infinite | 🔵 coherent | 2 |
Heisenberg1D | MagnetizationX | OBC | 🔵 coherent | 18 |
Heisenberg1D | MagnetizationXLocal | OBC | 🟠 uncorroborated-but-feasible | 0 |
Heisenberg1D | MagnetizationY | OBC | 🔵 coherent | 18 |
Heisenberg1D | MagnetizationYLocal | OBC | 🟠 uncorroborated-but-feasible | 0 |
Heisenberg1D | MagnetizationZ | OBC | 🔵 coherent | 18 |
Heisenberg1D | MagnetizationZLocal | OBC | 🟠 uncorroborated-but-feasible | 0 |
Heisenberg1D | MassGap | Infinite | 🟢 corroborated-at-p | 1 |
Heisenberg1D | MassGap | OBC | 🟢 corroborated-at-p | 9 |
Heisenberg1D | RenyiEntropy | Infinite | 🟠 uncorroborated-but-feasible | 0 |
Heisenberg1D | RenyiEntropy | OBC | 🟢 corroborated-at-p | 72 |
Heisenberg1D | SpecificHeat | Infinite | 🟠 uncorroborated-but-feasible | 0 |
Heisenberg1D | SpecificHeat | OBC | 🟢 corroborated-at-p | 45 |
Heisenberg1D | SusceptibilityXX | OBC | 🟢 corroborated-at-p | 9 |
Heisenberg1D | SusceptibilityYY | OBC | 🟢 corroborated-at-p | 9 |
Heisenberg1D | SusceptibilityZZ | OBC | 🟢 corroborated-at-p | 9 |
Heisenberg1D | ThermalEntropy | Infinite | 🟠 uncorroborated-but-feasible | 0 |
Heisenberg1D | ThermalEntropy | OBC | 🟢 corroborated-at-p | 45 |
Heisenberg1D | UniversalityClass | Infinite | 🟠 uncorroborated-but-feasible | 0 |
Heisenberg1D | VonNeumannEntropy | Infinite | 🟠 uncorroborated-but-feasible | 0 |
Heisenberg1D | VonNeumannEntropy | OBC | 🟢 corroborated-at-p | 36 |
Heisenberg1D | ZZStructureFactor | Infinite | 🟢 corroborated-at-p | 2 |
HeisenbergXYZ | CorrelationLength | Infinite | 🟠 uncorroborated-but-feasible | 0 |
HeisenbergXYZ | Energy | Infinite | 🟢 corroborated-at-p | 3 |
HeisenbergXYZ | GroundStateEnergyDensity | Infinite | 🟠 uncorroborated-but-feasible | 0 |
HeisenbergXYZ | LuttingerParameter | Infinite | 🔵 coherent | 1 |
HeisenbergXYZ | MassGap | Infinite | 🟠 uncorroborated-but-feasible | 0 |
HeisenbergXYZ | SpontaneousMagnetization | Infinite | 🟠 uncorroborated-but-feasible | 0 |
J1J2Heisenberg1D | Energy | Infinite | 🟢 corroborated-at-p | 6 |
S1Heisenberg1D | Energy | Infinite | 🟢 corroborated-at-p | 3 |
S1Heisenberg1D | Energy | OBC | 🟢 corroborated-at-p | 29 |
S1Heisenberg1D | EnergyLocal | OBC | 🟠 uncorroborated-but-feasible | 0 |
S1Heisenberg1D | FreeEnergy | OBC | 🟢 corroborated-at-p | 36 |
S1Heisenberg1D | MagnetizationX | OBC | 🔵 coherent | 24 |
S1Heisenberg1D | MagnetizationXLocal | OBC | 🟠 uncorroborated-but-feasible | 0 |
S1Heisenberg1D | MagnetizationY | OBC | 🔵 coherent | 24 |
S1Heisenberg1D | MagnetizationZ | OBC | 🔵 coherent | 24 |
S1Heisenberg1D | MagnetizationZLocal | OBC | 🟠 uncorroborated-but-feasible | 0 |
S1Heisenberg1D | MassGap | Infinite | ⚪ cited-only | 2 |
S1Heisenberg1D | MassGap | OBC | 🟠 uncorroborated-but-feasible | 0 |
S1Heisenberg1D | RenyiEntropy | OBC | 🟢 corroborated-at-p | 54 |
S1Heisenberg1D | SpecificHeat | OBC | 🟢 corroborated-at-p | 36 |
S1Heisenberg1D | SusceptibilityXX | OBC | 🟢 corroborated-at-p | 6 |
S1Heisenberg1D | SusceptibilityYY | OBC | 🟢 corroborated-at-p | 6 |
S1Heisenberg1D | SusceptibilityZZ | OBC | 🟢 corroborated-at-p | 6 |
S1Heisenberg1D | ThermalEntropy | OBC | 🟢 corroborated-at-p | 45 |
S1Heisenberg1D | VonNeumannEntropy | OBC | 🟢 corroborated-at-p | 27 |
S1Heisenberg1D | XXCorrelation | OBC | 🟢 corroborated-at-p | 36 |
S1Heisenberg1D | YYCorrelation | OBC | 🟢 corroborated-at-p | 36 |
S1Heisenberg1D | ZZCorrelation | OBC | 🟢 corroborated-at-p | 36 |
<!– 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.DMIHeisenberg1D — Type
DMIHeisenberg1D(; J::Real = 1.0, D::Real = 0.0) <: AbstractQAtlasModelSpin-½ Heisenberg chain with Dzyaloshinskii-Moriya interaction along ẑ:
H = J Σ_i Sᵢ · Sᵢ₊₁ + D Σ_i (Sᵢˣ Sᵢ₊₁ʸ − Sᵢʸ Sᵢ₊₁ˣ), J > 0, D ∈ ℝ.Phase 1 implements only the closed-form D = 0 point (pure Heisenberg), delegating to Heisenberg1D. Generic D ≠ 0 introduces a spiral ground state via a gauge mapping to a twisted XXZ chain (Affleck- Oshikawa 1999); closed-form energy is technically Bethe-ansatz-tractable on the gauged model but is deferred to Phase 2, raising DomainError from fetch(..., Energy{:per_site}(), Infinite()).
The default constructor DMIHeisenberg1D() lands on J = 1, D = 0 — the Bethe-Hulthén point, the only Phase-1 closed-form case.
Fields
J::Float64— Heisenberg exchange (J > 0 antiferromagnetic).D::Float64— DM coupling along ẑ (any real).
References
- H. Bethe, Z. Physik 71, 205 (1931).
- L. Hulthén, Ark. Mat. Astron. Fys. 26A, No. 11 (1938).
- I. E. Dzyaloshinskii, J. Phys. Chem. Solids 4, 241 (1958).
- T. Moriya, Phys. Rev. 120, 91 (1960).
- I. Affleck, M. Oshikawa, Phys. Rev. B 60, 1038 (1999).
QAtlas.fetch — Method
fetch(::DMIHeisenberg1D, ::Energy{:per_site}, ::Infinite;
J=m.J, D=m.D) -> Float64Ground-state energy density of the spin-½ Heisenberg-DM chain in the thermodynamic limit. Phase 1 supports only the closed-form D = 0 point:
D = 0→ Bethe-Hulthén:E/N = J · (1/4 − ln 2). Delegates tofetch(Heisenberg1D(), GroundStateEnergyDensity(), Infinite(); J=J).D ≠ 0→DomainError: spiral order via gauge rotation to twisted XXZ (Affleck-Oshikawa 1999); closed-form Bethe-ansatz energy technically available but deferred to Phase 2.
Floating-point tolerance for the D = 0 match is atol = 1e-12.
Note on delegation: Heisenberg1D currently exposes its thermodynamic- limit energy density via the legacy GroundStateEnergyDensity quantity, not the modern Energy{:per_site} axis. This wrapper bridges to the modern axis on the public surface while keeping the closed-form constant single-source-of-truth in the Heisenberg1D delegate.
References
- L. Hulthén, Ark. Mat. Astron. Fys. 26A, No. 11 (1938) — Bethe-Hulthén ground-state energy density.
- I. E. Dzyaloshinskii, J. Phys. Chem. Solids 4, 241 (1958).
- T. Moriya, Phys. Rev. 120, 91 (1960).
- I. Affleck, M. Oshikawa, Phys. Rev. B 60, 1038 (1999) — spiral / twisted-XXZ mapping (deferred to Phase 2).
QAtlas.ExactSpectrum — Type
ExactSpectrumDispatch tag for the full sorted eigenvalue spectrum of a finite model.
QAtlas.GroundStateEnergyDensity — Type
GroundStateEnergyDensityDispatch tag for the ground-state energy per site in the thermodynamic limit (N → ∞).
QAtlas.Heisenberg1D — Type
Heisenberg1DDispatch tag for the spin-1/2 antiferromagnetic Heisenberg model on a 1D chain (or more generally any finite spin-1/2 cluster). Hamiltonian:
H = J Σ_{⟨i,j⟩} S_i · S_j, spin-1/2, J > 0 antiferromagneticQAtlas.fetch — Method
fetch(::Heisenberg1D, ::Energy{:total}, ::OBC; beta, J=1.0) -> Float64Total thermal energy ⟨H⟩_β for the spin-½ antiferromagnetic Heisenberg OBC chain at finite N (the isotropic point Δ = 1 of XXZ1D). Routes through fetch(::XXZ1D, ::Energy{:total}, ::OBC).
Since Heisenberg1D currently carries no J field, callers must pass J as a kwarg (default J = 1.0). Downstream bridges (e.g. ITensorModels to_qatlas(::Heisenberg1D)) lose J on conversion; use XXZ1D(; J, Δ=1) directly if you need a non-unit coupling.
QAtlas.fetch — Method
fetch(::Heisenberg1D, ::ExactSpectrum; N, J=1.0) -> Vector{Float64}Return the sorted exact spectrum of the spin-1/2 Heisenberg Hamiltonian on an N-site chain or ring with boundary condition bc.
Supported cases
- N=2, bc=:OBC (dimer):
[-3J/4, J/4, J/4, J/4](singlet Es = -3J/4, triplet Et = J/4, three-fold degenerate). - N=4, bc=:PBC (4-site ring):
[-2J, -J×3, 0×7, +J×5]Ground state E₀ = -2J (unique singlet). The ferromagnetic quintet sits at E = +J. The full degeneracy structure is: 1 singlet + 1 triplet + (1 singlet + 2 triplets at E=0) + 1 quintet.
Arguments
N::Int: number of spin-1/2 sitesJ::Real: Heisenberg coupling constant (default 1.0; J > 0 AFM)bc::Symbol: boundary condition,:OBC(default) or:PBC
References
A. Auerbach, "Interacting Electrons and Quantum Magnetism" (1994), §2.
H. Bethe, Z. Physik 71, 205 (1931).QAtlas.fetch — Method
fetch(::Heisenberg1D, ::GroundStateEnergyDensity, ::Infinite; J=1.0) -> Float64BC-explicit dispatch sister of the legacy fetch(::Heisenberg1D, ::GroundStateEnergyDensity; J=1.0) method. The thermodynamic-limit ground-state energy density is only meaningful at Infinite, so the two methods return the same Hulthén value e₀ = J(1/4 - ln 2). Provided so which(fetch, ::Heisenberg1D, ::GroundStateEnergyDensity, ::Infinite) resolves and the registry drift guard passes.
QAtlas.fetch — Method
fetch(::Heisenberg1D, ::GroundStateEnergyDensity; J=1.0) -> Float64Exact ground-state energy per site of the spin-1/2 antiferromagnetic Heisenberg chain in the thermodynamic limit (N → ∞, PBC):
e₀ = J (1/4 − ln 2) ≈ −0.4431 JThis is one of the earliest and most celebrated results of the Bethe ansatz. The derivation proceeds by solving the Bethe equations for the ground state of
H = J Σᵢ Sᵢ · Sᵢ₊₁in the limit N → ∞, yielding a linear integral equation for the rapidity distribution whose solution gives the energy via integration.
Finite-size corrections
For a PBC chain of N sites, the ground-state energy density approaches e₀ with corrections of order 1/N² (logarithmic corrections also present):
E₀(N)/N = e₀ + O(1/N²)See test/verification/test_universality_cross_check.jl for a finite-size extrapolation verification using ED at N = 4, 6, 8.
Arguments
J::Real: Heisenberg coupling constant (default 1.0; J > 0 AFM)
References
H. Bethe, "Zur Theorie der Metalle. I. Eigenwerte und Eigenfunktionen
der linearen Atomkette", Z. Physik 71, 205–226 (1931) — original
Bethe ansatz solution.
L. Hulthén, "Über das Austauschproblem eines Kristalles",
Ark. Mat. Astron. Fys. 26A, No. 11, 1–106 (1938) — first
evaluation of e₀ = 1/4 − ln 2 from the Bethe equations.QAtlas.fetch — Method
fetch(::Heisenberg1D, ::LuttingerParameter, ::Infinite; J=1.0) -> Float64Luttinger-liquid parameter K = 1/2 of the spin-½ Heisenberg antiferromagnetic chain at the SU(2)-symmetric point — the exact Luther–Peschel 1975 / Affleck 1989 result.
This is the Δ → 1 limit of the XXZ Luttinger parameter K_XXZ(Δ) = π / (2 arccos(−Δ)) (Haldane 1980); delegated to XXZ1D(Δ=1.0).
References
- A. Luther, I. Peschel, Phys. Rev. B 12, 3908 (1975).
- I. Affleck, J. Phys. A 22, 1003 (1989).
- F. D. M. Haldane, Phys. Rev. Lett. 45, 1358 (1980).
QAtlas.fetch — Method
fetch(m::Heisenberg1D, ::EntanglementGrowthSlope, ::Infinite;
beta_eff::Real, kwargs...) -> Float64Calabrese-Cardy 2005 linear-growth slope of post-quench half-system entanglement entropy for the gapless Heisenberg chain (c = 1, v = pi J / 2):
dS_A / dt = pi c v / (3 beta_eff) = pi^2 J / (6 beta_eff).Delegates to Universality(:Heisenberg).
QAtlas.fetch — Method
fetch(::Heisenberg1D, ::EntanglementSaturationDensity, ::Infinite;
beta_eff::Real, kwargs...) -> Float64Long-time post-quench saturation of half-system entanglement entropy per unit length, delegated to Universality(:Heisenberg):
S_A(infty) / L = pi / (6 beta_eff).QAtlas.fetch — Method
fetch(::Heisenberg1D, ::FreeEnergy, ::Infinite; beta, J=1.0)Per-site free energy of the infinite spin-1/2 Heisenberg AF chain via leading-order c = 1 CFT. Returns e₀ - π T² / (6 v_s) for β > 5/J; otherwise NaN + warn. β ≤ 0 raises DomainError.
QAtlas.fetch — Method
fetch(m::Heisenberg1D, ::LiebRobinsonVelocity, ::Infinite;
J = m.J, kwargs...) -> Float64Maximum group velocity of the des Cloizeaux-Pearson spinon dispersion of the spin-1/2 Heisenberg chain. With epsilon(k) = (pi/2) |J sin k| the spinon velocity is
v_s = pi J / 2,attained at k = 0 and k = pi. This is the standard CC quasi-particle velocity that enters the entanglement-spreading formulas.
QAtlas.fetch — Method
fetch(::Heisenberg1D, ::LogarithmicNegativity, ::Infinite;
ℓ_A::Real, ℓ_B::Real, kwargs...) -> Float64Calabrese-Cardy-Tonni 2012 logarithmic negativity of two adjacent intervals, delegated to Universality(:Heisenberg):
E = (1/4) log[ℓ_A * ℓ_B / (ℓ_A + ℓ_B)].QAtlas.fetch — Method
fetch(::Heisenberg1D, ::MutualInformation, ::Infinite;
ℓ_A::Real, ℓ_B::Real, beta::Real=Inf, kwargs...) -> Float64Calabrese-Cardy mutual information of two adjacent intervals, delegated to Universality(:Heisenberg) (c = 1). The chain is gapless SU(2)-invariant Luttinger liquid, so the Universality formula applies directly.
QAtlas.fetch — Method
fetch(::Heisenberg1D, ::SpecificHeat, ::Infinite; beta, J=1.0)Per-site heat capacity via leading-order c = 1 CFT: c_v = π T / (3 v_s) = 2T / (3J).
QAtlas.fetch — Method
fetch(::Heisenberg1D, ::ThermalEntropy, ::Infinite; beta, J=1.0)Per-site entropy via leading-order c = 1 CFT: s = π T / (3 v_s) = 2T / (3J).
QAtlas.S1Heisenberg1D — Type
S1Heisenberg1D(; J::Real = 1.0) <: AbstractQAtlasModelSpin-1 antiferromagnetic Heisenberg chain (Haldane chain),
H = J Σᵢ Sᵢ · Sᵢ₊₁, spin = 1, J > 0 antiferromagnetic.Distinct from Heisenberg1D (spin-1/2) because the spin representation differs: spin-1 has local dimension 3 and a gapped, topologically non-trivial Haldane phase, while spin-1/2 is gapless and critical (Bethe ansatz).
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::Energy{:total}, ::OBC; beta) -> Float64Total thermal energy ⟨H⟩_β of the spin-1 OBC Heisenberg chain at finite N ≤ 8, computed by dense ED.
⟨H⟩_β = Tr(H exp(-βH)) / Tr(exp(-βH))Convention matches fetch(::TFIM, ::Energy{:total}, ::OBC): 1D finite-size boundary conditions return total energy natively.
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::FreeEnergy, ::OBC; beta) -> Float64Per-site Helmholtz free energy f(β) = -log Z / (Nβ) for the spin-1 OBC chain.
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::SpecificHeat, ::OBC; beta) -> Float64Per-site heat capacity c(β) = β² · Var(H) / N for the spin-1 OBC chain, computed exactly from the energy variance in the eigenbasis (no numerical differentiation).
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::ThermalEntropy, ::OBC; beta) -> Float64Per-site Gibbs entropy s(β) = β · (ε - f) for the spin-1 OBC chain.
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::EnergyLocal, ::OBC; beta) -> Vector{Float64}Site-resolved local energy density ε_i of the OBC spin-1 Heisenberg chain such that Σᵢ ε_i = ⟨H⟩_β. Each bond contribution b_i = J ⟨Sᵢ · Sᵢ₊₁⟩_β is split symmetrically between its two endpoints, with the missing left/right bond at i = 1 / i = N set to zero — i.e.
ε_i = (1/2) (b_{i-1} + b_i), b_0 ≡ b_N ≡ 0.QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::Energy{:per_site}, ::Infinite) -> Float64Ground-state energy per site of the spin-1 antiferromagnetic Heisenberg chain (Haldane chain) in the thermodynamic limit:
e₀ ≈ -1.40148403897 JNumerical value from the high-precision DMRG study of S. R. White & D. A. Huse, Phys. Rev. B 48, 3844 (1993). No closed- form expression is known; reliability=:medium in the registry.
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::MagnetizationX, ::OBC; beta) -> Float64Per-site bulk magnetisation ⟨Σᵢ S^x_i⟩_β / N of the spin-1 Heisenberg OBC chain at finite N ≤ 8, computed from the dense thermal density matrix.
Spin-1 convention: S^x carries eigenvalues ±1, 0 (off-diagonal 1/√2 for S^x); see file header. The SU(2)-symmetric AFM ground state has ⟨S^α⟩ = 0 in every direction at any temperature, so this is a non-trivial check only for symmetry- breaking finite-β samples (and for benchmarking sampler bias).
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::MagnetizationXLocal, ::OBC; beta) -> Vector{Float64}Site-resolved [⟨S^x_i⟩_β for i = 1:N] of the spin-1 OBC Heisenberg chain. Sums to N · MagnetizationX/Y/Z (per-site bulk average) by construction.
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::MagnetizationY, ::OBC; beta) -> Float64Per-site bulk magnetisation ⟨Σᵢ S^y_i⟩_β / N of the spin-1 Heisenberg OBC chain at finite N ≤ 8, computed from the dense thermal density matrix.
Spin-1 convention: S^y carries eigenvalues ±1, 0 (off-diagonal 1/√2 for S^x); see file header. The SU(2)-symmetric AFM ground state has ⟨S^α⟩ = 0 in every direction at any temperature, so this is a non-trivial check only for symmetry- breaking finite-β samples (and for benchmarking sampler bias).
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::MagnetizationZ, ::OBC; beta) -> Float64Per-site bulk magnetisation ⟨Σᵢ S^z_i⟩_β / N of the spin-1 Heisenberg OBC chain at finite N ≤ 8, computed from the dense thermal density matrix.
Spin-1 convention: S^z carries eigenvalues ±1, 0 (off-diagonal 1/√2 for S^x); see file header. The SU(2)-symmetric AFM ground state has ⟨S^α⟩ = 0 in every direction at any temperature, so this is a non-trivial check only for symmetry- breaking finite-β samples (and for benchmarking sampler bias).
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::MagnetizationZLocal, ::OBC; beta) -> Vector{Float64}Site-resolved [⟨S^z_i⟩_β for i = 1:N] of the spin-1 OBC Heisenberg chain. Sums to N · MagnetizationX/Y/Z (per-site bulk average) by construction.
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::MassGap, ::Infinite) -> Float64Bulk Haldane gap of the spin-1 antiferromagnetic Heisenberg chain,
Δ_∞ ≈ 0.41048 J(literature value, S. R. White & D. A. Huse, Phys. Rev. B 48, 3844 (1993)). No closed form; reliability=:medium in the registry.
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::MassGap, ::OBC) -> Float64Single-particle gap of the spin-1 Heisenberg OBC chain at finite N ≤ 8,
Δ = E₁ - E₀between the lowest two eigenvalues of the dense Hamiltonian. At fixed N this contains finite-size and edge-state corrections relative to the bulk Haldane gap Δ_∞ ≈ 0.41048 J.
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, q::RenyiEntropy, ::OBC;
ℓ::Int, beta::Real = Inf) -> Float64Rényi entropy S_α = log Tr ρ_A^α / (1 - α) for the OBC spin-1 Heisenberg chain. See VonNeumannEntropy for the partial-trace convention.
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::SusceptibilityXX, ::OBC; beta) -> Float64Per-site uniform XX susceptibility χ_xx(β) = β · Var(M_x) / N of the spin-1 Heisenberg OBC chain via the dense thermal density matrix.
At infinite temperature each site contributes Tr((Sᵅ)²)/3 = 2/3 so χ_αα → 2β/3 for any axis.
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::SusceptibilityYY, ::OBC; beta) -> Float64Per-site uniform YY susceptibility χ_yy(β) = β · Var(M_y) / N of the spin-1 Heisenberg OBC chain via the dense thermal density matrix.
At infinite temperature each site contributes Tr((Sᵅ)²)/3 = 2/3 so χ_αα → 2β/3 for any axis.
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::SusceptibilityZZ, ::OBC; beta) -> Float64Per-site uniform ZZ susceptibility χ_zz(β) = β · Var(M_z) / N of the spin-1 Heisenberg OBC chain via the dense thermal density matrix.
At infinite temperature each site contributes Tr((Sᵅ)²)/3 = 2/3 so χ_αα → 2β/3 for any axis.
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::VonNeumannEntropy{:equilibrium}, ::OBC;
ℓ::Int, beta::Real = Inf) -> Float64Von Neumann entanglement entropy S_vN = -Tr ρ_A log ρ_A of the first ℓ sites of the OBC spin-1 Heisenberg chain. The reduced density matrix ρ_A is the partial trace of the thermal density matrix ρ = exp(-βH) / Z (or the GS projector when beta = Inf) over sites ℓ+1 .. N.
Both ℓ and N = bc.N are bounded by _MAX_ED_SITES_S1 because the full 3^N × 3^N ρ is built explicitly.
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::XXCorrelation{:connected}, ::OBC;
beta, i::Int, j::Int) -> Float64Connected (cumulant) correlator ⟨S^x_i S^x_j⟩ - ⟨S^x_i⟩·⟨S^x_j⟩ for the spin-1 OBC Heisenberg chain.
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::XXCorrelation{:static}, ::OBC;
beta, i::Int, j::Int) -> Float64Static thermal correlator ⟨S^x_i S^x_j⟩_β of the spin-1 OBC Heisenberg chain. Caller passes both site indices 1 ≤ i, j ≤ N; equal sites give ⟨(S^α)²⟩_β.
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::YYCorrelation{:connected}, ::OBC;
beta, i::Int, j::Int) -> Float64Connected (cumulant) correlator ⟨S^y_i S^y_j⟩ - ⟨S^y_i⟩·⟨S^y_j⟩ for the spin-1 OBC Heisenberg chain.
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::YYCorrelation{:static}, ::OBC;
beta, i::Int, j::Int) -> Float64Static thermal correlator ⟨S^y_i S^y_j⟩_β of the spin-1 OBC Heisenberg chain. Caller passes both site indices 1 ≤ i, j ≤ N; equal sites give ⟨(S^α)²⟩_β.
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::ZZCorrelation{:connected}, ::OBC;
beta, i::Int, j::Int) -> Float64Connected (cumulant) correlator ⟨S^z_i S^z_j⟩ - ⟨S^z_i⟩·⟨S^z_j⟩ for the spin-1 OBC Heisenberg chain.
QAtlas.fetch — Method
fetch(model::S1Heisenberg1D, ::ZZCorrelation{:static}, ::OBC;
beta, i::Int, j::Int) -> Float64Static thermal correlator ⟨S^z_i S^z_j⟩_β of the spin-1 OBC Heisenberg chain. Caller passes both site indices 1 ≤ i, j ≤ N; equal sites give ⟨(S^α)²⟩_β.
QAtlas.heisenberg_spinon_dispersion — Method
heisenberg_spinon_dispersion(model::Heisenberg1D, k::Real; J::Real = 1.0)
-> Float64Single-spinon dispersion of the spin-½ antiferromagnetic Heisenberg chain in the thermodynamic limit (Faddeev–Takhtajan 1981):
ε(k) = (π J / 2) |sin k|, k ∈ [0, π].Spinons are massless half-odd-integer-spin excitations and the lower edge of the two-spinon continuum coincides with this dispersion, see heisenberg_two_spinon_lower_edge.
Special values:
ε(0) = 0— gapless point.ε(π/2) = π J / 2— band centre maximum.ε(π) = 0— gapless Umklapp point.
J is passed by keyword because Heisenberg1D is parameterless in this codebase (every other quantity threads J through kwargs the same way).
References
L. D. Faddeev, L. A. Takhtajan, "What is the spin of a spin wave?",
Phys. Lett. A 85, 375 (1981).QAtlas.heisenberg_two_spinon_lower_edge — Method
heisenberg_two_spinon_lower_edge(model::Heisenberg1D, q::Real;
J::Real = 1.0) -> Float64Lower edge of the two-spinon continuum at total momentum q for the spin-½ XXX AFM chain (des Cloizeaux–Pearson 1962):
ε_L(q) = (π J / 2) |sin q|.By construction ε_L(q) ≡ ε(q) where ε is the single-spinon dispersion (heisenberg_spinon_dispersion) — this reflects the kinematic configuration in which one of the two spinons sits at zero energy, so the total energy equals the energy of the other.
Special values:
ε_L(0) = ε_L(π) = 0— gapless points (Umklapp included).ε_L(π/2) = π J / 2— maximum of the lower edge.
References
J. des Cloizeaux, J. J. Pearson, "Spin-wave spectrum of the
antiferromagnetic linear chain", Phys. Rev. 128, 2131 (1962).QAtlas.heisenberg_two_spinon_upper_edge — Method
heisenberg_two_spinon_upper_edge(model::Heisenberg1D, q::Real;
J::Real = 1.0) -> Float64Upper edge of the two-spinon continuum at total momentum q for the spin-½ XXX AFM chain (des Cloizeaux–Pearson 1962):
ε_U(q) = π J |sin(q/2)|.Special values:
ε_U(0) = 0— Goldstone-like vanishing of the support window at q = 0.ε_U(π) = π J— top of the continuum at the Umklapp point.
For q ∈ (0, π] one has ε_U(q) ≥ ε_L(q) strictly except at the gapless points where the continuum collapses to a line.
References
J. des Cloizeaux, J. J. Pearson, "Spin-wave spectrum of the
antiferromagnetic linear chain", Phys. Rev. 128, 2131 (1962).QAtlas.HeisenbergXYZ — Type
HeisenbergXYZ(; Jx::Real = 1.0, Jy::Real = 1.0, Jz::Real = 1.0)
<: AbstractQAtlasModelSpin-½ XYZ chain with three independent exchange couplings
H = Σ_i [ Jx Sˣᵢ Sˣᵢ₊₁ + Jy Sʸᵢ Sʸᵢ₊₁ + Jz Sᶻᵢ Sᶻᵢ₊₁ ].Most-general 1-D nearest-neighbour spin-½ integrable model (Baxter 1972). This release exposes only the axis-aligned reductions Jx = Jy by delegating to the existing XXZ1D machinery:
HeisenbergXYZ(Jx = J, Jy = J, Jz) ≡ XXZ1D(J = J, Δ = Jz / J).General XYZ ground-state energy (Baxter elliptic Bethe ansatz) is tracked as a follow-up phase and raises DomainError here.
Quantities registered:
| Quantity | BC | Method |
|---|---|---|
Energy (:per_site) | Infinite | delegated to XXZ1D |
References
- R. J. Baxter, Annals Phys. 70, 193 (1972).
- L. D. Faddeev, L. A. Takhtajan, J. Soviet Math. 24, 241 (1984).
QAtlas.fetch — Method
fetch(m::HeisenbergXYZ, ::CorrelationLength, ::Infinite;
Jx=m.Jx, Jy=m.Jy, Jz=m.Jz) -> Float64Asymptotic correlation length of the spin-1/2 XYZ chain at the thermodynamic limit.
| Regime | Method |
|---|---|
Jx = Jy, abs(Jz/Jx) <= 1 | gapless critical XXZ: returns Inf |
Jz = 0 (XY line, Jx != Jy) | xi = 1/asinh(abs(Jx-Jy) / (2*sqrt(Jx*Jy))) (dispersion zero) |
massive axial AFM (Jz/Jx > 1) | DomainError |
| generic XYZ | DomainError (Baxter elliptic Phase 3) |
References
- E. Lieb, T. Schultz, D. Mattis, Ann. Phys. 16, 407 (1961).
- B. M. McCoy, T. T. Wu, Phys. Rev. 174, 546 (1968).
QAtlas.fetch — Method
fetch(m::HeisenbergXYZ, ::Energy{:per_site}, ::Infinite;
Jx=m.Jx, Jy=m.Jy, Jz=m.Jz, kwargs...) -> Float64Ground-state energy per site of the spin-½ XYZ chain in the thermodynamic limit, restricted to the axis-aligned reduction Jx = Jy:
HeisenbergXYZ(Jx = J, Jy = J, Jz) ⟶ fetch(XXZ1D(J = J, Δ = Jz/J), …).This routes the call through the XXZ1D Yang-Yang single integral (general -1 < Δ < 1) and the three closed-form points Δ ∈ {-1, 0, 1} already implemented in XXZ1D. General (Jx ≠ Jy) triples require the Baxter elliptic Bethe ansatz and currently raise DomainError — Phase 2.
Jx > 0 is required (so Delta = Jz/Jx is well-defined and the delegation routes into the XXZ1D-tested domain; FM-exchange Jx < 0 is Phase 2).
References
- C. N. Yang, C. P. Yang, Phys. Rev. 150, 327 (1966).
- R. J. Baxter, Annals Phys. 70, 193 (1972).
QAtlas.fetch — Method
fetch(m::HeisenbergXYZ, ::GroundStateEnergyDensity, ::Infinite;
Jx=m.Jx, Jy=m.Jy, Jz=m.Jz) -> Float64Ground-state energy density (per site) of the spin-1/2 XYZ chain at the thermodynamic limit. Supported parameter regimes:
| Regime | Method |
|---|---|
Jx = Jy | delegated to XXZ1D(J=Jx, D=Jz/Jx) Energy(:per_site) |
Jz = 0 (XY line) | closed-form Lieb-Schultz-Mattis (1961) free-fermion |
| generic XYZ | DomainError (Baxter 1972 elliptic deferred to Phase 3) |
References
- E. Lieb, T. Schultz, D. Mattis, Ann. Phys. 16, 407 (1961).
- C. N. Yang, C. P. Yang, Phys. Rev. 150, 327 (1966).
- R. J. Baxter, Ann. Phys. 70, 193 (1972) – generic XYZ via elliptic Bethe ansatz.
QAtlas.fetch — Method
fetch(m::HeisenbergXYZ, ::LuttingerParameter, ::Infinite;
Jx=m.Jx, Jy=m.Jy, Jz=m.Jz) -> Float64Luttinger-liquid parameter at the isotropic Heisenberg point Jx = Jy = Jz, delegated to XXZ1D(Δ = 1):
K = 1/2 (SU(2)-symmetric AFM, Luther-Peschel 1975)The delegation chain is HeisenbergXYZ → XXZ1D(Δ=1) (matching the Energy(:per_site) reduction). Once a dedicated fetch(::Heisenberg1D, ::LuttingerParameter, ::Infinite) lands on main (tracked separately), the intermediate Heisenberg1D hop can be reinstated; the final K is unchanged.
For Jx = Jy ≠ Jz (XXZ axial anisotropy), use XXZ1D directly. For generic XYZ (Baxter 1972 elliptic / theta-function regime), defer to a later phase — this Phase-2 path throws DomainError for non-isotropic couplings.
References
- A. Luther, I. Peschel, Phys. Rev. B 12, 3908 (1975).
- R. J. Baxter, Ann. Phys. 70, 193 (1972) — elliptic XYZ.
QAtlas.fetch — Method
fetch(m::HeisenbergXYZ, ::MassGap, ::Infinite;
Jx=m.Jx, Jy=m.Jy, Jz=m.Jz) -> Float64Single-particle mass gap (smallest excitation energy above the ground state) of the spin-1/2 XYZ chain at the thermodynamic limit.
| Regime | Method |
|---|---|
Jx = Jy, abs(Jz/Jx) <= 1 | gapless critical XXZ: returns 0.0 |
Jz = 0 (XY line, Jx != Jy) | LSM dispersion minimum: (1/4)*abs(Jx - Jy) |
massive axial AFM (Jz/Jx > 1) | DomainError (Yang-Yang gap deferred) |
generic XYZ (Jx != Jy, Jz != 0) | DomainError (Baxter elliptic Phase 3) |
References
- E. Lieb, T. Schultz, D. Mattis, Ann. Phys. 16, 407 (1961).
- C. N. Yang, C. P. Yang, Phys. Rev. 150, 327 (1966).
- A. Luther, I. Peschel, Phys. Rev. B 12, 3908 (1975).
- R. J. Baxter, Ann. Phys. 70, 193 (1972).
QAtlas.fetch — Method
fetch(m::HeisenbergXYZ, ::SpontaneousMagnetization, ::Infinite;
Jx=m.Jx, Jy=m.Jy, Jz=m.Jz) -> Float64Spontaneous magnetization (sublattice order parameter) of the spin-1/2 XYZ chain at the thermodynamic limit.
| Regime | Method |
|---|---|
Jx = Jy, abs(Jz/Jx) <= 1 | gapless critical XXZ, no LRO in 1D: returns 0.0 |
Jz = 0 (XY line, Jx != Jy) | McCoy-Wu / Pfeuty 1/8: M = (1 - (Jmin/Jmax)^2)^(1/8) |
massive axial AFM (Jz/Jx > 1) | DomainError (Neel staggered M Baxter 1971 deferred) |
| generic XYZ | DomainError (Baxter 1973 PRL elliptic theta deferred) |
References
- B. M. McCoy, T. T. Wu, Phys. Rev. 174, 546 (1968).
- P. Pfeuty, Ann. Phys. 57, 79 (1970).
- R. J. Baxter, Phys. Rev. Lett. 31, 1294 (1973) – generic XYZ.
QAtlas.J1J2Heisenberg1D — Type
J1J2Heisenberg1D(; J1::Real = 1.0, J2::Real = 0.5) <: AbstractQAtlasModelSpin-½ J₁-J₂ Heisenberg chain:
H = J₁ Σ_i Sᵢ · Sᵢ₊₁ + J₂ Σ_i Sᵢ · Sᵢ₊₂, J₁ > 0, J₂ ≥ 0.Define the frustration ratio j = J₂ / J₁. Phase 1 implements only the two closed-form points:
j = 0→ Bethe-HulthénE/N = J₁ (1/4 − ln 2),j = 1/2→ Majumdar-GhoshE/N = −3 J₁ / 8.
Generic j (0 < j < ∞, j ∉ {0, 1/2}) requires DMRG; deferred to Phase 2, raises DomainError from fetch(..., Energy{:per_site}(), Infinite()).
The default constructor J1J2Heisenberg1D() lands on J₁ = 1, J₂ = 1/2 — the Majumdar-Ghosh point, the most physically interesting closed-form case.
Fields
J1::Float64— nearest-neighbour antiferromagnetic exchange (J₁ > 0).J2::Float64— next-nearest-neighbour exchange (J₂ ≥ 0).
References
- H. Bethe, Z. Physik 71, 205 (1931).
- L. Hulthén, Ark. Mat. Astron. Fys. 26A, No. 11 (1938).
- C. K. Majumdar, D. K. Ghosh, J. Math. Phys. 10, 1388 (1969).
- S. R. White, I. Affleck, Phys. Rev. B 54, 9862 (1996).
QAtlas.fetch — Method
fetch(::J1J2Heisenberg1D, ::Energy{:per_site}, ::Infinite;
J1=m.J1, J2=m.J2) -> Float64Ground-state energy density of the spin-½ J₁-J₂ Heisenberg chain in the thermodynamic limit. Phase 1 supports only the two closed-form points:
j = J₂/J₁ = 0→ Bethe-Hulthén:E/N = J₁ · (1/4 − ln 2). Delegates tofetch(Heisenberg1D(), GroundStateEnergyDensity(), Infinite(); J=J1).j = 1/2→ Majumdar-Ghosh dimer GS:E/N = −3 J₁ / 8. Delegates tofetch(MajumdarGhosh(; J=J1), GroundStateEnergyDensity(), Infinite()).otherwise →
DomainError: no closed form; numerical DMRG required, deferred to Phase 2.
Floating-point tolerance for the j = 0 and j = 1/2 matches is atol = 1e-12.
Note on delegation: Heisenberg1D and MajumdarGhosh currently expose their thermodynamic-limit energy density via the legacy GroundStateEnergyDensity quantity, not the modern Energy{:per_site} axis. This wrapper bridges to the modern axis on the public surface while keeping the closed-form constants in a single source-of-truth location (the delegate model).
References
- L. Hulthén, Ark. Mat. Astron. Fys. 26A, No. 11 (1938) — Bethe-Hulthén ground-state energy density.
- C. K. Majumdar, D. K. Ghosh, J. Math. Phys. 10, 1388 (1969) — exact dimer ground state at j = 1/2.
- S. R. White, I. Affleck, Phys. Rev. B 54, 9862 (1996) — DMRG study of generic j (deferred to Phase 2).
<!– ATLAS:DOCS:END –>