|
Packit |
67cb25 |
.. index::
|
|
Packit |
67cb25 |
single: Coulomb wave functions
|
|
Packit |
67cb25 |
single: hydrogen atom
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
The prototypes of the Coulomb functions are declared in the header file
|
|
Packit |
67cb25 |
:file:`gsl_sf_coulomb.h`. Both bound state and scattering solutions are
|
|
Packit |
67cb25 |
available.
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
Normalized Hydrogenic Bound States
|
|
Packit |
67cb25 |
----------------------------------
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
.. function:: double gsl_sf_hydrogenicR_1 (double Z, double r)
|
|
Packit |
67cb25 |
int gsl_sf_hydrogenicR_1_e (double Z, double r, gsl_sf_result * result)
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
These routines compute the lowest-order normalized hydrogenic bound
|
|
Packit |
67cb25 |
state radial wavefunction
|
|
Packit |
67cb25 |
:math:`R_1 := 2Z \sqrt{Z} \exp(-Z r)`.
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
.. function:: double gsl_sf_hydrogenicR (int n, int l, double Z, double r)
|
|
Packit |
67cb25 |
int gsl_sf_hydrogenicR_e (int n, int l, double Z, double r, gsl_sf_result * result)
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
These routines compute the :data:`n`-th normalized hydrogenic bound state
|
|
Packit |
67cb25 |
radial wavefunction,
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
.. only:: not texinfo
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
.. math:: R_n := {2 Z^{3/2} \over n^2} \left({2Z r \over n}\right)^l \sqrt{(n-l-1)! \over (n+l)!} \exp(-Z r/n) L^{2l+1}_{n-l-1}(2Z r / n).
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
.. only:: texinfo
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
| R_n := 2 (Z^{3/2}/n^2) \sqrt{(n-l-1)!/(n+l)!} \exp(-Z r/n) (2Zr/n)^l
|
|
Packit |
67cb25 |
| L^{2l+1}_{n-l-1}(2Zr/n).
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
where :math:`L^a_b(x)` is the :ref:`generalized Laguerre polynomial <laguerre-functions>`.
|
|
Packit |
67cb25 |
The normalization is chosen such that the wavefunction :math:`\psi` is
|
|
Packit |
67cb25 |
given by :math:`\psi(n,l,r) = R_n Y_{lm}`.
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
Coulomb Wave Functions
|
|
Packit |
67cb25 |
----------------------
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
The Coulomb wave functions :math:`F_L(\eta,x)`, :math:`G_L(\eta,x)` are
|
|
Packit |
67cb25 |
described in Abramowitz & Stegun, Chapter 14. Because there can be a
|
|
Packit |
67cb25 |
large dynamic range of values for these functions, overflows are handled
|
|
Packit |
67cb25 |
gracefully. If an overflow occurs, :code:`GSL_EOVRFLW` is signalled and
|
|
Packit |
67cb25 |
exponent(s) are returned through the modifiable parameters :data:`exp_F`,
|
|
Packit |
67cb25 |
:data:`exp_G`. The full solution can be reconstructed from the following
|
|
Packit |
67cb25 |
relations,
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
.. only:: not texinfo
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
.. math::
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
F_L(\eta,x) &= fc[k_L] * \exp(exp_F) \\
|
|
Packit |
67cb25 |
G_L(\eta,x) &= gc[k_L] * \exp(exp_G)
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
.. math::
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
F_L'(\eta,x) &= fcp[k_L] * \exp(exp_F) \\
|
|
Packit |
67cb25 |
G_L'(\eta,x) &= gcp[k_L] * \exp(exp_G)
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
.. only:: texinfo
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
| F_L(\eta,x) = fc[k_L] * \exp(exp_F)
|
|
Packit |
67cb25 |
| G_L(\eta,x) = gc[k_L] * \exp(exp_G)
|
|
Packit |
67cb25 |
|
|
|
Packit |
67cb25 |
| F_L'(\eta,x) = fcp[k_L] * \exp(exp_F)
|
|
Packit |
67cb25 |
| G_L'(\eta,x) = gcp[k_L] * \exp(exp_G)
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
.. function:: int gsl_sf_coulomb_wave_FG_e (double eta, double x, double L_F, int k, gsl_sf_result * F, gsl_sf_result * Fp, gsl_sf_result * G, gsl_sf_result * Gp, double * exp_F, double * exp_G)
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
This function computes the Coulomb wave functions :math:`F_L(\eta,x)`,
|
|
Packit |
67cb25 |
:math:`G_{L-k}(\eta,x)` and their derivatives
|
|
Packit |
67cb25 |
:math:`F'_L(\eta,x)`,
|
|
Packit |
67cb25 |
:math:`G'_{L-k}(\eta,x)`
|
|
Packit |
67cb25 |
with respect to :math:`x`. The parameters are restricted to :math:`L, L-k > -1/2`,
|
|
Packit |
67cb25 |
:math:`x > 0` and integer :math:`k`. Note that :math:`L`
|
|
Packit |
67cb25 |
itself is not restricted to being an integer. The results are stored in
|
|
Packit |
67cb25 |
the parameters F, G for the function values and :data:`Fp`,
|
|
Packit |
67cb25 |
:data:`Gp` for the derivative values. If an overflow occurs,
|
|
Packit |
67cb25 |
:code:`GSL_EOVRFLW` is returned and scaling exponents are stored in
|
|
Packit |
67cb25 |
the modifiable parameters :data:`exp_F`, :data:`exp_G`.
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
.. function:: int gsl_sf_coulomb_wave_F_array (double L_min, int kmax, double eta, double x, double fc_array[], double * F_exponent)
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
This function computes the Coulomb wave function :math:`F_L(\eta,x)` for
|
|
Packit |
67cb25 |
:math:`L = Lmin \dots Lmin + kmax`, storing the results in :data:`fc_array`.
|
|
Packit |
67cb25 |
In the case of overflow the exponent is stored in :data:`F_exponent`.
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
.. function:: int gsl_sf_coulomb_wave_FG_array (double L_min, int kmax, double eta, double x, double fc_array[], double gc_array[], double * F_exponent, double * G_exponent)
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
This function computes the functions :math:`F_L(\eta,x)`,
|
|
Packit |
67cb25 |
:math:`G_L(\eta,x)` for :math:`L = Lmin \dots Lmin + kmax` storing the
|
|
Packit |
67cb25 |
results in :data:`fc_array` and :data:`gc_array`. In the case of overflow the
|
|
Packit |
67cb25 |
exponents are stored in :data:`F_exponent` and :data:`G_exponent`.
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
.. function:: int gsl_sf_coulomb_wave_FGp_array (double L_min, int kmax, double eta, double x, double fc_array[], double fcp_array[], double gc_array[], double gcp_array[], double * F_exponent, double * G_exponent)
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
This function computes the functions :math:`F_L(\eta,x)`,
|
|
Packit |
67cb25 |
:math:`G_L(\eta,x)` and their derivatives :math:`F'_L(\eta,x)`,
|
|
Packit |
67cb25 |
:math:`G'_L(\eta,x)` for :math:`L = Lmin \dots Lmin + kmax` storing the
|
|
Packit |
67cb25 |
results in :data:`fc_array`, :data:`gc_array`, :data:`fcp_array` and :data:`gcp_array`.
|
|
Packit |
67cb25 |
In the case of overflow the exponents are stored in :data:`F_exponent`
|
|
Packit |
67cb25 |
and :data:`G_exponent`.
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
.. function:: int gsl_sf_coulomb_wave_sphF_array (double L_min, int kmax, double eta, double x, double fc_array[], double F_exponent[])
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
This function computes the Coulomb wave function divided by the argument
|
|
Packit |
67cb25 |
:math:`F_L(\eta, x)/x` for :math:`L = Lmin \dots Lmin + kmax`, storing the
|
|
Packit |
67cb25 |
results in :data:`fc_array`. In the case of overflow the exponent is
|
|
Packit |
67cb25 |
stored in :data:`F_exponent`. This function reduces to spherical Bessel
|
|
Packit |
67cb25 |
functions in the limit :math:`\eta \to 0`.
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
Coulomb Wave Function Normalization Constant
|
|
Packit |
67cb25 |
--------------------------------------------
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
The Coulomb wave function normalization constant is defined in
|
|
Packit |
67cb25 |
Abramowitz 14.1.7.
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
.. function:: int gsl_sf_coulomb_CL_e (double L, double eta, gsl_sf_result * result)
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
This function computes the Coulomb wave function normalization constant
|
|
Packit |
67cb25 |
:math:`C_L(\eta)` for :math:`L > -1`.
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
.. function:: int gsl_sf_coulomb_CL_array (double Lmin, int kmax, double eta, double cl[])
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
This function computes the Coulomb wave function normalization constant
|
|
Packit |
67cb25 |
:math:`C_L(\eta)` for :math:`L = Lmin \dots Lmin + kmax`, :math:`Lmin > -1`.
|