      subroutine dscal(n,da,dx,incx)
c
c     scales a vector by a constant.
c     uses unrolled loops for increment equal to one.
c     jack dongarra, linpack, 3/11/78.
c     modified 3/93 to return if incx .le. 0.
c
      double precision da, dx(1)
      integer i, incx, m, mp1, n, nincx
c
      if (n .le. 0 .or. incx .le. 0) return
      if (incx .eq. 1) go to 20
c
c        code for increment not equal to 1
c
      nincx = n*incx
      do 10 i = 1, nincx, incx
         dx(i) = da*dx(i)
   10 continue

      return
c
c        code for increment equal to 1
c
c
c        clean-up loop
c
   20 continue
      m = mod(n,5)
      if (m .eq. 0) go to 40
      do 30 i = 1, m
         dx(i) = da*dx(i)
   30 continue
      if (n .lt. 5) return
   40 continue
      mp1 = m + 1
      do 50 i = mp1, n, 5
         dx(i) = da*dx(i)
         dx(i+1) = da*dx(i+1)
         dx(i+2) = da*dx(i+2)
         dx(i+3) = da*dx(i+3)
         dx(i+4) = da*dx(i+4)
   50 continue

      return

      end
