SpectraRust/tlusty/extracted/gauleg.f
2026-03-19 14:05:33 +08:00

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