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>
42 #ifndef DOXYGEN_NO_O2NS
96 int eltoZ(std::string el);
104 std::string
Ztoel(
size_t Z);
113 std::string
tostring(
size_t Z,
size_t N);
115 #ifndef DOXYGEN_INTERNAL
128 typedef std::map<std::string,int,string_comp>::iterator
table_it;
209 virtual const char *
type() {
return "nucmass"; }
238 return (14.4381*pow(Z,2.39)+1.55468e-6*pow(Z,5.35))*1.0e-6;
349 virtual const char *
type() {
return "nucmass_fit_base"; }
371 (
double Z,
double N,
double npout,
double nnout,
372 double chi,
double T) {
379 (
int Z,
int N,
double npout,
double nnout,
380 double chi,
double T) {
440 virtual const char *
type() {
return "nucmass_semi_empirical"; }
453 virtual int fit_fun(
size_t nv,
const ubvector &x);
456 virtual int guess_fun(
size_t nv, ubvector &x);
530 virtual const char *
type() {
return "nucmass_dvi"; }
543 virtual int fit_fun(
size_t nv,
const ubvector &x);
546 virtual int guess_fun(
size_t nv, ubvector &x);
593 double iand(
double r);
596 double iand2(
double r);
599 double solve(
double x);
614 double &Rcd,
double &Rfermi,
double &Rrms);
625 double &rho0,
double &Rcd,
double &Rrms);
629 double density(
double r,
double Rfermi,
double d,
double rho0);
633 double iand2_new(
double r,
double Rfermi,
double d,
double rho0);
638 void eval_N_err(
double Rfermi,
double d,
double rho0,
639 double &N,
double &N_err);
643 double eval_N(
double Rfermi,
double d,
double rho0);
647 #ifndef DOXYGEN_NO_O2NS
double iand2_new(double r, double Rfermi, double d, double rho0)
The radial density distribution times radius squared.
double ap
Pairing energy coefficient.
inte_qagiu_gsl it
The integrator.
virtual double mass_excess(int Z, int N)=0
Given Z and N, return the mass excess in MeV [abstract].
double as
Surface energy coefficient.
double m_elec
Electron mass in (defaults to o2scl_mks::mass_electron converted into MeV)
double eval_N(double Rfermi, double d, double rho0)
Compute the total number of particles.
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].
static const size_t nshells
Number of magic numbers.
virtual int guess_fun(size_t nv, ubvector &x)
Fill array with guess from present values for fitting.
double av
Volume energy coefficient.
virtual double mass_excess_d(double Z, double N)=0
Given Z and N, return the mass excess in MeV [abstract].
double iand(double r)
The function .
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.
static const int nelements
The number of elements (proton number)
virtual const char * type()
Return the type, "nucmass".
virtual int guess_fun(size_t nv, ubvector &x)=0
Fill array with guess from present values for fitting [abstract].
virtual double binding_energy(int Z, int N)
Return the binding energy in MeV.
virtual int fit_fun(size_t nv, const ubvector &x)=0
Fix parameters from an array for fitting [abstract].
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 binding_energy_densmat(int Z, int N, double npout, double nnout, double chi, double T)
The binding energy in a nucleus in dense matter.
virtual double mass_excess_d(double Z, double N)
Given Z and N, return the mass excess in MeV.
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.
std::map< std::string, int, string_comp >::iterator table_it
A convenient typedef for an iterator for element_table.
A nuclear mass formula for dense matter.
double sv
Symmetry energy coefficient.
double m_amu
Atomic mass unit in (defaults to o2scl_mks::unified_atomic_mass converted into MeV) ...
virtual double mass_excess_d(double Z, double N)
Given Z and N, return the mass excess in MeV.
void eval_rms_rho(double rho0, double N, double d, double &Rcd, double &Rfermi, double &Rrms)
Compute the RMS radius from the central density.
virtual int fit_fun(size_t nv, const ubvector &x)
Fix parameters from an array for fitting.
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 double shell_energy(int Z, int N)
Compute the shell energy for nucleus Z and N.
virtual const char * type()
Return the type, "nucmass_semi_empirical".
double Ss
Surface energy (in MeV, default 18)
double ud
The diffusiveness.
void eval_rms_rsq(double Rfermi, double N, double d, double &rho0, double &Rcd, double &Rrms)
Compute the RMS radius from the Fermi distribution radius.
std::map< std::string, int, string_comp > element_table
A map containing the proton numbers organized by element abbreviation.
double B
Binding energy (negative and in MeV, default -16)
double ac
Coulomb energy coefficient.
virtual int guess_fun(size_t nv, ubvector &x)
Fill array with guess from present values for fitting.
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 int fit_fun(size_t nv, const ubvector &x)
Fix parameters from an array for fitting.
virtual int get_nucleus(int Z, int N, nucleus &n)
Fill n with the information from nucleus with the given neutron and proton number.
virtual double mass_excess_d(double Z, double N)
Given Z and N, return the mass excess in MeV.
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 shells[nshells]
Magic numbers.
double solve(double x)
The function to fix the total number of particles.
int eltoZ(std::string el)
Return Z given the element name abbreviation.
double density(double r, double Rfermi, double d, double rho0)
The radial density distribution.
virtual const char * type()
Return the type, "nucmass_dvi".
void eval_N_err(double Rfermi, double d, double rho0, double &N, double &N_err)
Compute the total number of particles with numerical uncertainty.
double iand2(double r)
The function .
virtual double shell_energy_interp(double Z, double N)
Compute the shell energy for specified values of Z and N using bilinear interpolation.
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.
virtual double binding_energy_densmat_d(double Z, double N, double npout, double nnout, double chi, double T)
The binding energy in a nucleus in dense matter.
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.