1      double precision function dsum(n,sx,incx)
2*
3* $Id$
4*
5c
6c     takes the sum of the array elements.
7c     uses unrolled loops for increment equal to one.
8c     jack dongarra, linpack, 3/11/78.
9c     modified 3/93 to return if incx .le. 0.
10c
11      double precision sx(*),stemp
12      integer i,incx,m,mp1,n,nincx
13c
14      dsum = 0.0d0
15      stemp = 0.0d0
16      if( n.le.0 .or. incx.le.0 )return
17      if(incx.eq.1)go to 20
18c
19c        code for increment not equal to 1
20c
21      nincx = n*incx
22      do 10 i = 1,nincx,incx
23        stemp = stemp + sx(i)
24   10 continue
25      dsum = stemp
26      return
27c
28c        code for increment equal to 1
29c
30c
31c        clean-up loop
32c
33   20 m = mod(n,6)
34      if( m .eq. 0 ) go to 40
35      do 30 i = 1,m
36        stemp = stemp + sx(i)
37   30 continue
38      if( n .lt. 6 ) go to 60
39   40 mp1 = m + 1
40      do 50 i = mp1,n,6
41        stemp = stemp + sx(i) + sx(i + 1) + sx(i + 2)
42     *  + sx(i + 3) + sx(i + 4) + sx(i + 5)
43   50 continue
44   60 dsum = stemp
45      return
46      end
47