mirror of
https://github.com/opencv/opencv.git
synced 2025-08-01 10:26:53 +08:00

Added clapack * bring a small subset of Lapack, automatically converted to C, into OpenCV * added missing lsame_ prototype * * small fix in make_clapack script * trying to fix remaining CI problems * fixed character arrays' initializers * get rid of F2C_STR_MAX * * added back single-precision versions for QR, LU and Cholesky decompositions. It adds very little extra overhead. * added stub version of sdesdd. * uncommented calls to all the single-precision Lapack functions from opencv/core/src/hal_internal.cpp. * fixed warning from Visual Studio + cleaned f2c runtime a bit * * regenerated Lapack w/o forward declarations of intrinsic functions (such as sqrt(), r_cnjg() etc.) * at once, trailing whitespaces are removed from the generated sources, just in case * since there is no declarations of intrinsic functions anymore, we could turn some of them into inline functions * trying to eliminate the crash on ARM * fixed API and semantics of s_copy * * CLapack has been tested successfully. It's now time to restore the standard LAPACK detection procedure * removed some more trailing whitespaces * * retained only the essential stuff in CLapack * added checks to lapack calls to gracefully return "not implemented" instead of returning invalid results with "ok" status * disabled warning when building lapack * cmake: update LAPACK detection Co-authored-by: Alexander Alekhin <alexander.a.alekhin@gmail.com>
173 lines
3.6 KiB
C
173 lines
3.6 KiB
C
/* -- translated by f2c (version 20201020 (for_lapack)). -- */
|
|
|
|
#include "f2c.h"
|
|
|
|
//> \brief \b DDOT
|
|
//
|
|
// =========== DOCUMENTATION ===========
|
|
//
|
|
// Online html documentation available at
|
|
// http://www.netlib.org/lapack/explore-html/
|
|
//
|
|
// Definition:
|
|
// ===========
|
|
//
|
|
// DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
|
|
//
|
|
// .. Scalar Arguments ..
|
|
// INTEGER INCX,INCY,N
|
|
// ..
|
|
// .. Array Arguments ..
|
|
// DOUBLE PRECISION DX(*),DY(*)
|
|
// ..
|
|
//
|
|
//
|
|
//> \par Purpose:
|
|
// =============
|
|
//>
|
|
//> \verbatim
|
|
//>
|
|
//> DDOT forms the dot product of two vectors.
|
|
//> uses unrolled loops for increments equal to one.
|
|
//> \endverbatim
|
|
//
|
|
// Arguments:
|
|
// ==========
|
|
//
|
|
//> \param[in] N
|
|
//> \verbatim
|
|
//> N is INTEGER
|
|
//> number of elements in input vector(s)
|
|
//> \endverbatim
|
|
//>
|
|
//> \param[in] DX
|
|
//> \verbatim
|
|
//> DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
|
|
//> \endverbatim
|
|
//>
|
|
//> \param[in] INCX
|
|
//> \verbatim
|
|
//> INCX is INTEGER
|
|
//> storage spacing between elements of DX
|
|
//> \endverbatim
|
|
//>
|
|
//> \param[in] DY
|
|
//> \verbatim
|
|
//> DY is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCY ) )
|
|
//> \endverbatim
|
|
//>
|
|
//> \param[in] INCY
|
|
//> \verbatim
|
|
//> INCY is INTEGER
|
|
//> storage spacing between elements of DY
|
|
//> \endverbatim
|
|
//
|
|
// Authors:
|
|
// ========
|
|
//
|
|
//> \author Univ. of Tennessee
|
|
//> \author Univ. of California Berkeley
|
|
//> \author Univ. of Colorado Denver
|
|
//> \author NAG Ltd.
|
|
//
|
|
//> \date November 2017
|
|
//
|
|
//> \ingroup double_blas_level1
|
|
//
|
|
//> \par Further Details:
|
|
// =====================
|
|
//>
|
|
//> \verbatim
|
|
//>
|
|
//> jack dongarra, linpack, 3/11/78.
|
|
//> modified 12/3/93, array(1) declarations changed to array(*)
|
|
//> \endverbatim
|
|
//>
|
|
// =====================================================================
|
|
double ddot_(int *n, double *dx, int *incx, double *dy, int *incy)
|
|
{
|
|
// System generated locals
|
|
int i__1;
|
|
double ret_val;
|
|
|
|
// Local variables
|
|
int i__, m, ix, iy, mp1;
|
|
double dtemp;
|
|
|
|
//
|
|
// -- Reference BLAS level1 routine (version 3.8.0) --
|
|
// -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
|
// -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
|
// November 2017
|
|
//
|
|
// .. Scalar Arguments ..
|
|
// ..
|
|
// .. Array Arguments ..
|
|
// ..
|
|
//
|
|
// =====================================================================
|
|
//
|
|
// .. Local Scalars ..
|
|
// ..
|
|
// .. Intrinsic Functions ..
|
|
// ..
|
|
// Parameter adjustments
|
|
--dy;
|
|
--dx;
|
|
|
|
// Function Body
|
|
ret_val = 0.;
|
|
dtemp = 0.;
|
|
if (*n <= 0) {
|
|
return ret_val;
|
|
}
|
|
if (*incx == 1 && *incy == 1) {
|
|
//
|
|
// code for both increments equal to 1
|
|
//
|
|
//
|
|
// clean-up loop
|
|
//
|
|
m = *n % 5;
|
|
if (m != 0) {
|
|
i__1 = m;
|
|
for (i__ = 1; i__ <= i__1; ++i__) {
|
|
dtemp += dx[i__] * dy[i__];
|
|
}
|
|
if (*n < 5) {
|
|
ret_val = dtemp;
|
|
return ret_val;
|
|
}
|
|
}
|
|
mp1 = m + 1;
|
|
i__1 = *n;
|
|
for (i__ = mp1; i__ <= i__1; i__ += 5) {
|
|
dtemp = dtemp + dx[i__] * dy[i__] + dx[i__ + 1] * dy[i__ + 1] +
|
|
dx[i__ + 2] * dy[i__ + 2] + dx[i__ + 3] * dy[i__ + 3] +
|
|
dx[i__ + 4] * dy[i__ + 4];
|
|
}
|
|
} else {
|
|
//
|
|
// code for unequal increments or equal increments
|
|
// not equal to 1
|
|
//
|
|
ix = 1;
|
|
iy = 1;
|
|
if (*incx < 0) {
|
|
ix = (-(*n) + 1) * *incx + 1;
|
|
}
|
|
if (*incy < 0) {
|
|
iy = (-(*n) + 1) * *incy + 1;
|
|
}
|
|
i__1 = *n;
|
|
for (i__ = 1; i__ <= i__1; ++i__) {
|
|
dtemp += dx[ix] * dy[iy];
|
|
ix += *incx;
|
|
iy += *incy;
|
|
}
|
|
}
|
|
ret_val = dtemp;
|
|
return ret_val;
|
|
} // ddot_
|
|
|