initialize_1d_auto_knots Subroutine

private pure subroutine initialize_1d_auto_knots(me, x, fcn, kx, iflag, extrap)

Initialize a bspline_1d type (with automatically-computed knots). This is a wrapper for db1ink.

Type Bound

bspline_1d

Arguments

Type IntentOptional Attributes Name
class(bspline_1d), intent(inout) :: me
real(kind=wp), intent(in), dimension(:) :: x

(nx) array of abcissae. Must be strictly increasing.

real(kind=wp), intent(in), dimension(:) :: fcn

(nx) array of function values to interpolate. fcn(i) should contain the function value at the point x(i)

integer(kind=ip), intent(in) :: kx

The order of spline pieces in ( ) (order = polynomial degree + 1)

integer(kind=ip), intent(out) :: iflag

status flag (see db1ink)

logical, intent(in), optional :: extrap

if true, then extrapolation is allowed (default is false)


Calls

proc~~initialize_1d_auto_knots~~CallsGraph proc~initialize_1d_auto_knots bspline_oo_module::bspline_1d%initialize_1d_auto_knots interface~db1ink bspline_sub_module::db1ink proc~initialize_1d_auto_knots->interface~db1ink proc~destroy_1d bspline_oo_module::bspline_1d%destroy_1d proc~initialize_1d_auto_knots->proc~destroy_1d proc~set_extrap_flag bspline_oo_module::bspline_class%set_extrap_flag proc~initialize_1d_auto_knots->proc~set_extrap_flag proc~db1ink_alt bspline_sub_module::db1ink_alt interface~db1ink->proc~db1ink_alt proc~db1ink_alt_2 bspline_sub_module::db1ink_alt_2 interface~db1ink->proc~db1ink_alt_2 proc~db1ink_default bspline_sub_module::db1ink_default interface~db1ink->proc~db1ink_default proc~destroy_base bspline_oo_module::bspline_class%destroy_base proc~destroy_1d->proc~destroy_base proc~check_inputs bspline_sub_module::check_inputs proc~db1ink_alt->proc~check_inputs proc~dbint4 bspline_sub_module::dbint4 proc~db1ink_alt->proc~dbint4 proc~db1ink_alt_2->proc~check_inputs proc~db1ink_alt_2->proc~dbint4 proc~db1ink_default->proc~check_inputs proc~dbknot bspline_sub_module::dbknot proc~db1ink_default->proc~dbknot proc~dbtpcf bspline_sub_module::dbtpcf proc~db1ink_default->proc~dbtpcf proc~dbnfac bspline_sub_module::dbnfac proc~dbint4->proc~dbnfac proc~dbnslv bspline_sub_module::dbnslv proc~dbint4->proc~dbnslv proc~dbspvd bspline_sub_module::dbspvd proc~dbint4->proc~dbspvd proc~dbintk bspline_sub_module::dbintk proc~dbtpcf->proc~dbintk proc~dbtpcf->proc~dbnslv proc~dbintk->proc~dbnfac proc~dbintk->proc~dbnslv proc~dbspvn bspline_sub_module::dbspvn proc~dbintk->proc~dbspvn proc~dbspvd->proc~dbspvn

Called by

proc~~initialize_1d_auto_knots~~CalledByGraph proc~initialize_1d_auto_knots bspline_oo_module::bspline_1d%initialize_1d_auto_knots proc~bspline_1d_constructor_auto_knots bspline_oo_module::bspline_1d_constructor_auto_knots proc~bspline_1d_constructor_auto_knots->proc~initialize_1d_auto_knots interface~bspline_1d bspline_oo_module::bspline_1d interface~bspline_1d->proc~bspline_1d_constructor_auto_knots

Source Code

    pure subroutine initialize_1d_auto_knots(me,x,fcn,kx,iflag,extrap)

    implicit none

    class(bspline_1d),intent(inout)  :: me
    real(wp),dimension(:),intent(in) :: x     !! `(nx)` array of \(x\) abcissae. Must be strictly increasing.
    real(wp),dimension(:),intent(in) :: fcn   !! `(nx)` array of function values to interpolate. `fcn(i)` should
                                              !! contain the function value at the point `x(i)`
    integer(ip),intent(in)           :: kx    !! The order of spline pieces in \(x\)
                                              !! ( \( 2 \le k_x < n_x \) )
                                              !! (order = polynomial degree + 1)
    integer(ip),intent(out)          :: iflag !! status flag (see [[db1ink]])
    logical,intent(in),optional      :: extrap !! if true, then extrapolation is allowed
                                               !! (default is false)

    integer(ip) :: iknot
    integer(ip) :: nx

    call me%destroy()

    nx = size(x,kind=ip)

    me%nx = nx
    me%kx = kx

    allocate(me%tx(nx+kx))
    allocate(me%bcoef(nx))
    allocate(me%work_val_1(3_ip*kx))

    iknot = 0_ip         !knot sequence chosen by db1ink

    call db1ink(x,nx,fcn,kx,iknot,me%tx,me%bcoef,iflag)

    if (iflag==0_ip) then
        call me%set_extrap_flag(extrap)
    end if

    me%initialized = iflag==0_ip
    me%iflag = iflag

    end subroutine initialize_1d_auto_knots