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 GAL_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