10 #ifndef EIGEN_SELFADJOINT_PRODUCT_H 11 #define EIGEN_SELFADJOINT_PRODUCT_H 22 template<
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)
30 for (Index i=0; i<size; ++i)
33 += (alpha * cj(vecY[i])) * ConjLhsType(OtherMap(vecX+(UpLo==
Lower ? i : 0),UpLo==
Lower ? size-i : (i+1)));
38 template<
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);
47 template<
typename MatrixType,
typename OtherType,
int UpLo,
bool OtherIsVector = OtherType::IsVectorAtCompileTime>
50 template<
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;
56 typedef typename MatrixType::Index Index;
58 typedef typename OtherBlasTraits::DirectLinearAccessType ActualOtherType;
62 Scalar actualAlpha = alpha * OtherBlasTraits::extractScalarFactor(other.derived());
66 UseOtherDirectly = _ActualOtherType::InnerStrideAtCompileTime==1
71 (UseOtherDirectly ?
const_cast<Scalar*
>(actualOther.data()) : static_other.data()));
78 (!OtherBlasTraits::NeedToConjugate) && NumTraits<Scalar>::IsComplex>
79 ::run(other.size(), mat.data(), mat.outerStride(), actualOtherPtr, actualOtherPtr, actualAlpha);
83 template<
typename MatrixType,
typename OtherType,
int UpLo>
86 static void run(MatrixType& mat,
const OtherType& other,
const typename MatrixType::Scalar& alpha)
88 typedef typename MatrixType::Scalar Scalar;
89 typedef typename MatrixType::Index Index;
91 typedef typename OtherBlasTraits::DirectLinearAccessType ActualOtherType;
95 Scalar actualAlpha = alpha * OtherBlasTraits::extractScalarFactor(other.derived());
101 Scalar, _ActualOtherType::Flags&
RowMajorBit ?
ColMajor :
RowMajor, (!OtherBlasTraits::NeedToConjugate) && NumTraits<Scalar>::IsComplex,
103 ::run(mat.cols(), actualOther.cols(),
104 &actualOther.coeffRef(0,0), actualOther.outerStride(), &actualOther.coeffRef(0,0), actualOther.outerStride(),
105 mat.data(), mat.outerStride(), actualAlpha);
111 template<
typename MatrixType,
unsigned int UpLo>
112 template<
typename DerivedU>
123 #endif // EIGEN_SELFADJOINT_PRODUCT_H
static void run(MatrixType &mat, const OtherType &other, const typename MatrixType::Scalar &alpha)
#define ei_declare_aligned_stack_constructed_variable(TYPE, NAME, SIZE, BUFFER)
A matrix or vector expression mapping an existing array of data.
iterative scaling algorithm to equilibrate rows and column norms in matrices
Holds information about the various numeric (i.e. scalar) types allowed by Eigen. ...
const unsigned int RowMajorBit
internal::traits< SelfAdjointView >::Scalar Scalar
The type of coefficients in this matrix.
static void run(MatrixType &mat, const OtherType &other, const typename MatrixType::Scalar &alpha)
Expression of a selfadjoint matrix from a triangular part of a dense matrix.
static void run(Index size, Scalar *mat, Index stride, const Scalar *vecX, const Scalar *vecY, const Scalar &alpha)
SelfAdjointView & rankUpdate(const MatrixBase< DerivedU > &u, const MatrixBase< DerivedV > &v, const Scalar &alpha=Scalar(1))
static void run(Index size, Scalar *mat, Index stride, const Scalar *vecX, const Scalar *vecY, const Scalar &alpha)
Base class for all dense matrices, vectors, and expressions.