Repository navigation
Tags
Tags
Store the ionization amplitude with its threshold behaviour divided out
The radial part of the ionization amplitude vanishes as sqrt(k1 k2)
whenever one of the two electrons is left without energy. That is a
square-root cusp at either end of the momentum interval, and it holds the
Chebyshev coefficients of the amplitude to an algebraic decay: the
measured exponent is 2.21, the same in every angular block, so the
expansion needs of the order of a thousand nodes to resolve the amplitude
and the convergence loop, which judges the tail from a single
coefficient, gives up long before that. It settled on 128 nodes, where
the expansion is still wrong by 2.6e-3 while the loop was asked for 1e-5.
Expand the quotient by sqrt(k1 k2) instead. It is bounded and non-zero at
both ends, its coefficients decay geometrically, and sixteen nodes now
give a better expansion than a thousand did. The Chebyshev nodes are the
roots of the polynomial and lie strictly inside the interval, so the
quotient is never formed where the factor vanishes.
Every reader of the 'ionf' blob multiplies the factor back in: sqrt(k1
k2) where the amplitude is used linearly ('ionf', 'ionamp', 'tdcs'), k1
k2 where it is used quadratically ('sdcsE', 'sdcs12', 'ics', and
Amplitudes::computeSigmaIon_). The scalar SQL function behind 'ics'
cannot see the energy, so it takes the hyperangular part and its caller
supplies the E_tot that goes with it. Older databases hold the amplitude
itself and are not read correctly by this version.
Also stop storing three quarters of a transform that is not the
expansion. Chebyshev<double,Complex>::generate resized the coefficient
array to N and then assigned the whole length-4N transform to it, so the
N coefficients were followed by the mirrored and negated copy of
themselves that the symmetric input produces. It was harmless only
because the element at index N is an exact zero, which stopped every
tail() before it reached the copy.
On a solved case with eight angular blocks the extraction is 5.9 times
faster (2.54 s -> 0.43 s), the stored expansions shrink from 512 to 16
coefficients per block, and the ionization cross section is unchanged in
every printed digit for both spins.
The pinned sdcs12 values in the hex-db ionization test move with the
convention; the invariant that ties sdcs12 to ics, which the relative
Coulomb phases do not reach, is unchanged and pins the normalization the
new values were recorded with.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015MRZJSS2s8z73D5rFDdgCn
PreviousNext