I’m afraid I won’t be able to today either - have some work deadlines to hit. Sorry!
Edit: that said, if you want to briefly discuss it on the call, and post the community feedback on github, I would appreciate that. To summarize, the currently proposed API:
Gauss-legendre and gauss-legendre-lobatto points and weights, real64 only:
subroutine gauss_legendre(x,w,interval)
real(real64), intent(out) :: x(:), w(:) ! pts, wghts
real(real64), optional, intent(in) :: interval(2) ! This defaults to [-1.0_real64, 1.0_real64]
end subroutine
subroutine gauss_legendre_lobatto(x,w,interval)
real(real64), intent(out) :: x(:), w(:) ! pts, wghts
real(real64), optional, intent(in) :: interval(2) ! This defaults to [-1.0_real64, 1.0_real64]
end subroutine
Plus, Legendre polynomials and first derivative thereof (real32 and real64 would be offered):
elemental real function legendre (N, x)
integer :: N ! which legendre polynomial?
real :: x ! the point to evaluate at
end function
elemental real function dlegendre (N, x)
integer :: N ! which legendre polynomial?
real :: x ! the point to evaluate at
end function
And maybe this as well, for returning all legendre polys up to and including N (real32 and real64 would be offered):
subroutine legendre_upto (N, x, p)
integer, intent(in) :: N ! highest legendre polynomial degree
real, intent(in) :: x ! the point to evaluate
real, intent(out) :: p(0:N)
end subroutine