33 #ifndef EIGEN_LLT_LAPACKE_H 34 #define EIGEN_LLT_LAPACKE_H 42 #define EIGEN_LAPACKE_LLT(EIGTYPE, BLASTYPE, LAPACKE_PREFIX) \ 43 template<> struct lapacke_llt<EIGTYPE> \ 45 template<typename MatrixType> \ 46 static inline Index potrf(MatrixType& m, char uplo) \ 48 lapack_int matrix_order; \ 49 lapack_int size, lda, info, StorageOrder; \ 51 eigen_assert(m.rows()==m.cols()); \ 53 size = convert_index<lapack_int>(m.rows()); \ 54 StorageOrder = MatrixType::Flags&RowMajorBit?RowMajor:ColMajor; \ 55 matrix_order = StorageOrder==RowMajor ? LAPACK_ROW_MAJOR : LAPACK_COL_MAJOR; \ 56 a = &(m.coeffRef(0,0)); \ 57 lda = convert_index<lapack_int>(m.outerStride()); \ 59 info = LAPACKE_##LAPACKE_PREFIX##potrf( matrix_order, uplo, size, (BLASTYPE*)a, lda ); \ 60 info = (info==0) ? -1 : info>0 ? info-1 : size; \ 64 template<> struct llt_inplace<EIGTYPE, Lower> \ 66 template<typename MatrixType> \ 67 static Index blocked(MatrixType& m) \ 69 return lapacke_llt<EIGTYPE>::potrf(m, 'L'); \ 71 template<typename MatrixType, typename VectorType> \ 72 static Index rankUpdate(MatrixType& mat, const VectorType& vec, const typename MatrixType::RealScalar& sigma) \ 73 { return Eigen::internal::llt_rank_update_lower(mat, vec, sigma); } \ 75 template<> struct llt_inplace<EIGTYPE, Upper> \ 77 template<typename MatrixType> \ 78 static Index blocked(MatrixType& m) \ 80 return lapacke_llt<EIGTYPE>::potrf(m, 'U'); \ 82 template<typename MatrixType, typename VectorType> \ 83 static Index rankUpdate(MatrixType& mat, const VectorType& vec, const typename MatrixType::RealScalar& sigma) \ 85 Transpose<MatrixType> matt(mat); \ 86 return llt_inplace<EIGTYPE, Lower>::rankUpdate(matt, vec.conjugate(), sigma); \ 99 #endif // EIGEN_LLT_LAPACKE_H #define lapack_complex_float
std::complex< float > scomplex
std::complex< double > dcomplex
#define EIGEN_LAPACKE_LLT(EIGTYPE, BLASTYPE, LAPACKE_PREFIX)
#define lapack_complex_double