Relativistic mean field theory EOS. More...
#include <eos_had_rmf.h>
This class computes the properties of nucleonic matter using a mean-field approximation to a field-theoretical model.
Before sending neutrons and protons to these member functions, the masses should be set to and the degeneracy factor should be set to 2. Some models which can be loaded using o2scl_hdf::rmf_load()
expect that the neutron and proton masses are set to the value stored in mnuc.
o2scl::part::non_interacting
for neutrons and protons are set to false in many of the functions.int
) will return a non-zero value. Note that the solvers (in def_sat_mroot and o2scl::eos_had_base::def_mroot) also has its own data member indicating how to handle nonconvergence o2scl::mroot::err_nonconv which is separate.
The full Lagragian can be written as a sum of several terms
The part for the nucleon fields is
where is the nucleon field and
and
are the meson fields. The meson masses are
and
and meson-nucleon couplings are
and
. The couplings
cs
, cw
, and cr
are related to and
by
The nucleon masses are in and stored in
part::m
and just represents the charge (1 for protons and 0 for neutrons). The Coulomb field,
, is ignored in this class, but used in o2scl::nucleus_rmf.
The part for the field is
where is the meson mass,
and
are unitless couplings and
is a dimensionful scale, ususally taken to be 939 MeV (which need not be equal to
above). The coefficients
and
are related to the somewhat standard
and
by:
The part for the field is
where is the meson mass.
The part for the field is
Finally, additional meson interactions are
The function is the coefficient of
where the notation from Horowitz01 is:
This implies
and
The couplings, cs
, cw
, and cr
all have units of , and the couplings
b
, c
, zeta
and xi
are unitless. The additional couplings from Steiner05b, have units of
and the couplings
have units of
.
When the variable zm_mode is true, the effective mass is fixed using the approach of Zimanyi90 .
The expressions for the energy densities are often simplified in the literature using the field equations. These expressions are not used in this code since they are only applicable in infinite matter where the field equations hold, and are not suitable for use in applications (such as to finite nuclei in o2scl::nucleus_rmf) where the spatial derivatives of the fields are non-zero. Notice that in the proper expressions for the energy density the similarity between terms in the pressure up to a sign. This procedure allows one to verify the thermodynamic identity even if the field equations are not solved and allows the user to add gradient terms to the energy density and pressure.
See also Muller96 .
The field equations are:
Defining
the binding energy per particle in symmetric matter at equilibrium is given by
where the Dirac effective mass is . The compressibility is given by
The symmetry energy of bulk matter is given by
In the above equations, the subscipt denotes the mean field values of
and
. For the case
, the symmetry energy varies linearly with the density at large densities. The function
permits variations in the density dependence of the symmetry energy above nuclear matter density.
Definition at line 298 of file eos_had_rmf.h.
Public Member Functions | |
virtual const char * | type () |
Return string denoting type ("eos_had_rmf") | |
Compute EOS | |
virtual int | calc_e (fermion &ne, fermion &pr, thermo <h) |
Equation of state as a function of density. More... | |
virtual int | calc_p (fermion &ne, fermion &pr, thermo <h) |
Equation of state as a function of chemical potential. More... | |
virtual int | calc_eq_p (fermion &neu, fermion &p, double sig, double ome, double rho, double &f1, double &f2, double &f3, thermo &th) |
Equation of state and meson field equations as a function of chemical potentials. More... | |
virtual int | calc_eq_temp_p (fermion &ne, fermion &pr, double temper, double sig, double ome, double rho, double &f1, double &f2, double &f3, thermo &th) |
Equation of state and meson field equations as a function of chemical potentials at finite temperature. More... | |
virtual int | calc_temp_p (fermion &ne, fermion &pr, double T, thermo <h) |
Equation of state as a function of chemical potential. More... | |
int | calc_temp_e (fermion &ne, fermion &pr, double T, thermo <h) |
Equation of state as a function of densities at finite temperature. | |
Saturation properties | |
int | fix_saturation (double guess_cs=4.0, double guess_cw=3.0, double guess_b=0.001, double guess_c=-0.001) |
Calculate cs, cw, cr, b, and c from the saturation properties. More... | |
virtual int | saturation () |
Calculate properties of nuclear matter at the saturation density. More... | |
double | fesym_fields (double sig, double ome, double nb) |
Calculate symmetry energy assuming the field equations have already been solved. More... | |
double | fcomp_fields (double sig, double ome, double nb) |
Calculate the compressibility assuming the field equations have already been solved. More... | |
void | fkprime_fields (double sig, double ome, double nb, double &k, double &kprime) |
Calculate compressibilty and kprime assuming the field equations have already been solved. More... | |
Fields and field equations | |
int | field_eqs (size_t nv, const ubvector &x, ubvector &y) |
A function for solving the field equations. More... | |
int | field_eqsT (size_t nv, const ubvector &x, ubvector &y) |
A function for solving the field equations at finite temperature. More... | |
virtual int | set_fields (double sig, double ome, double lrho) |
Set a guess for the fields for the next call to calc_e(), calc_p(), or saturation() | |
int | get_fields (double &sig, double &ome, double &lrho) |
Return the most recent values of the meson fields. More... | |
Functions dealing with naturalness | |
void | check_naturalness (eos_had_rmf &re) |
Set the coefficients of a eos_had_rmf object to their limits from naturalness. More... | |
void | naturalness_limits (double value, eos_had_rmf &re) |
Provide the maximum values of the couplings assuming a limit on naturalness. More... | |
![]() | |
virtual int | calc_liqgas_dens_temp_e (fermion &n1, fermion &p1, fermion &n2, fermion &p2, double T, thermo &th1, thermo &th2) |
Compute liquid-gas phase transition densities using eos_had_temp_base::calc_temp_e() . More... | |
virtual int | calc_liqgas_temp_e (fermion &n1, fermion &p1, fermion &n2, fermion &p2, double nB, double Ye, double T, thermo &th1, thermo &th2, double &chi) |
Compute the liquid-gas phase transition using eos_had_temp_base::calc_temp_e() . More... | |
virtual int | calc_liqgas_beta_temp_e (fermion &n1, fermion &p1, fermion &n2, fermion &p2, double nB, double T, thermo &th1, thermo &th2, double &Ye, double &chi) |
Compute the liquid-gas phase transition in beta-equilibrium using eos_had_temp_base::calc_temp_e() . More... | |
virtual double | fesym_T (double nb, double T, double delta=0.0) |
Compute the symmetry energy at finite temperature. | |
virtual double | fsyment_T (double nb, double T, double delta=0.0) |
Compute the symmetry entropy at finite temperature. | |
virtual double | calc_temp_mun_e (double nn, double np, double T) |
Neutron chemical potential as a function of the densities. | |
virtual double | calc_temp_mup_e (double nn, double np, double T) |
Proton chemical potential as a function of the densities. | |
virtual double | calc_temp_nn_p (double mun, double mup, double T) |
Neutron density as a function of the chemical potentials. | |
virtual double | calc_temp_np_p (double mun, double mup, double T) |
Proton density as a function of the chemical potentials. | |
double | calc_fr (double nn, double np, double T) |
Compute the free energy as a function of the temperature and the densities. | |
virtual void | f_number_suscept_T (double mun, double mup, double T, double &dPdnn, double &dPdnp, double &dPdpp) |
Compute the number susceptibilities as a function of the chemical potentials, ![]() | |
virtual void | f_inv_number_suscept_T (double mun, double mup, double T, double &dednn, double &dednp, double &dedpp) |
Compute the 'inverse' number susceptibilities as a function of the densities, ![]() | |
void | check_en (fermion &n, fermion &p, double T, thermo &th, double &en_deriv, double &en_err) |
Check the entropy by computing the derivative numerically. | |
void | check_mu_T (fermion &n, fermion &p, double T, thermo &th, double &mun_deriv, double &mup_deriv, double &mun_err, double &mup_err) |
Check the chemical potentials at finite temperature by computing the derivative numerically. | |
virtual void | set_fermion_eval_thermo (fermion_eval_thermo &f) |
Computing finite-temperature integrals. More... | |
![]() | |
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, ![]() | |
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... | |
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... | |
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. | |
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... | |
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 | |
Other data members | |
size_t | calc_e_steps |
The number of separate calls to the solver that the calc_e functions take (default 20) More... | |
bool | calc_e_relative |
If true, solve for relative densities rather than absolute densities (default false) More... | |
bool | zm_mode |
Modifies method of calculating effective masses (default false) | |
int | verbose |
Verbosity parameter. More... | |
bool | err_nonconv |
If true, throw exceptions when the function calc_e() does not converge (default true) | |
Masses | |
double | mnuc |
The scale ![]() | |
double | ms |
![]() ![]() | |
double | mw |
![]() ![]() | |
double | mr |
![]() ![]() | |
Standard couplings (including nonlinear sigma terms) | |
double | cs |
double | cw |
double | cr |
double | b |
double | c |
Quartic terms for omega and rho. | |
double | zeta |
double | xi |
Additional isovector couplings | |
double | a1 |
double | a2 |
double | a3 |
double | a4 |
double | a5 |
double | a6 |
double | b1 |
double | b2 |
double | b3 |
![]() | |
fermion_eff | def_fet |
Default fermion thermodynamics object. | |
![]() | |
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... | |
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 | |
int | fix_saturation_fun (size_t nv, const ubvector &x, ubvector &y) |
The function for fix_saturation() | |
virtual int | zero_pressure (size_t nv, const ubvector &ex, ubvector &ey) |
Compute matter at zero pressure (for saturation()) | |
virtual int | calc_e_solve_fun (size_t nv, const ubvector &ex, ubvector &ey) |
The function for calc_e() | |
virtual int | calc_temp_e_solve_fun (size_t nv, const ubvector &ex, ubvector &ey) |
The function for calc_temp_e() | |
int | calc_cr (double sig, double ome, double nb) |
Calculate the cr coupling given sig and ome at the density 'nb'. More... | |
![]() | |
int | nuc_matter_temp_e (size_t nv, const ubvector &x, ubvector &y, double nn0, double np0, double T) |
Solve for nuclear matter at finite temperature given density. | |
int | nuc_matter_temp_p (size_t nv, const ubvector &x, ubvector &y, double mun0, double mup0, double T) |
Solve for nuclear matter at finite temperature given mu. | |
int | liqgas_dens_solve (size_t nv, const ubvector &x, ubvector &y, fermion &n1, fermion &p1, fermion &n2, fermion &p2, double T, thermo &th1, thermo &th2) |
Solve for the liquid gas phase transition as a function of the densities. | |
int | liqgas_solve (size_t nv, const ubvector &x, ubvector &y, fermion &n1, fermion &p1, fermion &n2, fermion &p2, double nB0, double Ye0, double T, thermo &th1, thermo &th2) |
Solve for the liquid-gas phase transition at fixed baryon density and electron fraction. | |
int | liqgas_beta_solve (size_t nv, const ubvector &x, ubvector &y, fermion &n1, fermion &p1, fermion &n2, fermion &p2, double nB0, double T, thermo &th1, thermo &th2, fermion &e) |
Solve for the liquid-gas phase transition in beta-equilibrium. | |
double | calc_entropy_delta (double delta, double nb, double T) |
Compute the entropy. | |
double | calc_dmu_delta_T (double delta, double nb, double T) |
Compute the difference between the neutron and proton chemical potentials. | |
![]() | |
double | t1_fun (double barn) |
Compute t1 for gradient_qij(). | |
double | t2_fun (double barn) |
Compute t2 for gradient_qij(). | |
Protected Attributes | |
double | n_baryon |
Temporary baryon density. | |
double | n_charge |
Temporary charge density. More... | |
double | fe_temp |
Temperature for solving field equations at finite temperature. | |
bool | ce_neut_matter |
For calc_e(), if true, then solve for neutron matter. | |
bool | ce_prot_matter |
For calc_e(), if true, then solve for proton matter. | |
bool | guess_set |
True if a guess for the fields has been given. | |
mroot< mm_funct, ubvector, jac_funct > * | sat_mroot |
The solver to compute saturation properties. | |
double | ce_temp |
Temperature storage for calc_temp_e() | |
The meson fields | |
double | sigma |
double | omega |
double | rho |
![]() | |
fermion_eval_thermo * | fet |
Fermion thermodynamics (default is def_fet) | |
![]() | |
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. | |
Solver | |
mroot_hybrids | def_sat_mroot |
The default solver for calculating the saturation density. More... | |
virtual int | set_sat_mroot (mroot< mm_funct, ubvector, jac_funct > &mrx) |
Set class mroot object for use calculating saturation density. | |
Additional Inherited Members | |
![]() | |
typedef boost::numeric::ublas::vector< double > | ubvector |
|
protected |
Used by fix_saturation().
Initial guesses for the chemical potentials are taken from the user-given values. Initial guesses for the fields can be set by set_fields(), or default values will be used. After the call to calc_e(), the final values of the fields can be accessed through get_fields().
This is a little more robust than the standard version in the parent eos_had_base.
Reimplemented from o2scl::eos_had_temp_pres_base.
Reimplemented in o2scl::eos_had_rmf_hyp, and o2scl::eos_had_rmf_delta.
|
virtual |
This calculates the pressure and energy density as a function of . When the field equations have been solved,
f1
, f2
, and f3
are all zero.
The thermodynamic identity is satisfied even when the field equations are not solved.
|
virtual |
Analogous to calc_eq_p() except at finite temperature.
Solves for the field equations automatically.
Implements o2scl::eos_had_temp_pres_base.
|
virtual |
Solves for the field equations automatically.
Implements o2scl::eos_had_temp_pres_base.
|
inline |
As given in Muller96 .
The definition of the vector-isovector field and coupling matches what is done here. Compare the Lagrangian above with Eq. 10 from the reference.
The following couplings should all be of the same size:
which are equivalent to
The connection the 's and the coefficients that are used here is
Note that Muller and Serot use the notation
which differs slightly from the "standard" notation above.
We need to compare the values of
These values are stored in the variables cs, cw, cr, b, c, zeta, xi, b1, etc. in the specified eos_had_rmf object. All of the numbers should be around 0.001 or 0.002.
For the scale , mnuc is used.
Definition at line 703 of file eos_had_rmf.h.
double o2scl::eos_had_rmf::fcomp_fields | ( | double | sig, |
double | ome, | ||
double | nb | ||
) |
This may only work at saturation density and may assume equal neutron and proton masses.
double o2scl::eos_had_rmf::fesym_fields | ( | double | sig, |
double | ome, | ||
double | nb | ||
) |
This may only work at saturation density and may assume equal neutron and proton masses.
The values x[0], x[1]
, and x[2]
should be set to , and
on input (in
) and on exit,
y[0], y[1]
and y[2]
contain the field equations and are zero when the field equations have been solved.
The values x[0], x[1]
, and x[2]
should be set to , and
on input (in
) and on exit,
y[0], y[1]
and y[2]
contain the field equations and are zero when the field equations have been solved.
int o2scl::eos_had_rmf::fix_saturation | ( | double | guess_cs = 4.0 , |
double | guess_cw = 3.0 , |
||
double | guess_b = 0.001 , |
||
double | guess_c = -0.001 |
||
) |
Note that the meson masses and mnuc must be specified before calling this function.
This function does not give correct results when bool zm_mode is true.
guess_cs
, guess_cw
, guess_b
, and guess_c
are initial guesses for cs
, cw
, b
, and c
respectively.
void o2scl::eos_had_rmf::fkprime_fields | ( | double | sig, |
double | ome, | ||
double | nb, | ||
double & | k, | ||
double & | kprime | ||
) |
This may only work at saturation density and may assume equal neutron and proton masses.
|
inline |
This returns the most recent values of the meson fields set by a call to saturation(), calc_e(), or calc_p(fermion &, fermion &, thermo &).
Definition at line 577 of file eos_had_rmf.h.
|
inline |
The limits for the couplings are function of the nucleon and meson masses, except for the limits on b
, c
, zeta
, and xi
which are independent of the masses because of the way that these four couplings are defined.
Definition at line 740 of file eos_had_rmf.h.
|
virtual |
This function first constructs an initial guess, increasing the chemical potentials if required to ensure the neutron and proton densities are finite, and then uses eos_had_rmf::sat_mroot to solve the field equations and ensure that the neutron and proton densities are equal and the pressure is zero. The quantities eos_had_base::n0, eos_had_base::eoa, and eos_had_base::msom can be computed directly, and the compressibility, the skewness, and the symmetry energy are computed using the functions fkprime_fields() and fesym_fields(). This function overrides the generic version in eos_had_base.
If verbose is greater than zero, then then this function reports details on the initial iterations to get the initial guess for the solver.
Reimplemented from o2scl::eos_had_base.
Reimplemented in o2scl::eos_had_rmf_delta.
bool o2scl::eos_had_rmf::calc_e_relative |
Setting this to true makes calc_temp_e() and calc_e() more accurate at low densities.
Definition at line 318 of file eos_had_rmf.h.
size_t o2scl::eos_had_rmf::calc_e_steps |
Values larger than about are probably not useful.
Definition at line 310 of file eos_had_rmf.h.
mroot_hybrids o2scl::eos_had_rmf::def_sat_mroot |
Used by fn0() (which is called by saturation()) to solve saturation_matter_e() (1 variable).
Definition at line 603 of file eos_had_rmf.h.
double o2scl::eos_had_rmf::mnuc |
This need not be exactly equal to the neutron or proton mass, but provides the scale for the coupling b
.
Definition at line 347 of file eos_had_rmf.h.
|
protected |
Definition at line 782 of file eos_had_rmf.h.
int o2scl::eos_had_rmf::verbose |
If this is greater than zero, then some functions report on their progress.
Definition at line 332 of file eos_had_rmf.h.
Documentation generated with Doxygen. Provided under the
GNU Free Documentation License (see License Information).