dxnrmp.f
SUBROUTINE DXNRMP (NU, MU1, MU2, DARG, MODE, DPN, IPN, ISIG,
1 IERROR)
C***BEGIN PROLOGUE DXNRMP
C***PURPOSE Compute normalized Legendre polynomials.
C***LIBRARY SLATEC
C***CATEGORY C3A2, C9
C***TYPE DOUBLE PRECISION (XNRMP-S, DXNRMP-D)
C***KEYWORDS LEGENDRE FUNCTIONS
C***AUTHOR Lozier, Daniel W., (National Bureau of Standards)
C Smith, John M., (NBS and George Mason University)
C***DESCRIPTION
C
C SUBROUTINE TO CALCULATE NORMALIZED LEGENDRE POLYNOMIALS
C (XNRMP is single-precision version)
C DXNRMP calculates normalized Legendre polynomials of varying
C order and fixed argument and degree. The order MU and degree
C NU are non-negative integers and the argument is real. Because
C the algorithm requires the use of numbers outside the normal
C machine range, this subroutine employs a special arithmetic
C called extended-range arithmetic. See J.M. Smith, F.W.J. Olver,
C and D.W. Lozier, Extended-Range Arithmetic and Normalized
C Legendre Polynomials, ACM Transactions on Mathematical Soft-
C ware, 93-105, March 1981, for a complete description of the
C algorithm and special arithmetic. Also see program comments
C in DXSET.
C
C The normalized Legendre polynomials are multiples of the
C associated Legendre polynomials of the first kind where the
C normalizing coefficients are chosen so as to make the integral
C from -1 to 1 of the square of each function equal to 1. See
C E. Jahnke, F. Emde and F. Losch, Tables of Higher Functions,
C McGraw-Hill, New York, 1960, p. 121.
C
C The input values to DXNRMP are NU, MU1, MU2, DARG, and MODE.
C These must satisfy
C 1. NU .GE. 0 specifies the degree of the normalized Legendre
C polynomial that is wanted.
C 2. MU1 .GE. 0 specifies the lowest-order normalized Legendre
C polynomial that is wanted.
C 3. MU2 .GE. MU1 specifies the highest-order normalized Leg-
C endre polynomial that is wanted.
C 4a. MODE = 1 and -1.0D0 .LE. DARG .LE. 1.0D0 specifies that
C Normalized Legendre(NU, MU, DARG) is wanted for MU = MU1,
C MU1 + 1, ..., MU2.
C 4b. MODE = 2 and -3.14159... .LT. DARG .LT. 3.14159... spec-
C ifies that Normalized Legendre(NU, MU, COS(DARG)) is
C wanted for MU = MU1, MU1 + 1, ..., MU2.
C
C The output of DXNRMP consists of the two vectors DPN and IPN
C and the error estimate ISIG. The computed values are stored as
C extended-range numbers such that
C (DPN(1),IPN(1))=NORMALIZED LEGENDRE(NU,MU1,DX)
C (DPN(2),IPN(2))=NORMALIZED LEGENDRE(NU,MU1+1,DX)
C .
C .
C (DPN(K),IPN(K))=NORMALIZED LEGENDRE(NU,MU2,DX)
C where K = MU2 - MU1 + 1 and DX = DARG or COS(DARG) according
C to whether MODE = 1 or 2. Finally, ISIG is an estimate of the
C number of decimal digits lost through rounding errors in the
C computation. For example if DARG is accurate to 12 significant
C decimals, then the computed function values are accurate to
C 12 - ISIG significant decimals (except in neighborhoods of
C zeros).
C
C The interpretation of (DPN(I),IPN(I)) is DPN(I)*(IR**IPN(I))
C where IR is the internal radix of the computer arithmetic. When
C IPN(I) = 0 the value of the normalized Legendre polynomial is
C contained entirely in DPN(I) and subsequent double-precision
C computations can be performed without further consideration of
C extended-range arithmetic. However, if IPN(I) .NE. 0 the corre-
C sponding value of the normalized Legendre polynomial cannot be
C represented in double-precision because of overflow or under-
C flow. THE USER MUST TEST IPN(I) IN HIS/HER PROGRAM. In the case
C that IPN(I) is nonzero, the user could rewrite his/her program
C to use extended range arithmetic.
C
C
C
C The interpretation of (DPN(I),IPN(I)) can be changed to
C DPN(I)*(10**IPN(I)) by calling the extended-range subroutine
C DXCON. This should be done before printing the computed values.
C As an example of usage, the Fortran coding
C J = K
C DO 20 I = 1, K
C CALL DXCON(DPN(I), IPN(I),IERROR)
C IF (IERROR.NE.0) RETURN
C PRINT 10, DPN(I), IPN(I)
C 10 FORMAT(1X, D30.18 , I15)
C IF ((IPN(I) .EQ. 0) .OR. (J .LT. K)) GO TO 20
C J = I - 1
C 20 CONTINUE
C will print all computed values and determine the largest J
C such that IPN(1) = IPN(2) = ... = IPN(J) = 0. Because of the
C change of representation caused by calling DXCON, (DPN(I),
C IPN(I)) for I = J+1, J+2, ... cannot be used in subsequent
C extended-range computations.
C
C IERROR is an error indicator. If no errors are detected,
C IERROR=0 when control returns to the calling routine. If
C an error is detected, IERROR is returned as nonzero. The
C calling routine must check the value of IERROR.
C
C If IERROR=212 or 213, invalid input was provided to DXNRMP.
C If IERROR=201,202,203, or 204, invalid input was provided
C to DXSET.
C If IERROR=205 or 206, an internal consistency error occurred
C in DXSET (probably due to a software malfunction in the
C library routine I1MACH).
C If IERROR=207, an overflow or underflow of an extended-range
C number was detected in DXADJ.
C If IERROR=208, an overflow or underflow of an extended-range
C number was detected in DXC210.
C
C***SEE ALSO DXSET
C***REFERENCES 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 DXADD, DXADJ, DXRED, DXSET, XERMSG
C***REVISION HISTORY (YYMMDD)
C 820712 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 DXNRMP