1*DECK SPENC
2      FUNCTION SPENC (X)
3C***BEGIN PROLOGUE  SPENC
4C***PURPOSE  Compute a form of Spence's integral due to K. Mitchell.
5C***LIBRARY   SLATEC (FNLIB)
6C***CATEGORY  C5
7C***TYPE      SINGLE PRECISION (SPENC-S, DSPENC-D)
8C***KEYWORDS  FNLIB, SPECIAL FUNCTIONS, SPENCE'S INTEGRAL
9C***AUTHOR  Fullerton, W., (LANL)
10C***DESCRIPTION
11C
12C Evaluate a form of Spence's function defined by
13C        integral from 0 to X of  -LOG(1-Y)/Y  DY.
14C For ABS(X) .LE. 1, the uniformly convergent expansion
15C        SPENC = sum K=1,infinity  X**K / K**2     is valid.
16C
17C Spence's function can be used to evaluate much more general integral
18C forms.  For example,
19C        integral from 0 to Z of  LOG(A*X+B)/(C*X+D)  DX  =
20C             LOG(ABS(B-A*D/C))*LOG(ABS(A*(C*X+D)/(A*D-B*C)))/C
21C             - SPENC (A*(C*Z+D)/(A*D-B*C)) / C.
22C
23C Ref -- K. Mitchell, Philosophical Magazine, 40, p. 351 (1949).
24C        Stegun and Abromowitz, AMS 55, p. 1004.
25C
26C
27C Series for SPEN       on the interval  0.          to  5.00000D-01
28C                                        with weighted error   6.82E-17
29C                                         log weighted error  16.17
30C                               significant figures required  15.22
31C                                    decimal places required  16.81
32C
33C***REFERENCES  (NONE)
34C***ROUTINES CALLED  CSEVL, INITS, R1MACH
35C***REVISION HISTORY  (YYMMDD)
36C   780201  DATE WRITTEN
37C   890531  Changed all specific intrinsics to generic.  (WRB)
38C   890531  REVISION DATE from Version 3.2
39C   891214  Prologue converted to Version 4.0 format.  (BAB)
40C***END PROLOGUE  SPENC
41      DIMENSION SPENCS(19)
42      LOGICAL FIRST
43      SAVE SPENCS, PI26, NSPENC, XBIG, FIRST
44      DATA SPENCS( 1) /    .1527365598 892406E0 /
45      DATA SPENCS( 2) /    .0816965805 8051014E0 /
46      DATA SPENCS( 3) /    .0058141571 4077873E0 /
47      DATA SPENCS( 4) /    .0005371619 8145415E0 /
48      DATA SPENCS( 5) /    .0000572470 4675185E0 /
49      DATA SPENCS( 6) /    .0000066745 4612164E0 /
50      DATA SPENCS( 7) /    .0000008276 4673397E0 /
51      DATA SPENCS( 8) /    .0000001073 3156730E0 /
52      DATA SPENCS( 9) /    .0000000144 0077294E0 /
53      DATA SPENCS(10) /    .0000000019 8444202E0 /
54      DATA SPENCS(11) /    .0000000002 7940058E0 /
55      DATA SPENCS(12) /    .0000000000 4003991E0 /
56      DATA SPENCS(13) /    .0000000000 0582346E0 /
57      DATA SPENCS(14) /    .0000000000 0085767E0 /
58      DATA SPENCS(15) /    .0000000000 0012768E0 /
59      DATA SPENCS(16) /    .0000000000 0001918E0 /
60      DATA SPENCS(17) /    .0000000000 0000290E0 /
61      DATA SPENCS(18) /    .0000000000 0000044E0 /
62      DATA SPENCS(19) /    .0000000000 0000006E0 /
63      DATA PI26 / 1.644934066 848226E0 /
64      DATA FIRST /.TRUE./
65C***FIRST EXECUTABLE STATEMENT  SPENC
66      IF (FIRST) THEN
67         NSPENC = INITS (SPENCS, 19, 0.1*R1MACH(3))
68         XBIG = 1.0/R1MACH(3)
69      ENDIF
70      FIRST = .FALSE.
71C
72      IF (X.GT.2.0) GO TO 60
73      IF (X.GT.1.0) GO TO 50
74      IF (X.GT.0.5) GO TO 40
75      IF (X.GE.0.0) GO TO 30
76      IF (X.GT.(-1.)) GO TO 20
77C
78C HERE IF X .LE. -1.0
79C
80      ALN = LOG(1.0-X)
81      SPENC = -PI26 - 0.5*ALN*(2.0*LOG(-X)-ALN)
82      IF (X.GT.(-XBIG)) SPENC = SPENC
83     1  + (1.0 + CSEVL (4.0/(1.0-X)-1.0, SPENCS, NSPENC)) / (1.0-X)
84      RETURN
85C
86C -1.0 .LT. X .LT. 0.0
87C
88 20   SPENC = -0.5*LOG(1.0-X)**2
89     1  - X*(1.0 + CSEVL (4.0*X/(X-1.0)-1.0, SPENCS, NSPENC)) / (X-1.0)
90      RETURN
91C
92C 0.0 .LE. X .LE. 0.5
93C
94 30   SPENC = X*(1.0 + CSEVL (4.0*X-1.0, SPENCS, NSPENC))
95      RETURN
96C
97C 0.5 .LT. X .LE. 1.0
98C
99 40   SPENC = PI26
100      IF (X.NE.1.0) SPENC = PI26 - LOG(X)*LOG(1.0-X)
101     1  - (1.0-X)*(1.0 + CSEVL (4.0*(1.0-X)-1.0, SPENCS, NSPENC))
102      RETURN
103C
104C 1.0 .LT. X .LE. 2.0
105C
106 50   SPENC = PI26 - 0.5*LOG(X)*LOG((X-1.0)**2/X)
107     1  + (X-1.)*(1.0 + CSEVL (4.0*(X-1.)/X-1.0, SPENCS, NSPENC))/X
108      RETURN
109C
110C X .GT. 2.0
111C
112 60   SPENC = 2.0*PI26 - 0.5*LOG(X)**2
113      IF (X.LT.XBIG) SPENC = SPENC
114     1  - (1.0 + CSEVL (4.0/X-1.0, SPENCS, NSPENC))/X
115      RETURN
116C
117      END
118