GBTOlib: library for evaluation of molecular integrals in mixed Gaussian / B-spline basis  111
Data Types | Functions/Subroutines
bspline_base_gbl Module Reference

Functions/Subroutines

subroutine, public map_knots_to_grid (knots, order, last_bspline, r, bspline_start_end_r)
 Find the indices mapping the start and end of each B-spline to the (quadrature) points r. For a B-spline with index ind which doesn't overlap with the quadrature grid the values in bspline_start_end_r are: bspline_start_end_r(1,ind) = 0, bspline_start_end_r(2,ind) = -1. More...
 
subroutine DINTRV (XT, LXT, X, ILO, ILEFT, MFLAG)
 
real(kind=wp) function DBVALU (T, A, N, K, IDERIV, X, INBV, WORK)
 
real(kind=cfp) function DPPVAL (LDC, C, XI, LXI, K, IDERIV, X, INPPV)
 
subroutine QINTRV (XT, LXT, X, ILO, ILEFT, MFLAG)
 
real(kind=ep1) function QBVALU (T, A, N, K, IDERIV, X, INBV, WORK)
 

Function/Subroutine Documentation

◆ DBVALU()

real(kind=wp) function bspline_base_gbl::DBVALU ( real(kind=wp), dimension(*)  T,
real(kind=wp), dimension(*)  A,
integer  N,
integer  K,
integer  IDERIV,
real(kind=wp)  X,
integer  INBV,
real(kind=wp), dimension(*)  WORK 
)
***PURPOSE  Evaluate the B-representation of a B-spline at X for the
            function value or any of its derivatives.
***LIBRARY   SLATEC
***CATEGORY  E3, K6
***TYPE      real(kind=cfp) (BVALU-S, DBVALU-D)
***KEYWORDS  DIFFERENTIATION OF B-SPLINE, EVALUATION OF B-SPLINE
***AUTHOR  Amos, D. E., (SNLA)
***DESCRIPTION

     Written by Carl de Boor and modified by D. E. Amos

     Abstract   **** a double precision routine ****
         DBVALU is the BVALUE function of the reference.

         DBVALU evaluates the B-representation (T,A,N,K) of a B-spline
         at X for the function value on IDERIV=0 or any of its
         derivatives on IDERIV=1,2,...,K-1.  Right limiting values
         (right derivatives) are returned except at the right end
         point X=T(N+1) where left limiting values are computed.  The
         spline is defined on T(K) .LE. X .LE. T(N+1).  DBVALU returns
         a fatal error message when X is outside of this interval.

         To compute left derivatives or left limiting values at a
         knot T(I), replace N by I-1 and set X=T(I), I=K+1,N+1.

         DBVALU calls DINTRV

     Description of Arguments

         Input      T,A,X are double precision
          T       - knot vector of length N+K
          A       - B-spline coefficient vector of length N
          N       - number of B-spline coefficients
                    N = sum of knot multiplicities-K
          K       - order of the B-spline, K .GE. 1
          IDERIV  - order of the derivative, 0 .LE. IDERIV .LE. K-1
                    IDERIV = 0 returns the B-spline value
          X       - argument, T(K) .LE. X .LE. T(N+1)
          INBV    - an initialization parameter which must be set
                    to 1 the first time DBVALU is called.

         Output     WORK,DBVALU are double precision
          INBV    - INBV contains information for efficient process-
                    ing after the initial call and INBV must not
                    be changed by the user.  Distinct splines require
                    distinct INBV parameters.
          WORK    - work vector of length 3*K.
          DBVALU  - value of the IDERIV-th derivative at X

     Error Conditions
         An improper input is a fatal error

***REFERENCES  Carl de Boor, Package for calculating with B-splines,
                 SIAM Journal on Numerical Analysis 14, 3 (June 1977),
                 pp. 441-472.
***ROUTINES CALLED  DINTRV, XERMSG
***REVISION HISTORY  (YYMMDD)
   800901  DATE WRITTEN
   890831  Modified array declarations.  (WRB)
   890911  Removed unnecessary intrinsics.  (WRB)
   890911  REVISION DATE from Version 3.2
   891214  Prologue converted to Version 4.0 format.  (BAB)
   900315  CALLs to XERROR changed to CALLs to XERMSG.  (THJ)
   920501  Reformatted the REFERENCES section.  (WRB)
Here is the call graph for this function:

◆ DINTRV()

subroutine bspline_base_gbl::DINTRV ( real(kind=wp), dimension(*)  XT,
integer  LXT,
real(kind=wp)  X,
integer  ILO,
integer  ILEFT,
integer  MFLAG 
)
***PURPOSE  Compute the largest integer ILEFT in 1 .LE. ILEFT .LE. LXT
            such that XT(ILEFT) .LE. X where XT(*) is a subdivision of
            the X interval.
***LIBRARY   SLATEC
***CATEGORY  E3, K6
***TYPE      real(kind=wp) (INTRV-S, DINTRV-D)
***KEYWORDS  B-SPLINE, DATA FITTING, INTERPOLATION, SPLINES
***AUTHOR  Amos, D. E., (SNLA)
***DESCRIPTION

     Written by Carl de Boor and modified by D. E. Amos

     Abstract    **** a double precision routine ****
         DINTRV is the INTERV routine of the reference.

         DINTRV computes the largest integer ILEFT in 1 .LE. ILEFT .LE.
         LXT such that XT(ILEFT) .LE. X where XT(*) is a subdivision of
         the X interval.  Precisely,

                      X .LT. XT(1)                1         -1
         if  XT(I) .LE. X .LT. XT(I+1)  then  ILEFT=I  , MFLAG=0
           XT(LXT) .LE. X                         LXT        1,

         That is, when multiplicities are present in the break point
         to the left of X, the largest index is taken for ILEFT.

     Description of Arguments

         Input      XT,X are double precision
          XT      - XT is a knot or break point vector of length LXT
          LXT     - length of the XT vector
          X       - argument
          ILO     - an initialization parameter which must be set
                    to 1 the first time the spline array XT is
                    processed by DINTRV.

         Output
          ILO     - ILO contains information for efficient process-
                    ing after the initial call and ILO must not be
                    changed by the user.  Distinct splines require
                    distinct ILO parameters.
          ILEFT   - largest integer satisfying XT(ILEFT) .LE. X
          MFLAG   - signals when X lies out of bounds

     Error Conditions
         None

***REFERENCES  Carl de Boor, Package for calculating with B-splines,
                 SIAM Journal on Numerical Analysis 14, 3 (June 1977),
                 pp. 441-472.
***ROUTINES CALLED  (NONE)
***REVISION HISTORY  (YYMMDD)
   800901  DATE WRITTEN
   890831  Modified array declarations.  (WRB)
   890831  REVISION DATE from Version 3.2
   891214  Prologue converted to Version 4.0 format.  (BAB)
   920501  Reformatted the REFERENCES section.  (WRB)

◆ DPPVAL()

real(kind=cfp) function bspline_base_gbl::DPPVAL ( integer  LDC,
real(kind=wp), dimension(ldc,*)  C,
real(kind=wp), dimension(*)  XI,
integer  LXI,
integer  K,
integer  IDERIV,
real(kind=wp)  X,
integer  INPPV 
)
***PURPOSE  Calculate the value of the IDERIV-th derivative of the
            B-spline from the PP-representation.
***LIBRARY   SLATEC
***CATEGORY  E3, K6
***TYPE      real(kind=cfp) (PPVAL-S, DPPVAL-D)
***KEYWORDS  B-SPLINE, DATA FITTING, INTERPOLATION, SPLINES
***AUTHOR  Amos, D. E., (SNLA)
***DESCRIPTION

     Written by Carl de Boor and modified by D. E. Amos

     Abstract    **** a double precision routine ****
         DPPVAL is the PPVALU function of the reference.

         DPPVAL calculates (at X) the value of the IDERIV-th
         derivative of the B-spline from the PP-representation
         (C,XI,LXI,K).  The Taylor expansion about XI(J) for X in
         the interval XI(J) .LE. X .LT. XI(J+1) is evaluated, J=1,LXI.
         Right limiting values at X=XI(J) are obtained.  DPPVAL will
         extrapolate beyond XI(1) and XI(LXI+1).

         To obtain left limiting values (left derivatives) at XI(J)
         replace LXI by J-1 and set X=XI(J),J=2,LXI+1.

     Description of Arguments

         Input      C,XI,X are double precision
          LDC     - leading dimension of C matrix, LDC .GE. K
          C       - matrix of dimension at least (K,LXI) containing
                    right derivatives at break points XI(*).
          XI      - break point vector of length LXI+1
          LXI     - number of polynomial pieces
          K       - order of B-spline, K .GE. 1
          IDERIV  - order of the derivative, 0 .LE. IDERIV .LE. K-1
                    IDERIV=0 gives the B-spline value
          X       - argument, XI(1) .LE. X .LE. XI(LXI+1)
          INPPV   - an initialization parameter which must be set
                    to 1 the first time DPPVAL is called.

         Output     DPPVAL is double precision
          INPPV   - INPPV contains information for efficient process-
                    ing after the initial call and INPPV must not
                    be changed by the user.  Distinct splines require
                    distinct INPPV parameters.
          DPPVAL  - value of the IDERIV-th derivative at X

     Error Conditions
         Improper input is a fatal error

***REFERENCES  Carl de Boor, Package for calculating with B-splines,
                 SIAM Journal on Numerical Analysis 14, 3 (June 1977),
                 pp. 441-472.
***ROUTINES CALLED  DINTRV, XERMSG
***REVISION HISTORY  (YYMMDD)
   800901  DATE WRITTEN
   890831  Modified array declarations.  (WRB)
   890831  REVISION DATE from Version 3.2
   891214  Prologue converted to Version 4.0 format.  (BAB)
   900315  CALLs to XERROR changed to CALLs to XERMSG.  (THJ)
   920501  Reformatted the REFERENCES section.  (WRB)

◆ map_knots_to_grid()

subroutine, public bspline_base_gbl::map_knots_to_grid ( real(kind=cfp), dimension(:), intent(in)  knots,
integer, intent(in)  order,
integer, intent(in)  last_bspline,
real(kind=cfp), dimension(:), intent(in)  r,
integer, dimension(:,:), allocatable  bspline_start_end_r 
)

Find the indices mapping the start and end of each B-spline to the (quadrature) points r. For a B-spline with index ind which doesn't overlap with the quadrature grid the values in bspline_start_end_r are: bspline_start_end_r(1,ind) = 0, bspline_start_end_r(2,ind) = -1.

◆ QBVALU()

real(kind=ep1) function bspline_base_gbl::QBVALU ( real(kind=ep1), dimension(*)  T,
real(kind=ep1), dimension(*)  A,
integer  N,
integer  K,
integer  IDERIV,
real(kind=ep1)  X,
integer  INBV,
real(kind=ep1), dimension(*)  WORK 
)
***PURPOSE  Evaluate the B-representation of a B-spline at X for the
            function value or any of its derivatives.
***LIBRARY   SLATEC
***CATEGORY  E3, K6
***TYPE      REAL(kind=ep1) (BVALU-S, QBVALU-D)
***KEYWORDS  DIFFERENTIATION OF B-SPLINE, EVALUATION OF B-SPLINE
***AUTHOR  Amos, D. E., (SNLA)
***DESCRIPTION

     Written by Carl de Boor and modified by D. E. Amos

     Abstract   **** a double precision routine ****
         QBVALU is the BVALUE function of the reference.

         QBVALU evaluates the B-representation (T,A,N,K) of a B-spline
         at X for the function value on IDERIV=0 or any of its
         derivatives on IDERIV=1,2,...,K-1.  Right limiting values
         (right derivatives) are returned except at the right end
         point X=T(N+1) where left limiting values are computed.  The
         spline is defined on T(K) .LE. X .LE. T(N+1).  QBVALU returns
         a fatal error message when X is outside of this interval.

         To compute left derivatives or left limiting values at a
         knot T(I), replace N by I-1 and set X=T(I), I=K+1,N+1.

         QBVALU calls QINTRV

     Description of Arguments

         Input      T,A,X are double precision
          T       - knot vector of length N+K
          A       - B-spline coefficient vector of length N
          N       - number of B-spline coefficients
                    N = sum of knot multiplicities-K
          K       - order of the B-spline, K .GE. 1
          IDERIV  - order of the derivative, 0 .LE. IDERIV .LE. K-1
                    IDERIV = 0 returns the B-spline value
          X       - argument, T(K) .LE. X .LE. T(N+1)
          INBV    - an initialization parameter which must be set
                    to 1 the first time QBVALU is called.

         Output     WORK,QBVALU are double precision
          INBV    - INBV contains information for efficient process-
                    ing after the initial call and INBV must not
                    be changed by the user.  Distinct splines require
                    distinct INBV parameters.
          WORK    - work vector of length 3*K.
          QBVALU  - value of the IDERIV-th derivative at X

     Error Conditions
         An improper input is a fatal error

***REFERENCES  Carl de Boor, Package for calculating with B-splines,
                 SIAM Journal on Numerical Analysis 14, 3 (June 1977),
                 pp. 441-472.
***ROUTINES CALLED  QINTRV, XERMSG
***REVISION HISTORY  (YYMMDD)
   800901  DATE WRITTEN
   890831  Modified array declarations.  (WRB)
   890911  Removed unnecessary intrinsics.  (WRB)
   890911  REVISION DATE from Version 3.2
   891214  Prologue converted to Version 4.0 format.  (BAB)
   900315  CALLs to XERROR changed to CALLs to XERMSG.  (THJ)
   920501  Reformatted the REFERENCES section.  (WRB)
Here is the call graph for this function:

◆ QINTRV()

subroutine bspline_base_gbl::QINTRV ( real(kind=ep1), dimension(*)  XT,
integer  LXT,
real(kind=ep1)  X,
integer  ILO,
integer  ILEFT,
integer  MFLAG 
)
***PURPOSE  Compute the largest integer ILEFT in 1 .LE. ILEFT .LE. LXT
            such that XT(ILEFT) .LE. X where XT(*) is a subdivision of
            the X interval.
***LIBRARY   SLATEC
***CATEGORY  E3, K6
***TYPE      real(kind=cfp) (INTRV-S, QINTRV-D)
***KEYWORDS  B-SPLINE, DATA FITTING, INTERPOLATION, SPLINES
***AUTHOR  Amos, D. E., (SNLA)
***DESCRIPTION

     Written by Carl de Boor and modified by D. E. Amos

     Abstract    **** a double precision routine ****
         QINTRV is the INTERV routine of the reference.

         QINTRV computes the largest integer ILEFT in 1 .LE. ILEFT .LE.
         LXT such that XT(ILEFT) .LE. X where XT(*) is a subdivision of
         the X interval.  Precisely,

                      X .LT. XT(1)                1         -1
         if  XT(I) .LE. X .LT. XT(I+1)  then  ILEFT=I  , MFLAG=0
           XT(LXT) .LE. X                         LXT        1,

         That is, when multiplicities are present in the break point
         to the left of X, the largest index is taken for ILEFT.

     Description of Arguments

         Input      XT,X are double precision
          XT      - XT is a knot or break point vector of length LXT
          LXT     - length of the XT vector
          X       - argument
          ILO     - an initialization parameter which must be set
                    to 1 the first time the spline array XT is
                    processed by QINTRV.

         Output
          ILO     - ILO contains information for efficient process-
                    ing after the initial call and ILO must not be
                    changed by the user.  Distinct splines require
                    distinct ILO parameters.
          ILEFT   - largest integer satisfying XT(ILEFT) .LE. X
          MFLAG   - signals when X lies out of bounds

     Error Conditions
         None

***REFERENCES  Carl de Boor, Package for calculating with B-splines,
                 SIAM Journal on Numerical Analysis 14, 3 (June 1977),
                 pp. 441-472.
***ROUTINES CALLED  (NONE)
***REVISION HISTORY  (YYMMDD)
   800901  DATE WRITTEN
   890831  Modified array declarations.  (WRB)
   890831  REVISION DATE from Version 3.2
   891214  Prologue converted to Version 4.0 format.  (BAB)
   920501  Reformatted the REFERENCES section.  (WRB)