1 #ifndef VIENNACL_LINALG_CIRCULANT_MATRIX_OPERATIONS_HPP_
2 #define VIENNACL_LINALG_CIRCULANT_MATRIX_OPERATIONS_HPP_
48 template<
class SCALARTYPE,
unsigned int ALIGNMENT,
unsigned int VECTOR_ALIGNMENT>
49 vector_expression<const circulant_matrix<SCALARTYPE, ALIGNMENT>,
50 const vector<SCALARTYPE, VECTOR_ALIGNMENT>,
68 template<
class SCALARTYPE,
unsigned int ALIGNMENT,
unsigned int VECTOR_ALIGNMENT>
77 viennacl::op_prod >(mat, vec);
88 template<
class SCALARTYPE,
unsigned int ALIGNMENT,
unsigned int VECTOR_ALIGNMENT>
100 viennacl::detail::fft::real_to_complex(mat.
elements(), circ, mat.
elements().size());
105 viennacl::detail::fft::real_to_complex(vec, tmp, vec.
size());
106 viennacl::linalg::convolve(circ, tmp, tmp2);
107 viennacl::detail::fft::complex_to_real(tmp2, result, vec.
size());
119 template <
typename SCALARTYPE,
unsigned int ALIGNMENT>
120 template <
unsigned int MAT_ALIGNMENT>
124 viennacl::op_prod> & proxy)
127 if (proxy.rhs().handle() == this->
handle())
147 template <
typename SCALARTYPE,
unsigned int ALIGNMENT>
148 template <
unsigned int MAT_ALIGNMENT>
164 template <
typename SCALARTYPE,
unsigned int ALIGNMENT>
165 template <
unsigned int MAT_ALIGNMENT>
183 template <
typename SCALARTYPE,
unsigned int ALIGNMENT>
184 template <
unsigned int MAT_ALIGNMENT>
190 assert(proxy.get_lhs().size1() ==
size());
201 template <
typename SCALARTYPE,
unsigned int ALIGNMENT>
202 template <
unsigned int MAT_ALIGNMENT>
208 assert(proxy.get_lhs().size1() ==
size());
211 result = *
this - result;