void copy(viennashe::math::sparse_matrix<NumericT> const & assembled_matrix, viennacl::compressed_matrix<NumericT> & vcl_matrix) { std::size_t nonzeros = assembled_matrix.nnz(); viennacl::backend::typesafe_host_array<unsigned int> row_buffer(vcl_matrix.handle1(), assembled_matrix.size1() + 1); viennacl::backend::typesafe_host_array<unsigned int> col_buffer(vcl_matrix.handle2(), nonzeros); std::vector<NumericT> elements(nonzeros); std::size_t data_index = 0; for (std::size_t i = 0; i != assembled_matrix.size1(); ++i) { typedef typename viennashe::math::sparse_matrix<NumericT>::const_iterator2 AlongRowIterator; typedef typename viennashe::math::sparse_matrix<NumericT>::row_type RowType; row_buffer.set(i, data_index); RowType const & row_i = assembled_matrix.row(i); for (AlongRowIterator col_it = row_i.begin(); col_it != row_i.end(); ++col_it) { col_buffer.set(data_index, col_it->first); elements[data_index] = col_it->second; ++data_index; } } row_buffer.set(assembled_matrix.size1(), data_index); vcl_matrix.set(row_buffer.get(), col_buffer.get(), &elements[0], assembled_matrix.size1(), assembled_matrix.size2(), nonzeros); }