diff --git a/test/triqs/arrays/diagonal_matrix.cpp b/test/triqs/arrays/diagonal_matrix.cpp new file mode 100644 index 00000000..43e4f3d5 --- /dev/null +++ b/test/triqs/arrays/diagonal_matrix.cpp @@ -0,0 +1,71 @@ +/******************************************************************************* + * + * TRIQS: a Toolbox for Research in Interacting Quantum Systems + * + * Copyright (C) 2013 by O. Parcollet + * + * TRIQS is free software: you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later + * version. + * + * TRIQS is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * TRIQS. If not, see . + * + ******************************************************************************/ +#include +#include + +namespace triqs { namespace arrays { + + template class immutable_diagonal_matrix_view : TRIQS_MODEL_CONCEPT(ImmutableMatrix) { + array_view data; + public: + + //immutable_diagonal_matrix_view(size_t i=1) : data ( array(i)) {} + immutable_diagonal_matrix_view(array_view v) : data (v) {} + + // the ImmutableMatrix concept + typedef T value_type; + T operator()(size_t i, size_t j) const { return (i==j ? data(i) : 0);} + + typedef indexmaps::cuboid::domain_t<2> domain_type; + domain_type domain() const { auto s = data.shape()[0]; return mini_vector(s,s);} + + // + friend std::ostream & operator<<(std::ostream & out, immutable_diagonal_matrix_view const & d) { return out<<"diagonal_matrix "< shape() const { auto s = data.shape()[0]; return mini_vector(s,s);} + + }; + +}} + +using namespace triqs::arrays; + +int main(int argc, char **argv) { + + auto a = array { 1,2,3,4}; + + auto d = immutable_diagonal_matrix_view(a); + + std::cout << d<< std::endl; + std::cout << matrix( 2* d) << std::endl; + std::cout << matrix( d * d) << std::endl; + return 0; +} + + + + + diff --git a/test/triqs/arrays/reinterpret_view.cpp b/test/triqs/arrays/reinterpret_view.cpp new file mode 100644 index 00000000..7bfc6abd --- /dev/null +++ b/test/triqs/arrays/reinterpret_view.cpp @@ -0,0 +1,45 @@ +/******************************************************************************* + * + * TRIQS: a Toolbox for Research in Interacting Quantum Systems + * + * Copyright (C) 2011 by O. Parcollet + * + * TRIQS is free software: you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later + * version. + * + * TRIQS is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * TRIQS. If not, see . + * + ******************************************************************************/ + +#include +#include + +namespace triqs { namespace arrays { + + template + array_view reinterpret_array_view (array const & a, I ... index) { + static int constexpr rank = sizeof...(I); + typedef array_view return_t; + return return_t (typename return_t::indexmap_type (mini_vector(index...)) , a.storage()); + } + +}} + +int main(int argc, char **argv) { + triqs::arrays::array A = {1,2,3,4,5,6}; + std::cout << reinterpret_array_view(A, 2,3); + return 0; +} + + + + +