$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r70818 - in sandbox/odeint/branches/karsten: boost/numeric/odeint/external/thrust boost/numeric/odeint/integrate boost/numeric/odeint/stepper boost/numeric/odeint/stepper/base libs/numeric/odeint/examples/thrust libs/numeric/odeint/ideas libs/numeric/odeint/ideas/rosenbrock4 libs/numeric/odeint/ideas/units libs/numeric/odeint/test_external/thrust
From: mario.mulansky_at_[hidden]
Date: 2011-04-01 10:33:32
Author: mariomulansky
Date: 2011-04-01 10:33:30 EDT (Fri, 01 Apr 2011)
New Revision: 70818
URL: http://svn.boost.org/trac/boost/changeset/70818
Log:
added routines to thrust algebra and a thrust example
Added:
   sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/thrust/
   sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/thrust/Makefile   (contents, props changed)
   sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/thrust/phase_osc_chain.cu   (contents, props changed)
Text files modified: 
   sandbox/odeint/branches/karsten/boost/numeric/odeint/external/thrust/thrust_algebra.hpp                            |    94 ++++++++++++++++++++++++++++++++++-     
   sandbox/odeint/branches/karsten/boost/numeric/odeint/external/thrust/thrust_operations.hpp                         |   105 +++++++++++++++++++++++++++++++++++++++ 
   sandbox/odeint/branches/karsten/boost/numeric/odeint/integrate/integrate.hpp                                       |     2                                         
   sandbox/odeint/branches/karsten/boost/numeric/odeint/integrate/integrate_const.hpp                                 |     4 +                                       
   sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper/base/explicit_stepper_and_error_stepper_fsal_base.hpp |     2                                         
   sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper/implicit_euler.hpp                                    |     1                                         
   sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/odeint_ref_problem.cpp                                   |     4                                         
   sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/rosenbrock4/Jamfile                                      |     2                                         
   sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/units/Jamfile                                            |     2                                         
   sandbox/odeint/branches/karsten/libs/numeric/odeint/test_external/thrust/Makefile                                  |     2                                         
   10 files changed, 205 insertions(+), 13 deletions(-)
Modified: sandbox/odeint/branches/karsten/boost/numeric/odeint/external/thrust/thrust_algebra.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/external/thrust/thrust_algebra.hpp	(original)
+++ sandbox/odeint/branches/karsten/boost/numeric/odeint/external/thrust/thrust_algebra.hpp	2011-04-01 10:33:30 EDT (Fri, 01 Apr 2011)
@@ -42,8 +42,10 @@
         static void for_each2( StateType1 &s1 , StateType2 &s2 , Operation op )
         {
                 thrust::for_each(
-				thrust::make_zip_iterator( thrust::make_tuple( boost::begin(s1) , boost::begin(s2) ) ) ,
-				thrust::make_zip_iterator( thrust::make_tuple( boost::end(s1) , boost::end(s2) ) ) ,
+				thrust::make_zip_iterator( thrust::make_tuple( boost::begin(s1) ,
+                                                               boost::begin(s2) ) ) ,
+				thrust::make_zip_iterator( thrust::make_tuple( boost::end(s1) ,
+                                                               boost::end(s2) ) ) ,
                                 op);
         }
 
@@ -51,10 +53,94 @@
         static void for_each3( StateType1 &s1 , StateType2 &s2 , StateType3 &s3 , Operation op )
         {
                 thrust::for_each(
-				thrust::make_zip_iterator( thrust::make_tuple( boost::begin(s1) , boost::begin(s2) , boost::begin(s3) ) ) ,
-				thrust::make_zip_iterator( thrust::make_tuple( boost::end(s1) , boost::end(s2) , boost::begin(s3) ) ) ,
+				thrust::make_zip_iterator( thrust::make_tuple( boost::begin(s1) ,
+                                                               boost::begin(s2) ,
+                                                               boost::begin(s3) ) ) ,
+				thrust::make_zip_iterator( thrust::make_tuple( boost::end(s1) ,
+                                                               boost::end(s2) ,
+                                                               boost::end(s3) ) ) ,
                                 op);
         }
+
+	template< class StateType1 , class StateType2 , class StateType3 , class StateType4 ,
+                class Operation >
+    static void for_each4( StateType1 &s1 , StateType2 &s2 , StateType3 &s3 , StateType3 &s4 ,
+                                Operation op )
+    {
+        thrust::for_each(
+                thrust::make_zip_iterator( thrust::make_tuple( boost::begin(s1) ,
+                                                               boost::begin(s2) ,
+                                                               boost::begin(s3) ,
+                                                               boost::begin(s4) ) ) ,
+                thrust::make_zip_iterator( thrust::make_tuple( boost::end(s1) ,
+                                                               boost::end(s2) ,
+                                                               boost::end(s3) ,
+                                                               boost::end(s4) ) ) ,
+                op);
+    }
+
+	template< class StateType1 , class StateType2 , class StateType3 ,
+               class StateType4 , class StateType5 ,class Operation >
+    static void for_each5( StateType1 &s1 , StateType2 &s2 , StateType3 &s3 , StateType4 &s4 ,
+                            StateType5 &s5 , Operation op )
+    {
+        thrust::for_each(
+                thrust::make_zip_iterator( thrust::make_tuple( boost::begin(s1) ,
+                                                               boost::begin(s2) ,
+                                                               boost::begin(s3) ,
+                                                               boost::begin(s4) ,
+                                                               boost::begin(s5) ) ) ,
+                thrust::make_zip_iterator( thrust::make_tuple( boost::end(s1) ,
+                                                               boost::end(s2) ,
+                                                               boost::end(s3) ,
+                                                               boost::end(s4) ,
+                                                               boost::end(s5) ) ) ,
+                op);
+    }
+
+	template< class StateType1 , class StateType2 , class StateType3 ,
+               class StateType4 , class StateType5 , class StateType6 , class Operation >
+    static void for_each6( StateType1 &s1 , StateType2 &s2 , StateType3 &s3 , StateType4 &s4 ,
+                             StateType5 &s5 , StateType6 &s6 , Operation op )
+    {
+        thrust::for_each(
+                thrust::make_zip_iterator( thrust::make_tuple( boost::begin(s1) ,
+                                                               boost::begin(s2) ,
+                                                               boost::begin(s3) ,
+                                                               boost::begin(s4) ,
+                                                               boost::begin(s5) ,
+                                                               boost::begin(s6) ) ) ,
+                thrust::make_zip_iterator( thrust::make_tuple( boost::end(s1) ,
+                                                               boost::end(s2) ,
+                                                               boost::end(s3) ,
+                                                               boost::end(s4) ,
+                                                               boost::end(s5) ,
+                                                               boost::end(s6) ) ) ,
+                op);
+    }
+
+	template< class StateType1 , class StateType2 , class StateType3 , class StateType4 ,
+               class StateType5 , class StateType6 , class StateType7 , class Operation >
+    static void for_each7( StateType1 &s1 , StateType2 &s2 , StateType3 &s3 , StateType4 &s4 ,
+                              StateType5 &s5 , StateType6 &s6 , StateType7 &s7 , Operation op )
+    {
+        thrust::for_each(
+                thrust::make_zip_iterator( thrust::make_tuple( boost::begin(s1) ,
+                                                               boost::begin(s2) ,
+                                                               boost::begin(s3) ,
+                                                               boost::begin(s4) ,
+                                                               boost::begin(s5) ,
+                                                               boost::begin(s6) ,
+                                                               boost::begin(s7) ) ) ,
+                thrust::make_zip_iterator( thrust::make_tuple( boost::end(s1) ,
+                                                               boost::end(s2) ,
+                                                               boost::end(s3) ,
+                                                               boost::end(s4) ,
+                                                               boost::end(s5) ,
+                                                               boost::end(s6) ,
+                                                               boost::end(s7) ) ) ,
+                op);
+    }
 };
 
 
Modified: sandbox/odeint/branches/karsten/boost/numeric/odeint/external/thrust/thrust_operations.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/external/thrust/thrust_operations.hpp	(original)
+++ sandbox/odeint/branches/karsten/boost/numeric/odeint/external/thrust/thrust_operations.hpp	2011-04-01 10:33:30 EDT (Fri, 01 Apr 2011)
@@ -22,13 +22,14 @@
 
 struct thrust_operations
 {
-	template< class Fac1 , class Fac2 >
+	template< class Fac1 = double , class Fac2 = Fac1 >
         struct scale_sum2
         {
                 const Fac1 m_alpha1;
                 const Fac2 m_alpha2;
 
-		scale_sum2( const Fac1 alpha1 , const Fac2 alpha2 ) : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) { }
+		scale_sum2( const Fac1 alpha1 , const Fac2 alpha2 )
+            : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) { }
 
                 template< class Tuple >
                 __host__ __device__
@@ -38,6 +39,106 @@
                 }
         };
 
+	template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac1 >
+    struct scale_sum3
+    {
+        const Fac1 m_alpha1;
+        const Fac2 m_alpha2;
+        const Fac3 m_alpha3;
+
+        scale_sum3( const Fac1 alpha1 , const Fac2 alpha2 , const Fac3 alpha3 )
+            : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) { }
+
+        template< class Tuple >
+        __host__ __device__
+        void operator()( Tuple t ) const
+        {
+            thrust::get<0>(t) = m_alpha1 * thrust::get<1>(t) +
+                                m_alpha2 * thrust::get<2>(t) +
+                                m_alpha3 * thrust::get<3>(t);
+        }
+    };
+
+
+	template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac1 , class Fac4 = Fac1 >
+    struct scale_sum4
+    {
+        const Fac1 m_alpha1;
+        const Fac2 m_alpha2;
+        const Fac3 m_alpha3;
+        const Fac4 m_alpha4;
+
+        scale_sum4( const Fac1 alpha1 , const Fac2 alpha2 , const Fac3 alpha3 , const Fac4 alpha4 )
+            : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ){ }
+
+        template< class Tuple >
+        __host__ __device__
+        void operator()( Tuple t ) const
+        {
+            thrust::get<0>(t) = m_alpha1 * thrust::get<1>(t) +
+                                m_alpha2 * thrust::get<2>(t) +
+                                m_alpha3 * thrust::get<3>(t) +
+                                m_alpha4 * thrust::get<4>(t);
+        }
+    };
+
+
+    template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac1 ,
+               class Fac4 = Fac1 , class Fac5 = Fac1>
+    struct scale_sum5
+    {
+        const Fac1 m_alpha1;
+        const Fac2 m_alpha2;
+        const Fac3 m_alpha3;
+        const Fac4 m_alpha4;
+        const Fac5 m_alpha5;
+
+        scale_sum5( const Fac1 alpha1 , const Fac2 alpha2 , const Fac3 alpha3 ,
+                     const Fac4 alpha4 , const Fac5 alpha5 )
+            : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) ,
+              m_alpha4( alpha4 ) , m_alpha5( alpha5 ) { }
+
+        template< class Tuple >
+        __host__ __device__
+        void operator()( Tuple t ) const
+        {
+            thrust::get<0>(t) = m_alpha1 * thrust::get<1>(t) +
+                                m_alpha2 * thrust::get<2>(t) +
+                                m_alpha3 * thrust::get<3>(t) +
+                                m_alpha4 * thrust::get<4>(t) +
+                                m_alpha5 * thrust::get<5>(t);
+        }
+    };
+
+
+    template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac1 ,
+               class Fac4 = Fac1 , class Fac5 = Fac1 , class Fac6 = Fac1>
+    struct scale_sum6
+    {
+        const Fac1 m_alpha1;
+        const Fac2 m_alpha2;
+        const Fac3 m_alpha3;
+        const Fac4 m_alpha4;
+        const Fac5 m_alpha5;
+        const Fac6 m_alpha6;
+
+        scale_sum6( const Fac1 alpha1 , const Fac2 alpha2 , const Fac3 alpha3 ,
+                     const Fac4 alpha4 , const Fac5 alpha5 , const Fac6 alpha6 )
+            : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) ,
+              m_alpha4( alpha4 ) , m_alpha5( alpha5 ) , m_alpha6( alpha6 ) { }
+
+        template< class Tuple >
+        __host__ __device__
+        void operator()( Tuple t ) const
+        {
+            thrust::get<0>(t) = m_alpha1 * thrust::get<1>(t) +
+                                m_alpha2 * thrust::get<2>(t) +
+                                m_alpha3 * thrust::get<3>(t) +
+                                m_alpha4 * thrust::get<4>(t) +
+                                m_alpha5 * thrust::get<5>(t) +
+                                m_alpha6 * thrust::get<6>(t);
+        }
+    };
 
 };
 
Modified: sandbox/odeint/branches/karsten/boost/numeric/odeint/integrate/integrate.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/integrate/integrate.hpp	(original)
+++ sandbox/odeint/branches/karsten/boost/numeric/odeint/integrate/integrate.hpp	2011-04-01 10:33:30 EDT (Fri, 01 Apr 2011)
@@ -21,7 +21,7 @@
 #include <boost/numeric/odeint/stepper/explicit_error_rk54_ck.hpp>
 #include <boost/numeric/odeint/stepper/controlled_error_stepper.hpp>
 #include <boost/numeric/odeint/integrate/do_nothing_observer.hpp>
-#include <boost/numeric/odeint/integrate/integrate_const.hpp>
+#include <boost/numeric/odeint/integrate/integrate_adaptive.hpp>
 
 
 
Modified: sandbox/odeint/branches/karsten/boost/numeric/odeint/integrate/integrate_const.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/integrate/integrate_const.hpp	(original)
+++ sandbox/odeint/branches/karsten/boost/numeric/odeint/integrate/integrate_const.hpp	2011-04-01 10:33:30 EDT (Fri, 01 Apr 2011)
@@ -35,6 +35,10 @@
         // we want to get as fast as possible to the end
         if( boost::is_same< do_nothing_observer , Observer >::value )
         {
+	    /**
+	     * ToDo: discuss if it actually makes sense to call integrate_adaptive
+	     * from an integrate_const routine! (mario)
+	     */
                 return detail::integrate_adaptive(
                                 stepper , system , start_state ,
                                 start_time , end_time  , dt ,
Modified: sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper/base/explicit_stepper_and_error_stepper_fsal_base.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper/base/explicit_stepper_and_error_stepper_fsal_base.hpp	(original)
+++ sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper/base/explicit_stepper_and_error_stepper_fsal_base.hpp	2011-04-01 10:33:30 EDT (Fri, 01 Apr 2011)
@@ -105,7 +105,7 @@
     explicit_stepper_and_error_stepper_fsal_base& operator=( const explicit_stepper_and_error_stepper_fsal_base &b )
     {
             boost::numeric::odeint::copy( b.m_dxdt , m_dxdt );
-    	m_first_call( true );
+    	m_first_call = true;
                 return *this;
     }
 
Modified: sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper/implicit_euler.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper/implicit_euler.hpp	(original)
+++ sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper/implicit_euler.hpp	2011-04-01 10:33:30 EDT (Fri, 01 Apr 2011)
@@ -94,6 +94,7 @@
     implicit_euler& operator=( const implicit_euler &euler )
     {
             copy( euler );
+    	return *this;
     }
 
     template< class System >
Added: sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/thrust/Makefile
==============================================================================
--- (empty file)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/thrust/Makefile	2011-04-01 10:33:30 EDT (Fri, 01 Apr 2011)
@@ -0,0 +1,27 @@
+CUDA_ROOT = /usr/local/cuda
+ARCH = sm_13
+
+CC = g++
+CXX = g++
+NVCC = $(CUDA_ROOT)/bin/nvcc
+
+INCLUDES += -I$(BOOST_ROOT) -I$(THRUST_ROOT) -I$(CUDA_ROOT)/include -I../../../../..
+
+NVCCFLAGS = -O3 $(INCLUDES) -arch $(ARCH) --compiler-bindir=/usr/bin/g++
+
+LDLIBS = -lcudart
+LDFLAGS = -L$(CUDA_ROOT)/lib64
+
+%.co : %.cu
+	$(NVCC) $(NVCCFLAGS) -o $@ -c $<
+
+
+all : phase_osc_chain
+
+
+phase_osc_chain : phase_osc_chain.co
+	$(CC) -o phase_osc_chain $(LDFLAGS) $(LDLIBS) phase_osc_chain.co
+phase_osc_chain.co : phase_osc_chain.cu
+
+clean :
+	-rm *~ *.o *.co phase_osc_chain
\ No newline at end of file
Added: sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/thrust/phase_osc_chain.cu
==============================================================================
--- (empty file)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/thrust/phase_osc_chain.cu	2011-04-01 10:33:30 EDT (Fri, 01 Apr 2011)
@@ -0,0 +1,164 @@
+/*
+ * phase_osc_chain.cu
+ *
+ *  Created on: Apr 1, 2011
+ *      Author: mario
+ */
+
+/*
+ * This example shows how to use odeint on CUDA devices with thrust.
+ * Note that we require at least Version 3.2 of the nVidia CUDA SDK
+ * and the thrust library should be installed in the CUDA include
+ * folder.
+ *
+ * As example we use a chain of phase oscillators with nearest neighbour
+ * coupling, as described in:
+ *
+ * Avis H. Cohen, Philip J. Holmes and Richard H. Rand:
+ * JOURNAL OF MATHEMATICAL BIOLOGY Volume 13, Number 3, 345-369,
+ *
+ */
+
+#include <iostream>
+#include <cmath>
+#include <cstdlib>
+#include <ctime>
+
+#include <thrust/device_vector.h>
+
+#include <boost/numeric/odeint.hpp>
+#include <boost/numeric/odeint/external/thrust/thrust_algebra.hpp>
+#include <boost/numeric/odeint/external/thrust/thrust_operations.hpp>
+#include <boost/numeric/odeint/external/thrust/thrust_resize.hpp>
+
+using namespace std;
+
+using namespace boost::numeric::odeint;
+
+//change this to float if your device does not support double computation
+typedef double value_type;
+
+//change this to host_vector< ... > of you want to run on CPU
+typedef thrust::device_vector< value_type > state_type;
+typedef thrust::device_vector< size_t > index_vector_type;
+//typedef thrust::host_vector< value_type > state_type;
+//typedef thrust::host_vector< size_t > index_vector_type;
+
+
+/*
+ * This implements the rhs of the dynamical equation:
+ * \phi'_0 = \omega_0 + sin( \phi_1 - \phi_0 )
+ * \phi'_i  = \omega_i + sin( \phi_i+1 - \phi_i ) + sin( \phi_i - \phi_i-1 )
+ * \phi'_N-1 = \omega_N-1 + sin( \phi_N-1 - \phi_N-2 )
+ */
+class phase_oscillators
+{
+
+public:
+
+    struct sys_functor
+    {
+        template< class Tuple >
+        __host__ __device__
+        void operator()( Tuple t )
+        {
+            const value_type phi = thrust::get<0>(t);
+            const value_type phi_left = thrust::get<1>(t);
+            const value_type phi_right = thrust::get<2>(t);
+            const value_type omega = thrust::get<3>(t);
+            // the dynamical equation
+            thrust::get<4>(t) = omega + sin( phi_right - phi ) + sin( phi - phi_left );
+        }
+    };
+
+    phase_oscillators( state_type &omega )
+        : m_omega( omega ) , m_N( omega.size() ) , m_prev( m_N ) , m_next( m_N )
+    {
+        // build indices pointing to left and right neighbours
+        thrust::counting_iterator<size_t> c( 0 );
+        thrust::copy( c , c+m_N-1 , m_prev.begin()+1 );
+        m_prev[0] = 0; // m_prev = { 0 , 0 , 1 , 2 , 3 , ... , N-1 }
+
+        thrust::copy( c+1 , c+m_N , m_next.begin() );
+        m_next[m_N-1] = m_N-1; // m_next = { 1 , 2 , 3 , ... , N-1 , N-1 }
+
+        /*thrust::copy( m_prev.begin() , m_prev.end() ,
+                    std::ostream_iterator< size_t >(std::cout, " ") );
+        std::cout << std::endl;*/
+    }
+
+
+
+    void operator() ( const state_type &x , state_type &dxdt , const value_type dt )
+    {
+        thrust::for_each(
+                thrust::make_zip_iterator(
+                        thrust::make_tuple(
+                                x.begin() ,
+                                thrust::make_permutation_iterator( x.begin() , m_prev.begin() ) ,
+                                thrust::make_permutation_iterator( x.begin() , m_next.begin() ) ,
+                                m_omega.begin() ,
+                                dxdt.begin()
+                                ) ),
+                thrust::make_zip_iterator(
+                        thrust::make_tuple(
+                                x.end() ,
+                                thrust::make_permutation_iterator( x.begin() , m_prev.end() ) ,
+                                thrust::make_permutation_iterator( x.begin() , m_next.end() ) ,
+                                m_omega.end() ,
+                                dxdt.end()) ) ,
+                sys_functor()
+                );
+    }
+
+private:
+    const state_type &m_omega;
+    const size_t m_N;
+    index_vector_type m_prev;
+    index_vector_type m_next;
+};
+
+
+const size_t N = 16;
+const value_type epsilon = 6.0/(N*N); // should be < 8/N^2 to see phase locking
+
+int main( int arc , char* argv[] )
+{
+    srand( time(NULL) );
+    // create initial conditions on host:
+    vector< value_type > x_host( N );
+    //create omegas on host
+    vector< value_type > omega_host( N );
+    for( size_t i=0 ; i<N ; ++i )
+    {
+        x_host[i] = 2.0*3.14159265*(double)(rand())/RAND_MAX;
+        omega_host[i] = (N-i)*epsilon; // decreasing frequencies
+    }
+
+    //copy to device
+    state_type x = x_host;
+    state_type omega = omega_host;
+
+    //create error stepper
+    explicit_rk4< state_type , value_type , state_type , value_type ,
+                  thrust_algebra , thrust_operations , adjust_size_initially_tag  > stepper;
+
+    phase_oscillators sys( omega );
+
+    value_type t = 0.0;
+    const value_type dt = 0.1;
+    while( t < 10.0 )
+    {
+        stepper.do_step( sys , x , t , dt );
+        t += dt;
+    }
+
+    /**ToDo: use integrate functions, maybe with algebra_dispatcher */
+
+    //perform integration using standard Runge-Kutta-Cash-Carp Stepper and error bounds ~ 1E-6
+    //integrate_const( phase_oscillators(omega) , x , 0.0 , 100.0 , 0.1 );
+
+    thrust::copy( x.begin() , x.end() ,
+            std::ostream_iterator< value_type >(std::cout, " ") );
+    std::cout << std::endl;
+}
Modified: sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/odeint_ref_problem.cpp
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/odeint_ref_problem.cpp	(original)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/odeint_ref_problem.cpp	2011-04-01 10:33:30 EDT (Fri, 01 Apr 2011)
@@ -19,8 +19,8 @@
 #include <boost/timer.hpp>
 
 #include <boost/numeric/odeint.hpp>
-#include <boost/numeric/odeint/detail/iterator_algebra.hpp>
-#include <boost/numeric/odeint/container_traits.hpp>
+//#include <boost/numeric/odeint/algebra/iterator_algebra.hpp>
+//#include <boost/numeric/odeint/container_traits.hpp>
 
 
 #define tab "\t"
Modified: sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/rosenbrock4/Jamfile
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/rosenbrock4/Jamfile	(original)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/rosenbrock4/Jamfile	2011-04-01 10:33:30 EDT (Fri, 01 Apr 2011)
@@ -7,7 +7,7 @@
 import path ; 
 
 path-constant HOME : [ os.environ HOME ] ;
-path-constant CHRONO_ROOT : [ os.environ CHRONO_ROOT ] ;
+#path-constant CHRONO_ROOT : [ os.environ CHRONO_ROOT ] ;
 
 project
     : requirements
Modified: sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/units/Jamfile
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/units/Jamfile	(original)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/units/Jamfile	2011-04-01 10:33:30 EDT (Fri, 01 Apr 2011)
@@ -7,7 +7,7 @@
 import path ; 
 
 path-constant HOME : [ os.environ HOME ] ;
-path-constant CHRONO_ROOT : [ os.environ CHRONO_ROOT ] ;
+#path-constant CHRONO_ROOT : [ os.environ CHRONO_ROOT ] ;
 
 project
     : requirements
Modified: sandbox/odeint/branches/karsten/libs/numeric/odeint/test_external/thrust/Makefile
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/test_external/thrust/Makefile	(original)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/test_external/thrust/Makefile	2011-04-01 10:33:30 EDT (Fri, 01 Apr 2011)
@@ -4,7 +4,7 @@
 CXX = g++
 NVCC = $(CUDA_ROOT)/bin/nvcc
 
-INCLUDES += -I$(BOOST_ROOT) -I$(THRUST_ROOT) -I$(CUDA_ROOT)/include -I../../../..
+INCLUDES += -I$(BOOST_ROOT) -I$(THRUST_ROOT) -I$(CUDA_ROOT)/include -I../../../../..
 
 NVCCFLAGS = -O3 $(INCLUDES) --compiler-bindir=/usr/bin/g++