Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r71560 - in sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas: fusion_runge_kutta fusion_runge_kutta/performance generic_stepper
From: mario.mulansky_at_[hidden]
Date: 2011-04-28 09:38:16


Author: mariomulansky
Date: 2011-04-28 09:38:14 EDT (Thu, 28 Apr 2011)
New Revision: 71560
URL: http://svn.boost.org/trac/boost/changeset/71560

Log:
reorganized generic fusion stepper
performance tests
Added:
   sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/performance/
   sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/performance/Jamfile (contents, props changed)
   sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/performance/generic_rk4.cpp (contents, props changed)
   sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/performance/gsl_rk4.cpp (contents, props changed)
   sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/performance/nr_rk4.cpp (contents, props changed)
   sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/performance/odeint_rk4.cpp (contents, props changed)
   sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/performance/results.dat (contents, props changed)
Text files modified:
   sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/Jamfile | 2
   sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/fusion_algebra.hpp | 4 +-
   sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/fusion_explicit_rk_new.hpp | 47 ++++++++++++++++-----------------------
   sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/test_explicit_rk.cpp | 4 +-
   sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/Jamfile | 2
   sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/fusion_algebra.hpp | 1
   sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/performance.cpp | 2
   sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/performance_fusion.cpp | 3 -
   sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/performance_odeint.cpp | 7 -----
   sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/runge_kutta_stepper_fast.hpp | 8 +++---
   10 files changed, 32 insertions(+), 48 deletions(-)

Modified: sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/Jamfile
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/Jamfile (original)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/Jamfile 2011-04-28 09:38:14 EDT (Thu, 28 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/fusion_runge_kutta/fusion_algebra.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/fusion_algebra.hpp (original)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/fusion_algebra.hpp 2011-04-28 09:38:14 EDT (Thu, 28 Apr 2011)
@@ -38,7 +38,7 @@
 
 /* !!!!!!! Actually, this is factor 3 slower with intel compiler, so we don'y use it !!!!!
  * Update: Current implementation increases performance on msvc 9.0 by about 30%, so it is in use again....
- */
+ *
 
 template<>
 struct fusion_algebra< 1 >
@@ -109,6 +109,6 @@
     }
 
 };
-
+*/
 
 #endif /* FUSION_ALGEBRA_HPP_ */

Modified: sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/fusion_explicit_rk_new.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/fusion_explicit_rk_new.hpp (original)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/fusion_explicit_rk_new.hpp 2011-04-28 09:38:14 EDT (Thu, 28 Apr 2011)
@@ -55,16 +55,16 @@
 template< class T , size_t i , class StageCategory >
 struct stage
 {
- T m_c;
- boost::array< T , i > m_a;
+ T c;
+ boost::array< T , i > a;
     typedef StageCategory category;
 };
 
 template< class T , size_t i>
 struct stage< T , i , last_stage >
 {
- T m_c;
- boost::array< T , i > m_b;
+ T c;
+ boost::array< T , i > b;
     typedef last_stage category;
 };
 
@@ -136,8 +136,8 @@
             void operator()( Index ) const
             {
                 //fusion::at< Index >( m_base ):: = Index::value;
- fusion::at< Index >( m_base ).m_c = m_c[ Index::value ];
- fusion::at< Index >( m_base ).m_a = fusion::at< Index >( m_a );
+ fusion::at< Index >( m_base ).c = m_c[ Index::value ];
+ fusion::at< Index >( m_base ).a = fusion::at< Index >( m_a );
             }
         };
 
@@ -146,8 +146,8 @@
             typedef mpl::range_c< size_t , 0 , stage_count - 1 > indices;
             mpl::for_each< indices >( do_insertion( *this , a , c ) );
             //fusion::at_c< 0 >( fusion::at_c< stage_count - 1 >( *this ) ) = stage_count - 1 ;
- fusion::at_c< stage_count - 1 >( *this ).m_c = c[ stage_count - 1 ];
- fusion::at_c< stage_count - 1 >( *this ).m_b = b;
+ fusion::at_c< stage_count - 1 >( *this ).c = c[ stage_count - 1 ];
+ fusion::at_c< stage_count - 1 >( *this ).b = b;
         }
     };
 
@@ -158,13 +158,13 @@
     {
         System &system;
         state_type &x , &x_tmp;
- state_type *k_vector;
+ state_type *F;
         const double t;
         const double dt;
 
- calculate_stage( System &_system , state_type &_x , state_type &_x_tmp , state_type *_k_vector ,
+ calculate_stage( System &_system , state_type &_x , state_type &_x_tmp , state_type *_F ,
                             const double _t , const double _dt )
- : system( _system ) , x( _x ) , x_tmp( _x_tmp ) , k_vector( _k_vector ) , t( _t ) , dt( _dt )
+ : system( _system ) , x( _x ) , x_tmp( _x_tmp ) , F( _F ) , t( _t ) , dt( _dt )
         {}
 
 
@@ -172,14 +172,12 @@
         void operator()( stage< T , stage_number , intermediate_stage > const &stage ) const
         //typename stage_fusion_wrapper< T , mpl::size_t< stage_number > , intermediate_stage >::type const &stage ) const
         {
- double c = stage.m_c;
-
             if( stage_number == 1 )
- system( x , k_vector[stage_number-1] , t + c * dt );
+ system( x , F[stage_number-1] , t + stage.c * dt );
             else
- system( x_tmp , k_vector[stage_number-1] , t + c * dt );
+ system( x_tmp , F[stage_number-1] , t + stage.c * dt );
 
- fusion_algebra<stage_number>::foreach( x_tmp , x , stage.m_a , k_vector , dt);
+ fusion_algebra<stage_number>::foreach( x_tmp , x , stage.a , F , dt);
         }
 
 
@@ -187,22 +185,17 @@
         void operator()( stage< T , stage_number , last_stage > const &stage ) const
         //void operator()( typename stage_fusion_wrapper< T , mpl::size_t< stage_number > , last_stage >::type const &stage ) const
         {
- double c = stage.m_c;
-
             if( stage_number == 1 )
- system( x , k_vector[stage_number-1] , t + c * dt );
+ system( x , F[stage_number-1] , t + stage.c * dt );
             else
- system( x_tmp , k_vector[stage_number-1] , t + c * dt );
+ system( x_tmp , F[stage_number-1] , t + stage.c * dt );
 
- fusion_algebra<stage_number>::foreach( x , x , stage.m_b , k_vector , dt);
+ fusion_algebra<stage_number>::foreach( x , x , stage.b , F , dt);
         }
 
 
     };
 
-
-
-
 public:
 
     explicit_rk( const coef_a_type &a ,
@@ -217,10 +210,9 @@
     template< class System >
     void do_step( System &system , state_type &x , double t , const double dt )
     {
- fusion::for_each( m_stages , calculate_stage< System >( system , x , m_x_tmp , m_k_vector , t , dt ) );
+ fusion::for_each( m_stages , calculate_stage< System >( system , x , m_x_tmp , m_F , t , dt ) );
     }
 
-
 private:
 
     const coef_a_type m_a;
@@ -228,8 +220,7 @@
     const coef_c_type m_c;
     const stage_vector m_stages;
     state_type m_x_tmp;
- state_type m_k_vector[stage_count];
+ state_type m_F[stage_count];
 };
 
-
 #endif /* FUSION_EXPLICIT_RK_HPP_ */

Added: sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/performance/Jamfile
==============================================================================
--- (empty file)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/performance/Jamfile 2011-04-28 09:38:14 EDT (Thu, 28 Apr 2011)
@@ -0,0 +1,35 @@
+# (C) Copyright 2010 : Karsten Ahnert, Mario Mulansky
+# 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)
+
+import os ;
+import modules ;
+import path ;
+
+path-constant CHRONO_ROOT : [ os.environ CHRONO_ROOT ] ;
+
+project
+ : requirements
+ <define>BOOST_ALL_NO_LIB=1
+ <include>../../../../../..
+ <include>$(CHRONO_ROOT)
+ ;
+
+exe generic_rk4
+ : generic_rk4.cpp
+ ;
+
+exe odeint_rk4
+ : odeint_rk4.cpp
+ ;
+
+exe nr_rk4
+ : nr_rk4.cpp
+ ;
+
+lib libgsl : : <name>gsl ;
+lib libgslcblas : : <name>gslcblas ;
+
+exe gsl_rk4
+ : gsl_rk4.cpp libgsl libgslcblas
+ ;
\ No newline at end of file

Added: sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/performance/generic_rk4.cpp
==============================================================================
--- (empty file)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/performance/generic_rk4.cpp 2011-04-28 09:38:14 EDT (Thu, 28 Apr 2011)
@@ -0,0 +1,97 @@
+/*
+ * generic_rk4.cpp
+ *
+ * Created on: Apr 28, 2011
+ * Author: mario
+ */
+
+#include <iostream>
+#include <fstream>
+
+#include <boost/array.hpp>
+
+#include <boost/accumulators/accumulators.hpp>
+#include <boost/accumulators/statistics.hpp>
+#include <boost/timer.hpp>
+
+//#include "fusion_explicit_rk.hpp"
+#include "../fusion_explicit_rk_new.hpp"
+
+#define tab "\t"
+
+using namespace std;
+using namespace boost::accumulators;
+
+typedef accumulator_set<
+ double , stats< tag::mean , tag::variance >
+ > accumulator_type;
+
+ostream& operator<<( ostream& out , accumulator_type &acc )
+{
+ out << boost::accumulators::mean( acc ) << tab;
+// out << boost::accumulators::variance( acc ) << tab;
+ return out;
+}
+
+typedef boost::timer timer_type;
+
+
+typedef boost::array< double , 3 > state_type;
+typedef explicit_rk< state_type , 4 > rk4_fusion_type;
+
+
+void lorenz( const state_type &x , state_type &dxdt , double t )
+{
+ const double sigma = 10.0;
+ const double R = 28.0;
+ const double b = 8.0 / 3.0;
+ dxdt[0] = sigma * ( x[1] - x[0] );
+ dxdt[1] = R * x[0] - x[1] - x[0] * x[2];
+ dxdt[2] = x[0]*x[1] - b * x[2];
+}
+
+
+
+
+int main( int argc , char **argv )
+{
+ typedef rk4_fusion_type::coef_a_type coef_a_type;
+ typedef rk4_fusion_type::coef_b_type coef_b_type;
+ typedef rk4_fusion_type::coef_c_type coef_c_type;
+
+ const boost::array< double , 1 > a1 = {{ 0.5 }};
+ const boost::array< double , 2 > a2 = {{ 0.0 , 0.5 }};
+ const boost::array< double , 3 > a3 = {{ 0.0 , 0.0 , 1.0 }};
+
+ const coef_a_type a = fusion::make_vector( a1 , a2 , a3 );
+ const coef_b_type b = {{ 1.0/6 , 1.0/3 , 1.0/3 , 1.0/6 }};
+ const coef_c_type c = {{ 0.0 , 0.5 , 0.5 , 1.0 }};
+
+ rk4_fusion_type rk4_fusion( a , b , c );
+
+ const size_t num_of_steps = 20000000;
+ const double dt = 1E-10;
+
+ accumulator_type acc;
+ timer_type timer;
+
+ srand( 12312354 );
+
+ while( true )
+ {
+ state_type x = {{ 10.0 * rand()/RAND_MAX , 10.0 * rand()/RAND_MAX , 10.0 * rand()/RAND_MAX }};
+ //state_type x = {{ 10.0 , 1.0 , 5.0 }};
+ double t = 0.0;
+
+ timer.restart();
+ for( size_t i=0 ; i<num_of_steps ; ++i, t+=dt )
+ rk4_fusion.do_step( lorenz , x , t , dt );
+ acc( timer.elapsed() );
+
+ clog.precision( 3 );
+ clog.width( 5 );
+ clog << acc << " " << x[0] << endl;
+ }
+
+ return 0;
+}

Added: sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/performance/gsl_rk4.cpp
==============================================================================
--- (empty file)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/performance/gsl_rk4.cpp 2011-04-28 09:38:14 EDT (Thu, 28 Apr 2011)
@@ -0,0 +1,84 @@
+/*
+ * gsl_rk4.cpp
+ *
+ * Created on: Apr 28, 2011
+ * Author: mario
+ */
+
+#include <iostream>
+
+#include <boost/accumulators/accumulators.hpp>
+#include <boost/accumulators/statistics.hpp>
+#include <boost/timer.hpp>
+
+#include <gsl/gsl_matrix.h>
+#include <gsl/gsl_odeiv.h>
+
+#define tab "\t"
+
+using namespace std;
+using namespace boost::accumulators;
+
+typedef accumulator_set<
+ double , stats< tag::mean , tag::variance >
+ > accumulator_type;
+
+ostream& operator<<( ostream& out , accumulator_type &acc )
+{
+ out << boost::accumulators::mean( acc ) << tab;
+// out << boost::accumulators::variance( acc ) << tab;
+ return out;
+}
+
+typedef boost::timer timer_type;
+
+
+int lorenz_gsl( double t , const double y[] , double f[] , void *params)
+{
+ const double sigma = 10.0;
+ const double R = 28.0;
+ const double b = 8.0 / 3.0;
+
+ f[0] = sigma * ( y[1] - y[0] );
+ f[1] = R * y[0] - y[1] - y[0] * y[2];
+ f[2] = y[0]*y[1] - b * y[2];
+ return GSL_SUCCESS;
+}
+
+
+int main()
+{
+ const size_t num_of_steps = 20000000 / 3 ; // gsl rk4 routine makes error control by
+ // additional doing two steps with half step size
+ const double dt = 1E-10 * 3 ; // so it actually does 3 * num_of_steps steps
+
+ accumulator_type acc;
+ timer_type timer;
+
+ srand( 12312354 );
+
+ gsl_odeiv_step *s = gsl_odeiv_step_alloc( gsl_odeiv_step_rk4 , 3);
+ gsl_odeiv_system sys = { lorenz_gsl , 0 , 3 , 0 };
+
+ while( true )
+ {
+ double x[3] = { 10.0 * rand()/RAND_MAX ,
+ 10.0 * rand()/RAND_MAX ,
+ 10.0 * rand()/RAND_MAX };
+ double x_err[3];
+
+ double t = 0.0;
+
+ timer.restart();
+ for( size_t i=0 ; i<num_of_steps ; ++i, t+=dt )
+ gsl_odeiv_step_apply ( s , t , dt , x , x_err , 0 , 0 , &sys );
+ acc( timer.elapsed() );
+
+ clog.precision( 3 );
+ clog.width( 5 );
+ clog << acc << " " << x[0] << endl;
+ }
+
+ return 0;
+
+}

Added: sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/performance/nr_rk4.cpp
==============================================================================
--- (empty file)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/performance/nr_rk4.cpp 2011-04-28 09:38:14 EDT (Thu, 28 Apr 2011)
@@ -0,0 +1,107 @@
+/*
+ * nr_rk4.cpp
+ *
+ * Created on: Apr 28, 2011
+ * Author: mario
+ */
+
+#include <iostream>
+#include <fstream>
+
+#include <boost/array.hpp>
+
+#include <boost/numeric/odeint/stepper/explicit_rk4.hpp>
+#include <boost/accumulators/accumulators.hpp>
+#include <boost/accumulators/statistics.hpp>
+#include <boost/timer.hpp>
+
+#define tab "\t"
+
+using namespace std;
+using namespace boost::accumulators;
+
+typedef accumulator_set<
+ double , stats< tag::mean , tag::variance >
+ > accumulator_type;
+
+ostream& operator<<( ostream& out , accumulator_type &acc )
+{
+ out << boost::accumulators::mean( acc ) << tab;
+// out << boost::accumulators::variance( acc ) << tab;
+ return out;
+}
+
+typedef boost::timer timer_type;
+
+
+typedef boost::array< double , 3 > state_type;
+
+void lorenz( const state_type &x , state_type &dxdt , double t )
+{
+ const double sigma = 10.0;
+ const double R = 28.0;
+ const double b = 8.0 / 3.0;
+ dxdt[0] = sigma * ( x[1] - x[0] );
+ dxdt[1] = R * x[0] - x[1] - x[0] * x[2];
+ dxdt[2] = x[0]*x[1] - b * x[2];
+}
+
+
+template< class System , typename T , size_t dim >
+void rk4_step( System &sys , boost::array< T , dim > &x , const double t , const double dt )
+{ // fast rk4 implementation adapted from the book 'Numerical Recipes'
+ size_t i;
+ const double hh = dt*0.5;
+ const double h6 = dt/6.0;
+ const double th = t+hh;
+ boost::array< T , dim > dydx , dym , dyt , yt;
+
+ sys( x , dydx , t );
+
+ for( i=0 ; i<dim ; i++ )
+ yt[i] = x[i] + hh*dydx[i];
+
+ sys( yt , dyt , th );
+ for( i=0 ; i<dim ; i++ )
+ yt[i] = x[i] + hh*dyt[i];
+
+ sys( yt , dym , th );
+ for( i=0 ; i<dim ; i++ ) {
+ yt[i] = x[i] + dt*dym[i];
+ dym[i] += dyt[i];
+ }
+ sys( yt , dyt , t+dt );
+ for( i=0 ; i<dim ; i++ )
+ x[i] += h6*( dydx[i] + dyt[i] + 2.0*dym[i] );
+}
+
+
+int main( int argc , char **argv )
+{
+ const size_t num_of_steps = 20000000;
+ const double dt = 1E-10;
+
+ accumulator_type acc;
+ timer_type timer;
+
+ srand( 12312354 );
+
+ while( true )
+ {
+ state_type x = {{ 10.0 * rand()/RAND_MAX ,
+ 10.0 * rand()/RAND_MAX ,
+ 10.0 * rand()/RAND_MAX }};
+ double t = 0.0;
+
+ timer.restart();
+ for( size_t i=0 ; i<num_of_steps ; ++i, t+=dt )
+ rk4_step( lorenz , x , t , dt );
+ acc( timer.elapsed() );
+
+ clog.precision( 3 );
+ clog.width( 5 );
+ clog << acc << " " << x[0] << endl;
+ }
+
+ return 0;
+}

Added: sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/performance/odeint_rk4.cpp
==============================================================================
--- (empty file)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/performance/odeint_rk4.cpp 2011-04-28 09:38:14 EDT (Thu, 28 Apr 2011)
@@ -0,0 +1,87 @@
+/*
+ * odeint_rk4.cpp
+ *
+ * Created on: Apr 28, 2011
+ * Author: mario
+ */
+
+#include <iostream>
+#include <fstream>
+
+#include <boost/array.hpp>
+
+#include <boost/numeric/odeint/stepper/explicit_rk4.hpp>
+#include <boost/numeric/odeint/algebra/array_algebra.hpp>
+#include <boost/accumulators/accumulators.hpp>
+#include <boost/accumulators/statistics.hpp>
+#include <boost/timer.hpp>
+
+#define tab "\t"
+
+using namespace std;
+using namespace boost::accumulators;
+
+typedef accumulator_set<
+ double , stats< tag::mean , tag::variance >
+ > accumulator_type;
+
+ostream& operator<<( ostream& out , accumulator_type &acc )
+{
+ out << boost::accumulators::mean( acc ) << tab;
+// out << boost::accumulators::variance( acc ) << tab;
+ return out;
+}
+
+typedef boost::timer timer_type;
+
+
+typedef boost::array< double , 3 > state_type;
+//typedef boost::numeric::odeint::explicit_rk4< state_type > rk4_odeint_type;
+typedef boost::numeric::odeint::explicit_rk4< state_type , double , state_type , double ,
+ boost::numeric::odeint::array_algebra > rk4_odeint_type;
+
+
+void lorenz( const state_type &x , state_type &dxdt , double t )
+{
+ const double sigma = 10.0;
+ const double R = 28.0;
+ const double b = 8.0 / 3.0;
+ dxdt[0] = sigma * ( x[1] - x[0] );
+ dxdt[1] = R * x[0] - x[1] - x[0] * x[2];
+ dxdt[2] = x[0]*x[1] - b * x[2];
+}
+
+
+
+
+int main( int argc , char **argv )
+{
+ rk4_odeint_type rk4_odeint;
+
+ const size_t num_of_steps = 20000000;
+ const double dt = 1E-10;
+
+ accumulator_type acc;
+ timer_type timer;
+
+ srand( 12312354 );
+
+ while( true )
+ {
+ state_type x = {{ 10.0 * rand()/RAND_MAX ,
+ 10.0 * rand()/RAND_MAX ,
+ 10.0 * rand()/RAND_MAX }};
+ double t = 0.0;
+
+ timer.restart();
+ for( size_t i=0 ; i<num_of_steps ; ++i, t+=dt )
+ rk4_odeint.do_step( lorenz , x , t , dt );
+ acc( timer.elapsed() );
+
+ clog.precision( 3 );
+ clog.width( 5 );
+ clog << acc << " " << x[0] << endl;
+ }
+
+ return 0;
+}

Added: sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/performance/results.dat
==============================================================================
--- (empty file)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/performance/results.dat 2011-04-28 09:38:14 EDT (Thu, 28 Apr 2011)
@@ -0,0 +1,8 @@
+Results for Runge-Kutta 4 with different implementations and compilers
+
+ | odeint | generic | nr | gsl |
+-------------------------------------------------------------
+gcc 4.5.0 | 0.79 | 0.80 | 0.82 | 1.11 | Corei7 870 @ 2.93 GHz
+gcc 4.3.2 | 1.00 | 1.07 | 0.97 | 2.03 | Core2Quad Q9550 @ 2.83 GHz
+icc 12.0.2 | 0.95 | 0.87 | 1.09 | 1.12 | Corei7 870 @ 2.93 GHz
+icc 11.1 | 1.11 | 0.98 | 1.19 | 1.28 | Xeon X5650 @ 2.67 GHz
\ No newline at end of file

Modified: sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/test_explicit_rk.cpp
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/test_explicit_rk.cpp (original)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/fusion_runge_kutta/test_explicit_rk.cpp 2011-04-28 09:38:14 EDT (Thu, 28 Apr 2011)
@@ -14,8 +14,8 @@
 #include <boost/accumulators/statistics.hpp>
 #include <boost/timer.hpp>
 
-#include "fusion_explicit_rk.hpp"
-//#include "fusion_explicit_rk_new.hpp"
+//#include "fusion_explicit_rk.hpp"
+#include "fusion_explicit_rk_new.hpp"
 
 #define tab "\t"
 

Modified: sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/Jamfile
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/Jamfile (original)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/Jamfile 2011-04-28 09:38:14 EDT (Thu, 28 Apr 2011)
@@ -6,7 +6,7 @@
 import modules ;
 import path ;
 
-#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/generic_stepper/fusion_algebra.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/fusion_algebra.hpp (original)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/fusion_algebra.hpp 2011-04-28 09:38:14 EDT (Thu, 28 Apr 2011)
@@ -29,6 +29,7 @@
 
 };
 
+
 template<>
 struct fusion_algebra< 1 >
 {

Modified: sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/performance.cpp
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/performance.cpp (original)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/performance.cpp 2011-04-28 09:38:14 EDT (Thu, 28 Apr 2011)
@@ -23,7 +23,7 @@
 #include <boost/timer.hpp>
 
 #include "predefined_steppers.hpp"
-#include "runge_kutta_stepper.hpp"
+#include "runge_kutta_stepper_fast.hpp"
 
 #define tab "\t"
 

Modified: sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/performance_fusion.cpp
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/performance_fusion.cpp (original)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/performance_fusion.cpp 2011-04-28 09:38:14 EDT (Thu, 28 Apr 2011)
@@ -21,7 +21,7 @@
 #include <boost/accumulators/statistics.hpp>
 #include <boost/timer.hpp>
 
-#include "runge_kutta_stepper_fast.hpp"
+#include "runge_kutta_stepper.hpp"
 
 #define tab "\t"
 
@@ -58,7 +58,6 @@
 
 
 
-
 int main( int argc , char **argv )
 {
     typedef rk4_fusion_type::coef_a_type coef_a_type;

Modified: sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/performance_odeint.cpp
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/performance_odeint.cpp (original)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/performance_odeint.cpp 2011-04-28 09:38:14 EDT (Thu, 28 Apr 2011)
@@ -5,13 +5,6 @@
  * Author: mario
  */
 
-/*
- * butcher_test.cpp
- *
- * Created on: Nov 5, 2010
- * Author: karsten
- */
-
 #include <iostream>
 #include <fstream>
 

Modified: sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/runge_kutta_stepper_fast.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/runge_kutta_stepper_fast.hpp (original)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/ideas/generic_stepper/runge_kutta_stepper_fast.hpp 2011-04-28 09:38:14 EDT (Thu, 28 Apr 2011)
@@ -135,11 +135,11 @@
         {}
 
 
- template< typename T , size_t stage_number >
+ template< typename T , const size_t stage_number >
         inline void operator()( fusion::vector< size_t , T , boost::array< T , stage_number > , intermediate_stage > const &stage ) const
         //typename stage_fusion_wrapper< T , mpl::size_t< stage_number > , intermediate_stage >::type const &stage ) const
         {
- double c = fusion::at_c< 1 >( stage );
+ const double c = fusion::at_c< 1 >( stage );
 
             if( stage_number == 1 )
                 system( x , k_vector[stage_number-1] , t + c * dt );
@@ -150,11 +150,11 @@
         }
 
 
- template< typename T , size_t stage_number >
+ template< typename T , const size_t stage_number >
         inline void operator()( fusion::vector< size_t , T , boost::array< T , stage_number > , last_stage > const &stage ) const
         //void operator()( typename stage_fusion_wrapper< T , mpl::size_t< stage_number > , last_stage >::type const &stage ) const
         {
- double c = fusion::at_c< 1 >( stage );
+ const double c = fusion::at_c< 1 >( stage );
 
             if( stage_number == 1 )
                 system( x , k_vector[stage_number-1] , t + c * dt );


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