subroutine dscal(n,da,dx,incx) c***begin prologue dscal c***date written 791001 (yymmdd) c***revision date 820801 (yymmdd) c***category no. d1a6 c***keywords blas,linear algebra,scale,vector c***author lawson, c. l., (jpl) c hanson, r. j., (snla) c kincaid, d. r., (u. of texas) c krogh, f. t., (jpl) c***purpose d.p. vector scale x = a*x c***description c c b l a s subprogram c description of parameters c c --input-- c n number of elements in input vector(s) c da double precision scale factor c dx double precision vector with n elements c incx storage spacing between elements of dx c c --output-- c dx double precision result (unchanged if n.le.0) c c replace double precision dx by double precision da*dx. c for i = 0 to n-1, replace dx(1+i*incx) with da * dx(1+i*incx) c***references lawson c.l., hanson r.j., kincaid d.r., krogh f.t., c *basic linear algebra subprograms for fortran usage*, c algorithm no. 539, transactions on mathematical c software, volume 5, number 3, september 1979, 308-323 c***routines called (none) c***end prologue dscal c double precision da,dx(1) c***first executable statement dscal if(n.le.0)return if(incx.eq.1)goto 20 c c code for increments not equal to 1. c ns = n*incx do 10 i = 1,ns,incx dx(i) = da*dx(i) 10 continue return c c code for increments equal to 1. c c c clean-up loop so remaining vector length is a multiple of 5. c 20 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 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