1 #ifndef _theplu_yat_utility_expression_matrix_traits 2 #define _theplu_yat_utility_expression_matrix_traits 26 #include "ScaledMatrix.h" 27 #include "TransposedMatrix.h" 29 #include "yat/utility/BasicMatrix.h" 30 #include "yat/utility/MatrixExpression.h" 32 #include <gsl/gsl_blas_types.h> 33 #include <gsl/gsl_cblas.h> 41 namespace expression {
45 template<
class MATRIX>
49 typedef MATRIX base_type;
50 double factor(
const MATRIX&)
const {
return 1.0; }
51 CBLAS_TRANSPOSE_t transpose_type(
void)
const {
return CblasNoTrans; }
52 const gsl_matrix* get_gsl_matrix_p(
const MATRIX& m)
const 53 {
return m.gsl_matrix_p(); }
67 template<
class Derived>
68 class MatrixTraits<BasicMatrix<MatrixExpression<ScaledMatrix<Derived> > > >
71 typedef BasicMatrix<MatrixExpression<ScaledMatrix<Derived> > > MATRIX;
73 double factor(
const MATRIX& m)
const 75 return static_cast<const ScaledMatrix<Derived>&
>(m).factor() *
76 sub_traits_.factor(base(m));
80 CBLAS_TRANSPOSE_t transpose_type(
void)
const 82 return sub_traits_.transpose_type();
86 const gsl_matrix* get_gsl_matrix_p(
const MATRIX& m)
const 88 return sub_traits_.get_gsl_matrix_p(base(m));
91 const Derived& base(
const MATRIX& m)
const 92 {
return static_cast<const ScaledMatrix<Derived>&
>(m).base(); }
93 MatrixTraits<Derived> sub_traits_;
106 template<
class Derived>
107 class MatrixTraits<BasicMatrix<MatrixExpression<TransposedMatrix<Derived> > > >
110 typedef BasicMatrix<MatrixExpression<TransposedMatrix<Derived> > > MATRIX;
111 double factor(
const MATRIX& m)
const 112 {
return sub_traits_.factor(base(m)); }
115 CBLAS_TRANSPOSE_t transpose_type(
void)
const 117 return sub_traits_.transpose_type() == CblasNoTrans ?
118 CblasTrans : CblasNoTrans;
122 const gsl_matrix* get_gsl_matrix_p(
const MATRIX& m)
const 123 {
return sub_traits_.get_gsl_matrix_p(base(m)); }
126 const Derived& base(
const MATRIX& m)
const 127 {
return static_cast<const TransposedMatrix<Derived>&
>(m).base(); }
128 MatrixTraits<Derived> sub_traits_;
The Department of Theoretical Physics namespace as we define it.