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

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

#include <fermion.h>

Inheritance diagram for fermion_eval_thermo:
fermion_zerot eff_fermion nonrel_fermion rel_fermion

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 181 of file fermion.h.

Public Member Functions

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

virtual void fermion_eval_thermo::massless_pair_density ( fermion f,
double  temper 
) [virtual]

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_eval_thermo::calibrate ( fermion f,
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:
Also calibrate massless fermions?
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 284 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.