33 #ifndef EIGEN_SELFADJOINT_MATRIX_VECTOR_BLAS_H 34 #define EIGEN_SELFADJOINT_MATRIX_VECTOR_BLAS_H 46 template<
typename Scalar,
typename Index,
int StorageOrder,
int UpLo,
bool ConjugateLhs,
bool ConjugateRhs>
50 #define EIGEN_BLAS_SYMV_SPECIALIZE(Scalar) \ 51 template<typename Index, int StorageOrder, int UpLo, bool ConjugateLhs, bool ConjugateRhs> \ 52 struct selfadjoint_matrix_vector_product<Scalar,Index,StorageOrder,UpLo,ConjugateLhs,ConjugateRhs,Specialized> { \ 54 Index size, const Scalar* lhs, Index lhsStride, \ 55 const Scalar* _rhs, Scalar* res, Scalar alpha) { \ 57 IsColMajor = StorageOrder==ColMajor \ 59 if (IsColMajor == ConjugateLhs) {\ 60 selfadjoint_matrix_vector_product<Scalar,Index,StorageOrder,UpLo,ConjugateLhs,ConjugateRhs,BuiltIn>::run( \ 61 size, lhs, lhsStride, _rhs, res, alpha); \ 63 selfadjoint_matrix_vector_product_symv<Scalar,Index,StorageOrder,UpLo,ConjugateLhs,ConjugateRhs>::run( \ 64 size, lhs, lhsStride, _rhs, res, alpha); \ 74 #define EIGEN_BLAS_SYMV_SPECIALIZATION(EIGTYPE,BLASTYPE,BLASFUNC) \ 75 template<typename Index, int StorageOrder, int UpLo, bool ConjugateLhs, bool ConjugateRhs> \ 76 struct selfadjoint_matrix_vector_product_symv<EIGTYPE,Index,StorageOrder,UpLo,ConjugateLhs,ConjugateRhs> \ 78 typedef Matrix<EIGTYPE,Dynamic,1,ColMajor> SYMVVector;\ 81 Index size, const EIGTYPE* lhs, Index lhsStride, \ 82 const EIGTYPE* _rhs, EIGTYPE* res, EIGTYPE alpha) \ 85 IsRowMajor = StorageOrder==RowMajor ? 1 : 0, \ 86 IsLower = UpLo == Lower ? 1 : 0 \ 88 BlasIndex n=convert_index<BlasIndex>(size), lda=convert_index<BlasIndex>(lhsStride), incx=1, incy=1; \ 90 const EIGTYPE *x_ptr; \ 91 char uplo=(IsRowMajor) ? (IsLower ? 'U' : 'L') : (IsLower ? 'L' : 'U'); \ 94 Map<const SYMVVector, 0 > map_x(_rhs,size,1); \ 95 x_tmp=map_x.conjugate(); \ 98 BLASFUNC(&uplo, &n, &numext::real_ref(alpha), (const BLASTYPE*)lhs, &lda, (const BLASTYPE*)x_ptr, &incx, &numext::real_ref(beta), (BLASTYPE*)res, &incy); \ 111 #endif // EIGEN_SELFADJOINT_MATRIX_VECTOR_BLAS_H #define EIGEN_BLAS_SYMV_SPECIALIZATION(EIGTYPE, BLASTYPE, BLASFUNC)
#define EIGEN_BLAS_SYMV_SPECIALIZE(Scalar)
std::complex< float > scomplex
std::complex< double > dcomplex