Class eos_had_apr (o2scl)¶
-
class
o2scl
::
eos_had_apr
: public o2scl::eos_had_temp_eden_base¶ EOS from Akmal, Pandharipande, and Ravenhall.
The EOS of Akmal, Pandharipande, and Ravenhall, from [Akmal98eo] (APR).
The Hamiltonian is:
\[ {\cal H}_{APR} = {\cal H}_{kin} + {\cal H}_{pot} \]\[ {\cal H}_{kin} = \left\{ \frac{\hbar^2}{2 m} + \left[ p_3 + \left( 1 - x \right) p_5 \right] n e^{-p_4 n} \right\} \tau_n + \left\{ \frac{\hbar^2}{2 m} + \left[ p_3 + x p_5 \right] n e^{-p_4 n} \right\} \tau_p \]\[ {\cal H}_{pot} = g_1 \left[ 1 - \left( 1 - 2 x \right)^2 \right] + g_2 \left( 1 - 2 x \right)^2 \]The following are definitions for \( g_i \) in the low-density phase (LDP) or the high-density phase (HDP):
\[ g_{1,LDP} = -n^2 \left[ p_1 + p_2 n + p_6 n^2 + \left( p_{10} + p_{11} n \right) e^{-p_9^2 n^2} \right] \]\[ g_{2,LDP} = -n^2 \left[ \frac{p_{12}}{n} + p_7 + p_8 n + p_{13} e^{-p_9^2 n^2} \right] \]\[ g_{1,HDP} = g_{1,LDP} -n^2 \left[ p_{17} \left( n - p_{19} \right) + p_{21} \left( n - p_{19} \right)^2 e^{p_{18} \left( n - p_{19} \right) } \right] \]\[ g_{2,HDP} = g_{2,LDP} -n^2 \left[ p_{15} \left( n - p_{20} \right) + p_{14} \left( n - p_{20} \right)^2 e^{p_{16} \left( n - p_{20} \right)} \right] \]The variables
\( \nu_n\) and \( \nu_p\) contain the expressions \( (-\mu_n+V_n)/T \) and \( (-\mu_p+V_p)/T \) respectively, where \( V \) is the potential part of the single particle energy for particle i (i.e. the derivative of the Hamiltonian w.r.t. density while energy density held constant). Equivalently, \( \nu_n\) is just \( -k_{F_n}^2/ 2 m^{*} \).- Note
APR seems to have been designed to be used with non-relativistic neutrons and protons with equal masses of 939 MeV. This gives a saturation density very close to 0.16.
The selection between the LDP and HDP is controlled by the value of pion. The default is to use the LDP at densities below 0.16 \( \mathrm{fm}^{-3} \), and for larger densities to just use whichever minimizes the energy.
The finite temperature approximations from Prakash97 are used in testing.
- Idea for Future:
There might be room to improve the testing of the finite temperature a bit.
- Idea for Future:
There is some repetition between calc_e() and calc_temp_e() that possibly could be removed.
- Idea for Future:
Include the analytic relations from Constantinou et al.
- Note
Since this EOS uses the effective masses and chemical potentials in the fermion class, the values of part::non_interacting for neutrons and protons are set to false in many of the functions.
- Note
The parameter array is unit indexed, so that
par[0]
is unused. This choice makes the connection between the code and the paper a bit more transparent.
Subclassed by o2scl::eos_had_sym4_apr
Choice of phase
-
const int
best
= 0¶ use LDP for densities less than 0.16 and for higher densities, use the phase which minimizes energy (default)
-
const int
ldp
= 1¶ LDP (no pion condensation)
-
const int
hdp
= 2¶ HDP (pion condensation)
-
int
last_phase
()¶ Return the phase of the most recent call to calc_e()
This function always returns either eos_had_apr::ldp or eos_had_apr::hdp .
Basic usage
-
int
calc_e
(fermion &n, fermion &p, thermo &th)¶ Equation of state as a function of density.
-
int
calc_temp_e
(fermion &n, fermion &pr, double temper, thermo &th)¶ Equation of state as a function of densities.
-
double
fcomp_nuc
(double nb)¶ Compute the compressibility in nuclear (isospin-symmetric matter)
See general notes at eos_had_base::fcomp(). This computes the compressibility (at fixed proton fraction = 0.5) exactly, unless parent_method is true in which case the derivative is taken numerically in eos_had_base::fcomp().
-
double
fesym_diff
(double nb)¶ Calculate symmetry energy of matter as energy of neutron matter minus the energy of nuclear matter.
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 \( \delta \) is not quadratic.
Model selection
-
const int
a18_uix_deltav
= 1¶ With three body forces and relativistic corrections.
-
const int
a18_uix
= 2¶ With three body forces.
-
const int
a18_deltav
= 3¶ With relativistic corrections.
-
const int
a18
= 4¶ No three body forces or relativistic corrections.
-
void
select
(int model_index = 1)¶ Select model.
Valid values for
model_index
are:1 - A18+UIX*+deltav (preferred by Akmal, et. al. - this is the default)
2 - A18+UIX*
3 - A18+deltav
4 - A18
If any other integer is given, the error handler is called.
- Note
This cannot be virtual because it is called by the constructor
-
double
get_par
(size_t n)¶ Get the value of one of the model parameters.
-
void
set_par
(size_t n, double x)¶ Set the value of one of the model parameters.
Other functions
-
bool
parent_method
¶ If true, use the methods from eos_had_base for fcomp() and fesym_diff() (default true)
This can be set to true to check the difference in the compressibility and symmety energy between the exact expressions and the numerical values from class o2scl::eos_had_base.
- Idea for Future:
This variable is probably unnecessary, as the syntax
works just as well.eos_had_apr apr; ccout << apr.eos_had_base::fcomp(0.16) << endl;
-
int
gradient_qij2
(double nn, double np, double &qnn, double &qnp, double &qpp, double &dqnndnn, double &dqnndnp, double &dqnpdnn, double &dqnpdnp, double &dqppdnn, double &dqppdnp)¶ Calculate Q’s for semi-infinite nuclear matter.
For general discussion, see the documentation to eos_had_base::qs().
For APR, we set \( x_1=x_2=0 \) so that \( Q_i=P_i/2 \) and then
\[\begin{split}\begin{eqnarray*} P_1 &=& \left(\frac{1}{2} p_3-p_5 \right) e^{-p_4 n} \nonumber \\ P_2 &=& \left(\frac{1}{2} p_3+p_5 \right) e^{-p_4 n} \end{eqnarray*}\end{split}\]This gives
\[\begin{split}\begin{eqnarray*} Q_{nn}&=&\frac{1}{4} e^{-p_4 \rho} \left[ -6 p_5 - p_4 (p_3 - 2 p_5) (n_n + 2 n_p) \right] \nonumber \\ Q_{np}&=&\frac{1}{8} e^{-p_4 \rho} \left[ 4 (p_3 - 4 p_5) - 3 p_4 (p_3 - 2 p_5) (n_n + n_p)\right] \nonumber \\ Q_{pp}&=&\frac{1}{4} e^{-p_4 \rho} \left[ -6 p_5 - p_4 (p_3 - 2 p_5) (n_p + 2 n_n) \right] \end{eqnarray*}\end{split}\]
-
const char *
type
()¶ Return string denoting type (“eos_had_apr”)