ampsci
High-precision calculations for one- and two-valence atomic systems
NuclearData.hpp
1#pragma once
2#include <cmath>
3#include <optional>
4#include <vector>
5
6//! Data and useful functions for nuclear properties and potentials. Radii all
7//! in Fermi (fm, e-15m) from Nuclear Data Service: https://www-nds.iaea.org/
8namespace Nuclear {
9
10// skin-thickness. Always same?
11constexpr double default_t = 2.30;
12
13constexpr auto FourLn3 = 4.0 * 1.098612289;
14// 4.0 * std::log(3.0); // std::log not constepr
15constexpr auto Pi2 = M_PI * M_PI;
16
17//! Isotope data: Z, A, r_rms/fm, I, pi, mu, Q
18struct Isotope {
19 //! Atomic charge
20 int Z;
21 //! Atomic mass number (A = Z + N)
22 int A;
23 //! root-mean-square charge radius, in Fermi (fm, e-15m)
24 std::optional<double> r_rms{};
25 //! Nuclear spin (in hbar)
26 std::optional<double> I_N{};
27 std::optional<int> parity{};
28 //! Magnetic dipole moment, in nuclear magnetons
29 std::optional<double> mu{};
30 //! Magnetic quadrupole moment, in barns
31 std::optional<double> q{};
32};
33
34//==============================================================================
35//! Looks up + returns an isotope from the list. If not in list, partially blank
36Isotope findIsotopeData(int z, int a);
37//! Returns all known isotopes of given atom
38std::vector<Isotope> findIsotopeList(int z);
39//! Looks up default value of r_rms for given isotope. Returns 0 if not found.
40double find_rrms(int z, int a);
41//! As above, for dipole moment
42double find_mu(int z, int a);
43//! As above, for parity
44int find_parity(int z, int a);
45//! As above, for nuclear spin. Returns -1 if not found
46double find_spin(int z, int a);
47
48//==============================================================================
49//! Calculates c from rrms and t
50double c_hdr_formula_rrms_t(double rrms, double t = default_t);
51//! Calculates rrms from c and t
52double rrms_formula_c_t(double c, double t = default_t);
53
54//! Approximate rms radius from a for to Angeli data
55double approximate_r_rms(int a, int z);
56
57//! Calculates effective skin thickness due to quadrupole deformation [See Eq. 8 of https://doi.org/10.1103/PhysRevA.100.032511.]
58double deformation_effective_t(double c, double t, double beta);
59
60//! just returns 2.3
61double approximate_t_skin(int a);
62
63} // namespace Nuclear
Data and useful functions for nuclear properties and potentials. Radii all in Fermi (fm,...
Definition nuclear_data_table.hpp:21
double c_hdr_formula_rrms_t(double rrms, double t)
Calculates c from rrms and t.
Definition NuclearData.cpp:73
std::optional< double > I_N
Nuclear spin (in hbar)
Definition NuclearData.hpp:26
std::optional< double > r_rms
root-mean-square charge radius, in Fermi (fm, e-15m)
Definition NuclearData.hpp:24
std::optional< double > q
Magnetic quadrupole moment, in barns.
Definition NuclearData.hpp:31
double rrms_formula_c_t(double c, double t)
Calculates rrms from c and t.
Definition NuclearData.cpp:87
int find_parity(int z, int a)
As above, for parity.
Definition NuclearData.cpp:35
int A
Atomic mass number (A = Z + N)
Definition NuclearData.hpp:22
double approximate_t_skin(int)
just returns 2.3
Definition NuclearData.cpp:107
int Z
Atomic charge.
Definition NuclearData.hpp:20
double find_mu(int z, int a)
As above, for dipole moment.
Definition NuclearData.cpp:30
Isotope findIsotopeData(int z, int a)
Looks up + returns an isotope from the list. If not in list, partially blank.
Definition NuclearData.cpp:6
std::optional< double > mu
Magnetic dipole moment, in nuclear magnetons.
Definition NuclearData.hpp:29
double find_rrms(int z, int a)
Looks up default value of r_rms for given isotope. Returns 0 if not found.
Definition NuclearData.cpp:25
double deformation_effective_t(double c, double t, double beta)
Calculates effective skin thickness due to quadrupole deformation [See Eq. 8 of https://doi....
Definition NuclearData.cpp:96
double approximate_r_rms(int A, int Z)
Approximate rms radius from a for to Angeli data.
Definition NuclearData.cpp:46
double find_spin(int z, int a)
As above, for nuclear spin. Returns -1 if not found.
Definition NuclearData.cpp:40
std::vector< Isotope > findIsotopeList(int z)
Returns all known isotopes of given atom.
Definition NuclearData.cpp:16
Isotope data: Z, A, r_rms/fm, I, pi, mu, Q.
Definition NuclearData.hpp:18