Annotation of rpl/lapack/blas/dscal.f, revision 1.14
1.8 bertrand 1: *> \brief \b DSCAL
2: *
3: * =========== DOCUMENTATION ===========
4: *
1.13 bertrand 5: * Online html documentation available at
6: * http://www.netlib.org/lapack/explore-html/
1.8 bertrand 7: *
8: * Definition:
9: * ===========
10: *
11: * SUBROUTINE DSCAL(N,DA,DX,INCX)
1.13 bertrand 12: *
1.8 bertrand 13: * .. Scalar Arguments ..
14: * DOUBLE PRECISION DA
15: * INTEGER INCX,N
16: * ..
17: * .. Array Arguments ..
18: * DOUBLE PRECISION DX(*)
19: * ..
1.13 bertrand 20: *
1.8 bertrand 21: *
22: *> \par Purpose:
23: * =============
24: *>
25: *> \verbatim
26: *>
27: *> DSCAL scales a vector by a constant.
1.14 ! bertrand 28: *> uses unrolled loops for increment equal to 1.
! 29: *> \endverbatim
! 30: *
! 31: * Arguments:
! 32: * ==========
! 33: *
! 34: *> \param[in] N
! 35: *> \verbatim
! 36: *> N is INTEGER
! 37: *> number of elements in input vector(s)
! 38: *> \endverbatim
! 39: *>
! 40: *> \param[in] DA
! 41: *> \verbatim
! 42: *> DA is DOUBLE PRECISION
! 43: *> On entry, DA specifies the scalar alpha.
! 44: *> \endverbatim
! 45: *>
! 46: *> \param[in,out] DX
! 47: *> \verbatim
! 48: *> DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
! 49: *> \endverbatim
! 50: *>
! 51: *> \param[in] INCX
! 52: *> \verbatim
! 53: *> INCX is INTEGER
! 54: *> storage spacing between elements of DX
1.8 bertrand 55: *> \endverbatim
56: *
57: * Authors:
58: * ========
59: *
1.13 bertrand 60: *> \author Univ. of Tennessee
61: *> \author Univ. of California Berkeley
62: *> \author Univ. of Colorado Denver
63: *> \author NAG Ltd.
1.8 bertrand 64: *
1.14 ! bertrand 65: *> \date November 2017
1.8 bertrand 66: *
67: *> \ingroup double_blas_level1
68: *
69: *> \par Further Details:
70: * =====================
71: *>
72: *> \verbatim
73: *>
74: *> jack dongarra, linpack, 3/11/78.
75: *> modified 3/93 to return if incx .le. 0.
76: *> modified 12/3/93, array(1) declarations changed to array(*)
77: *> \endverbatim
78: *>
79: * =====================================================================
1.1 bertrand 80: SUBROUTINE DSCAL(N,DA,DX,INCX)
1.8 bertrand 81: *
1.14 ! bertrand 82: * -- Reference BLAS level1 routine (version 3.8.0) --
1.8 bertrand 83: * -- Reference BLAS is a software package provided by Univ. of Tennessee, --
84: * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
1.14 ! bertrand 85: * November 2017
1.8 bertrand 86: *
1.1 bertrand 87: * .. Scalar Arguments ..
88: DOUBLE PRECISION DA
89: INTEGER INCX,N
90: * ..
91: * .. Array Arguments ..
92: DOUBLE PRECISION DX(*)
93: * ..
94: *
95: * =====================================================================
96: *
97: * .. Local Scalars ..
98: INTEGER I,M,MP1,NINCX
99: * ..
100: * .. Intrinsic Functions ..
101: INTRINSIC MOD
102: * ..
103: IF (N.LE.0 .OR. INCX.LE.0) RETURN
1.7 bertrand 104: IF (INCX.EQ.1) THEN
1.1 bertrand 105: *
1.7 bertrand 106: * code for increment equal to 1
1.1 bertrand 107: *
108: *
1.7 bertrand 109: * clean-up loop
1.1 bertrand 110: *
1.7 bertrand 111: M = MOD(N,5)
112: IF (M.NE.0) THEN
113: DO I = 1,M
114: DX(I) = DA*DX(I)
115: END DO
116: IF (N.LT.5) RETURN
117: END IF
118: MP1 = M + 1
119: DO I = MP1,N,5
120: DX(I) = DA*DX(I)
121: DX(I+1) = DA*DX(I+1)
122: DX(I+2) = DA*DX(I+2)
123: DX(I+3) = DA*DX(I+3)
124: DX(I+4) = DA*DX(I+4)
125: END DO
126: ELSE
1.1 bertrand 127: *
1.7 bertrand 128: * code for increment not equal to 1
1.1 bertrand 129: *
1.7 bertrand 130: NINCX = N*INCX
131: DO I = 1,NINCX,INCX
132: DX(I) = DA*DX(I)
133: END DO
134: END IF
1.1 bertrand 135: RETURN
136: END
CVSweb interface <joel.bertrand@systella.fr>