Particles and Nuclei Sub-Library: Version 0.909
Public Member Functions | Data Fields
fermion_T Class Reference

Fermion with finite-temperature thermodynamics [abstract base]. More...

#include <fermion.h>

Inheritance diagram for fermion_T:
fermion part eff_fermion nonrel_fermion quark rel_fermion sn_fermion sn_nr_fermion eff_quark eff_quark

Detailed Description

This is an abstract base for the computation of finite-temperature fermionic statistics. Different children (e.g. eff_fermion and rel_fermion) use different techniques to computing the momentum integrations.

Because massless fermions at finite temperature are much simpler, there are separate member functions included in this class to handle them. The functions massless_calc_density() and massless_calc_mu() compute the thermodynamics of massless fermions at finite temperature given the density or the chemical potentials. The functions massless_pair_density() and massless_pair_mu() perform the same task, but automatically include antiparticles.

The function massless_calc_density() uses a root object to solve for the chemical potential as a function of the density. The default is an object of type cern_mroot_root. The function massless_pair_density() does not need to use the root object because of the simplification afforded by the inclusion of antiparticles.

Idea for Future:
Create a Chebyshev approximation for inverting the the Fermi functions for massless_calc_density() functions?
This Mathematica notebook contains the derivations of related series expansions and some algebra for the massless_pair() functions. fermion.nb, and fermion.pdf.

Definition at line 168 of file fermion.h.

Public Member Functions

 fermion_T (double mass=0, double dof=0)
 Create a fermion with mass mass and degeneracy dof.
virtual int calc_mu (double temper)=0
 Calculate properties as function of chemical potential.
virtual int calc_density (double temper)=0
 Calculate properties as function of density.
virtual int pair_mu (double temper)=0
 Calculate properties with antiparticles as function of chemical potential.
virtual int pair_density (double temper)=0
 Calculate properties with antiparticles as function of density.
int set_massless_root (root< funct > &rp)
 Set the solver for use in massless_calc_density()
virtual const char * type ()
 Return string denoting type ("fermion_T")
virtual double calibrate (int verbose=0, std::string fname="")
 Test the thermodynamics of calc_density() and calc_mu()
Massless fermions
virtual int massless_calc_mu (double temper)
 Finite temperature massless fermions.
virtual int massless_calc_density (double temper)
 Finite temperature massless fermions.
int massless_pair_mu (double temper)
 Finite temperature massless fermions and antifermions.
int massless_pair_density (double temper)
 Finite temperature massless fermions and antifermions.

Data Fields

cern_mroot_root< functdef_massless_root
 The default solver for massless_calc_density()

Member Function Documentation

int fermion_T::massless_pair_density ( double  temper)

In the cases $ n^3 >> T $ and $ T >> n^3 $ , expansions are used instead of the exact formulas to avoid loss of precision.

In particular, using the parameter

\[ \alpha = \frac{g^2 \pi^2 T^6}{243 n^2} \]

and defining the expression

\[ \mathrm{cbt} = \alpha^{-1/6} \left( -1 + \sqrt{1+\alpha}\right)^{1/3} \]

we can write the chemical potential as

\[ \mu = \frac{\pi T}{\sqrt{3}} \left(\frac{1}{\mathrm{cbt}} - \mathrm{cbt} \right) \]

These expressions, however, do not work well when $ \alpha $ is very large or very small, so series expansions are used whenever $ \alpha > 10^{4} $ or $ \alpha < 3 \times 10^{-4} $. For small $ \alpha $,

\[ \left(\frac{1}{\mathrm{cbt}} - \mathrm{cbt} \right) \approx \frac{2^{1/3}}{\alpha^{1/6}} - \frac{\alpha^{1/6}}{2^{1/3}} + \frac{\alpha^{5/6}}{6~2^{2/3}} + \frac{\alpha^{7/6}}{12~2^{1/3}} - \frac{\alpha^{11/6}}{18~2^{2/3}} - \frac{5 \alpha^{13/6}}{144~2^{1/3}} + \frac{77 \alpha^{17/6}}{2592~2^{2/3}} \]

and for large $ \alpha $,

\[ \left(\frac{1}{\mathrm{cbt}} - \mathrm{cbt} \right) \approx \frac{2}{3} \sqrt{\frac{1}{\alpha}} - \frac{8}{81} \left(\frac{1}{\alpha}\right)^{3/2} + \frac{32}{729} \left(\frac{1}{\alpha}\right)^{5/2} \]

This approach works to within about 1 part in $ 10^{12} $, and is tested in fermion_ts.cpp.

Idea for Future:
This could be improved by including more terms in the expansions.
virtual double fermion_T::calibrate ( int  verbose = 0,
std::string  fname = "" 
) [virtual]

This compares the approximation to the exact results over a grid with $ T = \left\{10^{-2},1,10^{2}\right\} $, $ \log_{10} (m/T) = \left\{ -3,-2,-1,0,1,2,3\right\} $, and $ \log_{10} \psi = \left\{ -3,-2,-1,0,1\right\} $, where $ \psi \equiv \left(\mu-m\right)/T $ using calc_density() and calc_mu(), with both inc_rest_mass taking both values true and false.

The verbose parameter controls the amount of output, and fname is the filename for the file fermion_cal.dat.

Idea for Future:
Convert into separate class?

Field Documentation

We default to a solver of type cern_mroot_root here since we don't have a bracket or a derivative.

Definition at line 293 of file fermion.h.


The documentation for this class was generated from the following file:
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Friends

Documentation generated with Doxygen. Provided under the GNU Free Documentation License (see License Information).

Get Object-oriented Scientific Computing
Lib at SourceForge.net. Fast, secure and Free Open Source software
downloads.