Hadronic equation of state [abstract base]. More...
#include <eos_had_base.h>
Public Types  
typedef boost::numeric::ublas::vector< double >  ubvector 
Public Member Functions  
Equation of state  
virtual int  calc_p (fermion &n, fermion &p, thermo &th)=0 
Equation of state as a function of the chemical potentials.  
virtual int  calc_e (fermion &n, fermion &p, thermo &th)=0 
Equation of state as a function of density.  
EOS properties  
virtual double  fcomp (double nb, double delta=0.0) 
Calculate the incompressibility in using calc_e() More...  
virtual double  fcomp_err (double nb, double delta, double &unc) 
Compute the incompressibility and its uncertainty. More...  
virtual double  feoa (double nb, double delta=0.0) 
Calculate the energy per baryon in using calc_e() More...  
virtual double  fesym (double nb, double delta=0.0) 
Calculate symmetry energy of matter in using calc_dmu_delta() . More...  
virtual double  fesym_err (double nb, double delta, double &unc) 
Calculate symmetry energy of matter and its uncertainty in . More...  
virtual double  fesym_slope (double nb, double delta=0.0) 
The symmetry energy slope parameter in . More...  
virtual double  fesym_curve (double nb, double delta=0.0) 
The curvature of the symmetry energy in .  
virtual double  fesym_skew (double nb, double delta=0.0) 
The skewness of the symmetry energy in .  
virtual double  fesym_diff (double nb) 
Calculate symmetry energy of matter as energy of neutron matter minus the energy of nuclear matter in . More...  
virtual double  feta (double nb) 
The strength parameter for quartic terms in the symmetry energy.  
virtual double  feta_prime (double nb) 
The derivative of the strength parameter for quartic terms in the symmetry energy.  
virtual double  fkprime (double nb, double delta=0.0) 
Calculate skewness of nuclear matter in using calc_e() More...  
virtual double  fmsom (double nb, double delta=0.0) 
Calculate reduced neutron effective mass using calc_e() More...  
virtual double  f_effm_neut (double nb, double delta=0.0) 
Neutron (reduced) effective mass.  
virtual double  f_effm_prot (double nb, double delta=0.0) 
Proton (reduced) effective mass.  
virtual double  f_effm_scalar (double nb, double delta=0.0) 
Scalar effective mass. More...  
virtual double  f_effm_vector (double nb, double delta=1.0) 
Vector effective mass. More...  
virtual double  fn0 (double delta, double &leoa) 
Calculate saturation density using calc_e() More...  
virtual void  f_number_suscept (double mun, double mup, double &dPdnn, double &dPdnp, double &dPdpp) 
Compute the number susceptibilities as a function of the chemical potentials, .  
virtual void  f_inv_number_suscept (double mun, double mup, double &dednn, double &dednp, double &dedpp) 
Compute the 'inverse' number susceptibilities as a function of the densities, .  
virtual void  saturation () 
Calculates some of the EOS properties at the saturation density. More...  
Functions for calculating physical properties  
double  calc_mun_e (double nn, double np) 
Compute the neutron chemical potential at fixed density. More...  
double  calc_ed (double nn, double np) 
Compute the energy density as a function of the nucleon densities.  
double  calc_pr (double nn, double np) 
Compute the pressure as a function of the nucleon chemical potentials.  
double  calc_mup_e (double nn, double np) 
Compute the proton chemical potential at fixed density. More...  
double  calc_nn_p (double mun, double mup) 
Compute the neutron density at fixed chemical potential. More...  
double  calc_np_p (double mun, double mup) 
Compute the proton density at fixed chemical potential. More...  
double  calc_dmu_delta (double delta, double nb) 
Compute the difference between neutron and proton chemical potentials as a function of the isospin asymmetry. More...  
double  calc_musum_delta (double delta, double nb) 
Compute the sum of the neutron and proton chemical potentials as a function of the isospin asymmetry. More...  
double  calc_pressure_nb (double nb, double delta=0.0) 
Compute the pressure as a function of baryon density at fixed isospin asymmetry. More...  
double  calc_edensity_nb (double nb, double delta=0.0) 
Compute the energy density as a function of baryon density at fixed isospin asymmetry. More...  
void  const_pf_derivs (double nb, double pf, double &dednb_pf, double &dPdnb_pf) 
Compute derivatives at constant proton fraction.  
double  calc_press_over_den2 (double nb, double delta=0.0) 
Calculate pressure / baryon density squared in nuclear matter as a function of baryon density at fixed isospin asymmetry. More...  
double  calc_edensity_delta (double delta, double nb) 
Calculate energy density as a function of the isospin asymmetry at fixed baryon density. More...  
Nuclear matter functions  
int  nuc_matter_p (size_t nv, const ubvector &x, ubvector &y, double nn0, double np0) 
Solve for the chemical potentials given the densities. More...  
int  nuc_matter_e (size_t nv, const ubvector &x, ubvector &y, double mun0, double mup0) 
Solve for the densities given the chemical potentials. More...  
Set auxilliary objects  
virtual void  set_mroot (mroot<> &mr) 
Set class mroot object for use in calculating chemical potentials from densities. More...  
virtual void  set_sat_root (root<> &mr) 
Set class mroot object for use calculating saturation density. More...  
virtual void  set_sat_deriv (deriv_base<> &de) 
Set deriv_base object to use to find saturation properties.  
virtual void  set_sat_deriv2 (deriv_base<> &de) 
Set the second deriv_base object to use to find saturation properties. More...  
virtual void  set_n_and_p (fermion &n, fermion &p) 
Set neutron and proton.  
Other functions  
void  gradient_qij (fermion &n, fermion &p, thermo &th, double &qnn, double &qnp, double &qpp, double &dqnndnn, double &dqnndnp, double &dqnpdnn, double &dqnpdnp, double &dqppdnn, double &dqppdnp) 
Calculate coefficients for gradient part of Hamiltonian. More...  
virtual const char *  type () 
Return string denoting type ("eos_had_base")  
Consistency checks  
void  check_mu (fermion &n, fermion &p, thermo &th, double &mun_deriv, double &mup_deriv, double &mun_err, double &mup_err) 
Check the chemical potentials by computing the derivatives numerically.  
void  check_den (fermion &n, fermion &p, thermo &th, double &nn_deriv, double &np_deriv, double &nn_err, double &np_err) 
Check the densities by computing the derivatives numerically.  
Public Member Functions inherited from o2scl::eos_base  
virtual void  set_thermo (thermo &th) 
Set class thermo object.  
virtual const thermo &  get_thermo () 
Get class thermo object.  
Public Attributes  
double  eoa 
Binding energy (without the rest mass) in .  
double  comp 
Compression modulus in .  
double  esym 
Symmetry energy in .  
double  n0 
Saturation density in .  
double  msom 
Effective mass (neutron)  
double  kprime 
Skewness in .  
fermion  def_neutron 
The defaut neutron. More...  
fermion  def_proton 
The defaut proton. More...  
Default solvers and derivative classes  
deriv_gsl  def_deriv 
The default object for derivatives. More...  
deriv_gsl  def_deriv2 
The second default object for derivatives. More...  
mroot_hybrids  def_mroot 
The default solver. More...  
root_cern  def_sat_root 
The default solver for calculating the saturation density. More...  
Public Attributes inherited from o2scl::eos_base  
thermo  def_thermo 
The default thermo object.  
Protected Member Functions  
double  t1_fun (double barn) 
Compute t1 for gradient_qij().  
double  t2_fun (double barn) 
Compute t2 for gradient_qij().  
Protected Attributes  
mroot *  eos_mroot 
The EOS solver.  
root *  sat_root 
The solver to compute saturation properties.  
deriv_base *  sat_deriv 
The derivative object for saturation properties.  
deriv_base *  sat_deriv2 
The second derivative object for saturation properties.  
fermion *  neutron 
The neutron object.  
fermion *  proton 
The proton object.  
Protected Attributes inherited from o2scl::eos_base  
thermo *  eos_thermo 
A pointer to the thermo object.  
Denote the number density of neutrons as , the number density of protons as , the total baryon density , the asymmetry , the nuclear saturation density as , and the quantity . (Note that some authors define as , which is not the same as the definition above.) Then the energy per baryon of nucleonic matter can be written as an expansion around
where represents the quartic terms
(Adapted slightly from Piekarewicz09). From this, one can compute the energy density of nuclear matter , the chemical potentials and the pressure . This expansion motivates the definition of several separate terms. The binding energy of symmetric nuclear matter ( ) is around 16 MeV.
The compression modulus is usually defined by . In nuclear physics it has become common to use the incompressibility (or bulk) modulus with an extra factor of 9 (motivated by the 3 in the denominator in the definition of ), and refer to simply as the incompressibility. Here, we define the function
This quantity is computed by the function fcomp() by computing the first derivative of the pressure, which is more numerically stable than the second derivative of the energy density (since most O2scl EOSs compute the pressure exactly). This function is typically evaluated at the point and is stored in comp by the function saturation(). This quantity is not always the same as , defined here as
We denote and similarly for , the quantity in Eq. 1 above. In nuclear matter at saturation, the pressure is zero and . See Chabanat97 for further discussion of the distinction between and .
The symmetry energy, can be defined as
and the parameter in Eq. 1 is just . Using
this can be rewritten
where the dependence of the chemical potentials on and is not written explicitly. This quantity is computed by function fesym(). Note that many of the functions in this class are written in terms of the proton fraction denoted as 'pf'
instead of as functions of . Frequently, is evaluated at to give a univariate function of the baryon density. It is sometimes also evaluated at the point , and this value is denoted by above and is typically stored in esym. Alternatively, one can define the symmetry energy by
which is computed by function fesym_diff() . The functions and are equal when terms are zero. In this case, is proportional to and so
These functions can also be generalized to finite temperature
and
The symmetry energy slope parameter , can be defined by
This can be rewritten as
(where the derivatives can be evaluated in either order) and this is the method used to compute this function in fesym_slope(). Alternatively, using
can be rewritten
The third derivative with respect to the baryon density is sometimes called the skewness. Here, we define
and this function is computed in fkprime() by computing the second derivative of the pressure.
The second derivative of the symmetry energy with respect to the baryon density is
and this function is computed in fesym_curve().
The third derivative of the symmetry energy with respect to the baryon density is
and this function is computed in fesym_skew(). Note that the numerical evaluation of higher derivatives can make eos_had_base::fesym_curve() and eos_had_base::fesym_skew() inaccurate.
Note that assuming terms of order and higher are zero and solving for the baryon density for which gives, to order (Piekarewicz09),
this implies a new 'incompressibility' around the saturation point, i.e.
The quantity in parenthesis is referred to by some authors as . Note that, because one is evaluating this at , this is distinct from
which is equal to to lowest order in at .
The quartic symmetry energy can be defined as
However, fourth derivatives are difficult numerically, and so an alternative quantity is preferable. Instead, one can evaluate the extent to which terms are important from
as described in Steiner06 . This function can be expressed either in terms of or
Alternatively, can be written
Evaluating this function at the saturation density gives
(Note that is referred to as in Steiner06). Sometimes it is useful to separate out the kinetic and potential parts of the energy density when computing , and the class eos_had_sym4_base is useful for this purpose.
The function can also be rewritten in (now suppressing the dependence on ),
then using the expression for ,
Replace fmsom() with f_effm_scalar(). This has to wait until f_effm_scalar() has a sensible definition when mn is not equal to mp
Could write a function to compute the "symmetry free energy" or the "symmetry entropy"
Compute the speed of sound or the number susceptibilities?
A lot of the numerical derivatives here might possibly request negative number densities for the nucleons, which may cause exceptions, espescially at very low densities. Since the default EOS objects are GSL derivatives, one can get around these issues by setting the GSL derivative object step size, but this is a temporary solution.
Definition at line 324 of file eos_had_base.h.
double o2scl::eos_had_base::calc_dmu_delta  (  double  delta, 
double  nb  
) 
This function uses neutron, proton, eos_base::eos_thermo, and calc_e() .
double o2scl::eos_had_base::calc_edensity_delta  (  double  delta, 
double  nb  
) 
Used by fesym().
This function calls eos_had_base::calc_e() with the internally stored neutron and proton objects.
double o2scl::eos_had_base::calc_edensity_nb  (  double  nb, 
double  delta = 0.0 

) 
This uses neutron, proton, eos_base::eos_thermo, and calc_e() .
double o2scl::eos_had_base::calc_mun_e  (  double  nn, 
double  np  
) 
This function uses neutron, proton, eos_base::eos_thermo, and calc_e() .
double o2scl::eos_had_base::calc_mup_e  (  double  nn, 
double  np  
) 
This function uses neutron, proton, eos_base::eos_thermo, and calc_e() .
double o2scl::eos_had_base::calc_musum_delta  (  double  delta, 
double  nb  
) 
This uses neutron, proton, eos_base::eos_thermo, and calc_e() .
double o2scl::eos_had_base::calc_nn_p  (  double  mun, 
double  mup  
) 
This function uses neutron, proton, eos_base::eos_thermo, and calc_e() .
double o2scl::eos_had_base::calc_np_p  (  double  mun, 
double  mup  
) 
This function uses neutron, proton, eos_base::eos_thermo, and calc_e() .
double o2scl::eos_had_base::calc_press_over_den2  (  double  nb, 
double  delta = 0.0 

) 
Used by fkprime().
This uses neutron, proton, eos_base::eos_thermo, and calc_e() .
double o2scl::eos_had_base::calc_pressure_nb  (  double  nb, 
double  delta = 0.0 

) 
Used by fcomp().

virtual 
Given the reduced nucleon effective masses, and , the scalar and vector effective masses are defined by (see e.g. Farine01)
this implies
and

virtual 
See documentation for eos_had_base::f_effm_scalar().
Note that the vector effective mass diverges when and , but many models have vector effective masses which are independent of . For now, we set to be the default value, corresponding to neutron matter.

virtual 
This function computes . The value of , often referred to as the "compressibility", is stored in comp by saturation() and is about 240 MeV at saturation density.

virtual 
This function works like fcomp(), except that it also returns the uncertainty in unc
.

virtual 
This function computes the energy per baryon of matter without the nucleon rest masses at the specified baryon density, nb
, and isospin asymmetry delta
.

virtual 
This function computes the symmetry energy,
at the value of given in nb
and given in delta
. The symmetry energy at at the saturation density and is stored in esym by saturation().
Reimplemented in o2scl::eos_had_skyrme.

virtual 
This function returns the energy per baryon of neutron matter minus the energy per baryon of nuclear matter. This will deviate significantly from the results from fesym() only if the dependence of the symmetry energy on is not quadratic.
Reimplemented in o2scl::eos_had_apr.

virtual 
This estimates the uncertainty due to the numerical differentiation, assuming that difference betwen the neutron and proton chemical potentials is computed exactly by calc_dmu_delta() .

virtual 
This returns the value of the "slope parameter" of the symmetry energy as a function of baryon density nb
and isospin asymmetry delta
. This ranges between about zero and 200 MeV for most equations of state.

virtual 
The skewness is defined to be and is denoted 'kprime'. This definition seems to be ambiguous for densities other than the saturation density and is not quite analogous to the compression modulus.

virtual 
Neutron effective mass (as stored in part::ms
) divided by vacuum mass (as stored in part::m
) in nuclear matter at saturation density. Note that this simply uses the value of n.ms from calc_e(), so that this effective mass could be either the Landau or Dirac mass depending on the context. Note that this may not be equal to the reduced proton effective mass.

virtual 
This function finds the baryon density for which the pressure vanishes.
void o2scl::eos_had_base::gradient_qij  (  fermion &  n, 
fermion &  p,  
thermo &  th,  
double &  qnn,  
double &  qnp,  
double &  qpp,  
double &  dqnndnn,  
double &  dqnndnp,  
double &  dqnpdnn,  
double &  dqnpdnp,  
double &  dqppdnn,  
double &  dqppdnp  
) 
We want the gradient part of the Hamiltonian in the form
The expression for the gradient terms from Pethick95 is
This can be rewritten
or
or
Generally, for Skyrmelike interactions
for .
This function uses the assumption to calculate and from the neutron and proton effective masses assuming the Skyrme form. The values of and their derivatives are then computed.
The functions set_n_and_p() and set_thermo() will be called by gradient_qij(), to facilitate the use of the n
, p
, and th
parameters.
int o2scl::eos_had_base::nuc_matter_e  (  size_t  nv, 
const ubvector &  x,  
ubvector &  y,  
double  mun0,  
double  mup0  
) 
The neutron and proton densities should be stored in x[0]
and x[1]
and the neutron and proton chemical potentials should be stored in pa[0]
and pa[1]
.
Because this function is designed to be used in a solver, it returns exc_efailed
without calling the error handler if the chemical potentials are not finite.
This function is used by eos_had_eden_base::calc_p().
int o2scl::eos_had_base::nuc_matter_p  (  size_t  nv, 
const ubvector &  x,  
ubvector &  y,  
double  nn0,  
double  np0  
) 
The neutron and proton chemical potentials should be stored in x[0]
and x[1]
and the neutron and proton densities should be stored in pa[0]
and pa[1]
.
Because this function is designed to be used in a solver, it returns exc_efailed
without calling the error handler if the densities are not finite.
This function is used by eos_had_pres_base::calc_e().

virtual 
This computes the saturation density, and the incompressibility, the symmetry energy, the binding energy, the reduced neutron effective mass at the saturation density, and the skewness in isospinsymmetric matter. The results are stored in n0, comp, esym, eoa, msom, and kprime, respectively.
Reimplemented in o2scl::eos_had_rmf, and o2scl::eos_had_rmf_delta.

virtual 

virtual 
Computing the slope of the symmetry energy at the saturation density requires two derivative objects, because it has to take an isospin derivative and a density derivative. Thus this second deriv_base object is used in the function fesym_slope().

virtual 
deriv_gsl o2scl::eos_had_base::def_deriv 
The value of deriv_gsl::h is set to in the eos_had_base constructor.
Definition at line 768 of file eos_had_base.h.
deriv_gsl o2scl::eos_had_base::def_deriv2 
The value of deriv_gsl::h is set to in the eos_had_base constructor.
Definition at line 775 of file eos_had_base.h.
mroot_hybrids o2scl::eos_had_base::def_mroot 
Used by calc_e() to solve nuc_matter_p() (2 variables) and by calc_p() to solve nuc_matter_e() (2 variables).
Definition at line 782 of file eos_had_base.h.
fermion o2scl::eos_had_base::def_neutron 
By default this has a spin degeneracy of 2 and a mass of o2scl_mks::mass_neutron . Also the value of part::non_interacting
is set to false
.
Definition at line 751 of file eos_had_base.h.
fermion o2scl::eos_had_base::def_proton 
By default this has a spin degeneracy of 2 and a mass of o2scl_mks::mass_proton . Also the value of part::non_interacting
is set to false
.
Definition at line 759 of file eos_had_base.h.
root_cern o2scl::eos_had_base::def_sat_root 
Used by fn0() (which is called by saturation()) to solve saturation_matter_e() (1 variable).
Definition at line 790 of file eos_had_base.h.
Documentation generated with Doxygen. Provided under the
GNU Free Documentation License (see License Information).