2025-01-16 23:18:01 -05:00
|
|
|
|
|
|
|
c***********************************************************************
|
|
|
|
SUBROUTINE LGNDR(PLM,MPLUS,LPLUS,THET)
|
|
|
|
c
|
|
|
|
c Calculates Legendre polynomials Plm
|
|
|
|
c
|
|
|
|
c mplus number of m's >0
|
|
|
|
c lplus number of l's >0
|
|
|
|
c thet angle in degrees
|
|
|
|
c***********************************************************************
|
|
|
|
c
|
|
|
|
IMPLICIT REAL*8(A-H,O-Z)
|
|
|
|
|
|
|
|
DIMENSION PLM(459)
|
2025-02-16 17:24:22 -05:00
|
|
|
c
|
|
|
|
c
|
|
|
|
c write(6, *) "========== ",MPLUS, LPLUS, THET
|
2025-01-16 23:18:01 -05:00
|
|
|
c
|
|
|
|
THETA=THET /57.295779
|
|
|
|
Y=COS(THETA)
|
|
|
|
Z=SIN(THETA)
|
|
|
|
IX=0
|
2025-02-16 17:24:22 -05:00
|
|
|
DO 100 M=1,MPLUS ! for MPLUS = 1, LPLUS = 16
|
|
|
|
LX=M-1 ! LX = 0
|
|
|
|
L2=0 ! L2 = 0
|
|
|
|
P3=1.0 ! P3 = 1.0
|
|
|
|
FL1=LX ! FL1 = 0
|
2025-01-16 23:18:01 -05:00
|
|
|
IF(LX.EQ.0) GO TO 41
|
|
|
|
DO 40 LT=1,LX
|
|
|
|
FL1=FL1+1.0
|
|
|
|
P3=P3*FL1*Z/2.0
|
|
|
|
40 CONTINUE
|
2025-02-16 17:24:22 -05:00
|
|
|
41 P2=0.0 ! P2 = 0.0
|
|
|
|
FL2=FL1+1.0 !FL2 = 1.0
|
|
|
|
FL3=1.0 ! FL3 = 1.0
|
|
|
|
c================================= loop Lb
|
|
|
|
DO 90 LT=1,LPLUS ! loop Lb
|
|
|
|
IX1=IX+LT
|
|
|
|
IF(L2-LX)50,70,60 ! if L2 < Lx -> 50; L2 == Lx -> 70; L2 > LX -> 60
|
2025-01-16 23:18:01 -05:00
|
|
|
50 PLM(IX1)=0.0
|
|
|
|
GO TO 75
|
|
|
|
60 P3=(FL2*Y*P2-FL1*P1)/FL3
|
|
|
|
FL1=FL1+1.0
|
|
|
|
FL2=FL2+2.0
|
|
|
|
FL3=FL3+1.0
|
|
|
|
70 PLM(IX1)=P3
|
2025-02-16 17:24:22 -05:00
|
|
|
|
|
|
|
c write(6, *) 'PLM, ',THETA*57.295779, IX1, PLM(IX1)
|
|
|
|
|
2025-01-16 23:18:01 -05:00
|
|
|
P1=P2
|
|
|
|
P2=P3
|
|
|
|
75 L2=L2+1
|
|
|
|
90 CONTINUE
|
2025-02-16 17:24:22 -05:00
|
|
|
c================================== end of Loop Lb
|
2025-01-16 23:18:01 -05:00
|
|
|
IX=IX+LPLUS
|
|
|
|
100 CONTINUE
|
|
|
|
RETURN
|
|
|
|
END
|