Sine-Gordon: selected exact finite-volume excitations¶
Overview · Vacuum and conventions · Particle lines and Bethe–Yang · Exports
The worked tutorial plots a selected NLIE gap against Bethe–Yang and explains the energy subtraction.
bethe-sine-gordon-excited solves an excited-state nonlinear integral equation
(NLIE), including the finite-volume sea contribution. Unlike the Bethe–Yang
tool, it does not discard wrapping corrections. “Exact” describes the continuum
equations; their numerical solution still has a tolerance and can fail.
Which states?¶
The implemented family has p>=1, two real holes at opposite rapidities,
half-odd Bethe numbers I=1/2 or 3/2, total momentum zero and topological
winding charge +2 or -2. These are two solitons or two antisolitons, not a
neutral soliton–antisoliton pair. Charge conjugation makes the two signs
degenerate, so --charge changes the sector label, not the equation.
This is the delta=0, no-complex-root, no-special-root family in Feverati–Ravanini–Takács, Eqs. (3.13), (3.15), (3.18), and Sec. 5.2.2. The half-odd quantization is part of the physical state selection: switching to integer numbers is not another level of this same local sine-Gordon sector. I=1/2 approaches its lowest conformal primary; I=3/2 selects a particular left/right descendant. There is no completeness or degeneracy-counting claim.
Neutral pairs, moving pairs, other Bethe labels, attractive excited states, complex roots and continuation through special-root rearrangements are not implemented. In particular, this finite-volume solver does not cover p=1/3: the Schwinger comparison in the particle guide remains a separate light-sector scaling-limit benchmark, not a finite-volume gauge-theory solution.
Running and comparing¶
bethe-sine-gordon-excited --p 2 --length 1
bethe-sine-gordon-excited --p 2 --length 0.1 --number 1.5 --json descendant.json
bethe-sine-gordon-excited --p 2 --length 1 --precision long-double --csv-table gap=gap.csv
bethe-sine-gordon-excited --p 1 --length 1 --precision fp128 --json free.json
The physical inputs are soliton mass M (default one), circumference L, coupling
p and velocity=hbar=1, with the vacuum solver's canonical normalization.
The default precision is fp64. Native long-double and configured fp128, and
explicit MPFR bits-N / digits-N, retain their precision throughout source
quadrature, nonlinear solves, hole quantization and exports. MPFR/MPC does not
require MPLAPACK for this solver. Interacting high-precision calculations can
take many minutes; the last example is free.
A free-Dirac check at 256 bits, with explicit mesh and hole-trial budgets:
bethe-sine-gordon-excited --p 1 --length 1 --precision bits-256 --max-intervals 8192 --max-root-iterations 8192
Higher precision does not increase work budgets automatically. Fourier tables
may also need --max-kernel-evaluations 1000000. The default 1024 hole trials
can be exhausted even at the free point: the 333-bit u=0.25, I=0.5 accuracy
check used 1450 trials across all grids and contours. Raising a budget permits
more work; it does not weaken the residual, refinement or contour requirements.
Use --threads 2 to overlap the vacuum and excited solves. The default is
one worker; larger requests still admit at most two solves. Each state retains
its own sequential iterations, meshes and work limits. The calling thread
forms the gap and writes the tables after both solves finish, including when
one returns numerical failure. CPU timing covers the complete pair, including
scheduler setup and waiting. Speedup is limited by the more expensive state.
For independent circumference sweeps of either state, see the
finite-volume Async example.
Three tables keep the energy reference and the numerical diagnostics explicit:
levels: separately computed vacuum and two-soliton bulk-subtracted energies, their scaling functions, errors and work counters.source: positive Bethe number, charge, positive rapidity, quantization residual, hole-position error estimate, source quadrature estimate and Fourier tail bound. The other hole is its negative.gap: vacuum-relative energy andscaled_gap=L*gap/(2*pi). This is the table to compare with a finite-volume excitation calculation.
Neither level is an absolute total energy or energy per lattice site. A common bulk subtraction cancels in the gap. We do not evaluate the convention-dependent bulk term, including at its resonant couplings. To compare a lattice MPS model, first match its velocity, mass scale, continuum coupling and charge/boundary sector; finite-spacing effects are not numerical errors of this solver.
Exit codes are 0 for success, 1 for invalid input/output errors, and 2 for an
incomplete solve. A failed state's energy and rapidity are missing, not an
unconverged last iterate. A gap is published only if both states converge.
Unavailable estimates are null in JSON and empty in CSV/TSV. Exports use the
shared metadata, CPU-time, streaming and overwrite-protection conventions;
--references prints the literature separately from ordinary output.
Equation and branch audit¶
Let G be the shared precision-aware Fourier kernel and define the odd scattering phase by its zero at the origin:
For a positive contour shift eta, the real-axis counting equation is
The shared vacuum iteration uses epsilon(x)=-i*Z(x+i*eta) and
A(x)=log(1+exp(-epsilon(x))). The excited solver adds -i*g(x+i*eta) to
its driving term and couples that solution to a safeguarded real hole solve.
The same hole position is used in the contour source and in the real-axis
counting kernel. Each hole trial resolves the nonlinear sea; it is not a
Bethe–Yang root followed by an energy correction.
The sea energy uses the bare driving term, not the added hole source.
Parity permits the same half-grid convolution as the vacuum. The regular
principal-log implementation requires Re(1+exp(-epsilon))>0 on its contour
at every iteration. A violation is reported as a numerical/branch failure;
the solver does not silently unwrap logarithms or insert extra roots.
Two independently resolved contours must agree in energy and hole coordinate.
This check is numerical evidence for the selected regular branch, not a general
classification of sine-Gordon states.
Error controls and validation¶
--tolerance is absolute in Y per state, default 16777216 arithmetic epsilons.
This is an estimated numerical accuracy, not an interval certificate or a
relative bound for exponentially small finite-volume corrections. A gap can
accumulate errors from both level solves; no stronger gap bound is claimed.
The vacuum numerical options also
apply here. --max-iterations (32768) is a total nonlinear-update budget per state,
including every hole trial and both contours. --max-root-iterations (1024)
is the total number of hole trials across meshes/cutoffs/contours.
Both exhausted iteration budgets use iteration_limit; their separate counters
identify the exhausted resource. Fourier work is budgeted per kernel/source
table, not globally; total evaluation counts are reported.
Source quadrature and its analytic Fourier tail bound are separate from hole
quantization. hole_error estimates the effect of root displacement and inner
noise on Y and 2*u*sinh(H). The inner NLIE is solved more tightly than the
outer request. Two successive rapidity mesh agreements, adjacent cutoff
agreements and an independent contour comparison are required; these compare
both Y and the hole coordinate. kernel_error estimates the sea-kernel table
error, while source_quadrature_error and source_tail_bound describe the hole
tables. Small residuals alone do not certify a resolved level.
Within a fixed grid, the previous converged sea can seed the next hole trial. A converged coarse-grid hole position likewise seeds the next finer grid, but the sea is rebuilt and the full new counting equation must converge. Seeds are not carried between the two independently solved contours. These initial guesses reduce redundant work; they do not replace any refinement or residual check.
At the free Dirac point the kernel vanishes, and the sea is exactly the vacuum sea. This gives an especially direct normalization and gap check:
In the ultraviolet, FRT Sec. 5.2.2 gives
Regression checks approach these limits for both labels at p=1, 1.5, 2 and 3, and recover Bethe–Yang at large volume while resolving its omitted sea term. The independent reference script uses the closed p=2 rapidity kernel, a nonuniform Gauss grid and a separate root solver. Refining 256 to 512 nodes with two contours/cutoffs gives, at M=L=1, bulk-subtracted energies 5.11055662981005 and 17.14609634255262 for the two labels. These are fp64 reference values, not high-precision fixtures. MPFR checks compare source and counting tables through 333 bits against the closed p=2 kernel and its direct rapidity integral, using independently refined 192/256-point Gauss rules at 768 bits. Free-point absolute levels combine the independent real-axis Dirac integral with the analytic two-particle energy; these checks demonstrate precision growth beyond binary128. The extreme-scale 333-bit tests and the interacting/scaling checks run separately as long tests. The interacting whole-level reference remains fp64; the source and free-point checks do not turn it into a high-precision interacting-energy fixture.
Owning Async queries retain every result field under deferred and one/two-worker scheduling, with mixed precisions and isolated numerical failures. CLI checks compare serial/concurrent levels, source diagnostics and gaps, inspect every real-valued JSON field and CSV/TSV export, and protect existing output files from invalid requests. Exhausted budgets still publish no unconverged level.
Library entry point¶
#include <bethe/sine_gordon_excited.hpp>
namespace sg = bethe::sine_gordon;
sg::TwoSolitonOptions<long double> options;
auto state = sg::two_soliton_level(1.0L, 1.0L, 2.0L, uni20::from_twice(1), options);
if (state.converged) {
// *state.casimir_energy is E-L*e_bulk, NOT the vacuum-relative gap.
// *state.rapidity is H; the other hole is -H.
}
TwoSolitonState shares the vacuum's diagnostic fields, but its inherited
effective_central_charge is intentionally absent. A charged excited level is
not a vacuum central-charge measurement. Subtract a separately converged
vacuum_energy with the same mass, circumference, coupling and conventions to
obtain the physical excitation gap, as the frontend does.
For MPFR, construct TwoSolitonOptions<uni20::mpreal> with an explicit finite
uni20::Precision and create all scales and optional controls at that same
precision. Exact, unset and mixed-precision inputs are rejected. The resulting
states, including unavailable diagnostics on failures, retain the requested
precision. No ambient precision setting is changed.