ampsci
c++ program for high-precision atomic structure calculations of single-valence systems
NuclearData.hpp
1 #pragma once
2 #include <cmath>
3 #include <optional>
4 #include <vector>
5 
8 namespace Nuclear {
9 
10 // skin-thickness. Always same?
11 constexpr double default_t = 2.30;
12 
13 constexpr auto FourLn3 = 4.0 * 1.098612289;
14 // 4.0 * std::log(3.0); // std::log not constepr
15 constexpr auto Pi2 = M_PI * M_PI;
16 
18 struct Isotope {
20  int Z;
22  int A;
24  std::optional<double> r_rms{};
26  std::optional<double> I_N{};
27  std::optional<int> parity{};
29  std::optional<double> mu{};
31  std::optional<double> q{};
32 };
33 
34 //==============================================================================
36 Isotope findIsotopeData(int z, int a);
38 std::vector<Isotope> findIsotopeList(int z);
40 double find_rrms(int z, int a);
42 double find_mu(int z, int a);
44 int find_parity(int z, int a);
46 double find_spin(int z, int a);
47 
48 //==============================================================================
50 double c_hdr_formula_rrms_t(double rrms, double t = default_t);
52 double rrms_formula_c_t(double c, double t = default_t);
53 
55 double approximate_r_rms(int a, int z);
56 
58 double deformation_effective_t(double c, double t, double beta);
59 
61 double 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
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
double approximate_t_skin(int)
just returns 2.3
Definition: NuclearData.cpp:107
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
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
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
int A
Atomic mass number (A = Z + N)
Definition: NuclearData.hpp:22
int Z
Atomic charge.
Definition: NuclearData.hpp:20
std::optional< double > mu
Magnetic dipole moment, in nuclear magnetons.
Definition: NuclearData.hpp:29