FIXME : Add documentation
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real, | intent(in) | :: | llim | |||
real, | intent(in) | :: | ulim | |||
real, | intent(in), | dimension (:) | :: | xptsdum | ||
real, | intent(out), | dimension (:,0:) | :: | lpdum |
subroutine legendre_polynomials (llim, ulim, xptsdum, lpdum)
use iso_fortran_env, only: real64
implicit none
real(real64), dimension (:), allocatable :: lp1, lp2, lp3, zshift
real, intent (in) :: ulim, llim
real, dimension (:), intent (in) :: xptsdum
real, dimension (:,0:), intent(out) :: lpdum
integer :: j, mmax
lpdum = 0.0
! nmax = size(lpdum(1,:))
mmax = size(xptsdum)
allocate(lp1(mmax),lp2(mmax),lp3(mmax),zshift(mmax))
lp1 = real(1.0,kind(lp1(1)))
lp2 = real(0.0,kind(lp2(1)))
lpdum(:,0) = real(1.0,kind(lpdum))
! TEMP FOR TESTING -- MAB
! zshift = real(2.0,kind(zshift))*xptsdum/ulim - real(1.0,kind(zshift))
zshift = real(2.0,kind(zshift))*(xptsdum-llim)/(ulim-llim) - real(1.0,kind(zshift))
do j=1, size(lpdum(1,:))-1
lp3 = lp2
lp2 = lp1
lp1 = ((2*j-1) * zshift * lp2 - (j-1) * lp3) / j
lpdum(:,j) = lp1
end do
deallocate(lp1,lp2,lp3,zshift)
end subroutine legendre_polynomials