V3FIT
r8seval3.f
1 C******************** START FILE SEVAL3.FOR ; GROUP TRKRLIB ************
2 C
3  REAL*8 FUNCTION r8seval3(N, U, X, Y, B, C, D, deriv, deriv2)
4 !============
5 ! idecl: explicitize implicit REAL declarations:
6  IMPLICIT NONE
7  INTEGER, PARAMETER :: R8=selected_real_kind(12,100)
8  real*8 deriv2,zslop
9 !============
10  INTEGER N
11  real*8 u, x(n), y(n), b(n), c(n), d(n), deriv
12 C
13 CCCCCCCCCCCCCCC
14 CCCCCCCCCCCCCCC
15 C THIS SUBROUTINE EVALUATES THE CUBIC SPLINE FUNCTION
16 C
17 C SEVAL3 = Y(I) + B(I)*(U-X(I)) + C(I)*(U-X(I))**2 + D(I)*(U-X(I))**3
18 C
19 C and the derivative
20 C
21 C deriv = B(i) + 2*C(i)*(U-X(i)) + 3*D(i)*(U-X(i))**2
22 C
23 C and the 2nd derivative
24 C
25 C deriv2 = 2*C(i) + 6*D(i)*(U-X(i))
26 C
27 C WHERE X(I) .LT. U .LT. X(I+1), USING HORNER'S RULE
28 C
29 C IF U .LT. X(1) THEN I = 1 IS USED.
30 C IF U .GE. X(N) THEN I = N IS USED.
31 C
32 C INPUT..
33 C
34 C N = THE NUMBER OF DATA POINTS
35 C U = THE ABSCISSA AT WHICH THE SPLINE IS TO BE EVALUATED
36 C X,Y = THE ARRAYS OF DATA ABSCISSAS AND ORDINATES
37 C B,C,D = ARRAYS OF SPLINE COEFFICIENTS COMPUTED BY SPLINE
38 C
39 C IF U IS NOT IN THE SAME INTERVAL AS THE PREVIOUS CALL, THEN A
40 C BINARY SEARCH IS PERFORMED TO DETERMINE THE PROPER INTERVAL.
41 C
42  INTEGER I, J, K, ILIN
43  real*8 dx
44  DATA i/1/
45  DATA ilin/0/
46 C
47  IF ( i .GE. n ) i = 1
48  IF ( u .LT. x(i) ) GO TO 10
49  IF ( u .LE. x(i+1) ) GO TO 30
50 C
51 C BINARY SEARCH
52 C
53  10 i = 1
54  j = n+1
55  20 k = (i+j)/2
56  IF ( u .LT. x(k) ) j = k
57  IF ( u .GE. x(k) ) i = k
58  IF ( j .GT. i+1 ) GO TO 20
59 C
60 C EVALUATE SPLINE
61 C
62  30 dx = u - x(i)
63  IF(ilin.EQ.0) THEN
64  r8seval3 = y(i) + dx*(b(i) + dx*(c(i) + dx*d(i)))
65  deriv = b(i) + dx*(2.0_r8*c(i) + dx*3.0_r8*d(i))
66  deriv2 = 2.0_r8*c(i) + dx*6.0_r8*d(i)
67  ELSE
68  IF(i.EQ.n) THEN
69  zslop=(y(n)-y(n-1))/(x(n)-x(n-1))
70  ELSE
71  zslop=(y(i+1)-y(i))/(x(i+1)-x(i))
72  ENDIF
73  r8seval3=y(i)+dx*zslop
74  deriv=zslop
75  deriv2=0.0_r8
76  ENDIF
77 C
78  RETURN
79  END
80 C******************** END FILE SEVAL3.FOR ; GROUP TRKRLIB **************
deriv
Definition: mapout_nc.f:94