35 lines
800 B
Fortran
35 lines
800 B
Fortran
SUBROUTINE GAULEG(X1,X2,X,W,N,M)
|
|
C ================================
|
|
C
|
|
C set up angle points
|
|
C
|
|
INCLUDE 'IMPLIC.FOR'
|
|
DIMENSION X(M),W(M)
|
|
PARAMETER (EPS=3.D-14,half=0.5d0,pi=3.141592654d0,quart=0.25,
|
|
* un=1.d0, two=2.d0)
|
|
c
|
|
N2=(N+1)/2
|
|
XM=HALF*(X2+X1)
|
|
XL=HALF*(X2-X1)
|
|
DO I=1,N2
|
|
Z=COS(PI*(I-quart)/(N+half))
|
|
1 CONTINUE
|
|
P1=1.D0
|
|
P2=0.D0
|
|
DO J=1,N
|
|
P3=P2
|
|
P2=P1
|
|
P1=((TWO*J-UN)*Z*P2-(J-UN)*P3)/J
|
|
END DO
|
|
PP=N*(Z*P1-P2)/(Z*Z-un)
|
|
Z1=Z
|
|
Z=Z1-P1/PP
|
|
IF(ABS(Z-Z1).GT.EPS) GO TO 1
|
|
X(I)=XM-XL*Z
|
|
X(N+1-I)=XM+XL*Z
|
|
W(I)=TWO*XL/((UN-Z*Z)*PP*PP)
|
|
W(N+1-I)=W(I)
|
|
END DO
|
|
RETURN
|
|
END
|