2
SUBROUTINE DXPMUP (NU1, NU2, MU1, MU2, PQA, IPQA, IERROR)
3
C***BEGIN PROLOGUE DXPMUP
5
C***PURPOSE To compute the values of Legendre functions for DXLEGF.
6
C This subroutine transforms an array of Legendre functions
7
C of the first kind of negative order stored in array PQA
8
C into Legendre functions of the first kind of positive
9
C order stored in array PQA. The original array is destroyed.
12
C***TYPE DOUBLE PRECISION (XPMUP-S, DXPMUP-D)
13
C***KEYWORDS LEGENDRE FUNCTIONS
14
C***AUTHOR Smith, John M., (NBS and George Mason University)
15
C***ROUTINES CALLED DXADJ
16
C***REVISION HISTORY (YYMMDD)
18
C 890126 Revised to meet SLATEC CML recommendations. (DWL and JMS)
19
C 901019 Revisions to prologue. (DWL and WRB)
20
C 901106 Changed all specific intrinsics to generic. (WRB)
21
C Corrected order of sections in prologue and added TYPE
23
C 920127 Revised PURPOSE section of prologue. (DWL)
24
C***END PROLOGUE DXPMUP
25
DOUBLE PRECISION DMU,NU,NU1,NU2,PQA,PROD
26
DIMENSION PQA(*),IPQA(*)
27
C***FIRST EXECUTABLE STATEMENT DXPMUP
32
N=INT(NU2-NU1+.1D0)+(MU2-MU1)+1
34
IF(MOD(REAL(NU),1.).NE.0.) GO TO 210
35
200 IF(DMU.LT.NU+1.D0) GO TO 210
40
C INCREMENT EITHER MU OR NU AS APPROPRIATE.
41
IF(NU2-NU1.GT..5D0) NU=NU+1.D0
42
IF(MU2.GT.MU1) MU=MU+1
45
C TRANSFORM P(-MU,NU,X) TO P(MU,NU,X) USING
46
C P(MU,NU,X)=(NU-MU+1)*(NU-MU+2)*...*(NU+MU)*P(-MU,NU,X)*(-1)**MU
54
220 CALL DXADJ(PROD,IPROD,IERROR)
55
IF (IERROR.NE.0) RETURN
59
PQA(I)=PQA(I)*PROD*(-1)**MU
61
CALL DXADJ(PQA(I),IPQA(I),IERROR)
62
IF (IERROR.NE.0) RETURN
63
225 IF(NU2-NU1.GT..5D0) GO TO 230
64
PROD=(DMU-NU)*PROD*(-DMU-NU-1.D0)
65
CALL DXADJ(PROD,IPROD,IERROR)
66
IF (IERROR.NE.0) RETURN
70
230 PROD=PROD*(-DMU-NU-1.D0)/(DMU-NU-1.D0)
71
CALL DXADJ(PROD,IPROD,IERROR)
72
IF (IERROR.NE.0) RETURN