initialize_1d_auto_knots_multi Subroutine

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

Initialize a bspline_1d type with multiple outputs: nf functions of the same inputs, on the same grid. The last dimension of fcn is the output index. This is a wrapper for db1ink (multiple-output version).

Type Bound

bspline_1d

Arguments

Type IntentOptional Attributes Name
class(bspline_1d), intent(inout) :: me

the spline

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

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

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

(nx,nf) array of function values to interpolate (the last dimension is the output index)

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

The order of spline pieces in

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_multi~~CallsGraph proc~initialize_1d_auto_knots_multi bspline_1d%initialize_1d_auto_knots_multi interface~db1ink db1ink proc~initialize_1d_auto_knots_multi->interface~db1ink proc~destroy_1d bspline_1d%destroy_1d proc~initialize_1d_auto_knots_multi->proc~destroy_1d proc~set_extrap_flag bspline_class%set_extrap_flag proc~initialize_1d_auto_knots_multi->proc~set_extrap_flag proc~db1ink_alt db1ink_alt interface~db1ink->proc~db1ink_alt proc~db1ink_alt_2 db1ink_alt_2 interface~db1ink->proc~db1ink_alt_2 proc~db1ink_default db1ink_default interface~db1ink->proc~db1ink_default proc~db1ink_multi db1ink_multi interface~db1ink->proc~db1ink_multi proc~destroy_base bspline_class%destroy_base proc~destroy_1d->proc~destroy_base proc~check_inputs check_inputs proc~db1ink_alt->proc~check_inputs proc~dbint4 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 dbknot proc~db1ink_default->proc~dbknot proc~dbtpcf dbtpcf proc~db1ink_default->proc~dbtpcf proc~db1ink_multi->proc~db1ink_default proc~dbspvd dbspvd proc~dbint4->proc~dbspvd proc~dgbfa dgbfa proc~dbint4->proc~dgbfa proc~dgbsl dgbsl proc~dbint4->proc~dgbsl proc~dintrv dintrv proc~dbint4->proc~dintrv proc~dbintk dbintk proc~dbtpcf->proc~dbintk proc~dbnslv dbnslv proc~dbtpcf->proc~dbnslv proc~dbintk->proc~dbnslv proc~dbnfac dbnfac proc~dbintk->proc~dbnfac proc~dbspvn dbspvn proc~dbintk->proc~dbspvn proc~dbspvd->proc~dbspvn proc~get_temp_x_for_extrap get_temp_x_for_extrap proc~dintrv->proc~get_temp_x_for_extrap

Source Code

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

    implicit none

    class(bspline_1d),intent(inout) :: me  !! the spline
    real(wp),dimension(:),intent(in) :: x  !! `(nx)` array of \(x\) abcissae. Must be strictly increasing.
    real(wp),dimension(:,:),intent(in) :: fcn  !! `(nx,nf)` array of function values to interpolate
                                                  !! (the last dimension is the output index)
    integer(ip),intent(in) :: kx  !! The order of spline pieces in \(x\)
    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),dimension(1) :: n  !! number of points in each direction
    integer(ip) :: nf  !! number of outputs

    call me%destroy()

    n(1) = size(x,kind=ip)
    nf = size(fcn,2,kind=ip)

    me%nx = n(1)
    me%kx = kx
    allocate(me%tx(n(1)+kx))
    allocate(me%bcoef(n(1),nf))
    allocate(me%work_val_1(3_ip*kx))

    call db1ink(x,n(1),fcn,kx,0_ip,me%tx,me%bcoef,iflag)

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

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

    end subroutine initialize_1d_auto_knots_multi