# bspvd.f

          SUBROUTINE BSPVD (T, K, NDERIV, X, ILEFT, LDVNIK, VNIKX, WORK)
    C***BEGIN PROLOGUE  BSPVD
    C***PURPOSE  Calculate the value and all derivatives of order less than
    C            NDERIV of all basis functions which do not vanish at X.
    C***LIBRARY   SLATEC
    C***CATEGORY  E3, K6
    C***TYPE      SINGLE PRECISION (BSPVD-S, DBSPVD-D)
    C***KEYWORDS  DIFFERENTIATION OF B-SPLINE, EVALUATION OF B-SPLINE
    C***AUTHOR  Amos, D. E., (SNLA)
    C***DESCRIPTION
    C
    C     Written by Carl de Boor and modified by D. E. Amos
    C
    C     Abstract
    C         BSPVD is the BSPLVD routine of the reference.
    C
    C         BSPVD calculates the value and all derivatives of order
    C         less than NDERIV of all basis functions which do not
    C         (possibly) vanish at X.  ILEFT is input such that
    C         T(ILEFT) .LE. X .LT. T(ILEFT+1).  A call to INTRV(T,N+1,X,
    C         ILO,ILEFT,MFLAG) will produce the proper ILEFT.  The output of
    C         BSPVD is a matrix VNIKX(I,J) of dimension at least (K,NDERIV)
    C         whose columns contain the K nonzero basis functions and
    C         their NDERIV-1 right derivatives at X, I=1,K, J=1,NDERIV.
    C         These basis functions have indices ILEFT-K+I, I=1,K,
    C         K .LE. ILEFT .LE. N. The nonzero part of the I-th basis
    C         function lies in (T(I),T(I+K)), I=1,N.
    C
    C         If X=T(ILEFT+1) then VNIKX contains left limiting values
    C         (left derivatives) at T(ILEFT+1).  In particular, ILEFT = N
    C         produces left limiting values at the right end point
    C         X=T(N+1). To obtain left limiting values at T(I), I=K+1,N+1,
    C         set X= next lower distinct knot, call INTRV to get ILEFT,
    C         set X=T(I), and then call BSPVD.
    C
    C     Description of Arguments
    C         Input
    C          T       - knot vector of length N+K, where
    C                    N = number of B-spline basis functions
    C                    N = sum of knot multiplicities-K
    C          K       - order of the B-spline, K .GE. 1
    C          NDERIV  - number of derivatives = NDERIV-1,
    C                    1 .LE. NDERIV .LE. K
    C          X       - argument of basis functions,
    C                    T(K) .LE. X .LE. T(N+1)
    C          ILEFT   - largest integer such that
    C                    T(ILEFT) .LE. X .LT. T(ILEFT+1)
    C          LDVNIK  - leading dimension of matrix VNIKX
    C
    C         Output
    C          VNIKX   - matrix of dimension at least (K,NDERIV) contain-
    C                    ing the nonzero basis functions at X and their
    C                    derivatives columnwise.
    C          WORK    - a work vector of length (K+1)*(K+2)/2
    C
    C     Error Conditions
    C         Improper input is a fatal error
    C
    C***REFERENCES  Carl de Boor, Package for calculating with B-splines,
    C                 SIAM Journal on Numerical Analysis 14, 3 (June 1977),
    C                 pp. 441-472.
    C***ROUTINES CALLED  BSPVN, XERMSG
    C***REVISION HISTORY  (YYMMDD)
    C   800901  DATE WRITTEN
    C   890531  Changed all specific intrinsics to generic.  (WRB)
    C   890831  Modified array declarations.  (WRB)
    C   890831  REVISION DATE from Version 3.2
    C   891214  Prologue converted to Version 4.0 format.  (BAB)
    C   900315  CALLs to XERROR changed to CALLs to XERMSG.  (THJ)
    C   900326  Removed duplicate information from DESCRIPTION section.
    C           (WRB)
    C   920501  Reformatted the REFERENCES section.  (WRB)
    C***END PROLOGUE  BSPVD