FCNPAK CMLIB ======================================================================== F C N P A K ======================================================================== Introduction ============ FCNPAK is a package of mathematical function subroutines. Its purpose is to provide functions that are not readily available elsewhere or that are available only under restrictive licensing agreements. All programs in FCNPAK are coded in standard Fortran. They are designed to be installed with little difficulty on most conventional computers. The developers of FCNPAK - D. W. Lozier (NBS 711, lozier@nist.gov) and J. M. Smith (formerly of NBS 715)- would appreciate receiving feedback from users about the usefulness and applicability of the software. Legendre Functions ================== The package contains subroutines for computing the associated Legendre functions, or Ferrers functions, P-subNU-superMU(cosTHETA), Q-subNU-superMU(cosTHETA) as well as the normalized Legendre polynomial PBAR-subNU-superMU(cosTHETA) in the ranges 0 .LT. THETA .LE. PI/2 MU = 0, 1, 2, ... -(1/2) .LE. NU .LT. INFINITY . Negative integral values of MU may be specified also for P-subNU- superMU. NU is restricted to integers for PBAR-subNU-superMU. An unusual feature of the FCNPAK subroutines for Legendre functions is the use of extended-range arithmetic, a software extension of ordinary floating-point arithmetic that greatly increases the exponent range of the representable numbers. In consequence, we avoid the need for scaling the solutions to lie within the exponent range of the most restrictive manufacturer's hardware. The increased exponent range is achieved by allocating an integer storage location together with each floating-point storage location. The increase in the time required to execute the algorithms in extended-range arithmetic depends on the application. In the case of the normalized Legendre polynomials, testing shows it to be about a factor of two. This is compensated in part by the lack of any need for scaling operations in the algorithms for the functions. The resulting function values are supplied in ordinary floating point whenever possible. P and Q are solutions of the associated Legendre equation. Definitions and properties of these and other solutions are supplied in Bateman Manuscript Project, "Higher Transcendental Functions," (A. Erdelyi, Ed.), v. 1, McGraw-Hill, New York, 1953 National Bureau of Standards, "Handbook of Mathematical Functions," AMS 55, (M. Abramowitz and I. A. Stegun, Eds.), U. S. GPO, Washington, D. C., 1964 F. W. J. Olver, "Asymptotics and Special Functions," Academic Press, New York, 1974. Algorithmic details for the subroutines in FCNPAK are supplied in J. M. Smith, F. W. J. Olver, and D. W. Lozier, "Extended-Range Arithmetic and Normalized Legendre Polynomials," ACM Trans. on Math. Softw., v. 7, no. 1, March 1981 F. W. J. Olver and J. M. Smith, "Associated Legendre Functions On The Cut," J. Comp. Physics, v. 51, no. 3, September 1983. The names of the subroutines used for Legendre functions are XDLEGF XSLEGF XDNRMP XSNRMP where the LEGF subroutines compute the double and single precision associated Legendre functions and the NRMP subroutines compute the double and single precision normalized Legendre polynomials. The algorithms used in the LEGF subroutines are described in Smith, Olver and Lozier (1983), and those used in the NRMP subroutines are described in Olver and Smith (1983). These subroutines have been incorporated in the CMLIB library and (with slight changes of name) SLATEC library; see http://gams.nist.gov/serve.cgi/Class/C9. Two subroutines XDCSRT XSCSRT are provided for testing purposes. They can be used to construct tests of computed results based on Casoratian relations. The names flagged by * in the list XDADD* XDC210* XDPNRM XDQMU XDSET* XDADJ* XDPMU XDPQNU XDQNU XDCON* XDPMUP XDPSI XDRED* XSADD* XSC210* XSPNRM XSQMU XSSET* XSADJ* XSPMU XSPQNU XSQNU XSCON* XSPMUP XSPSI XSRED* support extended-range arithmetic, and the others are subsidiary to the Legendre subroutines. The names that begin with XD are double-precision subroutines, and those which begin with XS are single-precision subroutines. XDSET (and XSSET) are initialization subroutines that must be called before any other extended-range subroutine is called. The Legendre function subroutines do this for the user. (updated July 21, 2010)