V3FIT
deriv.f
1  FUNCTION deriv(xx,yy,n)
2 
3 !df/dx = y0*(2x-x1-x2)/(x01*x02)+y1*(2x-x0-x2)/(x10*x12)+y2*(2x-x0-x1)/(x20*x21)
4 ! Where: x01 = x0-x1, x02 = x0-x2, x12 = x1-x2, etc.
5 
6  USE precision
7  IMPLICIT NONE
8  INTEGER :: n,n2
9  REAL(rprec) :: xx(n),yy(n)
10  REAL(rprec),DIMENSION(n) :: x, y, dydx, x01, x02, x12
11  REAL(rprec) :: deriv(n)
12  INTERFACE shiftx
13  FUNCTION shiftx(x,n,m)
14  IMPLICIT NONE
15  INTEGER, PARAMETER :: rprec = selected_real_kind(12,100)
16  INTEGER :: m, n
17  REAL(rprec) :: x(n)
18  REAL(rprec),DIMENSION(n) :: x1
19  REAL(rprec) :: shiftx(n)
20  END FUNCTION shiftx
21  END INTERFACE shiftx
22  x=xx; y=yy; dydx=0
23  x12 = x - shiftx(x,n,-1)
24  x01 = shiftx(x,n,1) -x
25  x02 = shiftx(x,n,1) - shiftx(x,n,-1)
26  dydx = shiftx(y,n,1) * (x12 / (x01*x02)) + ! Middle points
27  . y * (1./x12 - 1./x01) -
28  . shiftx(y,n,-1) * (x01 / (x02 * x12))
29  dydx(1) = y(1) * (x01(2)+x02(2))/(x01(2)*x02(2)) - ! First point
30  . y(2) * x02(2)/(x01(2)*x12(2)) +
31  . y((3)) * x01(2)/(x02(2)*x12(2))
32  n2 = n- 1
33  dydx(n) = -y(n-2) * x12(n2)/(x01(n2)*x02(n2)) + ! Last point
34  . y(n-1) * x02(n2)/(x01(n2)*x12(n2)) -
35  . y(n) * (x02(n2)+x12(n2)) / (x02(n2)*x12(n2))
36  deriv=dydx
37  RETURN
38  END FUNCTION deriv
deriv
Definition: mapout_nc.f:94
shiftx
Definition: mapout_nc.f:102