Sine-Gordon particle lines and asymptotic levels¶
Overview · Vacuum solver and conventions · Exports
For a worked example with plots and downloadable data, see the particles and finite-volume tutorial.
Two tools cover the first excitation checkpoint:
bethe-sine-gordon-dispersion: infinite-volume particle dispersions and two-particle lower thresholds, in both attractive and repulsive regimes.bethe-sine-gordon-bethe-yang: selected large-volume two-soliton levels. These are asymptotic, not exact finite-volume excited energies.
Both use fp64 by default, native long-double and optional MPLAPACK fp128.
Both additionally accept --precision bits-N or digits-N with Uni20's MPFR
scalars enabled; this requires no MPLAPACK. The Bethe-Yang phase integrals use
the same explicit working precision as the level solve.
All dimensional quantities use velocity=hbar=1. The mass input M is the physical
soliton mass, not the bare cosine coefficient or the lightest breather mass.
bethe-sine-gordon-dispersion --p 0.4 --points 129 --csv sg-lines.csv
bethe-sine-gordon-dispersion --p 0.5 --momentum 0.7 --precision long-double
bethe-sine-gordon-dispersion --p 0.4 --momentum 0.7 --precision digits-100
bethe-sine-gordon-bethe-yang --p 2 --length 10 --levels 4 --json sg-pairs.json
bethe-sine-gordon-bethe-yang --p 1 --length 10 --number 1.5 --precision fp128
Use --references for literature; ordinary reports include conventions,
provenance, numerical status and CPU time. CSV/TSV/JSON share the usual streaming,
retention and overwrite-protection facilities. Half-integer Bethe labels are
exported as decimal numbers.
Particles, charges and thresholds¶
We retain the vacuum solver's canonical kinetic term and coupling:
Soliton and antisoliton have topological charges +1 and -1. Breathers are neutral and exist for positive integers satisfying np<1. A pole reaching np=1 is at the soliton–antisoliton threshold and is excluded from our stable particle list. Thus p=1 has no breathers, while p=1/2 has only B1. Existence is decided in the selected scalar arithmetic; use higher precision to distinguish couplings closer to a threshold than that arithmetic resolves. See Fehér–Takács, Eq. (2.2).
For physical momentum k, the curves are
The second relation follows by minimizing at a common velocity, not at equal momenta for unequal masses. It is an infimum for specified particle content, with no finite upper edge. A lower-lying bound particle is a separate branch, not part of the scattering continuum's onset. Charges add; energies alone do not establish whether a chosen local operator couples to that sector.
The frontend enumerates all stable species and unordered pairs, including
identical pairs. --branch particles|thresholds|all selects rows. A default grid
covers k=0..5M; --max-momentum changes its endpoint and --momentum selects a
single signed value instead. There is no Brillouin zone or unit-cell folding in
this continuum theory. Very weak coupling can produce many species: enumeration
is limited to 256 breathers and one million output rows, with an explicit error
rather than silent truncation. The library can evaluate a chosen B_n directly.
The MPFR path carries the requested precision through input parsing, masses,
threshold sums, momenta and exports, including zero momentum. For example,
333-bit arithmetic distinguishes the appearance of B2 at couplings
0.5 +/- 1e-60, which binary128 cannot resolve. MPFR's wider exponent range
also permits mass and momentum scales outside the native formats. Working
precision does not change the strict pole condition or introduce spectral
weights. These elementary formulas are inexpensive, so the CLI remains serial.
Scattering and Bethe–Yang convention¶
The library exposes the odd same-charge phase for real rapidity at all p>0:
The constant minus sign is kept separate. The phase integrates the existing vacuum kernel's Fourier multiplier with sin(k theta)/k, using native compensated quadrature and a separate analytic Fourier-tail bound. Its convention follows Fehér–Pálmai–Takács, Eq. (2.1).
The current Bethe–Yang solver selects same-charge pairs at p>=1, with total momentum zero, rapidities ±theta, and topological winding charge +2 or -2:
These winding sectors allow the field to change by 2pi Q/beta around the circle;
they are not neutral states with strictly zero winding. --charge selects ±2;
--number is the first positive I and --levels adds consecutive values.
The free solution brackets the positive root in the repulsive regime. The
constant S-matrix sign accounts for the half-odd quantization. At p=1, chi=0,
giving momenta ±2pi I/L directly.
Each requested level has its own root search and phase integrals. Use
--threads N to overlap these independent calculations, for example:
OPENBLAS_NUM_THREADS=1 OMP_NUM_THREADS=1 \
bethe-sine-gordon-bethe-yang --p 2 --length 100 --levels 129 \
--threads 4 --no-retain --csv pairs.csv --quiet
One worker (the default), a single level, or the analytic free point p=1 uses
direct serial evaluation. Otherwise a bounded window holds at most 128 active or
uncollected results; rows are written on the calling thread in Bethe-number
order, including failed levels and their diagnostics. --no-retain disables
table storage after delivery. Each root search and phase quadrature remains
sequential. Short interacting scans may not benefit from scheduling. CPU timing
covers the whole level grid including ordered output; its scope, the execution
mode and the requested concurrency limit are recorded in metadata.
We do not solve mixed soliton–antisoliton transfer-matrix channels, breather Bethe–Yang levels, or nonzero-total-momentum pairs here. In particular, simply relabeling this pair as neutral would give the wrong state-selection rules.
Bethe–Yang omits wrapping/vacuum-polarization corrections. No minimum ML is enforced: small-volume output is still a solution of the stated asymptotic equation, not a certified approximation to the exact level there. Adding the separate vacuum energy does not restore the omitted excited-state dressing. For exact selected finite-volume levels, use the separate excited-state NLIE solver: p>=1, opposite rapidities, I=0.5 or 1.5, charge +/-2. It resolves the sea and subtracts a separately converged vacuum to obtain a gap.
Numerical diagnostics and checks¶
The levels table separates the counting residual, Fourier quadrature estimate,
tail bound and phase status. --tolerance is absolute in the counting equation,
default 16384 native epsilons; each phase gets tolerance/16. Iteration and
per-phase quadrature/cutoff budgets are independent. None bounds the omitted
physical wrapping corrections. Energy and rapidity are absent on failed solves
(JSON null), with exit 2; invalid parameters exit 1 before exports are opened.
Dispersion rows likewise omit unrepresentable energies. Unrepresentable input
mass scales are rejected before exporting a spectrum.
The level solver interpolates successive counting residuals with a safeguarded secant step. Trials stay inside the analytic bracket between zero and the free rapidity; unsafe steps or inadequate residual reduction trigger bisection. Every trial uses the full phase tolerance, and acceptance still requires the counting residual plus the phase's quadrature and tail estimates to meet the requested tolerance. This avoids spending a phase integral on every bisection bit without loosening the numerical target.
Checks include the free Dirac spectrum, the p=1/2 closed phase
\(\chi=-\arctan(\sinh\theta)\), the p=2 rapidity-space kernel, near-free
native-precision response, and the original exponential quantization condition.
Independent 90-digit references
use a closed rapidity kernel rather than the production Fourier integral.
Library regressions cover unequal-mass threshold minimization, scaling,
breather appearance boundaries and distinct numerical-budget failures.
MPFR particle tests use independent algebraic masses at p=2/5, a 512-bit
reference, signed momenta, and mass scales from 1e-7000 to 1e7000.
They verify accuracy growth at 128/256/333 bits and reject mixed, exact or
unset precision inputs. Scalar-only sanitizer builds exercise this whole path.
The two-flavour Schwinger comparison¶
For equal small fermion masses at theta=0, the leading light-sector effective theory has canonical beta squared 2pi, hence p=1/3. Soliton, antisoliton and B1 form a mass-degenerate triplet; B2 is a singlet with mass sqrt(3)M. B3 is at threshold and is not counted. These are useful light-particle MPS targets.
This does not solve the full massive Schwinger model, its heavy eta mode, or a finite-spacing gauge Hamiltonian. Corrections to the leading effective theory and lattice artifacts are separate. The DMRG study by Itou, Matsumoto and Tanizaki, particularly Sec. 2, explains the bosonization and the triplet/singlet comparison.
Library entry points¶
#include <bethe/sine_gordon_particles.hpp>
#include <bethe/sine_gordon_bethe_yang.hpp>
namespace sg = bethe::sine_gordon;
sg::ParticleSpectrum<long double> spectrum(1.0L, 0.4L);
auto energy = spectrum.energy({sg::ParticleKind::breather, 1}, 0.7L);
auto phase = sg::soliton_phase(0.7L, 2.0L);
auto pair = sg::same_charge_pair(1.0L, 10.0L, 2.0L, uni20::from_twice(1));
// Check pair.converged before using *pair.energy or *pair.rapidity.
For MPFR particles, both parameters and each query momentum must have the same explicit finite precision:
using R = uni20::mpreal;
auto precision = uni20::Precision::bits(333);
sg::ParticleSpectrum<R> spectrum(R(1, precision), R("0.4", precision));
auto energy = spectrum.energy({sg::ParticleKind::breather, 1}, R("0.7", precision));
ParticleSpectrum owns its parameters and constants and has immutable queries.
Independent spectra at different precisions can be captured by value in an
Async observable grid; wait on the grid's
final result. Complete masses, particle energies and pair thresholds agree with
serial evaluation under deferred and one/four-worker execution, including an
independent failing query. No ambient MPFR precision is changed.
Explicit precision for asymptotic levels¶
Both excitation tools accept --precision bits-N and digits-N when Uni20's
MPFR scalar support is enabled; no MPLAPACK provider is required. For example:
bethe-sine-gordon-bethe-yang --p 2 --length 10 --precision bits-256
bethe-sine-gordon-bethe-yang --p 2 --length 10 --precision bits-333 \
--tolerance 1e-80 --max-iterations 512 --levels 3 --threads 2
Arithmetic precision, root iterations and Fourier quadrature budgets are independent. Interpolation usually needs far fewer iterations than bisection, but the iteration budget is still enforced. A converged counting equation remains an asymptotic Bethe–Yang energy: extra digits do not restore the omitted wrapping corrections.
using R = uni20::mpreal;
auto p = uni20::Precision::bits(256);
sg::BetheYangOptions<R> options(p);
auto pair = sg::same_charge_pair(R(1, p), R(10, p), R(2, p),
uni20::from_twice(1), options);
sg::KernelOptions<R> phase_options(p);
auto phase = sg::soliton_phase(R("0.7", p), R(2, p), phase_options);
All numerical inputs and controls require the same explicit finite precision. Analytic endpoints and unsuccessful solves retain that precision; unavailable energies remain absent. Owning Async level requests may mix precisions, and completion is awaited through the final grid result. The shared Fourier integrals use Uni20's finite tanh–sinh quadrature with separate analytic tail bounds. The independent reference generator uses the closed \(p=2\) rapidity-space phase instead of that Fourier representation.