# EZspline_derivative

interface EZspline_derivative
!
! Evaluate the spline/Akima Hermite derivative of order
! d^{i1} d^{i2} d^{i3} f / d x1^{i1} d x2^{i2} d x2^{i2}
! at p1, [p2, [p3]]. The sum of i1+[i2+[i3]] should be <=2 for spline, or
! <=1 for Akima Hermite or Piecewise Linear.
! Result is return in f. The evaluation can
! be sought at a single point (p1, [p2, [p3]] are scalars), on
! an unordered list of points (p1, [p2, [p3]] have dimension k), or
! on a structured grid (p1, [p2, [p3]] have dimension k1, [k2, [k3]]
! respectively).
!
!
subroutine EZspline_derivative3_r8(spline_o, i1, i2, i3, p1, p2, p3, f, ier)
use EZspline_obj
type(EZspline3_r8) spline_o
integer, intent(in) :: i1, i2, i3
real(ezspline_r8), intent(in) :: p1, p2, p3
real(ezspline_r8), intent(out) :: f
integer, intent(out) :: ier
end subroutine EZspline_derivative3_r8

subroutine EZspline_derivative3_array_r8(spline_o, i1, i2, i3, &
& k1, k2, k3, p1, p2, p3, f, ier)
use EZspline_obj
type(EZspline3_r8) spline_o
integer, intent(in) :: i1, i2, i3, k1, k2, k3
real(ezspline_r8), intent(in) :: p1(k1), p2(k2), p3(k3)
real(ezspline_r8), intent(out) :: f(k1, k2, *)
integer, intent(out) :: ier
end subroutine EZspline_derivative3_array_r8

subroutine EZspline_derivative3_cloud_r8(spline_o, i1, i2, i3, &
& k, p1, p2, p3, f, ier)
use EZspline_obj
type(EZspline3_r8) spline_o
integer, intent(in) :: i1, i2, i3, k
real(ezspline_r8), intent(in) :: p1(k), p2(k), p3(k)
real(ezspline_r8), intent(out) :: f(k)
integer, intent(out) :: ier
end subroutine EZspline_derivative3_cloud_r8

subroutine EZspline_derivative2_r8(spline_o, i1, i2, p1, p2, f, ier)
use EZspline_obj
type(EZspline2_r8) spline_o
integer, intent(in) :: i1, i2
real(ezspline_r8), intent(in) :: p1, p2
real(ezspline_r8), intent(out) :: f
integer, intent(out) :: ier
end subroutine EZspline_derivative2_r8

subroutine EZspline_derivative2_array_r8(spline_o, i1, i2, k1, k2, p1, p2, f, ier)
use EZspline_obj
type(EZspline2_r8) spline_o
integer, intent(in) :: i1, i2, k1, k2
real(ezspline_r8), intent(in) :: p1(k1), p2(k2)
real(ezspline_r8), intent(out) :: f(k1,k2)
integer, intent(out) :: ier
end subroutine EZspline_derivative2_array_r8

subroutine EZspline_derivative2_cloud_r8(spline_o, i1, i2, k, p1, p2, f, ier)
use EZspline_obj
type(EZspline2_r8) spline_o
integer, intent(in) :: i1, i2, k
real(ezspline_r8), intent(in) :: p1(k), p2(k)
real(ezspline_r8), intent(out) :: f(k)
integer, intent(out) :: ier
end subroutine EZspline_derivative2_cloud_r8

subroutine EZspline_derivative1_r8(spline_o, i1, p1, f, ier)
use EZspline_obj
type(EZspline1_r8) spline_o
integer, intent(in) :: i1
real(ezspline_r8), intent(in) :: p1
real(ezspline_r8), intent(out) :: f
integer, intent(out) :: ier
end subroutine EZspline_derivative1_r8

subroutine EZspline_derivative1_array_r8(spline_o, i1, k1, p1, f, ier)
use EZspline_obj
type(EZspline1_r8) spline_o
integer, intent(in) :: i1, k1
real(ezspline_r8), intent(in) :: p1(k1)
real(ezspline_r8), intent(out) :: f(k1)
integer, intent(out) :: ier
end subroutine EZspline_derivative1_array_r8

subroutine EZspline_derivative3_r4(spline_o, i1, i2, i3, p1, p2, p3, f, ier)
use EZspline_obj
type(EZspline3_r4) spline_o
integer, intent(in) :: i1, i2, i3
real(ezspline_r4), intent(in) :: p1, p2, p3
real(ezspline_r4), intent(out) :: f
integer, intent(out) :: ier
end subroutine EZspline_derivative3_r4

subroutine EZspline_derivative3_array_r4(spline_o, i1, i2, i3, &
& k1, k2, k3, p1, p2, p3, f, ier)
use EZspline_obj
type(EZspline3_r4) spline_o
integer, intent(in) :: i1, i2, i3, k1, k2, k3
real(ezspline_r4), intent(in) :: p1(k1), p2(k2), p3(k3)
real(ezspline_r4), intent(out) :: f(k1, k2, *)
integer, intent(out) :: ier
end subroutine EZspline_derivative3_array_r4

subroutine EZspline_derivative3_cloud_r4(spline_o, i1, i2, i3, &
& k, p1, p2, p3, f, ier)
use EZspline_obj
type(EZspline3_r4) spline_o
integer, intent(in) :: i1, i2, i3, k
real(ezspline_r4), intent(in) :: p1(k), p2(k), p3(k)
real(ezspline_r4), intent(out) :: f(k)
integer, intent(out) :: ier
end subroutine EZspline_derivative3_cloud_r4

subroutine EZspline_derivative2_r4(spline_o, i1, i2, p1, p2, f, ier)
use EZspline_obj
type(EZspline2_r4) spline_o
integer, intent(in) :: i1, i2
real(ezspline_r4), intent(in) :: p1, p2
real(ezspline_r4), intent(out) :: f
integer, intent(out) :: ier
end subroutine EZspline_derivative2_r4

subroutine EZspline_derivative2_array_r4(spline_o, i1, i2, k1, k2, p1, p2, f, ier)
use EZspline_obj
type(EZspline2_r4) spline_o
integer, intent(in) :: i1, i2, k1, k2
real(ezspline_r4), intent(in) :: p1(k1), p2(k2)
real(ezspline_r4), intent(out) :: f(k1,k2)
integer, intent(out) :: ier
end subroutine EZspline_derivative2_array_r4

subroutine EZspline_derivative2_cloud_r4(spline_o, i1, i2, k, p1, p2, f, ier)
use EZspline_obj
type(EZspline2_r4) spline_o
integer, intent(in) :: i1, i2, k
real(ezspline_r4), intent(in) :: p1(k), p2(k)
real(ezspline_r4), intent(out) :: f(k)
integer, intent(out) :: ier
end subroutine EZspline_derivative2_cloud_r4

subroutine EZspline_derivative1_r4(spline_o, i1, p1, f, ier)
use EZspline_obj
type(EZspline1_r4) spline_o
integer, intent(in) :: i1
real(ezspline_r4), intent(in) :: p1
real(ezspline_r4), intent(out) :: f
integer, intent(out) :: ier
end subroutine EZspline_derivative1_r4

subroutine EZspline_derivative1_array_r4(spline_o, i1, k1, p1, f, ier)
use EZspline_obj
type(EZspline1_r4) spline_o
integer, intent(in) :: i1, k1
real(ezspline_r4), intent(in) :: p1(k1)
real(ezspline_r4), intent(out) :: f(k1)
integer, intent(out) :: ier
end subroutine EZspline_derivative1_array_r4

end interface