![]() |
|
High-precision calculations for one- and two-valence atomic systems
|
Data and useful functions for nuclear properties and potentials. Radii all in Fermi (fm, e-15m) from Nuclear Data Service: https://www-nds.iaea.org/.
Classes | |
| struct | Isotope |
| Isotope data: Z, A, r_rms/fm, I, pi, mu, Q. More... | |
| class | Nucleus |
| Stores set of nuclear parameters (all radii in fm) More... | |
Enumerations | |
| enum class | ChargeDistro { Fermi , spherical , point , Gaussian , custom , Error } |
| Nuclear charge distribution options. More... | |
Functions | |
| Isotope | findIsotopeData (int z, int a) |
| Looks up + returns an isotope from the list. If not in list, partially blank. | |
| std::vector< Isotope > | findIsotopeList (int z) |
| Returns all known isotopes of given atom. | |
| double | find_rrms (int z, int a) |
| Looks up default value of r_rms for given isotope. Returns 0 if not found. | |
| double | find_mu (int z, int a) |
| As above, for dipole moment. | |
| int | find_parity (int z, int a) |
| As above, for parity. | |
| double | find_spin (int z, int a) |
| As above, for nuclear spin. Returns -1 if not found. | |
| double | approximate_r_rms (int a, int z) |
| Approximate rms radius from a for to Angeli data. | |
| double | c_hdr_formula_rrms_t (double rrms, double t=default_t) |
| Calculates c from rrms and t. | |
| double | rrms_formula_c_t (double c, double t=default_t) |
| Calculates rrms from c and t. | |
| double | deformation_effective_t (double c, double t, double beta) |
| Calculates effective skin thickness due to quadrupole deformation [See Eq. 8 of https://doi.org/10.1103/PhysRevA.100.032511.]. | |
| double | approximate_t_skin (int a) |
| just returns 2.3 | |
| ChargeDistro | parseType (const std::string &str_type) |
| Converts string to ChargeDistro (case-insensitive). | |
| std::string | parseType (ChargeDistro type) |
| Converts ChargeDistro to string. | |
| std::ostream & | operator<< (std::ostream &ostr, const Nucleus &n) |
| Nucleus | form_nucleus (int Z, std::optional< int > A=std::nullopt, IO::InputBlock input={}) |
Forms nucleus from Z, A, and the nuclear options in input. | |
| std::vector< double > | sphericalNuclearPotential (double Z, double rnuc, const std::vector< double > &rgrid) |
| Nuclear potential: uniformly charged sphere (ball) of radius rnuc. | |
| std::vector< double > | GaussianNuclearPotential (double Z, double r_rms, const std::vector< double > &rgrid) |
| Nuclear potential: Gaussian charge distribution. | |
| std::vector< double > | fermiNuclearPotential (double Z, double t, double c, const std::vector< double > &rgrid) |
| Nuclear potential: Fermi charge distribution. | |
| std::vector< double > | fermiNuclearDensity_tcN (double t, double c, double Z_norm, const Grid &grid) |
| Fermi charge distribution, rho(r), normalised to Z_norm. | |
| std::vector< double > | formPotential (const Nucleus &nucleus, const std::vector< double > &r) |
Nuclear potential V(r) for given nucleus, at radial points r. | |
Variables | |
| constexpr double | default_t = 2.30 |
| constexpr auto | FourLn3 = 4.0 * 1.098612289 |
| constexpr auto | Pi2 = M_PI * M_PI |
| struct Nuclear::Isotope |
|
strong |
Nuclear charge distribution options.
| Isotope Nuclear::findIsotopeData | ( | int | z, |
| int | a | ||
| ) |
Looks up + returns an isotope from the list. If not in list, partially blank.
| std::vector< Isotope > Nuclear::findIsotopeList | ( | int | z | ) |
Returns all known isotopes of given atom.
| double Nuclear::find_rrms | ( | int | z, |
| int | a | ||
| ) |
Looks up default value of r_rms for given isotope. Returns 0 if not found.
| double Nuclear::find_mu | ( | int | z, |
| int | a | ||
| ) |
As above, for dipole moment.
| int Nuclear::find_parity | ( | int | z, |
| int | a | ||
| ) |
As above, for parity.
| double Nuclear::find_spin | ( | int | z, |
| int | a | ||
| ) |
As above, for nuclear spin. Returns -1 if not found.
| double Nuclear::approximate_r_rms | ( | int | A, |
| int | Z | ||
| ) |
Approximate rms radius from a for to Angeli data.
| double Nuclear::c_hdr_formula_rrms_t | ( | double | rrms, |
| double | t | ||
| ) |
Calculates c from rrms and t.
| double Nuclear::rrms_formula_c_t | ( | double | c, |
| double | t | ||
| ) |
Calculates rrms from c and t.
| double Nuclear::deformation_effective_t | ( | double | c, |
| double | t, | ||
| double | beta | ||
| ) |
Calculates effective skin thickness due to quadrupole deformation [See Eq. 8 of https://doi.org/10.1103/PhysRevA.100.032511.].
| double Nuclear::approximate_t_skin | ( | int | ) |
just returns 2.3
| ChargeDistro Nuclear::parseType | ( | const std::string & | str_type | ) |
Converts string to ChargeDistro (case-insensitive).
Also accepts: "spher*", "ball", "uniform" (spherical); "point*", "zero*" (point); "gaus*" (Gaussian). If unknown, prints a warning with the closest match.
| std::string Nuclear::parseType | ( | ChargeDistro | type | ) |
Converts ChargeDistro to string.
| Nucleus Nuclear::form_nucleus | ( | int | Z, |
| std::optional< int > | A = std::nullopt, |
||
| IO::InputBlock | input = {} |
||
| ) |
Forms nucleus from Z, A, and the nuclear options in input.
Starts from the default nucleus for given Z and A (see Nucleus), then over-rides with any options given in input: type, rrms, c, t, beta, input_file, parameters. If c is given, it over-rides rrms. If A or r_rms is zero, the nucleus is set to point-like (except for custom).
| Z | Nuclear charge |
| A | Mass number; default A for Z if not given |
| input | Input block with nuclear options (see input.check() in .cpp) |
| std::vector< double > Nuclear::sphericalNuclearPotential | ( | double | Z, |
| double | rnuc, | ||
| const std::vector< double > & | rgrid | ||
| ) |
Nuclear potential: uniformly charged sphere (ball) of radius rnuc.
\[ V(r) = \begin{cases} -\frac{Z}{2 r_N}\left(3 - r^2/r_N^2\right) & r < r_N, \\ -Z/r & r \geq r_N. \end{cases} \]
rnuc = 0 gives a point-like nucleus.
| Z | Nuclear charge |
| rnuc | Nuclear charge radius, in fm (not r_rms: for a uniform sphere, r_N = sqrt(5/3) r_rms) |
| rgrid | Radial points (atomic units) |
rgrid (atomic units). | std::vector< double > Nuclear::GaussianNuclearPotential | ( | double | Z, |
| double | r_rms, | ||
| const std::vector< double > & | rgrid | ||
| ) |
Nuclear potential: Gaussian charge distribution.
\[ V(r) = -\frac{Z}{r}\,{\rm erf}\left(\sqrt{3/2}\;r/r_{\rm rms}\right). \]
| Z | Nuclear charge |
| r_rms | Root-mean-square charge radius, in fm |
| rgrid | Radial points (atomic units) |
rgrid (atomic units). | std::vector< double > Nuclear::fermiNuclearPotential | ( | double | Z, |
| double | t, | ||
| double | c, | ||
| const std::vector< double > & | rgrid | ||
| ) |
Nuclear potential: Fermi charge distribution.
For charge density
\[ \rho(r) = \rho_0 \left[ 1 + e^{(r - c)/a} \right]^{-1}, \qquad a = t/(4\ln 3), \]
normalised to Z. Expressed in terms of complete Fermi-Dirac integrals (GSL). V = -Z/r beyond r = 10c.
| Z | Nuclear charge |
| t | Skin thickness (90% to 10% fall-off), in fm |
| c | Half-density radius, in fm (not r_rms) |
| rgrid | Radial points (atomic units) |
rgrid (atomic units). | std::vector< double > Nuclear::fermiNuclearDensity_tcN | ( | double | t, |
| double | c, | ||
| double | Z_norm, | ||
| const Grid & | grid | ||
| ) |
Fermi charge distribution, rho(r), normalised to Z_norm.
\( \int \rho\, d^3r = 4\pi \int \rho(r)\, r^2 dr = Z_{\rm norm} \): Z_norm = Z for nuclear charge density; Z_norm = 1 for nuclear density. rho = 0 beyond r = 10c.
| t | Skin thickness, in fm |
| c | Half-density radius, in fm |
| Z_norm | Normalisation |
| grid | Radial grid |
grid (atomic units). | std::vector< double > Nuclear::formPotential | ( | const Nucleus & | nucleus, |
| const std::vector< double > & | r | ||
| ) |
Nuclear potential V(r) for given nucleus, at radial points r.
Calls one of the above, depending on nucleus type. If r_rms = 0, point-like (-Z/r) for all types except custom.
r. Beyond the last point, V = -Z_eff/r, with Z_eff from the last point. Not extrapolated to smaller r.r (atomic units).