subroutine CalculateBarycentricWeights(this)
implicit none
class(Lagrange_t),intent(inout) :: this
! Local
integer :: i,j
real(real64) :: bWeights(0:this%N)
real(real64) :: controlPoints(0:this%N)
do i = 0,this%N
bWeights(i) = 1.0_real64
controlPoints(i) = real(this%controlPoints(i+1),real64)
enddo
! Computes the product w_k = w_k*(s_k - s_j), k /= j
do j = 1,this%N
do i = 0,j-1
bWeights(i) = bWeights(i)*(controlPoints(i)-controlPoints(j))
bWeights(j) = bWeights(j)*(controlPoints(j)-controlPoints(i))
enddo
enddo
do j = 0,this%N
bWeights(j) = 1.0_prec/bWeights(j)
this%bWeights(j+1) = real(bWeights(j),prec)
enddo
endsubroutine CalculateBarycentricWeights