CHANGES IN MATFCN VERSION 1.04 FROM VERSION 1.03
1. The code was improved for the case where x is near unity and c is
imaginary (q negative).
2. Improved accuracy was obtained for the case of very large x by
replacing the expression x-sqrt[(x-1)*(x+1)] that appears as a coefficient
when computing the first derivatives of the radial functions using the Bessel
product expansions. It was replaced by the equivalent but more robust
expression 1/(x+sqrt[(x-1)*(x-1)]. This latter expression does not suffer
increasing loss of accuracy due to subtraction errors as x increases to large
values. This replacement had previously been done in the argument of the
required Bessel functions when calculating them, but had been overlooked in the
subroutines for calculating first derivatives of the Mathieu functions.
[See the expression for u1 in subroutines m1bpe, m2bpe, and m3bpe].
3. Corrected some comments that were mislabeled. Added some comments
regarding calculation of the radial functions when x is near or equal to unity.
4. Set eigval, iflag, jmfb, and jsubb =0 before entering loop over l.
5 Change path name for matfcn.for to default to directory where matfcn.exe is
located.
6. Added open statements for fort.20, fort.30, fort.40, and fort.50 to
accommodate some compilers that require them.
CHANGES IN MATFCN VERSION 1.03 FROM VERSION 1.02
1. Changed printout of time via format 720 in subroutine main to do so after
function values calculated for the last desired value of l (= lnum).
2. In subroutine cese removed the following statement that appeared above
statement 180: if(csum.eq.0.0d0) go to 180
3. In subroutine cese above statement 380, changed 1.0d-05 to 0.1d0. This
avoids exiting the do loop prematurely and losing up to 3 digits of accuracy.
4. Added comment statements for input and output parameters at beginning of
subroutine cese.
5. Changed the variable name for the magnitude of c to cm to avoid confusion
with c.
CHANGES IN MATFCN VERSION 1.02 FROM VERSION 1.01
[Thanks to Brian Gladman of Worcester, United Kingdom for uncovering
most of the issues that led to the following changes in matfcn.]
1. Corrected an error in the diagnostic file fort.50 that listed the eigenvalues
a and b interchanged when isq = +1 and l is odd. This was only an error in
writing to fort.50. The correct eigenvalues are used in calculations of the
functions.
2. Removed the few lines of code in matfcn that involved real*16 calculations.
This code was not used unless isq = -1 and c*x is larger than about
2.3*(nex-10)*(nex-10). In this case real*16 arithmetic reduced some subtraction
error introduced in the scaling process. Since it is unlikely that a user would
set c*x this large, I decided to remove the code. Now matfcn can be compiled
and run even when using a compiler that does not support real*16 arithmetic.
3. Changed several min and max statements to ensure that all of the arguments
were integer. My compiler had no problem with mixed arguments but other
compilers may have a problem compiling matfcn.
4. Removed some superfluous code after one of the lines of code that had no
impact on the results but could affect compilation.
5. Improved the discussion of ndec and nex in the comment section at the
beginning of matfcn.
6. Removed some lines of code used during the development of matfcn
that are not now necessary.
7. Changed the format for angular function values in fort.50 to show 15 digits.
Also made several other improvements in the content of fort.50.
8. Changed the format in fort.20 and fort.30 files to provide 10 decimal digits
for function values.