1      DOUBLE PRECISION FUNCTION DASUM(N,X,INCX)
2c Copyright (c) 1996 California Institute of Technology, Pasadena, CA.
3c ALL RIGHTS RESERVED.
4c Based on Government Sponsored Research NAS7-03001.
5C>> 1994-11-11 DASUM  Krogh  Declared all vars.
6c>> 1994-10-20 DASUM  Krogh  Changes to use M77CON
7c>> 1994-04-19 DASUM  Krogh  Minor -- Made diff. precision line up.
8C>> 1985-08-02 DASUM  Lawson Initial code.
9c--D replaces "?": ?ASUM
10C
11C     RETURNS SUM OF MAGNITUDES OF X.
12C     DASUM = SUM FROM 0 TO N-1 OF ABS(X(1+I*INCX))
13C
14      INTEGER N, INCX, NS, I, M, MP1
15      DOUBLE PRECISION X(*)
16      DASUM = 0.0D0
17      IF(N.LE.0)RETURN
18      IF(INCX.EQ.1)GOTO 20
19C
20C        CODE FOR INCREMENTS NOT EQUAL TO 1.
21C
22      NS = N*INCX
23          DO 10 I=1,NS,INCX
24          DASUM = DASUM + ABS(X(I))
25   10     CONTINUE
26      RETURN
27C
28C        CODE FOR INCREMENTS EQUAL TO 1.
29C
30C
31C        CLEAN-UP LOOP SO REMAINING VECTOR LENGTH IS A MULTIPLE OF 6.
32C
33   20 M = MOD(N,6)
34      IF( M .EQ. 0 ) GO TO 40
35      DO 30 I = 1,M
36         DASUM = DASUM + ABS(X(I))
37   30 CONTINUE
38      IF( N .LT. 6 ) RETURN
39   40 MP1 = M + 1
40      DO 50 I = MP1,N,6
41         DASUM = DASUM + ABS(X(I)) + ABS(X(I + 1)) + ABS(X(I + 2))
42     $   + ABS(X(I + 3)) + ABS(X(I + 4)) + ABS(X(I + 5))
43   50 CONTINUE
44      RETURN
45      END
46