Interpolation of function values f(x_i)=f_i, i=1,n with a cubic spline, given left and right boundary condition types of boundary conditions: 0: not-a-knot 1: f'(x_boundary)=0 2: f''(x_boundary)=0
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | x(:) |
x positions |
||
| real(kind=wp), | intent(in) | :: | f(:) |
function values at x positions |
||
| integer, | intent(in) | :: | BC(1:2) |
Boundary condition at x(1)/x(n): =0: not-a-knot, =1: first der. =BC_val(1)/BC_val(2), =2: second der. =BC_val(1)/BC_val(2) |
||
| real(kind=wp), | intent(in), | optional | :: | BC_val(1:2) |
Boundary value for BC(1:2) >0, |
self
FUNCTION cubspl_new(x,f,BC,BC_val) RESULT(sf) ! MODULES USE sll_m_bsplines, ONLY: sll_s_bsplines_new IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES REAL(wp) , INTENT(IN) :: x(:) !! x positions REAL(wp) , INTENT(IN) :: f(:) !! function values at x positions INTEGER , INTENT(IN) :: BC(1:2) !! Boundary condition at x(1)/x(n): =0: not-a-knot, =1: first der. =BC_val(1)/BC_val(2), =2: second der. =BC_val(1)/BC_val(2) REAL(wp) , INTENT(IN),OPTIONAL :: BC_val(1:2) !! Boundary value for BC(1:2) >0, !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES TYPE(t_cubspl) :: sf !! self !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER, PARAMETER:: deg=3 !! degree of the spline INTEGER :: nbreaks !=================================================================================================================================== CALL interpolate_cubic_spline(x,f,sf%coefs,sf%knots,BC,BC_val) nbreaks=SIZE(sf%knots)-2*deg CALL sll_s_bsplines_new(sf%bspl, deg, .FALSE., sf%knots(1+deg),sf%knots(nbreaks+deg),nbreaks-1,sf%knots(1+deg:nbreaks+deg)) END FUNCTION cubspl_new