1       DOUBLE PRECISION FUNCTION DASUM(N,DX,INCX)
 2 *     .. Scalar Arguments ..
 3       INTEGER INCX,N
 4 *     ..
 5 *     .. Array Arguments ..
 6       DOUBLE PRECISION DX(*)
 7 *     ..
 8 *
 9 *  Purpose
10 *  =======
11 *
12 *     DASUM takes the sum of the absolute values.
13 *
14 *  Further Details
15 *  ===============
16 *
17 *     jack dongarra, linpack, 3/11/78.
18 *     modified 3/93 to return if incx .le. 0.
19 *     modified 12/3/93, array(1) declarations changed to array(*)
20 *
21 *  =====================================================================
22 *
23 *     .. Local Scalars ..
24       DOUBLE PRECISION DTEMP
25       INTEGER I,M,MP1,NINCX
26 *     ..
27 *     .. Intrinsic Functions ..
28       INTRINSIC DABS,MOD
29 *     ..
30       DASUM = 0.0d0
31       DTEMP = 0.0d0
32       IF (N.LE.0 .OR. INCX.LE.0RETURN
33       IF (INCX.EQ.1THEN
34 *        code for increment equal to 1
35 *
36 *
37 *        clean-up loop
38 *
39          M = MOD(N,6)
40          IF (M.NE.0THEN
41             DO I = 1,M
42                DTEMP = DTEMP + DABS(DX(I))
43             END DO
44             IF (N.LT.6THEN
45                DASUM = DTEMP
46                RETURN
47             END IF
48          END IF
49          MP1 = M + 1
50          DO I = MP1,N,6
51             DTEMP = DTEMP + DABS(DX(I)) + DABS(DX(I+1)) +
52      $              DABS(DX(I+2)) + DABS(DX(I+3)) +
53      $              DABS(DX(I+4)) + DABS(DX(I+5))
54          END DO
55       ELSE
56 *
57 *        code for increment not equal to 1
58 *
59          NINCX = N*INCX
60          DO I = 1,NINCX,INCX
61             DTEMP = DTEMP + DABS(DX(I))
62          END DO
63       END IF
64       DASUM = DTEMP
65       RETURN
66       END