pyextal.jaxMultipole.radial¶
Fourier-Bessel transforms of Slater-type radial functions.
Every radial integral the model needs is one of
– the transform of a unit-normalised Slater density alpha^(n+3)/(n+2)!
r^n e^(-alpha r). The spherical core and valence factors are sums of
<j_0> over pairs of basis functions (jaxMultipole.bank.pair_table); the
deformation terms are a single <j_l> each.
Stable closed form¶
The integral is a Gauss hypergeometric function,
and a Pfaff transformation turns it into (1+u^2)^(-p) times a terminating
polynomial in t = u^2/(1+u^2), which lies in [0, 1):
n - leven:p = (n+l+4)/2, degree(n-l)/2,c_q = ((l-n)/2)_q ((n+l+4)/2)_q / ((l+3/2)_q q!);n - lodd:p = (n+l+3)/2, degree(n-l+1)/2,c_q = ((n+l+3)/2)_q ((l-n-1)/2)_q / ((l+3/2)_q q!).
Both need n >= l - 1. The coefficients are exact rationals, the polynomial
is evaluated by Horner’s rule, and nothing cancels at small k – unlike the
textbook route through m!/(alpha - ik)^(m+1) and the trigonometric expansion
of j_l, which for n = l = 4 is already 41 times off at k = 0.05 in
float64 and useless in float32. It is exact at k = 0 (1 for l = 0, 0
otherwise) and smooth in alpha, so derivatives in kappa are clean. For
example <j_0>_2 = (1 - u^2)/(1 + u^2)^4.
Units: k and alpha must share a length unit. The banks give exponents in
bohr^-1, so the model passes k = 4 pi s * BOHR.
Functions¶
|
Exact constants of |
|
|
|
|
|
Scattering factor of a spherical shell, one electron's worth. |
|
|
Module Contents¶
- pyextal.jaxMultipole.radial.fb_coefficients(n, l)¶
Exact constants of
sto_fb().- Parameters:
n (int) – Power of r in the Slater density.
l (int) – Order of the Bessel function.
- Returns:
(C, p, coeffs)withCthe prefactor,pthe integer power of1/(1+u^2)andcoeffsthe polynomial int, lowest order first, all as floats.- Return type:
tuple
- Raises:
ValueError – If
n < l - 1, where the integral diverges at r = 0.
- pyextal.jaxMultipole.radial.sto_fb(k, alpha, n, l)¶
<j_l>_n(k; alpha)for a unit-normalised Slater density.- Parameters:
k (array-like) – Scattering vector magnitude
4 pi s, any shape.alpha (array-like) – Slater exponent(s), broadcasting against
k.n (int) – Power of r.
l (int) – Bessel order.
- Returns:
The transform, broadcast shape, dtype of
k * alpha.- Return type:
jnp.ndarray
- pyextal.jaxMultipole.radial.k_bohr(s)¶
4 pi sin bohr^-1, froms = sin(theta)/lambdain Angstrom^-1.
- pyextal.jaxMultipole.radial.spherical_f(k, table, kappa=1.0)¶
Scattering factor of a spherical shell, one electron’s worth.
- Parameters:
k (array-like) –
4 pi sin bohr^-1.table (dict) –
N -> (w, alpha)from jaxMultipole.bank.pair_table.kappa (float | array) – Expansion parameter; the density
kappa^3 rho(kappa r)scatters asf(k/kappa).
- Returns:
f(k), shape ofk; zero for an empty table.- Return type:
jnp.ndarray
- pyextal.jaxMultipole.radial.deformation_fb(k, l, n_l, zeta_l, kappa_p=1.0)¶
<j_l>of a deformation radial functionR_l ~ r^n_l e^(-kappa' zeta_l r).- Parameters:
k (array-like) –
4 pi sin bohr^-1.l (int) – Multipole order.
n_l (int) – Power of r;
n_l >= lis required for a density regular at the nucleus (the transform itself only needsn_l >= l - 1).zeta_l (float) – Exponent, bohr^-1.
kappa_p (float | array) – kappa’.
- Returns:
Same shape as
k.- Return type:
jnp.ndarray