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