Return fi, the interpolation of the original set of ns data
    f @ s onto a target grid si of size nsi. Not-a-knot BCs are
    applied.
integer, parameter :: r8=selected_real_kind(12,100)
integer, intent(in) :: ns     number of input data points
real(r8), intent(in) :: s(ns)     original grid
real(r8), intent(in) :: f(ns)     the function values at s
integer, intent(in) :: nsi     number of output data points
real(r8), intent(in) :: si(ns)     the target grid
real(r8), intent(out) :: fi(ns)     the interpolated data
    Return fi, the interpolation of the original set of nt1 data
    f @ t onto a target grid ti of size nti1. Periodic BCs are
    applied: f(nt1) = f(1).
integer, parameter :: r8=selected_real_kind(12,100)
integer, intent(in) :: nt1     number of input data points
real(r8), intent(in) :: t(nt1)     original grid
real(r8), intent(in) :: f(nt1)     the function values at t
integer, intent(in) :: nti1     number of output data points
real(r8), intent(in) :: ti(nti1)     the target grid
real(r8), intent(out) :: fi(nti1)     the interpolated data