Open XXX chains with free ends¶
Removing the periodic bond changes more than the total energy: translation momentum is no longer a quantum number, and the Bethe equations include reflected scattering. A separate front end and result type keep these differences explicit. Precision and presentation controls are shared with the other programs. For anisotropic interactions, see free-end XXZ chains.
Calculate a free-end state¶
bethe-xxx-obc has free ends with no boundary fields:
bethe-xxx-obc 16
bethe-xxx-obc 15 --sz 3/2
bethe-xxx-obc 16 --sectors
bethe-xxx-obc 4 --quantum-numbers 1,2 --roots --precision fp128
bethe-xxx-obc 16 --sectors --precision digits-100
bethe-xxx-obc 8 --excitations all --threads 2 --precision bits-256
It shares precision selection, CPU timing, convergence diagnostics, and
pretty/plain reports with the periodic program, but has no --spinons or
boundary-selection switch. Open chains have no translation momentum, so no
momentum fields or columns are reported. The library likewise uses a separate
result type without momentum members:
#include <bethe/heisenberg_open.hpp>
namespace obc = bethe::heisenberg::open;
auto ground = obc::ground_state<long double>(16);
auto sector = obc::sector_ground_state<long double>(15, uni20::half_int::parse("3/2"));
auto sectors = obc::sector_ground_states<long double>(16);
bethe::heisenberg::QuantumNumbers numbers{uni20::half_int{1}, uni20::half_int{2}};
auto state = obc::solve_real<long double>(4, numbers);
With arbitrary precision enabled, all
modes also accept bits-N and digits-N; no MPLAPACK provider is required.
The C++ API takes an explicit bethe::SolverOptions<uni20::mpreal>(precision).
Custom tolerances and initial roots must already have that finite working
precision; exact-only, unset and mixed-precision inputs are rejected. Precision
also applies to empty-root states, failed-iteration diagnostics and threaded scans.
Hamiltonian and reflected scattering¶
The free-end Hamiltonian and logarithmic equations use the same rapidity scale as the periodic solver:
Allowed states and convergence¶
Only the positive, finite real-root branch is represented: \(M \le N /2\), with
distinct increasing integer labels \(1\le I_{i} \le N -M\). Labels still use
uni20::half_int, but half-odd integers are rejected. The sector minimum fills
I=1,...,M, where \(M =N /2-\lvert S^z \rvert\); negative sectors use spin reversal. The
ground-state wrapper selects Sz=0 for even N and Sz=1/2 for odd N.
The sum excludes both self-scattering terms, including the reflected root
of the same particle. The residual is \(\max \lvert F_{i} \rvert /(2N)\), not \(\max \lvert F_{i} \rvert /N\).
SolverOptions<Real> and update-budget semantics are shared with the periodic
solver. Initial guesses may be finite and nonnegative; the default is zero.
The physical roots are strictly positive. Zero-root Bethe vectors, complex
strings, and infinite-root descendants are outside the supported family;
this is not a complete-spectrum enumerator. N must be at least 2.
Normalization checks and validation¶
For N=2 there is just one bond, giving E=-3/4, rather than the periodic double-bond value -3/2. N=3 gives E=-1; N=4 gives E=-3/4-sqrt(3)/2. Tests compare every sector minimum with independent exact diagonalization through N=9, all supported real-root configurations through N=8, and the one-magnon standing waves. Irrational analytic references test precision beyond double separately.
Next: scan the open-chain real-root excitations. Compare the periodic XXX equations and see References and provenance for the free-end derivation.