FLINT3.7.0-dev

acb_mzeta_epstein_shell, acb_mzeta_epstein_gram_shell

Synopsis#include <flint/acb_mzeta.h>
int acb_mzeta_epstein_shell(acb_t res, const acb_t nu, const arb_mat_t A, arb_srcptr x, arb_srcptr y, int flags, acb_mzeta_cache_t cache, slong prec)source
int acb_mzeta_epstein_gram_shell(acb_t res, const acb_t nu, const fmpq_mat_t G, const fmpq * u, const fmpq * v, int flags, slong prec)source

The algorithm by shells, for exact rational input: the first form requires AA, xx, yy to be exact (dyadic, so that the Gram matrix ATAA^T A and the coordinates are rational); the second takes the Gram matrix GG of the lattice and the coordinates uu, vv with x=Aux = A u, y=A−Tvy = A^{-T} v (then ∣x−z∣2=(u−n)TG(u−n)|x - z|^2 = (u - n)^T G (u - n) and y⋅z=v⋅ny \cdot z = v \cdot n for z=Anz = A n), so that lattices such as the hexagonal one can be given exactly. ν\nu must be real and exact with a short dyadic value. Returns 0 (not applicable) for the regularised function, for d>8d > 8, for denominators of uu, vv above 64 and when the estimated cost of the shell counts is too large.

The lattice points are grouped into shells of equal norm, counted exactly (by products of theta series of low-rank blocks, by enumeration, or from sums of three squares), so that each side of the Crandall splitting needs one incomplete gamma value per shell; the splitting parameter is chosen so that one side has exact rational arguments (binary splitting) and, for integer indices such as the Coulomb case ν=d−2\nu = d - 2, the other side is a power series with rational coefficients. See Sums by shells. The computation is parallel with up to flint_get_num_threads() threads, and the result does not depend on the number of threads.

Cite this page

The FLINT team, “acb_mzeta_epstein_shell, acb_mzeta_epstein_gram_shell (acb_mzeta.h),” FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev, 2026. https://flintlib.org/doc/acb_mzeta/acb_mzeta_epstein_shell.html (generated 2026-11-07).