Coulomb Functions
CoulombFunctions.coulombs
— Functioncoulombs(x::AbstractVector, η, ℓ; kwargs...)
Convenience wrapper around coulombs!
that preallocates output matrices of the appropriate dimensions.
coulombs(x::AbstractVector, η, ℓ; kwargs...)
Convenience wrapper around coulombs!
that preallocates output matrices of the appropriate dimensions.
coulombs(r, Z, k::AbstractVector, ℓ; kwargs...)
Convenience wrapper around coulombs!
that preallocates output matrices of the appropriate dimensions.
CoulombFunctions.coulombFs
— FunctioncoulombFs(x::AbstractVector, η, ℓ; kwargs...)
Convenience wrapper around coulombs!
that preallocates output matrices of the appropriate dimensions, only computing the regular functions $F_\ell(\eta,x)$ and $F_\ell'(\eta,x)$.
CoulombFunctions.coulombs!
— Functioncoulombs!(F, F′, G, G′, x, η, ℓ)
Main routine that computes the continued fractions and the recurrence relations to generate the regular functions $F_\ell(\eta,x)$ and $F_\ell'(\eta,x)$ and the irregular functions $G_\ell(\eta,x)$ and $G_\ell'(\eta,x)$ (computation of the latter can be elided by passing nothing
for G
and G′
).
coulombs!(F, F′, G, G′, x::AbstractVector, η, ℓ; kwargs...)
Loop through all values of x
and compute all Coulomb functions, storing the results in the preallocated matrices F
, F′
, G
, G′
.
coulombs!(F, F′, G, G′, r, Z, k::AbstractVector, ℓ; kwargs...)
Loop through all values of k
and compute all Coulomb functions, storing the results in the preallocated matrices F
, F′
, G
, G′
. x=k*r
and η≡-Z/k
, i.e. Z>0
for attractive potentials.
CoulombFunctions.coulomb_fraction1
— Functioncoulomb_fraction1(x, η, n)
Evaluate the continued fraction for the logarithmic derivative of the Coulomb function
\[\frac{F'_n(\eta,x)}{F_n(\eta,x)} = S_{n+1}(\eta,x) - \frac{R_{n+1}^2(\eta)}{T_{n+1}(\eta,x)-}\frac{R_{n+2}^2(\eta)}{T_{n+2}(\eta,x)-}...\frac{R_k^2(\eta)}{T_k(\eta,x)-...},\]
where
\[\begin{aligned} R_k(\eta) &= \sqrt{1+\frac{\eta^2}{k^2}}, \qquad S_k(\eta,x) = \frac{k}{x} + \frac{\eta}{k}, \\ T_k(\eta,x) &= S_k(\eta,x) + S_{k+1}(\eta,x) = (2k+1)\left(\frac{1}{x} + \frac{\eta}{k^2+k}\right). \end{aligned}\]
CoulombFunctions.coulomb_fraction2
— Functioncoulomb_fraction2(x, η, n, ω)
Evaluate the continued fraction for the logarithmic derivative of the Hankel function $H^\omega_\lambda(\eta,x) = G_\lambda(\eta,x) + \mathrm{i}\omega F_\lambda(\eta,x)$
\[\frac{{H^{\omega}_n}'(\eta,x)}{H^\omega_n(\eta,x)} = p+\mathrm{i}q = \mathrm{i}\omega\left(1-\frac{\eta}{x}\right) + \frac{\mathrm{i}\omega}{x} \frac{ac}{2(x-\eta+\mathrm{i}\omega)+} \frac{(a+1)(c+1)}{2(x-\eta+2\mathrm{i}\omega)+...},\]
where
\[\begin{aligned} a &= 1+n+\mathrm{i}\omega\eta, & b &= 2n + 2, & c &= -n + \mathrm{i}\omega\eta. \end{aligned}\]
CoulombFunctions.coulomb_downward_recurrence!
— Functioncoulomb_downward_recurrence!(F, F′, x⁻¹, η, ℓ, cf1, s; large)
Given the logarithmic derivative cf1=F′[end]/F[end]
(computed using coulomb_fraction1
), and the sign s
, fill in all lower orders using the downward recurrence
\[\begin{aligned} w_{n-1} &= (S_n w_n + w_n')/R_n, & w_{n-1}' &= S_nw_{n-1} - R_n w_n, \\ R_k &= \sqrt{1 + \frac{\eta^2}{k^2}}, & S_k &= \frac{k}{x} + \frac{\eta}{k}. \end{aligned}\]
If at any point during the recurrence, F[i]>large
, renormalize F′[i:end] ./= F[i]
and F[i:end] ./= F[i]
to avoid overflow, and the continue the recurrence. This is very useful for small $|x|$ and large $\ell$.
CoulombFunctions.coulomb_upward_recurrence!
— Functioncoulomb_upward_recurrence(G, G′, x⁻¹, η, ℓ)
Generate the irregular Coulomb functions using (stable) upward recurrence
\[\begin{aligned} w_{n+1} &= (S_{n+1} w_n - w_n')/R_{n+1}, & w_{n+1}' &= R_{n+1}w_n - S_{n+1} w_{n+1}, \end{aligned}\]
starting from G[1]
and G′[1]
, which we find using the Wronskian
\[F_\lambda'(\eta,z)G_\lambda(\eta,z) - F_\lambda(\eta,z)G_\lambda'(\eta,z) = 1\]
and the logarithmic derivative of $G_\lambda(\eta,z) + \mathrm{i}F_\lambda(\eta,z)$ (see coulomb_fraction2
).
CoulombFunctions.turning_point
— Functionturning_point(η, ℓ)
Computes the turning point $\rho_{\mathrm{TP}}$ of the Coulomb functions, which separates the monotonic region $\rho<\rho_{\mathrm{TP}}$ from the oscillatory region $\rho>\rho_{\mathrm{TP}}$.
See Eq. (2) of
- Barnett, A. (1982). COULFG: Coulomb and Bessel Functions and Their Derivatives, for Real Arguments, by Steed's Method. Computer Physics Communications, 27(2), 147–166. 10.1016/0010-4655(82)90070-4
or
- Barnett, A. R. (1996). The Calculation of Spherical Bessel and Coulomb Functions. In (Eds.), Computational Atomic Physics (pp. 181–202). : Springer Berlin Heidelberg.
CoulombFunctions.coulomb_normalization
— Functioncoulomb_normalization(η, ℓ)
Compute the Coulombic normalization constant
\[\tag{DLMF33.2.5} C_\ell(\eta) = \frac{2^\ell \mathrm{e}^{-\pi\eta/2}|\Gamma(\ell+1+\mathrm{i}\eta)|}{\Gamma(2\ell+2)}.\]