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
173