![]() |
|
High-precision calculations for one- and two-valence atomic systems
|
Hypergeometric functions.
Functions | |
| std::complex< double > | lngamma_complex (std::complex< double > z) |
| std::pair< std::complex< double >, double > | series_1f1 (std::complex< double > a, double b, std::complex< double > z, double s) |
| std::pair< std::complex< double >, double > | asymptotic_sum (std::complex< double > p, std::complex< double > q, std::complex< double > w) |
| std::pair< std::complex< double >, double > | asymptotic_1f1 (std::complex< double > a, double b, std::complex< double > z, double s) |
| std::pair< std::complex< double >, double > | fast_1f1 (std::complex< double > a, double b, std::complex< double > z, double s) |
| template<typename T > | |
| T | H1f1 (T a, double b, T z, double s=0.0) |
| Scaled confluent hypergeometric function: e^{s} * 1F1(a, b, z) | |
| template double | H1f1 (double, double, double, double) |
| template std::complex< double > | H1f1 (std::complex< double >, double, std::complex< double >, double) |
Variables | |
| constexpr bool | use_arb = true |
| constexpr long | fixed_prec = 64 |
| constexpr bool | use_fast_path = true |
| constexpr double | fast_path_tol = 1.0e-13 |
| constexpr bool | has_flint |
| True if compiled with FLINT support; complex H1f1 returns zero otherwise. | |
| T Hypergeometric::H1f1 | ( | T | a, |
| double | b, | ||
| T | z, | ||
| double | s = 0.0 |
||
| ) |
Scaled confluent hypergeometric function: e^{s} * 1F1(a, b, z)
a and z may be complex (via template). s and b must be realT (template param) may be double or std::complex<double>.
Real (double) arguments: evaluated with GSL (double precision); the scale e^{s} is applied as an ordinary double factor.
Complex arguments: first attempts a fast double-precision evaluation (Maclaurin series at small |z|, asymptotic expansion at large |z|, each with a running error estimate); this covers most continuum-state calls at ~100x the speed of ball arithmetic. Where the estimated error is too large (strong cancellation: large Im(a) with moderate |z|), falls back to FLINT ball arithmetic, increasing the working precision until the result is accurate to (at least) full double precision. The scale e^{s} is applied inside the evaluation, so exponentially small 1F1 values (e.g. like e^{-pi*nu/2} for continuum Coulomb functions) can be paired with their compensating normalisation factors without under/overflowing double.
-lflint and set -DAMPSCI_USE_FLINT3 (FLINT 3+), or with -lflint-arb -lflint and -DAMPSCI_USE_FLINT2 (FLINT 2.x + Arb) (done automatically by Makefile/configure.sh)if constexpr (Hypergeometric::has_flint) {} in code, to check if available; see Hypergeometric::has_flint
|
constexpr |
True if compiled with FLINT support; complex H1f1 returns zero otherwise.