xlegf.f
SUBROUTINE XLEGF (DNU1, NUDIFF, MU1, MU2, THETA, ID, PQA, IPQA,
1 IERROR)
C***BEGIN PROLOGUE XLEGF
C***PURPOSE Compute normalized Legendre polynomials and associated
C Legendre functions.
C***LIBRARY SLATEC
C***CATEGORY C3A2, C9
C***TYPE SINGLE PRECISION (XLEGF-S, DXLEGF-D)
C***KEYWORDS LEGENDRE FUNCTIONS
C***AUTHOR Smith, John M., (NBS and George Mason University)
C***DESCRIPTION
C
C XLEGF: Extended-range Single-precision Legendre Functions
C
C A feature of the XLEGF subroutine for Legendre functions is
C the use of extended-range arithmetic, a software extension of
C ordinary floating-point arithmetic that greatly increases the
C exponent range of the representable numbers. This avoids the
C need for scaling the solutions to lie within the exponent range
C of the most restrictive manufacturer's hardware. The increased
C exponent range is achieved by allocating an integer storage
C location together with each floating-point storage location.
C
C The interpretation of the pair (X,I) where X is floating-point
C and I is integer is X*(IR**I) where IR is the internal radix of
C the computer arithmetic.
C
C This subroutine computes one of the following vectors:
C
C 1. Legendre function of the first kind of negative order, either
C a. P(-MU1,NU,X), P(-MU1-1,NU,X), ..., P(-MU2,NU,X) or
C b. P(-MU,NU1,X), P(-MU,NU1+1,X), ..., P(-MU,NU2,X)
C 2. Legendre function of the second kind, either
C a. Q(MU1,NU,X), Q(MU1+1,NU,X), ..., Q(MU2,NU,X) or
C b. Q(MU,NU1,X), Q(MU,NU1+1,X), ..., Q(MU,NU2,X)
C 3. Legendre function of the first kind of positive order, either
C a. P(MU1,NU,X), P(MU1+1,NU,X), ..., P(MU2,NU,X) or
C b. P(MU,NU1,X), P(MU,NU1+1,X), ..., P(MU,NU2,X)
C 4. Normalized Legendre polynomials, either
C a. PN(MU1,NU,X), PN(MU1+1,NU,X), ..., PN(MU2,NU,X) or
C b. PN(MU,NU1,X), PN(MU,NU1+1,X), ..., PN(MU,NU2,X)
C
C where X = COS(THETA).
C
C The input values to XLEGF are DNU1, NUDIFF, MU1, MU2, THETA,
C and ID. These must satisfy
C
C DNU1 is REAL and greater than or equal to -0.5;
C NUDIFF is INTEGER and non-negative;
C MU1 is INTEGER and non-negative;
C MU2 is INTEGER and greater than or equal to MU1;
C THETA is REAL and in the half-open interval (0,PI/2];
C ID is INTEGER and equal to 1, 2, 3 or 4;
C
C and additionally either NUDIFF = 0 or MU2 = MU1.
C
C If ID=1 and NUDIFF=0, a vector of type 1a above is computed
C with NU=DNU1.
C
C If ID=1 and MU1=MU2, a vector of type 1b above is computed
C with NU1=DNU1, NU2=DNU1+NUDIFF and MU=MU1.
C
C If ID=2 and NUDIFF=0, a vector of type 2a above is computed
C with NU=DNU1.
C
C If ID=2 and MU1=MU2, a vector of type 2b above is computed
C with NU1=DNU1, NU2=DNU1+NUDIFF and MU=MU1.
C
C If ID=3 and NUDIFF=0, a vector of type 3a above is computed
C with NU=DNU1.
C
C If ID=3 and MU1=MU2, a vector of type 3b above is computed
C with NU1=DNU1, NU2=DNU1+NUDIFF and MU=MU1.
C
C If ID=4 and NUDIFF=0, a vector of type 4a above is computed
C with NU=DNU1.
C
C If ID=4 and MU1=MU2, a vector of type 4b above is computed
C with NU1=DNU1, NU2=DNU1+NUDIFF and MU=MU1.
C
C In each case the vector of computed Legendre function values
C is returned in the extended-range vector (PQA(I),IPQA(I)). The
C length of this vector is either MU2-MU1+1 or NUDIFF+1.
C
C Where possible, XLEGF returns IPQA(I) as zero. In this case the
C value of the Legendre function is contained entirely in PQA(I),
C so it can be used in subsequent computations without further
C consideration of extended-range arithmetic. If IPQA(I) is nonzero,
C then the value of the Legendre function is not representable in
C floating-point because of underflow or overflow. The program that
C calls XLEGF must test IPQA(I) to ensure correct usage.
C
C IERROR is an error indicator. If no errors are detected, IERROR=0
C when control returns to the calling routine. If an error is detected,
C IERROR is returned as nonzero. The calling routine must check the
C value of IERROR.
C
C If IERROR=110 or 111, invalid input was provided to XLEGF.
C If IERROR=101,102,103, or 104, invalid input was provided to XSET.
C If IERROR=105 or 106, an internal consistency error occurred in
C XSET (probably due to a software malfunction in the library routine
C I1MACH).
C If IERROR=107, an overflow or underflow of an extended-range number
C was detected in XADJ.
C If IERROR=108, an overflow or underflow of an extended-range number
C was detected in XC210.
C
C***SEE ALSO XSET
C***REFERENCES Olver and Smith, Associated Legendre Functions on the
C Cut, J Comp Phys, v 51, n 3, Sept 1983, pp 502--518.
C Smith, Olver and Lozier, Extended-Range Arithmetic and
C Normalized Legendre Polynomials, ACM Trans on Math
C Softw, v 7, n 1, March 1981, pp 93--105.
C***ROUTINES CALLED XERMSG, XPMU, XPMUP, XPNRM, XPQNU, XQMU, XQNU,
C XRED, XSET
C***REVISION HISTORY (YYMMDD)
C 820728 DATE WRITTEN
C 890126 Revised to meet SLATEC CML recommendations. (DWL and JMS)
C 901019 Revisions to prologue. (DWL and WRB)
C 901106 Changed all specific intrinsics to generic. (WRB)
C Corrected order of sections in prologue and added TYPE
C section. (WRB)
C CALLs to XERROR changed to CALLs to XERMSG. (WRB)
C 920127 Revised PURPOSE section of prologue. (DWL)
C***END PROLOGUE XLEGF