Class fermion_eff (o2scl)

O2scl : Class List

class fermion_eff : public o2scl::fermion_thermo_tl<fermion_t, fd_inte_t, be_inte_t, root_t, func_t, fp_t>

Fermion class from fitting method.

Based on the fitting method of [Johns96] which is an update of the method from [Eggleton73].

For a more accurate (but slower) method, use o2scl::fermion_rel_tl.

If the temperature is less than or equal to tlimit (which defaults to zero), the zero-temperature expressions from the parent class fermion_zerot_tl are used.

Given the chemical potential and the temperature the functions calc_mu() and pair_mu() work by solving the equation (c.f. Eq. 15 in Johns et al. (1996))

\[ \psi= 2 \sqrt{1+f/a}+\log\left(\frac{\sqrt{1+f/a}-1} {\sqrt{1+f/a}+1}\right) \]
for \( f \) given \( \psi=(\mu-m)/T \). If \( f/a<10^{-10} \), then the alternative expression
\[ \psi= 2 \left[1+f/(2 a)\right]+\log\left\{\frac{f/(2 a)} {\left[1+f/(2 a)\right]}\right\} \]
is used. The pressure, energy density, and entropy, are determined as polynomials in \( f \) with a set of precomputed coefficients as done in Johns et al. (1996) .

If \( \psi \) is less than min_psi (which defaults to -4) then the non-dengenerate approximation from fermion_thermo::calc_mu_ndeg() is used. The value of min_psi can be decreased to ensure that the expansion is not used, but values of \( \psi \) less than about -200 can cause the Johns et al. (1996) procedure outlined above to fail. Values of min_psi larger than -4 are not useful.

When the density and temperature is given instead (calc_density() and pair_density()), then there are two ways to proceed.

  • Use the density to solve for \( f \) .

  • Use the density to solve for the chemical potential.

Because the density is a complicated polynomial in \( f \), the former procedure does not work very well even though it might be less time consuming. In this class, the density is solved for the effective chemical potential instead. The initial guess is just taken from the present value of part::nu .

Todo

In class fermion_eff:

  • Future: Use bracketing to speed up one-dimensional root finding.

  • Future: Implement the same method of allowing the user to turn on or off the degenerate and nondegenerate expansions as in ref o2scl::fermion_rel_tl .

Coefficients for finite-temperature approximation

static const int cf_fermilat3 = 1

A set of coefficients from Jim Lattimer.

static const int cf_fermijel2 = 2

The smaller set of coefficients from Johns et al. (1996)

static const int cf_fermijel3 = 3

The larger set of coefficients from Johns et al. (1996)

static const int cf_fermijel3cons = 4

The set of coefficients from Johns et al. (1996) which retains better thermodynamic consistency.

double tlimit

If the temperature is less than tlimit then the zero-temperature functions are used (default 0).

bool err_nonconv

If true, call the error handler when convergence fails (default true)

root_cern def_psi_root

The default solver for \( \psi \).

root_cern def_density_root

The default solver for calc_density() and pair_density()

double min_psi

The minimum value of \( \psi \) (default -200)

bool verify_ti

If true, verify the thermodynamic identity.

ubmatrix Pmnf

The matrix of coefficients.

double parma

The parameter \( a \).

int sizem

The array row size.

int sizen

The array column size.

root *psi_root

The solver for \( \psi \).

root *density_root

The other solver for calc_density()

double solve_fun(double x, double psi)

The function which solves for \( f \) from \( \psi \).

void load_coefficients(int ctype)

Load coefficients.

The argument ctype Should be one of the constants below.

virtual int calc_mu(fermion &f, double temper)

Calculate thermodynamic properties as function of chemical potential.

If the quantity \( (\mu-m)/T \) (or \( (\nu-m^{*})/T \) in the case of interacting particles) is less than -200, then this quietly sets the density, the scalar density, the energy density, the pressure and the entropy to zero and exits.

virtual int calc_density(fermion &f, double temper)

Calculate thermodynamic properties as function of density.

Warning

This function needs a guess for the chemical potential, and will fail if that guess is not sufficiently accurate.

virtual void pair_mu(fermion &f, double temper)

Calculate thermodynamic properties with antiparticles as function of chemical potential.

Warning

This function needs a guess for the chemical potential, and will fail if that guess is not sufficiently accurate.

virtual int pair_density(fermion &f, double temper)

Calculate thermodynamic properties with antiparticles as function of density.

inline int set_psi_root(root<> &rp)

Set the solver for use in calculating \( \psi \).

inline int set_density_root(root<> &rp)

Set the solver for use in calculating the chemical potential from the density.

inline virtual const char *type()

Return string denoting type (“fermion_eff”)

Public Types

typedef boost::numeric::ublas::vector<double> ubvector
typedef boost::numeric::ublas::matrix<double> ubmatrix

Public Functions

fermion_eff()

Create a fermion with mass mass and degeneracy dof.

virtual ~fermion_eff()

Protected Functions

double density_fun(double x, fermion &f, double temper)

The function which solves for the chemical potential given the density.

double pair_density_fun(double x, fermion &f, double temper)

The function which solves for the chemical potential given the density (including antiparticles)