29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48#include "implicit_f.inc"
49
50
51
52 INTEGER PXI, IDXI
54 . INTENT(IN) :: xi
56 . DIMENSION(*), INTENT(IN) :: kxi
58
59
60
61 INTEGER J, JJ, K, NDERS
62 my_real saved, temp, aleft, right
64 my_real,
DIMENSION(PXI+1,PXI+1) :: andu
66
67 nders=1
68 andu(:,:)=zero
69
70 DO j=0,pxi
71 IF ((xi>=kxi(idxi+j)).AND.(xi<kxi(idxi+j+1))) THEN
72 andu(j+1,1) = one
73 ELSE
74 andu(j+1,1) = zero
75 ENDIF
76 ENDDO
77
78 DO k=1,pxi
79 IF (andu(1,k) == 0) THEN
80 saved = zero
81 ELSE
82 saved = ((xi-kxi(idxi))*andu(1,k))/(kxi(idxi+k)-kxi(idxi))
83 ENDIF
84 DO j=0,pxi-k
85 aleft = kxi(idxi+j+1)
86 right = kxi(idxi+j+k+1)
87 IF (andu(j+2,k) == 0) THEN
88 andu(j+1,k+1) = saved
89 saved = zero
90 ELSE
91 temp = andu(j+2,k)/(right-aleft)
92 andu(j+1,k+1) = saved+(right-xi)*temp
93 saved = (xi-aleft)*temp
94 ENDIF
95 ENDDO
96 ENDDO
97
98 ders(1) = andu(1,pxi+1)
99
100
101
102 DO k=1,nders
103 DO j=1,k+1
104 nd(j) = andu(j,pxi-k+1)
105 ENDDO
106 DO jj=1,k
107 IF (nd(1) == 0) THEN
108 saved = zero
109 ELSE
110 saved = nd(1)/(kxi(idxi+pxi-k+jj)-kxi(idxi))
111 ENDIF
112 DO j=1,k-jj+1
113 aleft = kxi(idxi+j)
114 right = kxi(idxi+j+pxi+jj-1)
115
116 IF (nd(j+1) == 0) THEN
117 nd(j) = (pxi-k+jj)*saved
118 saved = zero
119 ELSE
120 temp = nd(j+1)/(right-aleft)
121 nd(j) = (pxi-k+jj)*(saved-temp)
122 saved = temp
123 ENDIF
124 ENDDO
125 ENDDO
126 ders(2) = nd(1)
127 ENDDO
128
129 ders1 = ders(1)
130 ders2 = ders(2)
131
132 RETURN