Function legendre,l,m,x if (l eq 0) then begin Nx=N_elements(x) if (Nx gt 1) then begin pmm=x pmm(0:Nx-1)=1./sqrt(2.) endif else begin pmm=1./sqrt(2.) endelse return,pmm endif if (max(abs(x)) gt 1.) then begin pmm=0. return,pmm endif pmm=1./sqrt(2.) if (m gt 0) then begin somx2=sqrt((1.-x)*(1.+x)) fact=sqrt(3./2.) for i=1,m do begin pmm=-pmm*fact*somx2 fact=sqrt((2.*i+3.)/(2.*i+2.)) endfor endif if (l eq m) then begin return,pmm endif else begin pmmp1=x*sqrt((2.*m+3.))*pmm if (l eq (m+1)) then begin return,pmmp1 endif else begin for ll=m+2,l do begin pll=(x*sqrt((2.*ll-1.))*pmmp1-sqrt(((ll-1)*(ll-1)-m*m)/(2.*ll-3.))*pmm)*sqrt((2.*ll+1.)/(ll*ll-m*m)) pmm=pmmp1 pmmp1=pll endfor return,pll endelse endelse end