23 #ifndef O2SCL_NUCLEAR_MASS_H 24 #define O2SCL_NUCLEAR_MASS_H 34 #include <boost/numeric/ublas/vector.hpp> 36 #include <o2scl/nucleus.h> 37 #include <o2scl/constants.h> 38 #include <o2scl/table.h> 39 #include <o2scl/inte_qagiu_gsl.h> 40 #include <o2scl/root_cern.h> 41 #include <o2scl/root_brent_gsl.h> 43 #ifndef DOXYGEN_NO_O2NS 97 int eltoZ(std::string el);
105 std::string
Ztoel(
size_t Z);
114 std::string
tostring(
size_t Z,
size_t N);
116 #ifndef DOXYGEN_INTERNAL 129 typedef std::map<std::string,int,
211 virtual const char *
type() {
return "nucmass"; }
229 virtual int get_nucleus(
int Z,
int N,
nucleus &n);
232 virtual double mass_excess(
int Z,
int N)=0;
235 virtual double mass_excess_d(
double Z,
double N)=0;
240 return (14.4381*pow(Z,2.39)+1.55468e-6*pow(Z,5.35))*1.0e-6;
250 return (mass_excess(Z,N)+((Z+N)*m_amu-Z*m_elec-N*m_neut-Z*m_prot));
260 return (mass_excess_d(Z,N)+((Z+N)*m_amu-Z*m_elec-N*m_neut-Z*m_prot));
267 return (mass_excess(Z,N)+((Z+N)*m_amu-Z*m_elec));
274 return (mass_excess_d(Z,N)+((Z+N)*m_amu-Z*m_elec));
281 return total_mass(Z,N)+Z*m_elec-electron_binding(Z);
288 return total_mass_d(Z,N)+Z*m_elec-electron_binding(Z);
331 virtual double mass_excess_d(
double Z,
double N);
355 virtual const char *
type() {
return "nucmass_fit_base"; }
361 virtual int fit_fun(
size_t nv,
const ubvector &x)=0;
364 virtual int guess_fun(
size_t nv, ubvector &x)=0;
422 virtual const char *
type() {
return "nucmass_semi_empirical"; }
427 virtual double mass_excess_d(
double Z,
double N);
431 return mass_excess_d(Z,N);
435 virtual int fit_fun(
size_t nv,
const ubvector &x);
438 virtual int guess_fun(
size_t nv, ubvector &x);
472 static const size_t nshells=11;
481 virtual double shell_energy(
int Z,
int N);
486 virtual double shell_energy_interp(
double Z,
double N);
512 virtual const char *
type() {
return "nucmass_dvi"; }
517 virtual double mass_excess_d(
double Z,
double N);
521 return mass_excess_d(Z,N);
525 virtual int fit_fun(
size_t nv,
const ubvector &x);
528 virtual int guess_fun(
size_t nv, ubvector &x);
575 double iand(
double r);
578 double iand2(
double r);
581 double solve(
double x);
595 void eval_rms_rho(
double rho0,
double N,
double d,
596 double &Rcd,
double &Rfermi,
double &Rrms);
606 void eval_rms_rsq(
double Rfermi,
double N,
double d,
607 double &rho0,
double &Rcd,
double &Rrms);
611 double density(
double r,
double Rfermi,
double d,
double rho0);
615 double iand2_new(
double r,
double Rfermi,
double d,
double rho0);
620 void eval_N_err(
double Rfermi,
double d,
double rho0,
621 double &N,
double &N_err);
625 double eval_N(
double Rfermi,
double d,
double rho0);
629 #ifndef DOXYGEN_NO_O2NS double ap
Pairing energy coefficient.
inte_qagiu_gsl it
The integrator.
double as
Surface energy coefficient.
double m_elec
Electron mass in (defaults to o2scl_mks::mass_electron converted into MeV)
virtual double total_mass_d(double Z, double N)
Return the total mass of the nucleus (without the electrons) in MeV.
Nuclear mass formula base [abstract base].
double av
Volume energy coefficient.
Semi-empirical mass formula.
double m_neut
Neutron mass in (defaults to o2scl_mks::mass_neutron converted into MeV)
std::string Ztoel(size_t Z)
Return the element name abbreviation given Z.
double Ec
Coulomb energy (in MeV, default 0.7)
double uRfermi
Store the user-specified value of the radius in the Fermi distribution.
std::string element_list[nelements]
The list of elements organized by proton number.
std::map< std::string, int, std::greater< std::string > > element_table
A map containing the proton numbers organized by element abbreviation.
static const int nelements
The number of elements (proton number)
virtual const char * type()
Return the type, "nucmass".
virtual double binding_energy(int Z, int N)
Return the binding energy in MeV.
Nuclear mass information.
Compute the RMS radius of a Fermi-Dirac density distribution with fixed diffusiveness.
double shell
Most recently computed shell energy.
virtual double total_mass(int Z, int N)
Return the total mass of the nucleus (without the electrons) in MeV.
double uN
The total number of particles.
double Sv
Symmetry energy (in MeV, default 23.7)
size_t nfit
Number of fitting parameters.
virtual double electron_binding(double Z)
Return the approximate electron binding energy in MeV.
double sv
Symmetry energy coefficient.
double m_amu
Atomic mass unit in (defaults to o2scl_mks::unified_atomic_mass converted into MeV) ...
Tabulated nuclear masses [abstract base].
virtual double binding_energy_d(double Z, double N)
Return the binding energy in MeV.
virtual double atomic_mass(int Z, int N)
Return the atomic mass of the nucleus in MeV (includes electrons and their binding energy) ...
virtual const char * type()
Return the type, "nucmass_semi_empirical".
double Ss
Surface energy (in MeV, default 18)
double ud
The diffusiveness.
double B
Binding energy (negative and in MeV, default -16)
std::map< std::string, int, std::greater< std::string > >::iterator table_it
A convenient typedef for an iterator for element_table.
double ac
Coulomb energy coefficient.
double Epair
Pairing energy (MeV, default 13.0)
double m_prot
Proton mass in (defaults to o2scl_mks::mass_proton converted into MeV)
double urho0
The central denstiy.
virtual const char * type()
Return the type, "nucmass_fit_base".
int parse_elstring(std::string ela, int &Z, int &N, int &A)
Parse a string representing an element.
virtual bool is_included(int Z, int N)
Return false if the mass formula does not include specified nucleus.
Nuclear mass formula from Dieperink and van Isacker (2009)
int eltoZ(std::string el)
Return Z given the element name abbreviation.
virtual const char * type()
Return the type, "nucmass_dvi".
double y
Surface symmetry energy coefficient.
virtual double mass_excess(int Z, int N)
Given Z and N, return the mass excess in MeV.
virtual double mass_excess(int Z, int N)
Given Z and N, return the mass excess in MeV.
Fittable mass formula [abstract base].
virtual double atomic_mass_d(double Z, double N)
Return the atomic mass of the nucleus in MeV (includes electrons and their binding energy) ...
An approximation of shell effects in nuclei based on the interacting boson model. ...
std::string tostring(size_t Z, size_t N)
Return a string of the form "Pb208" for a given Z and N.