f95a9ab5e9710720fba5d660ad59116740d78b99
[platform/upstream/lapack.git] / BLAS / SRC / dsdot.f
1 *> \brief \b DSDOT
2 *
3 *  =========== DOCUMENTATION ===========
4 *
5 * Online html documentation available at 
6 *            http://www.netlib.org/lapack/explore-html/ 
7 *
8 *  Definition:
9 *  ===========
10 *
11 *       DOUBLE PRECISION FUNCTION DSDOT(N,SX,INCX,SY,INCY)
12
13 *       .. Scalar Arguments ..
14 *       INTEGER INCX,INCY,N
15 *       ..
16 *       .. Array Arguments ..
17 *       REAL SX(*),SY(*)
18 *       ..
19 *  
20 *    AUTHORS
21 *    =======
22 *    Lawson, C. L., (JPL), Hanson, R. J., (SNLA), 
23 *    Kincaid, D. R., (U. of Texas), Krogh, F. T., (JPL)
24 *  
25 *
26 *> \par Purpose:
27 *  =============
28 *>
29 *> \verbatim
30 *>
31 *> Compute the inner product of two vectors with extended
32 *> precision accumulation and result.
33 *>
34 *> Returns D.P. dot product accumulated in D.P., for S.P. SX and SY
35 *> DSDOT = sum for I = 0 to N-1 of  SX(LX+I*INCX) * SY(LY+I*INCY),
36 *> where LX = 1 if INCX .GE. 0, else LX = 1+(1-N)*INCX, and LY is
37 *> defined in a similar way using INCY.
38 *> \endverbatim
39 *
40 *  Arguments:
41 *  ==========
42 *
43 *> \param[in] N
44 *> \verbatim
45 *>          N is INTEGER
46 *>         number of elements in input vector(s)
47 *> \endverbatim
48 *>
49 *> \param[in] SX
50 *> \verbatim
51 *>          SX is REAL array, dimension(N)
52 *>         single precision vector with N elements
53 *> \endverbatim
54 *>
55 *> \param[in] INCX
56 *> \verbatim
57 *>          INCX is INTEGER
58 *>          storage spacing between elements of SX
59 *> \endverbatim
60 *>
61 *> \param[in] SY
62 *> \verbatim
63 *>          SY is REAL array, dimension(N)
64 *>         single precision vector with N elements
65 *> \endverbatim
66 *>
67 *> \param[in] INCY
68 *> \verbatim
69 *>          INCY is INTEGER
70 *>         storage spacing between elements of SY
71 *> \endverbatim
72 *>
73 *> \result DSDOT
74 *> \verbatim
75 *>          DSDOT is DOUBLE PRECISION
76 *>         DSDOT  double precision dot product (zero if N.LE.0)
77 *> \endverbatim
78 *
79 *  Authors:
80 *  ========
81 *
82 *> \author Univ. of Tennessee 
83 *> \author Univ. of California Berkeley 
84 *> \author Univ. of Colorado Denver 
85 *> \author NAG Ltd. 
86 *
87 *> \date November 2011
88 *
89 *> \ingroup double_blas_level1
90 *
91 *> \par Further Details:
92 *  =====================
93 *>
94 *> \verbatim
95 *> \endverbatim
96 *
97 *> \par References:
98 *  ================
99 *>
100 *> \verbatim
101 *>
102 *>      
103 *>  C. L. Lawson, R. J. Hanson, D. R. Kincaid and F. T.
104 *>  Krogh, Basic linear algebra subprograms for Fortran
105 *>  usage, Algorithm No. 539, Transactions on Mathematical
106 *>  Software 5, 3 (September 1979), pp. 308-323.
107 *>
108 *>  REVISION HISTORY  (YYMMDD)
109 *>
110 *>  791001  DATE WRITTEN
111 *>  890831  Modified array declarations.  (WRB)
112 *>  890831  REVISION DATE from Version 3.2
113 *>  891214  Prologue converted to Version 4.0 format.  (BAB)
114 *>  920310  Corrected definition of LX in DESCRIPTION.  (WRB)
115 *>  920501  Reformatted the REFERENCES section.  (WRB)
116 *>  070118  Reformat to LAPACK style (JL)
117 *> \endverbatim
118 *>
119 *  =====================================================================
120       DOUBLE PRECISION FUNCTION DSDOT(N,SX,INCX,SY,INCY)
121 *
122 *  -- Reference BLAS level1 routine (version 3.4.0) --
123 *  -- Reference BLAS is a software package provided by Univ. of Tennessee,    --
124 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
125 *     November 2011
126 *
127 *     .. Scalar Arguments ..
128       INTEGER INCX,INCY,N
129 *     ..
130 *     .. Array Arguments ..
131       REAL SX(*),SY(*)
132 *     ..
133 *
134 *  Authors:
135 *  ========
136 *  Lawson, C. L., (JPL), Hanson, R. J., (SNLA), 
137 *  Kincaid, D. R., (U. of Texas), Krogh, F. T., (JPL)
138 *
139 *  =====================================================================
140 *
141 *     .. Local Scalars ..
142       INTEGER I,KX,KY,NS
143 *     ..
144 *     .. Intrinsic Functions ..
145       INTRINSIC DBLE
146 *     ..
147       DSDOT = 0.0D0
148       IF (N.LE.0) RETURN
149       IF (INCX.EQ.INCY .AND. INCX.GT.0) THEN
150 *
151 *     Code for equal, positive, non-unit increments.
152 *
153          NS = N*INCX
154          DO I = 1,NS,INCX
155             DSDOT = DSDOT + DBLE(SX(I))*DBLE(SY(I))
156          END DO
157       ELSE
158 *
159 *     Code for unequal or nonpositive increments.
160 *
161          KX = 1
162          KY = 1
163          IF (INCX.LT.0) KX = 1 + (1-N)*INCX
164          IF (INCY.LT.0) KY = 1 + (1-N)*INCY
165          DO I = 1,N
166             DSDOT = DSDOT + DBLE(SX(KX))*DBLE(SY(KY))
167             KX = KX + INCX
168             KY = KY + INCY
169          END DO
170       END IF
171       RETURN
172       END