Subroutines and Data for evaluation of the Fermi-Dirac integrals
and their derivatives.
Documentation may be found in comments at the beginning of
calcdfi.f
and in the accompanying paper
"Accurate Evaluation of Fermi-Dirac Integrals and
Their Derivatives for Arbitrary Degeneracy and Relativity"
by
Juan Antonio Miralles and Kenneth A. Van Riper
accepted for publication in the Astrophysical Journal Supplement.
MANIFEST:
Makefile
makefile for fdstitch, and also to illustrate how to
incorporate elements in other makefiles
besscheb.f
subroutine for evaluating Chebyshev series expansions
called by calcdfi and calcfi
bessel.tab
Table of modified Bessel functions
calcdfi.f
Subroutine for evaluating Fermi-Dirac integrals and
derivatives.
calls besscheb, polynomial_int, TwoDpolyint
calcfi.f
Subroutine for evaluating Fermi-Dirac integrals
only, no derivatives.
calls besscheb, polynomial_int, TwoDpolyint
dfdints.tab
Table of Fermi-Dirac and Fermi derivatives
fdeos.f
Program to calculate Equation of State and Derivatives
fdints.tab
Table of Fermi-Dirac and Fermi functions
fdstitch.f
Program and test and illustrate usage of calcdfi and calcfi
fermi7h.tab
Table of Fermi function of order 7/2
polyint.f
subroutines for polynomial interpolation.
contains polynomial_int and TwoDpolyint
INSTALLATION CONSIDERATIONS
These subroutines and program have been tested on several
UNIX systems: SGI IRIX, HP-UX, and DOMAIN/OS. HP-UX presented
2 matters that required extra attention: The `readonly` specification
in FORTRAN open statements requires different syntax. It was
necessary to include the compiler option
-R8
to force all numerical constants to double precision. Equivalent
options may be necessary on other platforms.
FDSTITCH
A small program, fdstitch, is provided for illustration of the
usage of calcdfi and calcfi, and for verification of the installation.
fdstitch is the program we used to compare the difference along
each side of treatment boundary (for example, between interpolation
in the main table for eta <= 70 and the degenerate formulae for
eta > 70). The program prompts for the type of boundary, the value
of eta or log beta on the boundary, and a quantity to compare.
Some output from a typical run:
% fdstitch
1 beta boundary, 2 eta boundary ? 1
LOG 10 beta value ? -6
Value to compare:
1 2 3 4 5 6
f12 f32 f52 df12_eta df32_eta df52_eta
7 8 9
df12_beta df32_beta df52_beta
4
[.............]
-30.943 -6.000**2**2 3.22849E-14 3.22849E-14 1.00000000
-30.189 -6.000**2**2 6.86702E-14 6.86702E-14 1.00000000
-29.434 -6.000 5 0 1.46062E-13 1.46051E-13 1.00007881
-28.679 -6.000 5 0 3.10675E-13 3.10635E-13 1.00012902 ....
-27.925 -6.000 5 0 6.60809E-13 6.60721E-13 1.00013343 ....
[.............]
64.906 -6.000 5 0 8.0556 8.0557 0.99998391
65.660 -6.000 5 0 8.1023 8.1025 0.99998260
66.415 -6.000 5 0 8.1488 8.1489 0.99998032
67.170 -6.000 5 0 8.1950 8.1952 0.99997671
[.............]
eta log beta I J f(lb-eps) f(lb+eps) f-/f+ marker
Here I and J denote the table or formulae used in the evaluation for
f- and f+, f- and f+ are the function at log beta or eta +/- .000001,
and the marker field gives a visual flag for relatively large
relative errors f+/f- .
The comparison ends with a summary of the maximum relative errors found,
and a prompt for further action.
The maximum relative errors should be comparable to those
listed for 6th order interpolation in Table 6 of the accompanying
paper. If they are substantially larger, there is a problem.