1: *> \brief \b DAXPY
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 DAXPY(N,DA,DX,INCX,DY,INCY)
12: *
13: * .. Scalar Arguments ..
14: * DOUBLE PRECISION DA
15: * INTEGER INCX,INCY,N
16: * ..
17: * .. Array Arguments ..
18: * DOUBLE PRECISION DX(*),DY(*)
19: * ..
20: *
21: *
22: *> \par Purpose:
23: * =============
24: *>
25: *> \verbatim
26: *>
27: *> DAXPY constant times a vector plus a vector.
28: *> uses unrolled loops for increments equal to one.
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] 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
55: *> \endverbatim
56: *>
57: *> \param[in,out] DY
58: *> \verbatim
59: *> DY is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCY ) )
60: *> \endverbatim
61: *>
62: *> \param[in] INCY
63: *> \verbatim
64: *> INCY is INTEGER
65: *> storage spacing between elements of DY
66: *> \endverbatim
67: *
68: * Authors:
69: * ========
70: *
71: *> \author Univ. of Tennessee
72: *> \author Univ. of California Berkeley
73: *> \author Univ. of Colorado Denver
74: *> \author NAG Ltd.
75: *
76: *> \ingroup double_blas_level1
77: *
78: *> \par Further Details:
79: * =====================
80: *>
81: *> \verbatim
82: *>
83: *> jack dongarra, linpack, 3/11/78.
84: *> modified 12/3/93, array(1) declarations changed to array(*)
85: *> \endverbatim
86: *>
87: * =====================================================================
88: SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY)
89: *
90: * -- Reference BLAS level1 routine --
91: * -- Reference BLAS is a software package provided by Univ. of Tennessee, --
92: * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
93: *
94: * .. Scalar Arguments ..
95: DOUBLE PRECISION DA
96: INTEGER INCX,INCY,N
97: * ..
98: * .. Array Arguments ..
99: DOUBLE PRECISION DX(*),DY(*)
100: * ..
101: *
102: * =====================================================================
103: *
104: * .. Local Scalars ..
105: INTEGER I,IX,IY,M,MP1
106: * ..
107: * .. Intrinsic Functions ..
108: INTRINSIC MOD
109: * ..
110: IF (N.LE.0) RETURN
111: IF (DA.EQ.0.0d0) RETURN
112: IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
113: *
114: * code for both increments equal to 1
115: *
116: *
117: * clean-up loop
118: *
119: M = MOD(N,4)
120: IF (M.NE.0) THEN
121: DO I = 1,M
122: DY(I) = DY(I) + DA*DX(I)
123: END DO
124: END IF
125: IF (N.LT.4) RETURN
126: MP1 = M + 1
127: DO I = MP1,N,4
128: DY(I) = DY(I) + DA*DX(I)
129: DY(I+1) = DY(I+1) + DA*DX(I+1)
130: DY(I+2) = DY(I+2) + DA*DX(I+2)
131: DY(I+3) = DY(I+3) + DA*DX(I+3)
132: END DO
133: ELSE
134: *
135: * code for unequal increments or equal increments
136: * not equal to 1
137: *
138: IX = 1
139: IY = 1
140: IF (INCX.LT.0) IX = (-N+1)*INCX + 1
141: IF (INCY.LT.0) IY = (-N+1)*INCY + 1
142: DO I = 1,N
143: DY(IY) = DY(IY) + DA*DX(IX)
144: IX = IX + INCX
145: IY = IY + INCY
146: END DO
147: END IF
148: RETURN
149: *
150: * End of DAXPY
151: *
152: END
CVSweb interface <joel.bertrand@systella.fr>