Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r62031 - in sandbox/numeric_bindings: boost/numeric/bindings/eigen libs/numeric/bindings/umfpack/test
From: thomas.klimpel_at_[hidden]
Date: 2010-05-16 09:43:02


Author: klimpel
Date: 2010-05-16 09:43:01 EDT (Sun, 16 May 2010)
New Revision: 62031
URL: http://svn.boost.org/trac/boost/changeset/62031

Log:
Compressed sparse matrix bindings for eigen.
Added:
   sandbox/numeric_bindings/boost/numeric/bindings/eigen/sparsematrix.hpp (contents, props changed)
Text files modified:
   sandbox/numeric_bindings/libs/numeric/bindings/umfpack/test/umfpack_simple.cc | 11 ++++++++++-
   1 files changed, 10 insertions(+), 1 deletions(-)

Added: sandbox/numeric_bindings/boost/numeric/bindings/eigen/sparsematrix.hpp
==============================================================================
--- (empty file)
+++ sandbox/numeric_bindings/boost/numeric/bindings/eigen/sparsematrix.hpp 2010-05-16 09:43:01 EDT (Sun, 16 May 2010)
@@ -0,0 +1,93 @@
+//
+// Copyright (c) 2009--2010
+// Thomas Klimpel and Rutger ter Borg
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_NUMERIC_BINDINGS_EIGEN_SPARSEMATRIX_HPP
+#define BOOST_NUMERIC_BINDINGS_EIGEN_SPARSEMATRIX_HPP
+
+#include <boost/numeric/bindings/detail/adaptor.hpp>
+#include <boost/numeric/bindings/detail/copy_const.hpp>
+#include <Eigen/Sparse>
+
+namespace boost {
+namespace numeric {
+namespace bindings {
+namespace detail {
+
+template< int Value >
+struct eigen_data_order {
+ typedef typename mpl::if_<
+ mpl::bool_< Value & Eigen::RowMajorBit >,
+ tag::row_major,
+ tag::column_major
+ >::type type;
+};
+
+template< typename T, int Flags, typename Id, typename Enable >
+struct adaptor< Eigen::SparseMatrix< T, Flags >, Id, Enable > {
+
+ typedef typename copy_const< Id, T >::type value_type;
+ typedef typename copy_const<
+ Id,
+ //??? (Sorry, couldn't find it. Maybe fix it later.)
+ std::ptrdiff_t
+ >::type index_type;
+ typedef typename eigen_data_order< Flags >::type data_order;
+ typedef mpl::map<
+ mpl::pair< tag::value_type, value_type >,
+ mpl::pair< tag::index_type, index_type >,
+ mpl::pair< tag::entity, tag::matrix >,
+ mpl::pair< tag::size_type<1>, std::ptrdiff_t >,
+ mpl::pair< tag::size_type<2>, std::ptrdiff_t >,
+ mpl::pair< tag::matrix_type, tag::general >,
+ mpl::pair< tag::data_structure, tag::compressed_sparse >,
+ mpl::pair< tag::data_order, data_order >
+ > property_map;
+
+ BOOST_STATIC_CONSTANT (std::size_t, index_base = 0);
+
+ static std::ptrdiff_t size1( const Id& id ) {
+ return id.rows();
+ }
+
+ static std::ptrdiff_t size2( const Id& id ) {
+ return id.cols();
+ }
+
+ static value_type* begin_value( Id& id ) {
+ return id._valuePtr();
+ }
+
+ static value_type* end_value( Id& id ) {
+ return id._valuePtr() + id.nonZeros();
+ }
+
+ static index_type* begin_compressed_index_major( Id& id ) {
+ return id._outerIndexPtr();
+ }
+
+ static index_type* end_compressed_index_major( Id& id ) {
+ return id._outerIndexPtr() + id.outerSize() + 1;
+ }
+
+ static index_type* begin_index_minor( Id& id ) {
+ return id._innerIndexPtr();
+ }
+
+ static index_type* end_index_minor( Id& id ) {
+ return id._innerIndexPtr() + id.nonZeros();
+ }
+
+};
+
+} // namespace detail
+} // namespace bindings
+} // namespace numeric
+} // namespace boost
+
+#endif

Modified: sandbox/numeric_bindings/libs/numeric/bindings/umfpack/test/umfpack_simple.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/umfpack/test/umfpack_simple.cc (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/umfpack/test/umfpack_simple.cc 2010-05-16 09:43:01 EDT (Sun, 16 May 2010)
@@ -84,6 +84,11 @@
 
 #elif defined(TEST_MATLIB_EIGEN)
 
+#include <boost/numeric/bindings/eigen/sparsematrix.hpp>
+typedef Eigen::SparseMatrix<double> m_t;
+typedef Eigen::RandomSetter<m_t> mi_t;
+#define AA(i,j, val) a(i,j) = val
+
 #endif
 
 typedef boost::numeric::ublas::vector<double> v_t;
@@ -91,7 +96,11 @@
 
 int main() {
 
- m_t A (5,5,12);
+ m_t A (5,5
+#if !defined(TEST_MATLIB_EIGEN)
+ ,12
+#endif
+ );
   v_t B (5), X (5);
 
   {


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk