1*DECK XQMU
2      SUBROUTINE XQMU (NU1, NU2, MU1, MU2, THETA, X, SX, ID, PQA, IPQA,
3     1   IERROR)
4C***BEGIN PROLOGUE  XQMU
5C***SUBSIDIARY
6C***PURPOSE  To compute the values of Legendre functions for XLEGF.
7C            Method: forward mu-wise recurrence for Q(MU,NU,X) for fixed
8C            nu to obtain Q(MU1,NU,X), Q(MU1+1,NU,X), ..., Q(MU2,NU,X).
9C***LIBRARY   SLATEC
10C***CATEGORY  C3A2, C9
11C***TYPE      SINGLE PRECISION (XQMU-S, DXQMU-D)
12C***KEYWORDS  LEGENDRE FUNCTIONS
13C***AUTHOR  Smith, John M., (NBS and George Mason University)
14C***ROUTINES CALLED  XADD, XADJ, XPQNU
15C***REVISION HISTORY  (YYMMDD)
16C   820728  DATE WRITTEN
17C   890126  Revised to meet SLATEC CML recommendations.  (DWL and JMS)
18C   901019  Revisions to prologue.  (DWL and WRB)
19C   901106  Corrected order of sections in prologue and added TYPE
20C           section.  (WRB)
21C   920127  Revised PURPOSE section of prologue.  (DWL)
22C***END PROLOGUE  XQMU
23      DIMENSION PQA(*),IPQA(*)
24      REAL DMU,NU,NU1,NU2,PQ,PQA,PQ1,PQ2,SX,X,X1,X2
25      REAL THETA
26C***FIRST EXECUTABLE STATEMENT  XQMU
27      IERROR=0
28      MU=0
29C
30C        CALL XPQNU TO OBTAIN Q(0.,NU1,X)
31C
32      CALL XPQNU(NU1,NU2,MU,THETA,ID,PQA,IPQA,IERROR)
33      IF (IERROR.NE.0) RETURN
34      PQ2=PQA(1)
35      IPQ2=IPQA(1)
36      MU=1
37C
38C        CALL XPQNU TO OBTAIN Q(1.,NU1,X)
39C
40      CALL XPQNU(NU1,NU2,MU,THETA,ID,PQA,IPQA,IERROR)
41      IF (IERROR.NE.0) RETURN
42      NU=NU1
43      K=0
44      MU=1
45      DMU=1.
46      PQ1=PQA(1)
47      IPQ1=IPQA(1)
48      IF(MU1.GT.0) GO TO 310
49      K=K+1
50      PQA(K)=PQ2
51      IPQA(K)=IPQ2
52      IF(MU2.LT.1) GO TO 330
53  310 IF(MU1.GT.1) GO TO 320
54      K=K+1
55      PQA(K)=PQ1
56      IPQA(K)=IPQ1
57      IF(MU2.LE.1) GO TO 330
58  320 CONTINUE
59C
60C        FORWARD RECURRENCE IN MU TO OBTAIN
61C                  Q(MU1,NU,X),Q(MU1+1,NU,X),....,Q(MU2,NU,X) USING
62C             Q(MU+1,NU,X)=-2.*MU*X*SQRT(1./(1.-X**2))*Q(MU,NU,X)
63C                               -(NU+MU)*(NU-MU+1.)*Q(MU-1,NU,X)
64C
65      X1=-2.*DMU*X*SX*PQ1
66      X2=(NU+DMU)*(NU-DMU+1.)*PQ2
67      CALL XADD(X1,IPQ1,-X2,IPQ2,PQ,IPQ,IERROR)
68      IF (IERROR.NE.0) RETURN
69      CALL XADJ(PQ,IPQ,IERROR)
70      IF (IERROR.NE.0) RETURN
71      PQ2=PQ1
72      IPQ2=IPQ1
73      PQ1=PQ
74      IPQ1=IPQ
75      MU=MU+1
76      DMU=DMU+1.
77      IF(MU.LT.MU1) GO TO 320
78      K=K+1
79      PQA(K)=PQ
80      IPQA(K)=IPQ
81      IF(MU2.GT.MU) GO TO 320
82  330 RETURN
83      END
84