10#ifndef EIGEN_SELFADJOINT_PRODUCT_H
11#define EIGEN_SELFADJOINT_PRODUCT_H
22template<
typename Scalar,
typename Index,
int UpLo,
bool ConjLhs,
bool ConjRhs>
25 static void run(
Index size, Scalar* mat,
Index stride,
const Scalar* vecX,
const Scalar* vecY,
const Scalar& alpha)
33 += (alpha * cj(vecY[i])) * ConjLhsType(OtherMap(vecX+(UpLo==
Lower ? i : 0),UpLo==
Lower ?
size-i : (i+1)));
38template<
typename Scalar,
typename Index,
int UpLo,
bool ConjLhs,
bool ConjRhs>
41 static void run(
Index size, Scalar* mat,
Index stride,
const Scalar* vecX,
const Scalar* vecY,
const Scalar& alpha)
43 selfadjoint_rank1_update<Scalar,Index,ColMajor,UpLo==Lower?Upper:Lower,ConjRhs,ConjLhs>::run(
size,mat,stride,vecY,vecX,alpha);
47template<
typename MatrixType,
typename OtherType,
int UpLo,
bool OtherIsVector = OtherType::IsVectorAtCompileTime>
50template<
typename MatrixType,
typename OtherType,
int UpLo>
53 static void run(MatrixType& mat,
const OtherType& other,
const typename MatrixType::Scalar& alpha)
55 typedef typename MatrixType::Scalar Scalar;
57 typedef typename OtherBlasTraits::DirectLinearAccessType ActualOtherType;
61 Scalar actualAlpha = alpha * OtherBlasTraits::extractScalarFactor(other.derived());
65 UseOtherDirectly = _ActualOtherType::InnerStrideAtCompileTime==1
70 (UseOtherDirectly ?
const_cast<Scalar*
>(actualOther.data()) : static_other.data()));
78 ::run(other.size(), mat.data(), mat.outerStride(), actualOtherPtr, actualOtherPtr, actualAlpha);
82template<
typename MatrixType,
typename OtherType,
int UpLo>
85 static void run(MatrixType& mat,
const OtherType& other,
const typename MatrixType::Scalar& alpha)
87 typedef typename MatrixType::Scalar Scalar;
89 typedef typename OtherBlasTraits::DirectLinearAccessType ActualOtherType;
93 Scalar actualAlpha = alpha * OtherBlasTraits::extractScalarFactor(other.derived());
97 OtherIsRowMajor = _ActualOtherType::Flags&
RowMajorBit ? 1 : 0
101 Index depth = actualOther.cols();
104 MatrixType::MaxColsAtCompileTime, MatrixType::MaxColsAtCompileTime, _ActualOtherType::MaxColsAtCompileTime> BlockingType;
106 BlockingType blocking(
size,
size, depth, 1,
false);
112 IsRowMajor ?
RowMajor :
ColMajor, MatrixType::InnerStrideAtCompileTime, UpLo>
114 actualOther.data(), actualOther.outerStride(), actualOther.data(), actualOther.outerStride(),
115 mat.data(), mat.innerStride(), mat.outerStride(), actualAlpha, blocking);
121template<
typename MatrixType,
unsigned int UpLo>
122template<
typename DerivedU>
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:986
#define ei_declare_aligned_stack_constructed_variable(TYPE, NAME, SIZE, BUFFER)
Definition: Memory.h:768
A matrix or vector expression mapping an existing array of data.
Definition: Map.h:96
Base class for all dense matrices, vectors, and expressions.
Definition: MatrixBase.h:50
EIGEN_DEVICE_FUNC SelfAdjointView & rankUpdate(const MatrixBase< DerivedU > &u, const MatrixBase< DerivedV > &v, const Scalar &alpha=Scalar(1))
Perform a symmetric rank 2 update of the selfadjoint matrix *this: .
internal::traits< SelfAdjointView >::Scalar Scalar
The type of coefficients in this matrix.
Definition: SelfAdjointView.h:61
Definition: GeneralMatrixMatrix.h:248
@ Lower
View matrix as a lower triangular matrix.
Definition: Constants.h:209
@ ColMajor
Storage order is column major (see TopicStorageOrders).
Definition: Constants.h:319
@ RowMajor
Storage order is row major (see TopicStorageOrders).
Definition: Constants.h:321
const unsigned int RowMajorBit
for a matrix, this means that the storage order is row-major.
Definition: Constants.h:66
EIGEN_CONSTEXPR Index size(const T &x)
Definition: Meta.h:479
Namespace containing all symbols from the Eigen library.
Definition: Core:141
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:74
Holds information about the various numeric (i.e.
Definition: NumTraits.h:233
const T type
Definition: Meta.h:214
Definition: BlasUtil.h:403
Definition: ConjHelper.h:44
Definition: GeneralProduct.h:161
Definition: GeneralMatrixMatrixTriangular.h:36
T type
Definition: Meta.h:126
Definition: ForwardDeclarations.h:17
static void run(MatrixType &mat, const OtherType &other, const typename MatrixType::Scalar &alpha)
Definition: SelfadjointProduct.h:85
static void run(MatrixType &mat, const OtherType &other, const typename MatrixType::Scalar &alpha)
Definition: SelfadjointProduct.h:53
Definition: SelfadjointProduct.h:48
static void run(Index size, Scalar *mat, Index stride, const Scalar *vecX, const Scalar *vecY, const Scalar &alpha)
Definition: SelfadjointProduct.h:25
static void run(Index size, Scalar *mat, Index stride, const Scalar *vecX, const Scalar *vecY, const Scalar &alpha)
Definition: SelfadjointProduct.h:41
Definition: GeneralMatrixMatrixTriangular.h:16