Hex  1.0
Hydrogen-electron collision solver
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Functions
Hydrogen Namespace Reference

Hydrogen atom. More...

Functions

double lastZeroBound (int n, int l)
 Get last node of the bound radial wave function. More...
 
double getBoundFar (int n, int l, double eps, int max_steps)
 
double Norm (int n, int l)
 
double getSturmFar (int n, int l, double lambda, double eps, int max_steps)
 
double P (unsigned n, unsigned l, double r)
 Hydrogen bound radial orbital. More...
 
double F (double k, int l, double r, double sigma)
 
double evalFreeStatePhase (double k, int l, double sigma)
 
double S (int n, int l, double r, double lambda=DEFAULT_LAMBDA)
 Sturmian wave function

\[ S_{n\ell}(r) = \left(\frac{\lambda_\ell (k-1)!}{(2\ell+1+k)!}\right)^{1/2} (\lambda_\ell r)^{\ell+1} \exp(-\lambda_\ell r/2) L_{k-1}^{2\ell+2}(\lambda_\ell r) \]

. More...

 
double evalFreeState_asy (double k, int l, double r, double sigma)
 
double getFreeAsyZero (double k, int l, double Sigma, double eps, int max_steps, int nzero)
 
double getFreeAsyTop (double k, int l, double Sigma, double eps, int max_steps, int ntop)
 
double getFreeFar (double k, int l, double Sigma=special::constant::Nan, double eps=1e-10, int max_steps=DEFAULT_MAXSTEPS)
 Return sufficiently far radius for using the asymptotic form of the free state. More...
 
double getBoundN (int n, int l)
 Return all constant factors of the bound state. More...
 

Detailed Description

Namespace holding routines concerned with the hydrogen atom. Only a narrow subset of the members is used.

Function Documentation

double Hydrogen::evalFreeState_asy ( double  k,
int  l,
double  r,
double  sigma 
)

Evaluate free state asymptotics \( \sin (kr - \pi l / 2 + \sigma_l) \).

double Hydrogen::evalFreeStatePhase ( double  k,
int  l,
double  sigma = special::constant::Nan 
)

Evaluate phase of the free state function. Use precomputed value of the Coulomb phase shift "sigma" if available.

double Hydrogen::F ( double  k,
int  l,
double  r,
double  sigma = special::constant::Nan 
)

Evaluate free state

\[ \psi_{\mathbf{k}lm}(\mathbf{r}) = \frac{1}{k} \sqrt{\frac{2}{\pi}} F_l(k,r) Y_{lm} (\mathbf{\hat{r}}) Y_{lm}^\ast(\mathbf{\hat{k}}) \]

Use precomputed value of the Coulomb phase shift "sigma" if available. Complete wave function is further modified by a complex unit factor,

\[ \Psi_{\mathbf{k}lm}(\mathbf{r}) = \mathrm{i}^l \mathrm{e}^{\mathrm{i}\sigma_l(k)} \psi_{\mathbf{k}lm}(\mathbf{r}) \ . \]

The missing phase (as a real number) can be retrieved by evalFreeStatePhase .

double Hydrogen::getBoundFar ( int  n,
int  l,
double  eps,
int  max_steps = DEFAULT_MAXSTEPS 
)

Return radial distance in the exponential decreasing regions, for which the radial function is equal to "eps".

Warning
A naive hunt & bisection algorithm is used, which will collapse if any of the roots lies in the vicinity of \( r_k = 2^k \).
double Hydrogen::getBoundN ( int  n,
int  l 
)

This function doesn't compute only the normalization factor \( N_{nl} \) but also multiplied the angular-momentum factor \( (2/n)^l \).

double Hydrogen::getFreeAsyTop ( double  k,
int  l,
double  Sigma,
double  eps,
int  max_steps,
int  ntop 
)

Find local maxima of the free function asymptotics.

double Hydrogen::getFreeAsyZero ( double  k,
int  l,
double  Sigma,
double  eps,
int  max_steps,
int  nzero 
)

Find zeros of the free function asymptotics.

double Hydrogen::getFreeFar ( double  k,
int  l,
double  Sigma = special::constant::Nan,
double  eps = 1e-10,
int  max_steps = DEFAULT_MAXSTEPS 
)

Return radial distance in the oscillating region, for which the radial function less than "eps" in some zero-node of the asymptotical form. The asymptotic form is

\[ F_\ell(k,r) \propto \sin \left(kr - \frac{\ell\pi}{2} + \frac{1}{k}\log 2k + \sigma_\ell(k)\right) \ , \]

so the free state will be evaluated in such radii that the following is fulfilled:

\[ n\pi = kr - \frac{\ell\pi}{2} + \frac{1}{k}\log 2k + \sigma_\ell(k) \ . \]

double Hydrogen::getSturmFar ( int  n,
int  l,
double  lambda,
double  eps,
int  max_steps = DEFAULT_MAXSTEPS 
)

Return radial distance in the exponential decreasing regions, for which the radial function is equal to "eps".

Warning
A naive hunt & bisection algorithm is used, which will collapse if any of the roots lies in the vicinity of \( r_k = 2^k \).
double Hydrogen::lastZeroBound ( int  n,
int  l 
)
double Hydrogen::Norm ( int  n,
int  l 
)
double Hydrogen::P ( unsigned  n,
unsigned  l,
double  r 
)

The hydrogen radial functions \( R_{nl} \) are defined as

\[ R_{nl}(r) = \sqrt{\left(\frac{2}{n}\right)^3 \frac{(n-l-1)!}{2n(n+l)!}} \left(\frac{2r}{n}\right)^l L_{n-l-1}^{(2l+1)}\left(\frac{2r}{n}\right) \mathrm{e}^{-r/n} \ , \]

where \( L_n^{(\alpha)}(r) \) are the generalized Laguerre polynomials. This function, however, returns the "radial orbital", which is understood here to be the radial function multiplied by the radius,

\[ P_{nl}(r) = r R_{nl}(r) \ . \]

double Hydrogen::S ( int  n,
int  l,
double  r,
double  lambda 
)