Files
piscal/dataassim/math/numrec/f77_sources/plgndr.for
T
2016-02-03 18:52:05 +00:00

34 lines
777 B
Fortran

FUNCTION plgndr(l,m,x)
INTEGER l,m
REAL plgndr,x
INTEGER i,ll
REAL fact,pll,pmm,pmmp1,somx2
if(m.lt.0.or.m.gt.l.or.abs(x).gt.1.)pause
*'bad arguments in plgndr'
pmm=1.
if(m.gt.0) then
somx2=sqrt((1.-x)*(1.+x))
fact=1.
do 11 i=1,m
pmm=-pmm*fact*somx2
fact=fact+2.
11 continue
endif
if(l.eq.m) then
plgndr=pmm
else
pmmp1=x*(2*m+1)*pmm
if(l.eq.m+1) then
plgndr=pmmp1
else
do 12 ll=m+2,l
pll=(x*(2*ll-1)*pmmp1-(ll+m-1)*pmm)/(ll-m)
pmm=pmmp1
pmmp1=pll
12 continue
plgndr=pll
endif
endif
return
END