version 1.1, 2010/08/07 13:21:02
|
version 1.12, 2018/05/29 07:19:41
|
Line 1
|
Line 1
|
|
*> \brief \b DSDOT |
|
* |
|
* =========== DOCUMENTATION =========== |
|
* |
|
* Online html documentation available at |
|
* http://www.netlib.org/lapack/explore-html/ |
|
* |
|
* Definition: |
|
* =========== |
|
* |
|
* DOUBLE PRECISION FUNCTION DSDOT(N,SX,INCX,SY,INCY) |
|
* |
|
* .. Scalar Arguments .. |
|
* INTEGER INCX,INCY,N |
|
* .. |
|
* .. Array Arguments .. |
|
* REAL SX(*),SY(*) |
|
* .. |
|
* |
|
* AUTHORS |
|
* ======= |
|
* Lawson, C. L., (JPL), Hanson, R. J., (SNLA), |
|
* Kincaid, D. R., (U. of Texas), Krogh, F. T., (JPL) |
|
* |
|
* |
|
*> \par Purpose: |
|
* ============= |
|
*> |
|
*> \verbatim |
|
*> |
|
*> Compute the inner product of two vectors with extended |
|
*> precision accumulation and result. |
|
*> |
|
*> Returns D.P. dot product accumulated in D.P., for S.P. SX and SY |
|
*> DSDOT = sum for I = 0 to N-1 of SX(LX+I*INCX) * SY(LY+I*INCY), |
|
*> where LX = 1 if INCX .GE. 0, else LX = 1+(1-N)*INCX, and LY is |
|
*> defined in a similar way using INCY. |
|
*> \endverbatim |
|
* |
|
* Arguments: |
|
* ========== |
|
* |
|
*> \param[in] N |
|
*> \verbatim |
|
*> N is INTEGER |
|
*> number of elements in input vector(s) |
|
*> \endverbatim |
|
*> |
|
*> \param[in] SX |
|
*> \verbatim |
|
*> SX is REAL array, dimension(N) |
|
*> single precision vector with N elements |
|
*> \endverbatim |
|
*> |
|
*> \param[in] INCX |
|
*> \verbatim |
|
*> INCX is INTEGER |
|
*> storage spacing between elements of SX |
|
*> \endverbatim |
|
*> |
|
*> \param[in] SY |
|
*> \verbatim |
|
*> SY is REAL array, dimension(N) |
|
*> single precision vector with N elements |
|
*> \endverbatim |
|
*> |
|
*> \param[in] INCY |
|
*> \verbatim |
|
*> INCY is INTEGER |
|
*> storage spacing between elements of SY |
|
*> \endverbatim |
|
*> |
|
*> \result DSDOT |
|
*> \verbatim |
|
*> DSDOT is DOUBLE PRECISION |
|
*> DSDOT double precision dot product (zero if N.LE.0) |
|
*> \endverbatim |
|
* |
|
* Authors: |
|
* ======== |
|
* |
|
*> \author Univ. of Tennessee |
|
*> \author Univ. of California Berkeley |
|
*> \author Univ. of Colorado Denver |
|
*> \author NAG Ltd. |
|
* |
|
*> \date December 2016 |
|
* |
|
*> \ingroup double_blas_level1 |
|
* |
|
*> \par Further Details: |
|
* ===================== |
|
*> |
|
*> \verbatim |
|
*> \endverbatim |
|
* |
|
*> \par References: |
|
* ================ |
|
*> |
|
*> \verbatim |
|
*> |
|
*> |
|
*> C. L. Lawson, R. J. Hanson, D. R. Kincaid and F. T. |
|
*> Krogh, Basic linear algebra subprograms for Fortran |
|
*> usage, Algorithm No. 539, Transactions on Mathematical |
|
*> Software 5, 3 (September 1979), pp. 308-323. |
|
*> |
|
*> REVISION HISTORY (YYMMDD) |
|
*> |
|
*> 791001 DATE WRITTEN |
|
*> 890831 Modified array declarations. (WRB) |
|
*> 890831 REVISION DATE from Version 3.2 |
|
*> 891214 Prologue converted to Version 4.0 format. (BAB) |
|
*> 920310 Corrected definition of LX in DESCRIPTION. (WRB) |
|
*> 920501 Reformatted the REFERENCES section. (WRB) |
|
*> 070118 Reformat to LAPACK style (JL) |
|
*> \endverbatim |
|
*> |
|
* ===================================================================== |
DOUBLE PRECISION FUNCTION DSDOT(N,SX,INCX,SY,INCY) |
DOUBLE PRECISION FUNCTION DSDOT(N,SX,INCX,SY,INCY) |
|
* |
|
* -- Reference BLAS level1 routine (version 3.7.0) -- |
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, -- |
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
|
* December 2016 |
|
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
INTEGER INCX,INCY,N |
INTEGER INCX,INCY,N |
* .. |
* .. |
Line 6
|
Line 131
|
REAL SX(*),SY(*) |
REAL SX(*),SY(*) |
* .. |
* .. |
* |
* |
* AUTHORS |
* Authors: |
* ======= |
* ======== |
* Lawson, C. L., (JPL), Hanson, R. J., (SNLA), |
* Lawson, C. L., (JPL), Hanson, R. J., (SNLA), |
* Kincaid, D. R., (U. of Texas), Krogh, F. T., (JPL) |
* Kincaid, D. R., (U. of Texas), Krogh, F. T., (JPL) |
* |
* |
* Purpose |
|
* ======= |
|
* Compute the inner product of two vectors with extended |
|
* precision accumulation and result. |
|
* |
|
* Returns D.P. dot product accumulated in D.P., for S.P. SX and SY |
|
* DSDOT = sum for I = 0 to N-1 of SX(LX+I*INCX) * SY(LY+I*INCY), |
|
* where LX = 1 if INCX .GE. 0, else LX = 1+(1-N)*INCX, and LY is |
|
* defined in a similar way using INCY. |
|
* |
|
* Arguments |
|
* ========= |
|
* |
|
* N (input) INTEGER |
|
* number of elements in input vector(s) |
|
* |
|
* SX (input) REAL array, dimension(N) |
|
* single precision vector with N elements |
|
* |
|
* INCX (input) INTEGER |
|
* storage spacing between elements of SX |
|
* |
|
* SY (input) REAL array, dimension(N) |
|
* single precision vector with N elements |
|
* |
|
* INCY (input) INTEGER |
|
* storage spacing between elements of SY |
|
* |
|
* DSDOT (output) DOUBLE PRECISION |
|
* DSDOT double precision dot product (zero if N.LE.0) |
|
* |
|
* Further Details |
|
* =============== |
|
* |
|
* REFERENCES |
|
* |
|
* C. L. Lawson, R. J. Hanson, D. R. Kincaid and F. T. |
|
* Krogh, Basic linear algebra subprograms for Fortran |
|
* usage, Algorithm No. 539, Transactions on Mathematical |
|
* Software 5, 3 (September 1979), pp. 308-323. |
|
* |
|
* REVISION HISTORY (YYMMDD) |
|
* |
|
* 791001 DATE WRITTEN |
|
* 890831 Modified array declarations. (WRB) |
|
* 890831 REVISION DATE from Version 3.2 |
|
* 891214 Prologue converted to Version 4.0 format. (BAB) |
|
* 920310 Corrected definition of LX in DESCRIPTION. (WRB) |
|
* 920501 Reformatted the REFERENCES section. (WRB) |
|
* 070118 Reformat to LAPACK style (JL) |
|
* |
|
* ===================================================================== |
* ===================================================================== |
* |
* |
* .. Local Scalars .. |
* .. Local Scalars .. |
Line 72
|
Line 146
|
* .. |
* .. |
DSDOT = 0.0D0 |
DSDOT = 0.0D0 |
IF (N.LE.0) RETURN |
IF (N.LE.0) RETURN |
IF (INCX.EQ.INCY .AND. INCX.GT.0) GO TO 20 |
IF (INCX.EQ.INCY .AND. INCX.GT.0) THEN |
* |
* |
* Code for unequal or nonpositive increments. |
* Code for equal, positive, non-unit increments. |
* |
* |
KX = 1 |
NS = N*INCX |
KY = 1 |
DO I = 1,NS,INCX |
IF (INCX.LT.0) KX = 1 + (1-N)*INCX |
DSDOT = DSDOT + DBLE(SX(I))*DBLE(SY(I)) |
IF (INCY.LT.0) KY = 1 + (1-N)*INCY |
END DO |
DO 10 I = 1,N |
ELSE |
DSDOT = DSDOT + DBLE(SX(KX))*DBLE(SY(KY)) |
|
KX = KX + INCX |
|
KY = KY + INCY |
|
10 CONTINUE |
|
RETURN |
|
* |
* |
* Code for equal, positive, non-unit increments. |
* Code for unequal or nonpositive increments. |
* |
* |
20 NS = N*INCX |
KX = 1 |
DO 30 I = 1,NS,INCX |
KY = 1 |
DSDOT = DSDOT + DBLE(SX(I))*DBLE(SY(I)) |
IF (INCX.LT.0) KX = 1 + (1-N)*INCX |
30 CONTINUE |
IF (INCY.LT.0) KY = 1 + (1-N)*INCY |
|
DO I = 1,N |
|
DSDOT = DSDOT + DBLE(SX(KX))*DBLE(SY(KY)) |
|
KX = KX + INCX |
|
KY = KY + INCY |
|
END DO |
|
END IF |
RETURN |
RETURN |
END |
END |