30
31
32
33#include "implicit_f.inc"
34
35 INTEGER ILEN(*),IPOS(*),IAD(*),NEL0
36 my_real x(*),dydx(*),y(*),tf(2,*)
37 INTEGER I,J1,J,ICONT,J2,J_FIRST,J_LAST
38 my_real dydx1,dydx2,dydx3,x_first,x_last
39
40 j = 0
41 icont = 1
42 DO WHILE (icont == 1)
43
44 j = j+1
45 icont = 0
46 DO i=1,nel0
47 j1 = ipos(i)+iad(i)+1
48 IF (j <= ilen(i)-1 .AND. x(i) > tf(1,j1)) THEN
49 ipos(i) = ipos(i) + 1
50 icont = 1
51 ELSEIF (ipos(i) >= 1 .AND. x(i) < tf(1,j1-1)) THEN
52 ipos(i) = ipos(i) - 1
53 icont = 1
54 ENDIF
55 ENDDO
56
57 ENDDO
58
59
60
61 DO i=1,nel0
62
63 j_first = ipos(i)+iad(i)
64 j_last = j_first + 1
65 x_first = tf(1,j_first)
66 x_last = tf(1,j_last)
67
68 IF (x(i) <= x_first) THEN
69 y(i) = tf(2,j_first)
70 ELSEIF (x(i) >= x_last) THEN
71 y(i) = tf(2,j_last)
72 ELSE
73
74 j1 =ipos(i)+iad(i)
75 j2 = j1+1
76 dydx(i)=(x(i)-tf(1,j1))/(tf(1,j2)-tf(1,j1))
77
78 dydx1 = dydx(i)
79 dydx2 = dydx1*dydx1
80 dydx3 = dydx1*dydx2
81
82 y(i) = tf(2,j1) + (tf(2,j2)-tf(2,j1))*dydx3*
83 . (10. - 15.*dydx1 + 6.*dydx2)
84
85
86
87 ENDIF
88 ENDDO
89
90 RETURN