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,std::greater<std::string> >::iterator
table_it;
210 virtual const char *
type() {
return "nucmass"; }
228 virtual int get_nucleus(
int Z,
int N,
nucleus &n);
231 virtual double mass_excess(
int Z,
int N)=0;
234 virtual double mass_excess_d(
double Z,
double N)=0;
239 return (14.4381*pow(Z,2.39)+1.55468e-6*pow(Z,5.35))*1.0e-6;
249 return (mass_excess(Z,N)+((Z+N)*m_amu-Z*m_elec-N*m_neut-Z*m_prot));
259 return (mass_excess_d(Z,N)+((Z+N)*m_amu-Z*m_elec-N*m_neut-Z*m_prot));
266 return (mass_excess(Z,N)+((Z+N)*m_amu-Z*m_elec));
273 return (mass_excess_d(Z,N)+((Z+N)*m_amu-Z*m_elec));
280 return total_mass(Z,N)+Z*m_elec-electron_binding(Z);
287 return total_mass_d(Z,N)+Z*m_elec-electron_binding(Z);
330 virtual double mass_excess_d(
double Z,
double N);
354 virtual const char *
type() {
return "nucmass_fit_base"; }
360 virtual int fit_fun(
size_t nv,
const ubvector &x)=0;
363 virtual int guess_fun(
size_t nv, ubvector &x)=0;
421 virtual const char *
type() {
return "nucmass_semi_empirical"; }
426 virtual double mass_excess_d(
double Z,
double N);
430 return mass_excess_d(Z,N);
434 virtual int fit_fun(
size_t nv,
const ubvector &x);
437 virtual int guess_fun(
size_t nv, ubvector &x);
471 static const size_t nshells=11;
480 virtual double shell_energy(
int Z,
int N);
485 virtual double shell_energy_interp(
double Z,
double N);
511 virtual const char *
type() {
return "nucmass_dvi"; }
516 virtual double mass_excess_d(
double Z,
double N);
520 return mass_excess_d(Z,N);
524 virtual int fit_fun(
size_t nv,
const ubvector &x);
527 virtual int guess_fun(
size_t nv, ubvector &x);
574 double iand(
double r);
577 double iand2(
double r);
580 double solve(
double x);
594 void eval_rms_rho(
double rho0,
double N,
double d,
595 double &Rcd,
double &Rfermi,
double &Rrms);
605 void eval_rms_rsq(
double Rfermi,
double N,
double d,
606 double &rho0,
double &Rcd,
double &Rrms);
610 double density(
double r,
double Rfermi,
double d,
double rho0);
614 double iand2_new(
double r,
double Rfermi,
double d,
double rho0);
619 void eval_N_err(
double Rfermi,
double d,
double rho0,
620 double &N,
double &N_err);
624 double eval_N(
double Rfermi,
double d,
double rho0);
628 #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.
std::map< std::string, int, std::greater< std::string > >::iterator table_it
A convenient typedef for an iterator for element_table.
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)
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.