5 * Revision 1.1.1.1 1996/04/01 15:02:19 mclareni
10 #if !defined(CERNLIB_DOUBLE)
11 SUBROUTINE RDERIV(F,X,DELTA,DFDX,RERR)
13 #if defined(CERNLIB_DOUBLE)
14 SUBROUTINE DDERIV(F,X,DELTA,DFDX,RERR)
15 #include "gen/imp64.inc"
17 C Computes the derivative f'(x) of f(x) at x = X. Based on
18 C H. Rutishauser, Ausdehnung des Rombergschen Prinzips
19 C (Extension of Romberg's Principle), Numer. Math. 5 (1963) 48-54
22 DIMENSION DX(0:9),W(0:9,3),T(0:9,0:9),A(0:9)
27 #if !defined(CERNLIB_DOUBLE)
28 PARAMETER (NAME = 'RDERIV')
29 PARAMETER (EPS = 5D-12)
31 #if defined(CERNLIB_DOUBLE)
32 PARAMETER (NAME = 'DDERIV')
33 PARAMETER (EPS = 5D-14)
35 PARAMETER (Z1 = 1, S = Z1/10)
37 DATA DX /0.0256D0, 0.0192D0, 0.0128D0, 0.0096D0, 0.0064D0,
38 1 0.0048D0, 0.0032D0, 0.0024D0, 0.0016D0, 0.0012D0/
40 DATA (LEV(K),K=0,8,2) /5*.TRUE./
41 DATA (LEV(K),K=1,9,2) /5*.FALSE./
43 DATA W(1,1) /1.33333 33333 333333D+00/
44 DATA W(3,1) /1.06666 66666 666667D+00/
45 DATA W(5,1) /1.01587 30158 730159D+00/
46 DATA W(7,1) /1.00392 15686 274510D+00/
48 DATA W(2,1) /3.33333 33333 333333D-01/
49 DATA W(4,1) /6.66666 66666 666667D-02/
50 DATA W(6,1) /1.58730 15873 015873D-02/
51 DATA W(8,1) /3.92156 86274 509804D-03/
53 DATA W(0,2) /2.28571 42857 142857D+00/
54 DATA W(2,2) /1.16363 63636 363636D+00/
55 DATA W(4,2) /1.03643 72469 635628D+00/
56 DATA W(6,2) /1.00886 69950 738916D+00/
57 DATA W(8,2) /1.00220 21042 329337D+00/
59 DATA W(1,2) /1.28571 42857 142857D+00/
60 DATA W(3,2) /1.63636 36363 636364D-01/
61 DATA W(5,2) /3.64372 46963 562753D-02/
62 DATA W(7,2) /8.86699 50738 916256D-03/
63 DATA W(9,2) /2.20210 42329 336922D-03/
65 DATA W(0,3) /1.80000 00000 000000D+00/
66 DATA W(2,3) /1.12500 00000 000000D+00/
67 DATA W(4,3) /1.02857 14285 714286D+00/
68 DATA W(6,3) /1.00699 30069 930070D+00/
69 DATA W(8,3) /1.00173 91304 347826D+00/
71 DATA W(1,3) /8.00000 00000 000000D-01/
72 DATA W(3,3) /1.25000 00000 000000D-01/
73 DATA W(5,3) /2.85714 28571 428571D-02/
74 DATA W(7,3) /6.99300 69930 069930D-03/
75 DATA W(9,3) /1.73913 04347 826087D-03/
77 #if !defined(CERNLIB_DOUBLE)
78 ENTRY DERIV(F,X,DELTA,DFDX,RERR)
86 IF(IS .EQ. 0 .OR. X+DEL*DX(9) .EQ. X) THEN
91 CALL MTLPRT(NAME,'D401.1',ERRTXT)
96 T(K,0)=(F(X+H)-F(X-H))/(H+H)
99 IF(A(0) .GE. A(9)) THEN
107 3 LMT=LMT .AND. (H .LE. 0 .OR. ABS(H) .LE. EPS*ABS(A(K)))
113 T(K,M)=W(M-1,1)*T(K+1,M-1)-W(M,1)*T(K,M-1)
115 T(K,M)=W(M-1,2)*T(K+1,M-1)-W(M,2)*T(K,M-1)
117 T(K,M)=W(M-1,3)*T(K+1,M-1)-W(M,3)*T(K,M-1)
122 IF(DFDX .NE. 0) RERR=(DFDX-T(0,8))/DFDX
125 101 FORMAT('FAILURE FOR X = ',1P,D15.8)