Skip to content

Open XXX chains with free ends

XXX family · Supported models

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:

\[ \begin{aligned} H&=\sum_{i=0}^{N-2}\mathbf S_i\cdot\mathbf S_{i+1},\\{} F_i&=2N\phi(z_i)-2\pi I_i -\sum_{j\ne i}\left[\phi\!\left(\frac{z_i-z_j}{2}\right)+\phi\!\left(\frac{z_i+z_j}{2}\right)\right],\\{} \phi(z)&=2\arctan z,\\{} E&=\frac{N-1}{4}-\sum_i\frac{2}{1+z_i^2}. \end{aligned} \]

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.