db1val Subroutine

public subroutine db1val(xval, idx, tx, nx, kx, bcoef, f, iflag, inbvx)

Evaluates the tensor product piecewise polynomial interpolant constructed by the routine db1ink or one of its derivatives at the point xval.

To evaluate the interpolant itself, set idx=0, to evaluate the first partial with respect to x, set idx=1, and so on.

db1val returns 0.0 if (xval,yval) is out of range. that is, if

   xval < tx(1) .or. xval > tx(nx+kx)

if the knots tx were chosen by db1ink, then this is equivalent to:

   xval < x(1) .or. xval > x(nx)+epsx

where

   epsx = 0.1*(x(nx)-x(nx-1))

The input quantities tx, nx, kx, and bcoef should be unchanged since the last call of db1ink.

History

  • Jacob Williams, 10/30/2015 : Created 1D routine.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: xval

x coordinate of evaluation point.

integer, intent(in) :: idx

x derivative of piecewise polynomial to evaluate.

real(kind=wp), intent(in), dimension(nx+kx) :: tx

sequence of knots defining the piecewise polynomial in the x direction. (same as in last call to db1ink)

integer, intent(in) :: nx

the number of interpolation points in x. (same as in last call to db1ink)

integer, intent(in) :: kx

order of polynomial pieces in x. (same as in last call to db1ink)

real(kind=wp), intent(in), dimension(nx) :: bcoef

the b-spline coefficients computed by db1ink.

real(kind=wp), intent(out) :: f

interpolated value

integer, intent(out) :: iflag

status flag: 0 : no errors, /=0 : error

integer, intent(inout) :: inbvx

initialization parameter which must be set to 1 the first time this routine is called, and must not be changed by the user.


Calls

proc~~db1val~~CallsGraph proc~db1val db1val proc~dbvalu dbvalu proc~db1val->proc~dbvalu proc~dintrv dintrv proc~dbvalu->proc~dintrv

Source Code

    subroutine db1val(xval,idx,tx,nx,kx,bcoef,f,iflag,inbvx)

    implicit none

    integer,intent(in)                   :: idx      !! x derivative of piecewise polynomial to evaluate.
    integer,intent(in)                   :: nx       !! the number of interpolation points in x. (same as in last call to [[db1ink]])
    integer,intent(in)                   :: kx       !! order of polynomial pieces in x. (same as in last call to [[db1ink]])
    real(wp),intent(in)                  :: xval     !! x coordinate of evaluation point.
    real(wp),dimension(nx+kx),intent(in) :: tx       !! sequence of knots defining the piecewise polynomial in the x direction. (same as in last call to [[db1ink]])
    real(wp),dimension(nx),intent(in)    :: bcoef    !! the b-spline coefficients computed by [[db1ink]].
    real(wp),intent(out)                 :: f        !! interpolated value
    integer,intent(out)                  :: iflag    !! status flag: 0 : no errors, /=0 : error
    integer,intent(inout)                :: inbvx    !! initialization parameter which must be set to 1 the first time this routine is called, and must not be changed by the user.

    real(wp),dimension(3*kx) :: work

    f = 0.0_wp

    if (xval<tx(1) .or. xval>tx(nx+kx)) then
        write(error_unit,'(A)') 'db1val - x value out of bounds'
        iflag = 1
        return
    endif

    f = dbvalu(tx,bcoef,nx,kx,idx,xval,inbvx,work,iflag)

    endsubroutine db1val