subroutine CalculateDerivativeMatrix(this)
implicit none
class(Lagrange_t),intent(inout) :: this
! Local
integer :: row,col
real(real64) :: dmat(0:this%N,0:this%N)
real(real64) :: dgmat(0:this%N,0:this%N)
real(real64) :: bWeights(0:this%N)
real(real64) :: qWeights(0:this%N)
real(real64) :: controlPoints(0:this%N)
do row = 0,this%N
bWeights(row) = real(this%bWeights(row+1),real64)
qWeights(row) = real(this%qWeights(row+1),real64)
controlPoints(row) = real(this%controlPoints(row+1),real64)
enddo
do row = 0,this%N
dmat(row,row) = 0.0_prec
do col = 0,this%N
if(.not.(col == row)) then
dmat(row,col) = bWeights(col)/ &
(bWeights(row)* &
(controlPoints(row)- &
controlPoints(col)))
dmat(row,row) = dmat(row,row)-dmat(row,col)
endif
enddo
enddo
do row = 0,this%N
do col = 0,this%N
dgmat(row,col) = -dmat(col,row)* &
qWeights(col)/ &
qWeights(row)
enddo
enddo
do row = 0,this%N
do col = 0,this%N
this%dMatrix(row+1,col+1) = real(dmat(col,row),prec)
this%dgMatrix(row+1,col+1) = real(dgmat(col,row),prec)
enddo
enddo
endsubroutine CalculateDerivativeMatrix