1*> \brief \b DSCAL
2*
3*  =========== DOCUMENTATION ===========
4*
5* Online html documentation available at
6*            http://www.netlib.org/lapack/explore-html/
7*
8*  Definition:
9*  ===========
10*
11*       SUBROUTINE DSCAL(N,DA,DX,INCX)
12*
13*       .. Scalar Arguments ..
14*       DOUBLE PRECISION DA
15*       INTEGER INCX,N
16*       ..
17*       .. Array Arguments ..
18*       DOUBLE PRECISION DX(*)
19*       ..
20*
21*
22*> \par Purpose:
23*  =============
24*>
25*> \verbatim
26*>
27*>    DSCAL scales a vector by a constant.
28*>    uses unrolled loops for increment equal to one.
29*> \endverbatim
30*
31*  Authors:
32*  ========
33*
34*> \author Univ. of Tennessee
35*> \author Univ. of California Berkeley
36*> \author Univ. of Colorado Denver
37*> \author NAG Ltd.
38*
39*> \date November 2011
40*
41*> \ingroup double_blas_level1
42*
43*> \par Further Details:
44*  =====================
45*>
46*> \verbatim
47*>
48*>     jack dongarra, linpack, 3/11/78.
49*>     modified 3/93 to return if incx .le. 0.
50*>     modified 12/3/93, array(1) declarations changed to array(*)
51*> \endverbatim
52*>
53*  =====================================================================
54      SUBROUTINE DSCAL(N,DA,DX,INCX)
55*
56*  -- Reference BLAS level1 routine (version 3.4.0) --
57*  -- Reference BLAS is a software package provided by Univ. of Tennessee,    --
58*  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
59*     November 2011
60*
61*     .. Scalar Arguments ..
62      DOUBLE PRECISION DA
63      INTEGER INCX,N
64*     ..
65*     .. Array Arguments ..
66      DOUBLE PRECISION DX(*)
67*     ..
68*
69*  =====================================================================
70*
71*     .. Local Scalars ..
72      INTEGER I,M,MP1,NINCX
73*     ..
74*     .. Intrinsic Functions ..
75      INTRINSIC MOD
76*     ..
77      IF (N.LE.0 .OR. INCX.LE.0) RETURN
78      IF (INCX.EQ.1) THEN
79*
80*        code for increment equal to 1
81*
82*
83*        clean-up loop
84*
85         M = MOD(N,5)
86         IF (M.NE.0) THEN
87            DO I = 1,M
88               DX(I) = DA*DX(I)
89            END DO
90            IF (N.LT.5) RETURN
91         END IF
92         MP1 = M + 1
93         DO I = MP1,N,5
94            DX(I) = DA*DX(I)
95            DX(I+1) = DA*DX(I+1)
96            DX(I+2) = DA*DX(I+2)
97            DX(I+3) = DA*DX(I+3)
98            DX(I+4) = DA*DX(I+4)
99         END DO
100      ELSE
101*
102*        code for increment not equal to 1
103*
104         NINCX = N*INCX
105         DO I = 1,NINCX,INCX
106            DX(I) = DA*DX(I)
107         END DO
108      END IF
109      RETURN
110      END
111