Hadronic equation of state [abstract base]. More...
#include <eos_had_base.h>
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.
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 ![]() | |
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 ![]() | |
virtual double | fesym (double nb, double delta=0.0) |
Calculate symmetry energy of matter in ![]() | |
virtual double | fesym_err (double nb, double delta, double &unc) |
Calculate symmetry energy of matter and its uncertainty in ![]() | |
virtual double | fesym_slope (double nb, double delta=0.0) |
The symmetry energy slope parameter in ![]() | |
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 ![]() | |
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 ![]() | |
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 int | 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. | |
![]() | |
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 ![]() | |
bool | err_nonconv |
If true, call the error handler if msolve() or msolve_de() does not converge (default true) | |
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... | |
![]() | |
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. | |
![]() | |
thermo * | eos_thermo |
A pointer to the thermo object. | |
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 Skyrme-like 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 isospin-symmetric 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 773 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 780 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 787 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 756 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 764 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 795 of file eos_had_base.h.
Documentation generated with Doxygen. Provided under the
GNU Free Documentation License (see License Information).