$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r61797 - in sandbox/odeint/branches/karsten: . boost/numeric boost/numeric/odeint boost/numeric/odeint/concepts boost/numeric/odeint/container_traits boost/numeric/odeint/detail boost/numeric/odeint/integrate_functions boost/numeric/odeint/steppers boost/numeric/odeint/steppers/detail libs/numeric/odeint/examples libs/numeric/odeint/test
From: karsten.ahnert_at_[hidden]
Date: 2010-05-05 15:52:10
Author: karsten
Date: 2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
New Revision: 61797
URL: http://svn.boost.org/trac/boost/changeset/61797
Log:
structurized my branch
Added:
   sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits/
   sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits/container_traits.hpp
      - copied unchanged from r61775, /sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits/container_traits_tr1_array.hpp
      - copied unchanged from r61775, /sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits_tr1_array.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits/container_traits_ublas_matrix.hpp
      - copied unchanged from r61775, /sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits_ublas_matrix.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/integrate_functions/
   sandbox/odeint/branches/karsten/boost/numeric/odeint/integrate_functions.hpp   (contents, props changed)
   sandbox/odeint/branches/karsten/boost/numeric/odeint/integrate_functions/integrator_adaptive_stepsize.hpp
      - copied, changed from r61775, /sandbox/odeint/branches/karsten/boost/numeric/odeint/integrator_adaptive_stepsize.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/integrate_functions/integrator_constant_stepsize.hpp
      - copied, changed from r61775, /sandbox/odeint/branches/karsten/boost/numeric/odeint/integrator_constant_stepsize.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/integrate_functions/observer.hpp
      - copied unchanged from r61775, /sandbox/odeint/branches/karsten/boost/numeric/odeint/observer.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers/
   sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers.hpp   (contents, props changed)
   sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers/controlled_stepper_standard.hpp
      - copied, changed from r61775, /sandbox/odeint/branches/karsten/boost/numeric/odeint/controlled_stepper_standard.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers/detail/
      - copied from r61775, /sandbox/odeint/branches/karsten/boost/numeric/odeint/detail/
   sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers/error_checker_standard.hpp
      - copied unchanged from r61775, /sandbox/odeint/branches/karsten/boost/numeric/odeint/error_checker_standard.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers/hamiltonian_stepper_euler.hpp
      - copied, changed from r61775, /sandbox/odeint/branches/karsten/boost/numeric/odeint/hamiltonian_stepper_euler.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers/stepper_euler.hpp
      - copied, changed from r61775, /sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_euler.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers/stepper_half_step.hpp
      - copied, changed from r61775, /sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_half_step.hpp
   sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/point_type.hpp
      - copied unchanged from r61775, /sandbox/odeint/libs/numeric/odeint/examples/point_type.hpp
Removed:
   sandbox/odeint/branches/karsten/Jamroot
   sandbox/odeint/branches/karsten/boost/numeric/odeint/concepts/
   sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits_blitz_array.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits_mtl4_dense2d.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits_tr1_array.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits_ublas_matrix.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/controlled_stepper_bs.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/controlled_stepper_standard.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/detail/
   sandbox/odeint/branches/karsten/boost/numeric/odeint/error_checker_standard.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/gram_schmitt.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/hamiltonian_stepper_euler.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/hamiltonian_stepper_rk.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/integrator_adaptive_stepsize.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/integrator_constant_stepsize.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/observer.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_base.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_euler.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_half_step.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_midpoint.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_rk4.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_rk4_classical.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_rk5_ck.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_rk78_fehlberg.hpp
   sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_rk_generic.hpp
   sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/dnls.cpp
   sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/harmonic_oscillator.cpp
   sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/lorenz_cmp_rk4_rk_generic.cpp
   sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/lorenz_controlled.cpp
   sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/lorenz_integrate_constant_step.cpp
   sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/lorenz_integrator.cpp
   sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/lorenz_stepper.cpp
   sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/pendulum_vibrating_pivot.cpp
Text files modified: 
   sandbox/odeint/branches/karsten/boost/numeric/odeint.hpp                                                  |    26 ---                                     
   sandbox/odeint/branches/karsten/boost/numeric/odeint/integrate_functions/integrator_adaptive_stepsize.hpp |     7                                         
   sandbox/odeint/branches/karsten/boost/numeric/odeint/integrate_functions/integrator_constant_stepsize.hpp |     2                                         
   sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers/controlled_stepper_standard.hpp             |     6                                         
   sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers/hamiltonian_stepper_euler.hpp               |     6                                         
   sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers/stepper_euler.hpp                           |     9 -                                       
   sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers/stepper_half_step.hpp                       |     3                                         
   sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/Jamfile                                      |    14 -                                       
   sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/doc_integrate.cpp                            |    11                                         
   sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/solar_system.cpp                             |   272 ++++++++++++++++----------------------- 
   sandbox/odeint/branches/karsten/libs/numeric/odeint/test/check_stepper_concepts.cpp                       |    23 +--                                     
   11 files changed, 143 insertions(+), 236 deletions(-)
Deleted: sandbox/odeint/branches/karsten/Jamroot
==============================================================================
--- sandbox/odeint/branches/karsten/Jamroot	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,30 +0,0 @@
-# Copyright 2009 Karsten Ahnert and 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 ; 
-
-project odeint
-   : requirements
-     <include>$BOOST_ROOT ;
-
-build-project libs/numeric/odeint/examples ;
-build-project libs/numeric/odeint/test ;
-# build-project libs/numeric/odeint/doc ;
-
-
-
-path-constant BOOST_ROOT : [ os.environ BOOST_ROOT ] ;
-
-
-###### The following is copied from another sandbox project #####
-###### to get the quickbook and boostbook working ...       #####
-
-local boost-root = [ modules.peek : BOOST_ROOT ] ;
-local explore-header-include = $(top)/../.. ;
-use-project /boost/regex : $(boost-root)/libs/regex/build ;
-
-##################################################################
Modified: sandbox/odeint/branches/karsten/boost/numeric/odeint.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint.hpp	(original)
+++ sandbox/odeint/branches/karsten/boost/numeric/odeint.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
@@ -18,29 +18,7 @@
 #include <boost/config.hpp>
 
 #include <boost/numeric/odeint/container_traits.hpp>
-#include <boost/numeric/odeint/container_traits_tr1_array.hpp>
-
-#include <boost/numeric/odeint/stepper_euler.hpp>
-#include <boost/numeric/odeint/stepper_half_step.hpp>
-#include <boost/numeric/odeint/stepper_rk4.hpp>
-#include <boost/numeric/odeint/stepper_rk4_classical.hpp>
-#include <boost/numeric/odeint/stepper_rk5_ck.hpp>
-//#include <boost/numeric/odeint/stepper_rk_generic.hpp>
-#include <boost/numeric/odeint/stepper_midpoint.hpp>
-#include <boost/numeric/odeint/stepper_rk78_fehlberg.hpp>
-
-#include <boost/numeric/odeint/hamiltonian_stepper_euler.hpp>
-#include <boost/numeric/odeint/hamiltonian_stepper_rk.hpp>
-
-
-#include <boost/numeric/odeint/controlled_stepper_standard.hpp>
-#include <boost/numeric/odeint/controlled_stepper_bs.hpp>
-
-#include <boost/numeric/odeint/error_checker_standard.hpp>
-
-#include <boost/numeric/odeint/integrator_adaptive_stepsize.hpp>
-#include <boost/numeric/odeint/integrator_constant_stepsize.hpp>
-
-#include <boost/numeric/odeint/gram_schmitt.hpp>
+#include <boost/numeric/odeint/steppers.hpp>
+#include <boost/numeric/odeint/integrate_functions.hpp>
 
 #endif // BOOST_NUMERIC_ODEINT_HPP
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,81 +0,0 @@
-/* Boost odeint/container_traits.hpp header file
- 
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- 
- This file includes container_traits functionality for containers
-
- container_traits
-
- 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_ODEINT_CONTAINER_TRAITS_HPP
-#define BOOST_NUMERIC_ODEINT_CONTAINER_TRAITS_HPP
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-    template< class Container >
-    struct container_traits
-    {
-
-	typedef Container container_type;
-
-	typedef typename container_type::value_type value_type;
-	typedef typename container_type::iterator iterator;
-	typedef typename container_type::const_iterator const_iterator;
-
-
-        static void resize( const container_type &x , container_type &dxdt )
-        {
-            dxdt.resize( x.size() );
-        }
-        
-        static bool same_size(
-                const container_type &x1 ,
-                const container_type &x2
-            )
-        {
-            return (x1.size() == x2.size());
-        }
-
-	static void adjust_size(
-                const container_type &x1 ,
-                container_type &x2
-            )
-        {
-	    if( !same_size( x1 , x2 ) ) resize( x1 , x2 );
-	}
-
-	static iterator begin( container_type &x )
-	{
-	    return x.begin();
-	}
-
-	static const_iterator begin( const container_type &x )
-	{
-	    return x.begin();
-	}
-
-	static iterator end( container_type &x )
-	{
-	    return x.end();
-	}
-
-	static const_iterator end( const container_type &x )
-	{
-	    return x.end();
-	}
-    };
-
-
-} // namespace odeint
-} // namespace numeric
-} // namespace boost
-
-
-#endif // BOOST_NUMERIC_ODEINT_CONTAINER_TRAITS_HPP
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits_blitz_array.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits_blitz_array.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,85 +0,0 @@
-/*
- boost header: numeric/odeint/blitz_container_traits.hpp
-
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- Copyright 2009 Andre Bergner
-
- Container traits for blitz::Array.
-
- 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_ODEINT_CONTAINER_TRAITS_BLITZ_ARRAY_HPP_INCLUDED
-#define BOOST_NUMERIC_ODEINT_CONTAINER_TRAITS_BLITZ_ARRAY_HPP_INCLUDED
-
-#include <cstdlib>
-#include "container_traits.hpp"
-#include <blitz/array.h>
-
-#include<iostream>
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-    template< typename T , int n >
-    struct container_traits< blitz::Array< T , n > >
-    {
-
-	typedef blitz::Array< T , n > container_type;
-	typedef T value_type;
-	typedef typename container_type::iterator iterator;
-	typedef typename container_type::const_iterator const_iterator;
-
-
-
-        static void resize( const container_type &x , container_type &dxdt )
-        {
-            //dxdt.resize( x.shape() );
-            dxdt.resizeAndPreserve( x.shape() );
-        }
-        
-        static bool same_size( const container_type &x1 , const container_type &x2 )
-        {
-            for( int d=0; d<x1.dimensions(); d++ )
-                if( x1.extent(d) != x2.extent(d) )
-                    return false;
-            return true;
-        }
-
-	static void adjust_size( const container_type &x1 , container_type &x2 )
-        {
-	    //if( !same_size( x1 , x2 ) ) resize( x1 , x2 );
-            x2.resizeAndPreserve( x1.shape() );
-	}
-
-	static iterator begin( container_type &x )
-	{
-	    return x.begin();
-	}
-
-	static const_iterator begin( const container_type &x )
-	{
-	    return x.begin();
-	}
-
-	static iterator end( container_type &x )
-	{
-	    return x.end();
-	}
-
-	static const_iterator end( const container_type &x )
-	{
-	    return x.end();
-	}
-    };
-
-} // namespace odeint
-} // namespace numeric
-} // namespace boost
-
-
-#endif //BOOST_NUMERIC_ODEINT_CONTAINER_TRAITS_BLITZ_ARRAY_HPP_INCLUDED
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits_mtl4_dense2d.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits_mtl4_dense2d.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,170 +0,0 @@
-/*
- boost header: numeric/odeint/mtl4_dense2d_container_traits.hpp
-
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- Copyright 2009 Andre Bergner
-
- Container traits for mtl4::dense2D matrices
-
- 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_ODEINT_CONTAINER_TRAITS_MTL4_DENSE2D_HPP_INCLUDED
-#define BOOST_NUMERIC_ODEINT_CONTAINER_TRAITS_MTL4_DENSE2D_HPP_INCLUDED
-
-#include <boost/numeric/odeint/container_traits.hpp>
-#include <boost/numeric/mtl/mtl.hpp>
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-    template <typename Value, typename Parameters >
-    struct container_traits< mtl::dense2D< Value , Parameters > >
-    {
-
-        typedef mtl::matrix::dense2D< Value , Parameters > container_type;
-
-        typedef typename container_type::value_type value_type;
-
-        typedef typename mtl::traits::range_generator<
-            mtl::tag::all, container_type >::type cursor;
-        typedef typename mtl::traits::value< container_type >::type value_map;
-        typedef typename mtl::traits::const_value<
-            container_type >::type const_value_map;
-        typedef mtl::utilities::iterator_adaptor<
-            value_map, cursor, value_type > iterator;
-        typedef mtl::utilities::iterator_adaptor<
-            const_value_map, cursor, value_type > const_iterator;
-        
-        static void resize( const container_type &x , container_type &dxdt )
-        {
-            dxdt = container_type( x.num_rows(), x.num_cols() );
-        }
-        
-        static bool same_size(
-            const container_type &x1 ,
-            const container_type &x2
-            )
-        {
-            return ( (x1.num_rows() == x2.num_rows()) && (x1.num_cols() == x2.num_cols()));
-        }
-
-        static void adjust_size(
-                const container_type &x1 ,
-                container_type &x2
-            )
-        {
-            if( !same_size( x1 , x2 ) ) resize( x1 , x2 );
-        }
-
-        static iterator begin( container_type &x )
-        {
-            cursor c = mtl::begin< mtl::tag::all >(x);
-            value_map v(x);
-            return iterator(v, c);
-        }
-
-        static const_iterator begin( const container_type &x )
-        {
-            cursor c = mtl::begin< mtl::tag::all >(x);
-            const_value_map v(x);
-            return const_iterator(v, c);
-        }
-
-        static iterator end( container_type &x )
-        {
-            cursor c = mtl::end< mtl::tag::all >(x);
-            value_map v(x);
-            return iterator(v, c);
-        }
-
-        static const_iterator end( const container_type &x )
-        {
-            cursor c = mtl::end< mtl::tag::all >(x);
-            const_value_map v(x);
-            return const_iterator(v, c);
-        }
-
-    };
-
-
-
-} // namespace odeint
-} // namespace numeric
-} // namespace boost
-
-
-
-/* Template Specialization to provide += operator for iterator return type */
-namespace mtl { namespace utilities { namespace detail {
-
-template <typename Cursor, typename ValueType>
-struct iterator_proxy<typename mtl::traits::value< mtl::matrix::dense2D< ValueType > >::type, Cursor, ValueType>
-{
-    typedef iterator_proxy                    self;
-    typedef typename mtl::traits::value< mtl::matrix::dense2D< ValueType > >::type property_map;
-
-    iterator_proxy(property_map map, Cursor cursor) 
-        : map(map), cursor(cursor) {}
-
-    operator ValueType() const
-    {
-        return static_cast<ValueType>(map(*cursor));
-    }
-
-    self& operator=(ValueType const& value)
-    {
-        map(*cursor, value);
-        return *this;
-    }
-
-    self& operator+=(ValueType const& value)
-    {
-        map( *cursor, value + static_cast<ValueType>(map(*cursor)) );
-        return *this;
-    }
-
-    property_map           map;
-    Cursor                 cursor;
-};
-
-}}} // namespace mtl::utilities::detail
-
-
-// define iterator traits for dense2D iterators
-namespace std {
-
-template < typename Cursor , typename Value , typename Parameters>
-struct iterator_traits< 
-    mtl::utilities::iterator_adaptor< mtl::detail::direct_value< mtl::dense2D< Value , Parameters > >, Cursor, Value >
->
-{
-    typedef Value value_type;
-    typedef int difference_type; // ?
-    typedef Value* pointer;
-    typedef Value& reference;
-    typedef std::random_access_iterator_tag iterator_category;
-};
-
-
-template < typename Cursor , typename Value , typename Parameters>
-struct iterator_traits< 
-    mtl::utilities::iterator_adaptor< mtl::detail::direct_const_value< mtl::dense2D< Value , Parameters > >, Cursor, Value >
->
-{
-    typedef Value value_type;
-    typedef int difference_type; // ?
-    typedef const Value* pointer;
-    typedef const Value& reference;
-    typedef std::random_access_iterator_tag iterator_category;
-};
-
-
-}
-
-
-#endif //BOOST_NUMERIC_ODEINT_CONTAINER_TRAITS_MTL4_DENSE2D_HPP_INCLUDED
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits_tr1_array.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits_tr1_array.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,83 +0,0 @@
-/*
- boost header: numeric/odeint/container_traits_tr1_array.hpp
-
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- Copyright 2009 Andre Bergner
-
- 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_ODEINT_CONTAINER_TRAITS_TR1_ARRAY_HPP_INCLUDED
-#define BOOST_NUMERIC_ODEINT_CONTAINER_TRAITS_TR1_ARRAY_HPP_INCLUDED
-
-#include <tr1/array>
-#include <boost/numeric/odeint/container_traits.hpp>
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-    // Template Specialization for fixed size array - no resizing can happen
-    template< class T , size_t N >
-    struct container_traits< std::tr1::array< T , N > >
-    {
-    public:
-
-	typedef std::tr1::array< T , N > container_type;
-	typedef typename container_type::value_type value_type;
-	typedef typename container_type::iterator iterator;
-	typedef typename container_type::const_iterator const_iterator;
-
-
-        static void resize( const container_type &x , container_type &dxdt )
-        {
-            throw; // should never be called
-        }
-
-        static const bool same_size(
-                const container_type &x1 ,
-                const container_type &x2
-            )
-        {
-            return true; // if this was false, the code wouldn't compile
-        }
-
-        static void adjust_size(
-                const container_type &x1 ,
-                container_type &x2
-            )
-        {
-            if( !same_size( x1 , x2 ) ) throw;
-        }
-
-	static iterator begin( container_type &x )
-	{
-	    return x.begin();
-	}
-
-	static const_iterator begin( const container_type &x )
-	{
-	    return x.begin();
-	}
-
-	static iterator end( container_type &x )
-	{
-	    return x.end();
-	}
-
-	static const_iterator end( const container_type &x )
-	{
-	    return x.end();
-	}
-    };
-
-
-} // namespace odeint
-} // namespace numeric
-} // namespace boost
-
-
-#endif //BOOST_NUMERIC_ODEINT_CONTAINER_TRAITS_TR1_ARRAY_HPP_INCLUDED
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits_ublas_matrix.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/container_traits_ublas_matrix.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,82 +0,0 @@
-/*
- boost header: numeric/odeint/ublas_matrix_container_traits.hpp
-
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- Copyright 2009 Andre Bergner
-
- 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_ODEINT_UBLAS_MATRIX_CONTAINER_TRAITS_HPP_INCLUDED
-#define BOOST_NUMERIC_ODEINT_UBLAS_MATRIX_CONTAINER_TRAITS_HPP_INCLUDED
-
-#include "container_traits.hpp"
-#include <boost/numeric/ublas/matrix.hpp>
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-
-    template<class T, class L, class A>
-    struct container_traits< boost::numeric::ublas::matrix< T , L , A > >
-    {
-
-	typedef boost::numeric::ublas::matrix< T , L , A > container_type;
-	typedef typename container_type::value_type value_type;
-	typedef typename container_type::array_type::iterator iterator;
-	typedef typename container_type::array_type::const_iterator const_iterator;
-
-
-
-        static void resize( const container_type &x , container_type &dxdt )
-        {
-            dxdt.resize( x.size1() , x.size2() );
-        }
-        
-        static bool same_size(
-                const container_type &x1 ,
-                const container_type &x2
-            )
-        {
-            return ( ( x1.size1() == x2.size1() ) && ( x1.size2() == x2.size2() ) );
-        }
-
-        static void adjust_size(
-                const container_type &x1 ,
-                container_type &x2
-            )
-        {
-            if( !same_size( x1 , x2 ) ) resize( x1 , x2 );
-        }
-
-        static iterator begin( container_type &x )
-        {
-            return x.data().begin();
-        }
-
-        static const_iterator begin( const container_type &x )
-        {
-            return x.data().begin();
-        }
-
-        static iterator end( container_type &x )
-        {
-            return x.data().end();
-        }
-        
-        static const_iterator end( const container_type &x )
-        {
-            return x.data().end();
-        }
-    };
-
-} // namespace odeint
-} // namespace numeric
-} // namespace boost
-
-
-#endif //BOOST_NUMERIC_ODEINT_UBLAS_MATRIX_CONTAINER_TRAITS_HPP_INCLUDED
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/controlled_stepper_bs.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/controlled_stepper_bs.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,369 +0,0 @@
-/* Boost odeint/controlled_stepper_bs.hpp header file
- 
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- 
- This file includes the explicit Burlisch Stoer 
- solver for ordinary differential equations.
-
- It solves any ODE dx/dt = f(x,t) via
- x(t+dt) = x(t) + dt*f(x,t)
-
- 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_ODEINT_CONTROLLED_STEPPER_BS_HPP
-#define BOOST_NUMERIC_ODEINT_CONTROLLED_STEPPER_BS_HPP
-
-#include <limits>
-#include <vector>
-
-#include <boost/numeric/odeint/stepper_midpoint.hpp>
-#include <boost/numeric/odeint/error_checker_standard.hpp>
-#include <boost/numeric/odeint/container_traits.hpp>
-
-#include <boost/numeric/odeint/detail/iterator_algebra.hpp>
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-
-    template<
-        class Container ,
-        class Time = double ,
-        class Traits = container_traits< Container >
-        >
-    class controlled_stepper_bs
-    {
-        // provide basic typedefs
-    public:
-
-        typedef unsigned short order_type;
-        typedef Time time_type;
-        typedef Traits traits_type;
-        typedef typename traits_type::container_type container_type;
-        typedef typename traits_type::value_type value_type;
-        typedef typename traits_type::iterator iterator;
-        typedef typename traits_type::const_iterator const_iterator;
-
-
-        
-        // private memebers
-    private:
-
-        stepper_midpoint< container_type, time_type, traits_type > m_stepper_mp;
-        error_checker_standard< container_type, time_type , traits_type > m_error_checker;
-        
-        const unsigned short m_k_max;
-
-        const time_type m_safety1;
-        const time_type m_safety2;
-        const time_type m_max_dt_factor;
-        const time_type m_min_step_scale;
-        const time_type m_max_step_scale;
-
-        bool m_continuous_calls;
-        bool m_decreased_step_during_last_call;
-
-        time_type m_dt_last;
-        time_type m_t_last;
-        time_type m_current_eps;
-
-        unsigned short m_current_k_max;
-        unsigned short m_current_k_opt;
-
-        container_type m_x0;
-        container_type m_xerr;
-        container_type m_x_mp;
-        container_type m_x_scale;
-        container_type m_dxdt;
-
-        typedef std::vector< time_type > value_vector;
-        typedef std::vector< std::vector< time_type > > value_matrix;
-        typedef std::vector< unsigned short > us_vector;
-
-        value_vector m_error; // errors of repeated midpoint steps and extrapolations
-        value_vector m_a; // stores the work (number of f calls) required for the orders
-        value_matrix m_alpha; // stores convergence factor for stepsize adjustment
-        us_vector m_interval_sequence;
-
-        value_vector m_times;
-        std::vector< container_type > m_d;
-        container_type m_c;
-        
-        // public functions
-    public:
-        
-        // constructor
-	controlled_stepper_bs( 
-                time_type abs_err, time_type rel_err, 
-                time_type factor_x, time_type factor_dxdt )
-	    : m_error_checker( abs_err, rel_err, factor_x, factor_dxdt ),
-              m_k_max(8),
-              m_safety1(0.25), m_safety2(0.7),
-              m_max_dt_factor( 0.1 ), m_min_step_scale(5E-5), m_max_step_scale(0.7),
-              m_continuous_calls(false), m_decreased_step_during_last_call( false ),
-              m_dt_last( 1.0E30),
-              m_current_eps( -1.0 )
-        {
-            m_error.resize(m_k_max);
-            m_a.resize(m_k_max+1);
-            m_alpha.resize(m_k_max); // k_max * k_max matrix
-            typename value_matrix::iterator it = m_alpha.begin();
-            while( it != m_alpha.end() )
-                (*it++).resize(m_k_max);
-            m_interval_sequence.resize(m_k_max+1);
-            for( unsigned short i = 1; i <= m_k_max+1; i++ )
-                m_interval_sequence[i-1] = (2*i);
-
-            m_times.resize(m_k_max);
-            m_d.resize(m_k_max);
-        }
-
-
-        void adjust_size( const container_type &x )
-        {
-            traits_type::adjust_size(x, m_xerr);
-            traits_type::adjust_size(x, m_x_mp);
-            traits_type::adjust_size(x, m_x_scale);
-            traits_type::adjust_size(x, m_dxdt);
-            m_stepper_mp.adjust_size( x );
-        }
-
-
-        template< class DynamicalSystem >
-        controlled_step_result try_step(
-                DynamicalSystem &system ,
-                container_type &x ,
-                container_type &dxdt ,
-                time_type &t ,
-                time_type &dt )
-        {
-
-            // get error scale
-            m_error_checker.fill_scale(x, dxdt, dt, m_x_scale);
-
-            //std::clog << " x scale: " << m_x_scale[0] << '\t' << m_x_scale[1] << std::endl;
-
-            m_x0 = x; // save starting state
-            time_type max_eps = m_error_checker.get_epsilon();
-            if( m_current_eps != max_eps ) 
-            { // error changed -> recalculate tableau
-                initialize_step_adjust_tableau( max_eps );
-                m_current_eps = max_eps;
-                m_dt_last = m_t_last = std::numeric_limits< value_type >::max(); // unrealistic
-            }
-            // if t and dt are exactly the parameters from last step we are called continuously
-            bool continuous_call = ((t == m_t_last) || (dt == m_dt_last ));
-            if( !continuous_call ) 
-                m_current_k_opt = m_current_k_max;
-
-            bool converged = false;
-            value_type step_scale = 1.0;
-            unsigned short k_conv = 0;
-            
-            for( unsigned short k=0; k<=m_current_k_max; k++ )
-            {  // loop through interval numbers
-                unsigned short step_number = m_interval_sequence[k];
-                //out-of-place midpoint step
-                m_stepper_mp.set_step_number(step_number);
-                m_stepper_mp.midpoint_step(system, m_x0, dxdt, t, dt, m_x_mp); 
-                //std::clog << "x_mp: " << k << '\t' << m_x_mp[0] << '\t' << m_x_mp[1] << std::endl;
-                time_type t_est = (dt/step_number)*(dt/step_number);
-                extrapolate(k, t_est, m_x_mp, x, m_xerr);
-                //std::clog << "Error: " << k << '\t' << m_xerr[0] << '\t' << m_xerr[1] << std::endl;
-                if( k != 0 ) 
-                {
-                    time_type max_err = m_error_checker.get_max_error_ratio(m_xerr, m_x_scale);
-                    m_error[k-1] = std::pow( max_err/m_safety1, 1.0/(2*k+1) );
-                    if( (k >= m_current_k_opt-1) || !continuous_call )
-                    { //we're in the order window where convergence is expected
-                        if( max_err < 1.0 )
-                        {
-                            k_conv = k;
-                            converged = true;
-                            //std::clog << "Converged at: " << k << '\t' << max_err << std::endl;
-                            break;
-                        } else {
-                            converged = false;
-                            if( (k == m_current_k_max) || (k == m_current_k_opt+1) )
-                            {
-                                step_scale = m_safety2/m_error[k-1];
-                                break;
-                            } else if( (k == m_current_k_opt) && 
-                                       (m_alpha[m_current_k_opt-1][m_current_k_opt] < m_error[k-1] ) )
-                            {
-                                step_scale = static_cast<value_type>(1.0)/m_error[k-1];
-                                break;
-                            } else if( (m_current_k_opt == m_current_k_max) &&
-                                       (m_alpha[k-1][m_current_k_max-1] < m_error[k-1]) )
-                            {
-                                step_scale = m_alpha[k-1][m_current_k_max-1]*m_safety2/m_error[k-1];
-                                //std::clog << " Case 3 " << m_alpha[k-1][m_current_k_max-1] << '\t' << m_error[k-1] << '\t' << step_scale << std::endl;
-                                break;
-                            } else if( m_alpha[k-1][m_current_k_opt] < m_error[k-1] )
-                            {
-                                step_scale = m_alpha[k-1][m_current_k_opt-1]/m_error[k-1];
-                                break;
-                            }
-                        }
-                    }
-                }
-            }
-            if( !converged ) { // dt was too large - no convergence up to order k_max
-
-                // step_scale is always > 1 
-                step_scale = std::max(step_scale, m_min_step_scale); // at least m_min ...
-                step_scale = std::min(step_scale, m_max_step_scale); // at most m_max ...
-                dt *= step_scale;
-                m_dt_last = dt;
-                m_t_last = t;
-                m_decreased_step_during_last_call = true;
-                x = m_x0; // copy the state back
-                return step_size_decreased;
-
-            } else { //converged
-                
-                t += dt; // step accomplished
-
-                time_type work_min = std::numeric_limits< time_type >::max();
-                for( unsigned short k=0; k < k_conv ; k++ )
-                { // compute optimal convergence order and corresponding stepsize
-                    time_type factor = std::max(m_error[k], m_max_dt_factor);
-                    time_type work = factor * m_a[k+1];
-                    if( work < work_min )
-                    {
-                        step_scale = factor;
-                        work_min = work;
-                        m_current_k_opt = k+1;
-                    }
-                }
-                m_dt_last = dt/step_scale;
-
-                //std::clog << "Internal: " << dt << '\t' << k_conv-1 << '\t' << m_current_k_opt << '\t' << m_current_k_max << '\t' << m_decreased_step_during_last_call << std::endl;
-
-                if( (m_current_k_opt >= k_conv) && 
-                    (m_current_k_opt != m_current_k_max) && 
-                    !m_decreased_step_during_last_call )
-                { // check possible order increase, if step was not decreased before
-                    time_type factor = std::max(
-                            step_scale/m_alpha[m_current_k_opt-1][m_current_k_opt],
-                            m_max_dt_factor );
-                    if( m_a[m_current_k_opt+1]*factor <= work_min )
-                    {
-                        m_dt_last = dt/factor;
-                        m_current_k_opt++;
-                    }
-                }
-                dt = m_dt_last;
-                m_t_last = t;
-                m_decreased_step_during_last_call = false;
-                //std::clog << "Internal: " << dt << '\t' << m_current_k_opt << std::endl;
-                return step_size_increased;
-            }
-        }
-        
-        template< class System >
-        controlled_step_result try_step( 
-                System &system,
-                container_type &x,
-                time_type &t,
-                time_type &dt )
-        {
-            system(x, m_dxdt, t);
-            return try_step(system, x, m_dxdt, t, dt );
-        }
-
-
-    private:   // private functions
-
-        void initialize_step_adjust_tableau( time_type eps )
-        {
-            m_a[0] = m_interval_sequence[0]+1;
-            for( unsigned short k=0; k<m_k_max; k++ )
-                m_a[k+1] = m_a[k] + m_interval_sequence[k+1];
-            for( unsigned short i=1; i<m_k_max; i++ )
-            {
-                for( unsigned short k=0; k<i; k++ )
-                {
-                    m_alpha[k][i] = std::pow( 
-                            m_safety1*eps, 
-                            (m_a[k+1]-m_a[i+1])/
-                            ((m_a[i+1]-m_a[0]+1.0)*(2*k+3)) 
-                                              );
-                }
-            }
-            m_current_k_opt = m_k_max-1;
-            for( unsigned short k=1; k<m_k_max-1; k++ )
-            {
-                if( m_a[k+1] > m_a[k]*m_alpha[k-1][k] )
-                {
-                    m_current_k_opt = k;
-                    break;
-                }
-            }
-            m_current_k_max = m_current_k_opt;
-        }
-
-        void extrapolate(
-                unsigned short k_est, 
-                time_type t_est, 
-                container_type &x_est, 
-                container_type &x, 
-                container_type &x_err )
-        {
-            //traits_type::adjust_size(x, m_c);
-            //std::vector< container_type > m_d_iter = m_d.begin();
-            //while( m_d_iter != m_d.end() )
-            //    traits_type::adjust_size(x, (*m_d_iter++));
-            
-            m_times[k_est] = t_est;
-            x_err = x = x_est;
-
-            const iterator x_end = traits_type::end(x);
-
-            if( k_est == 0 )
-            {
-                m_d[0] = x_est;
-            }
-            else 
-            {
-               m_c = x_est;
-               for( unsigned short k=0; k<k_est; k++ )
-               {
-                   value_type delta = static_cast<value_type>(1.0) / 
-                       (m_times[k_est-k-1]-static_cast<value_type>(t_est));
-                   value_type val1 = static_cast<value_type>(t_est)*delta;
-                   value_type val2 = m_times[k_est-k-1]*delta;
-
-                   //std::clog << " values: " << delta << '\t' << val1 << '\t' << val2 << std::endl; 
-
-                   iterator x_iter = traits_type::begin(x);
-                   iterator x_err_iter = traits_type::begin(x_err);
-                   iterator d_k_iter = m_d[k].begin();
-                   iterator c_iter = m_c.begin();
-                   while( x_iter != x_end )
-                   {
-                       //std::clog << " extrapolate: " << '\t' << *x_iter << '\t' << *x_err_iter << '\t' << *d_k_iter << std::endl;
-                       value_type q = *d_k_iter;
-                       *d_k_iter++ = *x_err_iter;
-                       delta = *c_iter - q;
-                       *x_err_iter = val1 * delta;
-                       *c_iter++ = val2 * delta;
-                       *x_iter++ += *x_err_iter++;
-                   }
-                   //std::clog << " extrapolate: " << '\t' << x[1] << '\t' << x_err[1] << '\t' << m_d[k][1] << std::endl;
-                   m_d[k_est] = x_err;
-               }
-            }
-        }
-
-    };
-}
-}
-}
-
-#endif
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/controlled_stepper_standard.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/controlled_stepper_standard.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,212 +0,0 @@
-/* Boost odeint/controlled_stepper_standard.hpp header file
- 
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- 
- This file includes the standard controlled stepper that should be
- used with runge kutta routines.
-
- 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_ODEINT_CONTROLLED_STEPPER_STANDARD_HPP
-#define BOOST_NUMERIC_ODEINT_CONTROLLED_STEPPER_STANDARD_HPP
-
-#include <cmath> // for pow( ) and abs()
-#include <algorithm>
-#include <complex>
-
-#include <boost/numeric/odeint/error_checker_standard.hpp>
-#include <boost/numeric/odeint/container_traits.hpp>
-
-#include <boost/numeric/odeint/detail/iterator_algebra.hpp>
-
-
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-    typedef enum
-    {
-        success ,
-        step_size_decreased ,
-        step_size_increased
-    } controlled_step_result;
-
-
-    /*
-       The initial state is given in x.
-       
-       The stepsize is adjust such that the following maximal relative error is 
-       small enough for each step:
-       R = max( x_err_n / [eps_abs + eps_rel*( a_x * |x_n| + a_dxdt * |dxdt_n| )] )
-       where the max refers to the componentwise maximum the expression.
-       
-       if R > 1.1 the stepsize is decreased:
-       dt = dt*S*R^(-1/(q-1))
-       
-       if R < 0.5 the stepsize is increased:
-       dt = dt*S*R^(-1/q))
-
-       q is the order of the error term provided by the stepper.order_error() function
-       (e.g. 2 for simple euler and 5 for rk5_ck) and S is a safety factor set to 
-       S = 0.9. See e.g. Numerical Recipes for more details on this strategy.
-
-       To avoid extensive chages in dt, the decrease factor is limited to 0.2 and 
-       the increase factor to 5.0.
-    */
-
-    template< class ErrorStepper >
-    class controlled_stepper_standard
-    {
-
-    public:
-
-        // forward types from ErrorStepper
-        typedef ErrorStepper stepper_type;
-        typedef typename stepper_type::order_type order_type;
-        typedef typename stepper_type::container_type container_type;
-        typedef typename stepper_type::time_type time_type;
-        typedef typename stepper_type::traits_type traits_type;
-        typedef typename stepper_type::value_type value_type;
-//        typedef typename stepper_type::iterator iterator;
-//        typedef typename stepper_type::const_iterator const_iterator;
-
-        typedef error_checker_standard<
-            container_type, time_type , traits_type
-            > error_checker_type;
-
-
-        // private members
-    private:
-
-        stepper_type m_stepper;
-        error_checker_type m_error_checker;
-
-	time_type m_eps_abs;
-	time_type m_eps_rel;
-	time_type m_a_x;
-	time_type m_a_dxdt;
-
-	container_type m_dxdt;
-	container_type m_x_tmp;
-	container_type m_x_err;
-        container_type m_x_scale;
-
-
-        // public functions
-    public:
-
-        order_type order_error_step() { return m_stepper.order_error_step(); }
-	
-	controlled_stepper_standard( 
-            time_type abs_err, time_type rel_err, 
-            time_type factor_x, time_type factor_dxdt )
-	    : m_error_checker( abs_err, rel_err, factor_x, factor_dxdt ),
-              m_eps_abs(abs_err),
-              m_eps_rel(rel_err),
-              m_a_x(factor_x),
-              m_a_dxdt(factor_dxdt)
-	{
-        }
-
-        controlled_stepper_standard(
-            const container_type &x ,
-            time_type abs_err, time_type rel_err, 
-            time_type factor_x, time_type factor_dxdt )
-	    : m_error_checker( abs_err, rel_err, factor_x, factor_dxdt ),
-              m_eps_abs(abs_err),
-              m_eps_rel(rel_err),
-              m_a_x(factor_x),
-              m_a_dxdt(factor_dxdt)
-	{
-            adjust_size( x );
-        }
-
-        void adjust_size( const container_type &x )
-        {
-            traits_type::adjust_size( x , m_x_err );
-            traits_type::adjust_size( x , m_x_scale );
-            traits_type::adjust_size( x , m_dxdt );
-            m_stepper.adjust_size( x );
-        }
-
-
-
-
-        /* Tries a controlled step with the given stepsize dt. If dt is too large,
-           x remains unchanged, an appropriate stepsize is assigned to dt and 
-           step_size_decreased is returned. If dt is too small, the small step is 
-           accomplished, a larger stepsize is assigned to dt and step_size_increased
-           is returned. If dt is appropriate, the step is accomplished and success 
-           is returned.
-         */
-	template< class DynamicalSystem >
-	controlled_step_result try_step( 
-                DynamicalSystem &system, 
-                container_type &x, 
-                const container_type &dxdt,
-                time_type &t, 
-                time_type &dt )
-	{
-            m_error_checker.fill_scale( x , dxdt , dt , m_x_scale );
-
-	    m_x_tmp = x;
-	    m_stepper.do_step( system , x , dxdt, t , dt , m_x_err );
-
-            time_type max_rel_err = m_error_checker.get_max_error_ratio(m_x_err, m_x_scale);
-
-	    if( max_rel_err > 1.1 )
-            { 
-                // error too large - decrease dt
-                // limit scaling factor to 0.2
-                dt *= std::max( 0.9 * pow(max_rel_err , -1.0/(m_stepper.order_error()-1.0)),
-                                0.2 );
-
-                // reset state
-                x = m_x_tmp;
-                return step_size_decreased;
-	    }
-            else
-            {
-                if( max_rel_err < 0.5 )
-                {
-                    //error too small - increase dt and keep the evolution
-                    t += dt;
-                    // limit scaling factor to 5.0
-                    dt *= std::min( 0.9*pow(max_rel_err , -1.0/m_stepper.order_error_step()), 5.0 );
-                    return step_size_increased;
-                }
-                else
-                {
-                    t += dt;
-                    return success;
-                }
-            }
-	}
-
-	template< class DynamicalSystem >
-	controlled_step_result try_step( 
-                DynamicalSystem &system, 
-                container_type &x, 
-                time_type &t, 
-                time_type &dt )
-	{
-            system( x , m_dxdt , t );
-            return try_step( system , x , m_dxdt , t , dt );
-        }
-
-    };
-
-        
-            
-
-} // namespace odeint
-} // namespace numeric
-} // namespace boost
-
-
-#endif // BOOST_NUMERIC_ODEINT_STEPSIZE_CONTROLLER_STANDARD_HPP
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/error_checker_standard.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/error_checker_standard.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,95 +0,0 @@
-/* Boost odeint/error_checker_standard.hpp header file
- 
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- 
- This file includes the standard error checker to be used with
- controlled steppers. It's purpose is to provide a method
- that calculates the error ration of a given error-estimation
- with respect to some user defined tolerance.
-
- 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_ODEINT_ERROR_CHECKER_STANDARD_HPP
-#define BOOST_NUMERIC_ODEINT_ERROR_CHECKER_STANDARD_HPP
-
-#include <cmath>
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-    template< class Container, 
-              class Time, 
-              class Traits = container_traits< Container > >
-    class error_checker_standard
-    {
-
-
-    public:
-
-        typedef Time time_type;
-        typedef Traits traits_type;
-        typedef typename traits_type::container_type container_type;
-        typedef typename traits_type::value_type value_type;
-//        typedef typename traits_type::iterator iterator;
-//        typedef typename traits_type::const_iterator const_iterator;
-
-
-    private:
-
-       	time_type m_eps_abs;
-        time_type m_eps_rel;
-        time_type m_a_x;
-        time_type m_a_dxdt;
-
-    public:
-
-        // constructor
-	error_checker_standard( 
-                time_type abs_err, time_type rel_err, 
-                time_type factor_x, time_type factor_dxdt )
-            : m_eps_abs( abs_err ), m_eps_rel( rel_err ),
-              m_a_x( factor_x ), m_a_dxdt( factor_dxdt )
-        {
-        }
-
-
-        void fill_scale( 
-                const container_type &x, 
-                const container_type &dxdt, 
-                time_type dt, 
-                container_type &scale ) const
-        {
-            detail::it_algebra::weighted_scale( traits_type::begin(scale),
-                                                traits_type::end(scale),
-                                                traits_type::begin(x),
-                                                traits_type::begin(dxdt),
-                                                m_eps_abs,
-                                                m_eps_rel,
-                                                m_a_x,
-                                                m_a_x*dt );
-        }
-
-        time_type get_max_error_ratio(
-            const container_type &x_err,
-            const container_type &scale) const
-        {
-            return detail::it_algebra::max_ratio( traits_type::begin(x_err),
-                                                  traits_type::end(x_err),
-                                                  traits_type::begin(scale),
-                                                  static_cast<time_type>(0.0) );
-        }
-
-        const time_type get_epsilon() { return std::max(m_eps_rel, m_eps_abs); }
-    };
-
-}
-}
-}
-
-#endif
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/gram_schmitt.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/gram_schmitt.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,84 +0,0 @@
-/*
- boost header: numeric/odeint/gram_schmitt.hpp
-
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- Copyright 2009 Andre Bergner
-
- 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_ODEINT_GRAM_SCHMITT_HPP_INCLUDED
-#define BOOST_NUMERIC_ODEINT_GRAM_SCHMITT_HPP_INCLUDED
-
-#include <iterator>
-#include <algorithm>
-#include <numeric>
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-    template< class Iterator , class T >
-    void normalize( Iterator first , Iterator last , T norm )
-    {
-	while( first != last ) *first++ /= norm;
-    }
-
-    template< class Iterator , class T >
-    void substract_vector( Iterator first1 , Iterator last1 ,
-			   Iterator first2 , T val )
-    {
-	while( first1 != last1 )
-	    *first1++ -= val * *first2++;
-    }
-
-    template< class StateType , class LyapType >
-    void gram_schmitt( StateType &x , LyapType &lyap ,
-		       size_t n , size_t num_of_lyap )
-    {
-	if( !num_of_lyap ) return;
-	if( ptrdiff_t( ( num_of_lyap + 1 ) * n ) != std::distance( x.begin() , x.end() ) )
-	    throw std::domain_error( "renormalization() : size of state does not match the number of lyapunov exponents." );
-
-	typedef typename StateType::value_type value_type;
-	typedef typename StateType::iterator iterator;
-
-	value_type norm[num_of_lyap] , tmp[num_of_lyap];
-	iterator first = x.begin() + n;
-	iterator beg1 = first , end1 = first + n ;
-	
-	std::fill( norm , norm+num_of_lyap , 0.0 );
-
-	// normalize first vector
-	norm[0] = sqrt( std::inner_product( beg1 , end1 , beg1 , 0.0 ) );
-	normalize( beg1 , end1 , norm[0] );
-
-	beg1 += n ;
-	end1 += n;
-
-	for( size_t j=1 ; j<num_of_lyap ; ++j , beg1+=n , end1+=n )
-	{
-	    for( size_t k=0 ; k<j ; ++k )
-		tmp[k] = std::inner_product( beg1 , end1 , first + k*n , 0.0 );
-
-	    for( size_t k=0 ; k<j ; ++k )
-		substract_vector( beg1 , end1 , first + k*n , tmp[k] );
- 
-	    // nromalize j-th vector
-	    norm[j] = sqrt( std::inner_product( beg1 , end1 , beg1 , 0.0 ) );
-	    normalize( beg1 , end1 , norm[j] );
-	}
-
-	for( size_t j=0 ; j<num_of_lyap ; j++ )
-	    lyap[j] += log( norm[j] );
-    }
-
-
-} // namespace odeint
-} // namespace numeric
-} // namespace boost
-
-#endif //BOOST_NUMERIC_ODEINT_GRAM_SCHMITT_HPP_INCLUDED
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/hamiltonian_stepper_euler.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/hamiltonian_stepper_euler.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,88 +0,0 @@
-/*
- boost header: numeric/odeint/hamiltonian_stepper_euler.hpp
-
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- Copyright 2009 Andre Bergner
-
- 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_ODEINT_HAMILTONIAN_STEPPER_EULER_HPP_INCLUDED
-#define BOOST_NUMERIC_ODEINT_HAMILTONIAN_STEPPER_EULER_HPP_INCLUDED
-
-#include <stdexcept>
-
-#include <boost/numeric/odeint/detail/iterator_algebra.hpp>
-#include <boost/numeric/odeint/container_traits.hpp>
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-    template<
-        class Container ,
-        class Time = double ,
-        class Traits = container_traits< Container >
-        >
-    class hamiltonian_stepper_euler
-    {
-        // provide basic typedefs
-    public:
-
-        typedef unsigned short order_type;
-        typedef Time time_type;
-        typedef Traits traits_type;
-        typedef typename traits_type::container_type container_type;
-        typedef typename traits_type::value_type value_type;
-        typedef typename traits_type::iterator iterator;
-        typedef typename traits_type::const_iterator const_iterator;
-
-    private:
-
-	container_type m_dpdt;
-
-
-
-    public:
-
-	template< class CoordinateFunction >
-	void do_step( CoordinateFunction &qfunc ,
-		      container_type &q ,
-		      container_type &p ,
-		      time_type dt )
-        {
-	    if( !traits_type::same_size( q , p ) )
-	    {
-		std::string msg( "hamiltonian_stepper_euler::do_step(): " );
-		msg += "q and p have different sizes";
-		throw std::invalid_argument( msg );
-	    }
-
-            traits_type::adjust_size( p , m_dpdt );
-
-	    detail::it_algebra::increment( traits_type::begin(q) ,
-					   traits_type::end(q) ,
-					   traits_type::begin(p) ,
-					   dt );
-	    qfunc( q , m_dpdt );
-	    detail::it_algebra::increment( traits_type::begin(p) ,
-					   traits_type::end(p) ,
-					   traits_type::begin(m_dpdt) ,
-					   dt );
-	}
-
-    };
-
-
-} // namespace odeint
-} // namespace numeric
-} // namespace boost
-
-
-
-
-
-#endif //BOOST_NUMERIC_ODEINT_HAMILTONIAN_STEPPER_EULER_HPP_INCLUDED
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/hamiltonian_stepper_rk.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/hamiltonian_stepper_rk.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,126 +0,0 @@
-/*
- boost header: numeric/odeint/hamiltonian_stepper_euler.hpp
-
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- Copyright 2009 Andre Bergner
-
- 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_ODEINT_HAMILTONIAN_STEPPER_RK_HPP_INCLUDED
-#define BOOST_NUMERIC_ODEINT_HAMILTONIAN_STEPPER_RK_HPP_INCLUDED
-
-#include <stdexcept>
-
-#include <boost/numeric/odeint/detail/iterator_algebra.hpp>
-#include <boost/numeric/odeint/container_traits.hpp>
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-    template<
-        class Container ,
-        class Time = double ,
-        class Traits = container_traits< Container >
-        >
-    class hamiltonian_stepper_rk
-    {
-        // provide basic typedefs
-    public:
-
-        typedef unsigned short order_type;
-        typedef Time time_type;
-        typedef Traits traits_type;
-        typedef typename traits_type::container_type container_type;
-        typedef typename traits_type::value_type value_type;
-        typedef typename traits_type::iterator iterator;
-        typedef typename traits_type::const_iterator const_iterator;
-
-    private:
-
-	container_type m_dpdt;
-
-/*
-	rk_a[0]=0.40518861839525227722;
-	rk_a[1]=-0.28714404081652408900;
-	rk_a[2]=0.5-(rk_a[0]+rk_a[1]);
-	rk_a[3]=rk_a[2];
-	rk_a[4]=rk_a[1];
-	rk_a[5]=rk_a[0];
-
-	rk_b[0]=-3.0/73.0;
-	rk_b[1]=17.0/59.0;
-	rk_b[2]=1.0-2.0*(rk_b[0]+rk_b[1]);
-	rk_b[3]=rk_b[1];
-	rk_b[4]=rk_b[0];
-	rk_b[5]=0.0;
-*/
-
-    public:
-
-	template< class CoordinateFunction >
-	void do_step( CoordinateFunction &qfunc ,
-		      container_type &q ,
-		      container_type &p ,
-		      time_type dt )
-        {
-	    const size_t order = 6;
-
-	    const time_type rk_a[order] = {
-		    static_cast<time_type>( 0.40518861839525227722 ) ,
-		    static_cast<time_type>( -0.28714404081652408900 ) ,
-		    static_cast<time_type>( 0.3819554224212718118 ) ,
-		    static_cast<time_type>( 0.3819554224212718118 ) ,
-		    static_cast<time_type>( -0.28714404081652408900 ) ,
- 		    static_cast<time_type>( 0.40518861839525227722 )
-		};
-	    const time_type rk_b[order] = {
-		    static_cast<time_type>( -3.0/73.0 ) ,
-		    static_cast<time_type>( 17.0/59.0 ) ,
-		    static_cast<time_type>( 0.50592059438123984212 ) ,
-		    static_cast<time_type>( 17.0/59.0 ) ,
-		    static_cast<time_type>( -3.0/73.0 ) ,
-		    static_cast<time_type>( 0.0 )
-		};
-
-
-
-	    if( !traits_type::same_size( q , p ) )
-	    {
-		std::string msg( "hamiltonian_stepper_rk::do_step(): " );
-		msg += "q and p have different sizes";
-		throw std::invalid_argument( msg );
-	    }
-
-            traits_type::adjust_size( p , m_dpdt );
-
-	    for( size_t l=0 ; l<order ; ++l )
-	    {
-		detail::it_algebra::increment( traits_type::begin(q) ,
-					       traits_type::end(q) ,
-					       traits_type::begin(p) ,
-					       rk_a[l]*dt );
-		qfunc( q , m_dpdt );
-		detail::it_algebra::increment( traits_type::begin(p) ,
-					       traits_type::end(p) ,
-					       traits_type::begin(m_dpdt) ,
-					       rk_b[l]*dt );
-	    }
-	}
-
-    };
-
-
-} // namespace odeint
-} // namespace numeric
-} // namespace boost
-
-
-
-
-
-#endif //BOOST_NUMERIC_ODEINT_HAMILTONIAN_STEPPER_RK_HPP_INCLUDED
Added: sandbox/odeint/branches/karsten/boost/numeric/odeint/integrate_functions.hpp
==============================================================================
--- (empty file)
+++ sandbox/odeint/branches/karsten/boost/numeric/odeint/integrate_functions.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
@@ -0,0 +1,19 @@
+/*
+ boost header: boost/numeric/odeint/integrate_functions.hpp
+
+ Copyright 2009 Karsten Ahnert
+ Copyright 2009 Mario Mulansky
+ Copyright 2009 Andre Bergner
+
+ 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_BOOST_NUMERIC_ODEINT_INTEGRATE_FUNCTIONS_HPP_INCLUDED
+#define BOOST_BOOST_NUMERIC_ODEINT_INTEGRATE_FUNCTIONS_HPP_INCLUDED
+
+#include <boost/numeric/odeint/integrate_functions/integrator_constant_stepsize.hpp>
+#include <boost/numeric/odeint/integrate_functions/integrator_adaptive_stepsize.hpp>
+
+#endif //BOOST_BOOST_NUMERIC_ODEINT_INTEGRATE_FUNCTIONS_HPP_INCLUDED
Copied: sandbox/odeint/branches/karsten/boost/numeric/odeint/integrate_functions/integrator_adaptive_stepsize.hpp (from r61775, /sandbox/odeint/branches/karsten/boost/numeric/odeint/integrator_adaptive_stepsize.hpp)
==============================================================================
--- /sandbox/odeint/branches/karsten/boost/numeric/odeint/integrator_adaptive_stepsize.hpp	(original)
+++ sandbox/odeint/branches/karsten/boost/numeric/odeint/integrate_functions/integrator_adaptive_stepsize.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
@@ -13,8 +13,8 @@
 #ifndef BOOST_NUMERIC_ODEINT_INTEGRATOR_ADAPTIVE_STEPSIZE_HPP
 #define BOOST_NUMERIC_ODEINT_INTEGRATOR_ADAPTIVE_STEPSIZE_HPP
 
-#include <boost/numeric/odeint/controlled_stepper_standard.hpp>
-#include <boost/numeric/odeint/observer.hpp>
+#include <boost/numeric/odeint/steppers/controlled_stepper_standard.hpp>
+#include <boost/numeric/odeint/integrate_functions/observer.hpp>
 #include <vector>
 #include <limits>
 
@@ -154,7 +154,8 @@
                      )
     {
         // we use cash karp stepper as base stepper
-        typedef stepper_rk5_ck< ContainerType , T > stepper_type;
+//        typedef stepper_rk5_ck< ContainerType , T > stepper_type;
+        typedef stepper_half_step< stepper_euler< ContainerType , T > > stepper_type;
 
         // we use the standard controller for this adaptive integrator
         controlled_stepper_standard< stepper_type >
Copied: sandbox/odeint/branches/karsten/boost/numeric/odeint/integrate_functions/integrator_constant_stepsize.hpp (from r61775, /sandbox/odeint/branches/karsten/boost/numeric/odeint/integrator_constant_stepsize.hpp)
==============================================================================
--- /sandbox/odeint/branches/karsten/boost/numeric/odeint/integrator_constant_stepsize.hpp	(original)
+++ sandbox/odeint/branches/karsten/boost/numeric/odeint/integrate_functions/integrator_constant_stepsize.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
@@ -13,7 +13,7 @@
 #ifndef BOOST_NUMERIC_ODEINT_INTEGRATOR_CONSTANT_STEPSIZE_HPP_INCLUDED
 #define BOOST_NUMERIC_ODEINT_INTEGRATOR_CONSTANT_STEPSIZE_HPP_INCLUDED
 
-#include <boost/numeric/odeint/observer.hpp>
+#include <boost/numeric/odeint/integrate_functions/observer.hpp>
 
 namespace boost {
 namespace numeric {
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/integrator_adaptive_stepsize.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/integrator_adaptive_stepsize.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,174 +0,0 @@
-/* Boost odeint/integrator_adaptive.hpp header file
- 
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- 
- This file includes integration methods with adaptive stepsize.
-
- 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_ODEINT_INTEGRATOR_ADAPTIVE_STEPSIZE_HPP
-#define BOOST_NUMERIC_ODEINT_INTEGRATOR_ADAPTIVE_STEPSIZE_HPP
-
-#include <boost/numeric/odeint/controlled_stepper_standard.hpp>
-#include <boost/numeric/odeint/observer.hpp>
-#include <vector>
-#include <limits>
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-
-    template<
-            class ControlledStepper,
-            class DynamicalSystem,
-            class Observer
-            >
-    size_t integrate_adaptive(
-            ControlledStepper &stepper,
-            DynamicalSystem &system,
-            typename ControlledStepper::container_type &state,
-            typename ControlledStepper::time_type start_time,
-            typename ControlledStepper::time_type end_time,
-            typename ControlledStepper::time_type dt,
-            Observer &observer )
-    {
-        typedef typename ControlledStepper::time_type time_type;
-
-        stepper.adjust_size( state );
-
-        controlled_step_result result;
-        size_t iterations = 0;
-        time_type t = start_time , dt_ = dt;
-
-        observer(t, state, system);
-        
-        while( t < end_time )
-        {
-            if( (end_time - t) < dt ) dt = end_time - t;
-            // do a controlled step
-            result = stepper.try_step( system, state, t, dt_ );
-
-            if( result != step_size_decreased )
-            { // we actually did a step forward (dt was small enough)
-                observer(t, state, system);
-                iterations++;
-            }
-
-            if( !( t+dt_ > t) ) 
-                throw; // we've reached machine precision with dt - no advancing in t
-        }
-        return iterations;
-    }
-
-    template<
-        class ControlledStepper,
-        class DynamicalSystem
-        >
-    size_t integrate_adaptive(
-            ControlledStepper &stepper,
-            DynamicalSystem &system,
-            typename ControlledStepper::container_type &state,
-            typename ControlledStepper::time_type start_time,
-            typename ControlledStepper::time_type end_time, 
-            typename ControlledStepper::time_type dt )
-    {
-        return integrate_adaptive(
-                stepper, system ,
-                state, start_time , end_time, dt, 
-                do_nothing_observer<
-		    typename ControlledStepper::time_type ,
-		    typename ControlledStepper::container_type ,
-		    DynamicalSystem >
-	    );
-    }
-
-
-
-
-    /* Integration of an ode with adaptive stepsize methods.
-       Integrates an ode give by system using the integration scheme stepper and the
-       step-size controller controller.
-       The initial state is given in x.
-       t is an vector including the times at which the state will be written into 
-       the vector x_vec.
-       x_vec must provide enough space to hold times.size() states.
-       dt is the initial step size (will be adjusted according to the controller).
-       This function returns the total number of steps required to integrate the
-       whole intervale times.begin() - times.end().
-       Note that the values in times don't influence the stepsize, but only the 
-       time points at which the state is stored into x_vec.
-    */
-    template< 
-        class ControlledStepper,
-        class DynamicalSystem,
-        class TimeInsertIterator,
-        class StateInsertIterator
-	>
-    size_t integrate(
-            ControlledStepper &stepper,
-            DynamicalSystem &system,
-            typename ControlledStepper::container_type &state, 
-            typename ControlledStepper::time_type start,
-            typename ControlledStepper::time_type end,
-            typename ControlledStepper::time_type dt, 
-            TimeInsertIterator time_inserter,
-            StateInsertIterator state_inserter)
-    {
-        state_copy_observer<TimeInsertIterator, StateInsertIterator>
-            observer(time_inserter, state_inserter);
-        return integrate_adaptive(stepper, system, state, 
-                                  start , end, dt , observer);
-    }
-
-
-    /* 
-       Integration of an ode with adaptive stepsize methods.
-       Integrates an ode give by system using the integration scheme stepper and the
-       a standard step-size controller that ensures the error being below the values 
-       given below.
-    */
-    template< 
-            class DynamicalSystem,
-            class ContainerType,
-            class TimeInsertIterator,
-            class StateInsertIterator,
-            class T
-            >
-    size_t integrate(
-            DynamicalSystem &system, 
-            ContainerType &state,
-            T start_time ,
-            T end_time ,
-            TimeInsertIterator time_inserter,
-            StateInsertIterator state_inserter,
-            T dt = 1E-4, 
-            T eps_abs = 1E-6, 
-            T eps_rel = 1E-7, 
-            T a_x = 1.0 , 
-            T a_dxdt = 1.0
-                     )
-    {
-        // we use cash karp stepper as base stepper
-        typedef stepper_rk5_ck< ContainerType , T > stepper_type;
-
-        // we use the standard controller for this adaptive integrator
-        controlled_stepper_standard< stepper_type >
-            controlled_stepper( eps_abs, eps_rel, a_x, a_dxdt ); 
-        // initialized with values from above
-        
-        // call the normal integrator
-        return integrate(controlled_stepper, system, state, 
-                         start_time, end_time, dt, time_inserter, state_inserter);
-    }
-    
-
-} // namespace odeint
-} // namespace numeric
-} // namespace boost
-
-#endif
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/integrator_constant_stepsize.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/integrator_constant_stepsize.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,138 +0,0 @@
-/*
- boost header: numeric/odeint/integrator_constant_step.hpp
-
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- Copyright 2009 Andre Bergner
-
- 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_ODEINT_INTEGRATOR_CONSTANT_STEPSIZE_HPP_INCLUDED
-#define BOOST_NUMERIC_ODEINT_INTEGRATOR_CONSTANT_STEPSIZE_HPP_INCLUDED
-
-#include <boost/numeric/odeint/observer.hpp>
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-
-    template< 
-        class Stepper ,
-        class DynamicalSystem ,
-        class Observer
-        >
-    size_t integrate_const(
-	Stepper &stepper ,
-	DynamicalSystem &system ,
-	typename Stepper::container_type &state ,
-	typename Stepper::time_type start_time ,
-	typename Stepper::time_type end_time ,
-	typename Stepper::time_type dt ,
-	Observer &observer
-	)
-    {
-        stepper.adjust_size( state );
-	size_t iteration = 0;
-        while( start_time < end_time )
-	{
-	    observer( start_time , state , system );
-            stepper.do_step( system , state , start_time , dt );
-            start_time += dt;
-	    ++iteration;
-        }
-	observer( start_time , state , system );
-
-	return iteration;
-    }
-
-
-
-    template<
-        class Stepper ,
-        class DynamicalSystem
-        >
-    size_t integrate_const(
-	Stepper &stepper ,
-	DynamicalSystem &system ,
-	typename Stepper::container_type &state ,
-	typename Stepper::time_type start_time ,
-	typename Stepper::time_type end_time ,
-	typename Stepper::time_type dt 
-	)
-    {
-	return integrate_const(
-                stepper , system , state, start_time , end_time , dt ,
-                do_nothing_observer<
-                typename Stepper::time_type ,
-                typename Stepper::container_type ,
-                DynamicalSystem >
-                               );
-    }
-
-
-
-    template<
-	class Stepper , 
-        class DynamicalSystem ,
-        class Observer
-        >
-    typename Stepper::time_type integrate_const_steps(
-	Stepper &stepper ,
-	DynamicalSystem &system ,
-	typename Stepper::container_type &state ,
-	typename Stepper::time_type start_time ,
-	typename Stepper::time_type dt ,
-	size_t num_of_steps ,
-	Observer &observer
-	)
-    {
-        stepper.adjust_size( state );
-	size_t iteration = 0;
-        while( iteration < num_of_steps )
-	{
-	    observer( start_time , state , system );
-            stepper.do_step( system , state , start_time , dt );
-            start_time += dt;
-	    ++iteration;
-        }
-	observer( start_time , state , system );
-
-	return start_time;
-    }
-
-
-    template<
-	class Stepper , 
-        class DynamicalSystem
-	>
-    typename Stepper::time_type integrate_const_steps(
-	Stepper &stepper ,
-	DynamicalSystem &system ,
-	typename Stepper::container_type &state ,
-	typename Stepper::time_type start_time ,
-	typename Stepper::time_type dt ,
-	size_t num_of_steps 
-	)
-    {
-	return integrate_const_steps(
-                stepper , system , state , start_time , dt , num_of_steps ,
-                do_nothing_observer<
-                typename Stepper::time_type ,
-                typename Stepper::container_type ,
-                DynamicalSystem >
-                                     );
-    }
-
-    
-    
-   
-
-} // odeint
-} // numeric
-} // boost
-
-#endif //BOOST_NUMERIC_ODEINT_INTEGRATOR_CONSTANT_STEPSIZE_HPP_INCLUDED
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/observer.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/observer.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,63 +0,0 @@
-/*
- boost header: numeric/odeint/observer.hpp
-
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- Copyright 2009 Andre Bergner
-
- 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_ODEINT_OBSERVER_HPP_INCLUDED
-#define BOOST_NUMERIC_ODEINT_OBSERVER_HPP_INCLUDED
-
-#include<vector>
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-
-    template< class Time, class Container , class System >
-    inline void do_nothing_observer( Time , Container& , System& )
-    {
-    }
-    
-
-
-    template< class TimeInsertIterator, class StateInsertIterator >
-    class state_copy_observer
-    {
-        
-    private:
-
-        TimeInsertIterator m_time_inserter;
-        StateInsertIterator m_state_inserter;
-
-    public:
-
-        state_copy_observer( TimeInsertIterator time_inserter ,
-			     StateInsertIterator state_inserter ) 
-            : m_time_inserter(time_inserter),
-	      m_state_inserter(state_inserter)
-        {  }
-
-	void reset( void ) { }
-        
-        template< class Time, class Container, class System >
-        void operator () (Time t, Container &state, System &system )
-	{
-            *m_time_inserter++ = t; // insert time
-            *m_state_inserter++ = state; // insert state
-        }
-    };
-
-
-} // odeint
-} // numeric
-} // boost
-
-
-#endif //BOOST_NUMERIC_ODEINT_OBSERVER_HPP_INCLUDED
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_base.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_base.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,156 +0,0 @@
-/*
- boost header: numeric/odeint/stepper_base.hpp
-
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- Copyright 2009 Andre Bergner
-
- 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_ODEINT_STEPPER_BASE_HPP_INCLUDED
-#define BOOST_NUMERIC_ODEINT_STEPPER_BASE_HPP_INCLUDED
-
-#include <boost/noncopyable.hpp>
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-    typedef unsigned char order_type;
-
-    template<
-	class Stepper ,
-	class Container ,
-	order_type Order ,
-	class Time ,
-	class Traits 
-	>
-    class explicit_stepper_base : private boost::noncopyable
-    {
-    public:
-
-	// some typedef
-
-	typedef Stepper stepper_type;
-	typedef Time time_type;
-	typedef Traits traits_type;
-	typedef typename traits_type::container_type container_type;
-        typedef typename traits_type::value_type value_type;
-        typedef typename traits_type::iterator iterator;
-        typedef typename traits_type::const_iterator const_iterator;
-
-
-
-
-    public:
-
-	// provide some functions
-
-	explicit_stepper_base( stepper_type &stepper )
-	    : m_stepper( stepper ) { }
-
-	explicit_stepper_base( stepper_type &stepper , container_type &x )
-	    : m_stepper( stepper )
-	{
-	    traits_type::adjust_size( x , m_dxdt );
-	}
-
-//	order_type order() const { return m_order; }
-	const static order_type order = Order;
-
-	template< class DynamicalSystem >
-	void do_step( DynamicalSystem &system ,
-		      container_type &x ,
-		      time_type t ,
-		      time_type dt )
-	{
-            system( x , m_dxdt , t );
-            stepper.do_step( system , x , m_dxdt , t , dt );
-	}
-
-	void adjust_size( container_type &x )
-	{
-	    traits_type::adjust_size( x , m_dxdt );
-	}
-
-    private:
-
-	container_type m_dxdt;
-	stepper_type &m_stepper;
-    };
-
-
-
-
-    template<
-	class ErrorStepper ,
-	class Container ,
-	order_type StepperOrder ,
-	order_type ErrorOrder
-	class Time ,
-	class Traits 
-	>
-    class explicit_error_stepper_base : private boost::noncopyable
-    {
-    public:
-
-	// some typedef
-
-	typedef ErrorStepper stepper_type;
-	typedef Time time_type;
-	typedef Traits traits_type;
-	typedef typename traits_type::container_type container_type;
-        typedef typename traits_type::value_type value_type;
-        typedef typename traits_type::iterator iterator;
-        typedef typename traits_type::const_iterator const_iterator;
-
-
-
-
-    public:
-
-	// provide some functions
-
-	explicit_stepper_base( stepper_type &stepper )
-	    : m_stepper( stepper ) { }
-
-	explicit_stepper_base( stepper_type &stepper , container_type &x )
-	    : m_stepper( stepper )
-	{
-	    traits_type::adjust_size( x , m_dxdt );
-	}
-
-//	order_type order() const { return m_order; }
-	const static order_type stepper_order = StepperOrder;
-	const static order_type error_order = ErrorOrder;
-
-	template< class DynamicalSystem >
-	void do_step( DynamicalSystem &system ,
-		      container_type &x ,
-		      time_type t ,
-		      time_type dt ,
-		      container_type &err )
-	{
-            system( x , m_dxdt , t );
-            stepper.do_step_with_deriv( system , x , m_dxdt , t , dt , err );
-	}
-
-	void adjust_size( container_type &x )
-	{
-	    traits_type::adjust_size( x , m_dxdt );
-	}
-
-    private:
-
-	container_type m_dxdt;
-	stepper_type &m_stepper;
-    };
-
-}
-}
-}
-
-#endif //BOOST_NUMERIC_ODEINT_STEPPER_BASE_HPP_INCLUDED
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_euler.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_euler.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,130 +0,0 @@
-/* Boost odeint/stepper_euler.hpp header file
- 
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- Copyright 2009 Andre Bergner
- 
- This file includes the explicit euler solver for
- ordinary differential equations.
-
- It solves any ODE dx/dt = f(x,t) via
- x(t+dt) = x(t) + dt*f(x,t)
-
- 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_ODEINT_STEPPER_EULER_HPP
-#define BOOST_NUMERIC_ODEINT_STEPPER_EULER_HPP
-
-#include <boost/numeric/odeint/detail/iterator_algebra.hpp>
-#include <boost/numeric/odeint/container_traits.hpp>
-
-// #include <boost/numeric/odeint/stepper_base.hpp>
-
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-    template<
-        class Container ,
-        class Time = double ,
-        class Traits = container_traits< Container >
-        >
-    class stepper_euler
-    {
-        //
-        // provide basic typedefs
-        //
-    public:
-
-        typedef unsigned short order_type;
-        typedef Time time_type;
-        typedef Traits traits_type;
-        typedef typename traits_type::container_type container_type;
-        typedef typename traits_type::value_type value_type;
-//        typedef typename traits_type::iterator iterator;
-//        typedef typename traits_type::const_iterator const_iterator;
-
-
-        //
-        // private members
-        //
-    private:
-
-        container_type m_dxdt;
-
-
-
-        //
-        // public interface
-        //
-    public:
-
-        // return the order of the stepper
-        order_type order_step() const { return 1; }
-
-
-        // standard constructor, m_dxdt is not adjusted
-        stepper_euler( void )
-        {
-        }
-
-
-
-        // contructor, which adjusts m_dxdt
-        stepper_euler( const container_type &x )
-        {
-            adjust_size( x );
-        }
-
-
-
-        // adjust the size of m_dxdt
-        void adjust_size( const container_type &x )
-        {
-            traits_type::adjust_size( x , m_dxdt );
-        }
-
-
-
-        // performs one step with the knowledge of dxdt(t)
-        template< class DynamicalSystem >
-        void do_step( DynamicalSystem &system ,
-		      container_type &x ,
-		      const container_type &dxdt ,
-		      time_type t ,
-		      time_type dt )
-        {
-            // x = x + dt*dxdt
-            detail::it_algebra::increment( traits_type::begin(x) ,
-                                           traits_type::end(x) ,
-                                           traits_type::begin(dxdt) , 
-                                           dt );
-        }
-
-
-
-        // performs one step
-	template< class DynamicalSystem >
-	void do_step( DynamicalSystem &system ,
-		      container_type &x ,
-		      time_type t ,
-		      time_type dt )
-	{
-            system( x , m_dxdt , t );
-            do_step( system , x , m_dxdt , t , dt );
-	}
-
-    };
-
-
-
-} // namespace odeint
-} // namespace numeric
-} // namespace boost
-
-
-#endif // BOOST_NUMERIC_ODEINT_STEPPER_EULER_HPP
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_half_step.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_half_step.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,179 +0,0 @@
-/* Boost odeint/stepper_half_stepr.hpp header file
- 
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- Copyright 2009 Andre Bergner
- 
- This file includes a stepper which calculates the
- error during one step from performing two steps with
- the halt stepsize. It works with arbitray steppers
-
- 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_ODEINT_STEPPER_HALF_STEP_HPP
-#define BOOST_NUMERIC_ODEINT_STEPPER_HALF_STEP_HPP
-
-#include <boost/numeric/odeint/detail/iterator_algebra.hpp>
-
-#include <iostream>
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-
-    template< class Stepper >
-    class stepper_half_step
-    {
-        //
-        // provide basic typedefs
-        //
-    public:
-
-        typedef Stepper stepper_type;
-        typedef typename stepper_type::container_type container_type;
-        typedef typename stepper_type::traits_type traits_type;
-        typedef typename stepper_type::time_type time_type;
-	typedef typename stepper_type::order_type order_type;
-        typedef typename stepper_type::value_type value_type;
-//        typedef typename stepper_type::iterator iterator;
-//        typedef typename stepper_type::const_iterator const_iterator;
-
-
-
-        //
-        // private members
-        //
-    private:
-
-        container_type m_dxdt;
-        container_type m_xtemp;
-        stepper_type m_stepper;
-	
-
-        //
-	// public interface
-        //
-    public:
-
-
-        // the order of the step if a normal step is performed
-        order_type order_step( void ) const
-        {
-            return m_stepper.order_step();
-        }
-
-
-        // the order of the step if an error step is performed
-        order_type order_error_step( void ) const
-        {
-            return m_stepper.order_step();
-        }
-
-
-        // the order of the error term if the error step is performed
-        order_type order_error( void ) const 
-        {
-            return m_stepper.order_step() + 1; 
-        }
-
-
-        // standard constructor
-        stepper_half_step( void )
-        {
-        }
-
-
-        // contructor, which adjust the size of internal containers
-        stepper_half_step( const container_type &x )
-        {
-            adjust_size( x );
-        }
-
-
-        // adjust the size of m_dxdt , m_xtemp und m_stepper
-        void adjust_size( const container_type &x )
-        {
-            m_stepper.adjust_size( x );
-            traits_type::adjust_size( x , m_dxdt );
-            traits_type::adjust_size( x , m_xtemp );
-        }
-
-
-
-        // performs a normal step, without error calculation
-        template< class DynamicalSystem >
-        void do_step( DynamicalSystem &system ,
-                      container_type &x ,
-                      const container_type &dxdt ,
-                      time_type t ,
-                      time_type dt )
-        {
-            m_stepper.do_step( system , x , dxdt , t , dt );
-        }
-
-
-        // performs a normal step, without error calculation
-        template< class DynamicalSystem >
-        void do_step( DynamicalSystem &system ,
-                      container_type &x ,
-                      time_type t ,
-                      time_type dt )
-        {
-            m_stepper.do_step( system , x , t , dt );
-        }
-
-
-
-        // performs a error step with error calculation
-        template< class DynamicalSystem >
-        void do_step( DynamicalSystem &system ,
-                        container_type &x ,
-                        const container_type &dxdt ,
-                        time_type t ,
-                        time_type dt ,
-                        container_type &xerr )
-        {
-            time_type dt2 = static_cast<time_type>(0.5) * dt;
-
-            m_xtemp = x;
-
-            do_step( system , m_xtemp , dxdt , t , dt );
-            do_step( system , x , dxdt , t , dt2 );
-            do_step( system , x , t+dt2 , dt2 );
-
-            detail::it_algebra::scale_sum( traits_type::begin(xerr) ,
-                                           traits_type::end(xerr) ,
-                                           static_cast< value_type >(1.0),
-                                           traits_type::begin(m_xtemp) ,
-                                           static_cast< value_type >(-1.0),
-                                           traits_type::begin(x) );
-        }
-
-
-
-
-        // performs a error step with error calculation
-        template< class DynamicalSystem >
-        void do_step( DynamicalSystem &system ,
-                        container_type &x ,
-                        time_type t ,
-                        time_type dt ,
-                        container_type &xerr )
-        {
-            system( x , m_dxdt , t );
-            do_step( system , x , m_dxdt , t , dt , xerr );
-        }
-    };
-
-
-
-} // namespace odeint
-} // namespace numeric
-} // namespace boost
-
-
-#endif // BOOST_NUMERIC_ODEINT_STEPPER_HALF_STEP_HPP
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_midpoint.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_midpoint.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,193 +0,0 @@
-/* Boost odeint/stepper_midpoint.hpp header file
- 
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- 
- This file includes the explicit midpoint solver for
- ordinary differential equations.
-
- It solves any ODE dx/dt = f(x,t) via
- x(t+dt) = x(t) + dt*f(x,t)
-
- 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_ODEINT_STEPPER_MIDPOINT_HPP
-#define BOOST_NUMERIC_ODEINT_STEPPER_MIDPOINT_HPP
-
-
-#include <boost/numeric/odeint/detail/iterator_algebra.hpp>
-#include <boost/numeric/odeint/container_traits.hpp>
-
-#include <iostream>
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-    template<
-        class Container ,
-        class Time = double ,
-        class Traits = container_traits< Container >
-        >
-    class stepper_midpoint
-    {
-        //
-        // provide basic typedefs
-        //
-    public:
-
-        typedef unsigned short order_type;
-        typedef Time time_type;
-        typedef Traits traits_type;
-        typedef typename traits_type::container_type container_type;
-        typedef typename traits_type::value_type value_type;
-//        typedef typename traits_type::iterator iterator;
-//        typedef typename traits_type::const_iterator const_iterator;
-
-
-
-
-        
-        // private memebers
-    private:
-
-        unsigned short m_step_number;
-
-        container_type m_x0;
-        container_type m_x1;
-        container_type m_dxdt;
-
-
-
-
-    public:
-
-        order_type order_step() const { return 2; }
-
-	// standard constructor, the size of the internal container is not set
-        stepper_midpoint( unsigned short step_number = 2 ) 
-	{
-	    set_step_number( step_number );
-	}
-
-	// constructor, which adjusts the size of the internal containers
-	stepper_midpoint( const container_type &x , unsigned short step_number = 2 )
-	{
-	    adjust_size( x );
-	    set_step_number( step_number );
-	}
-
-	// adjusts the size of the internal containers
-	void adjust_size( const container_type &x )
-	{
-	    traits_type::adjust_size( x , m_x0 );
-	    traits_type::adjust_size( x , m_x1 );
-	    traits_type::adjust_size( x , m_dxdt );
-	}
-
-        void set_step_number( unsigned short step_number )
-        {
-            if( step_number > 1 )
-                m_step_number = step_number;
-        }
-
-        unsigned short get_step_number() const
-	{
-	    return m_step_number;
-	}
-
-
-
-	// performs a midpoint step
-        template< class DynamicalSystem >
-        void midpoint_step( 
-                DynamicalSystem &system ,
-                container_type &x ,
-                const container_type &dxdt ,
-                time_type t ,
-                time_type dt ,
-                container_type &x_out )
-        {
-            using namespace detail::it_algebra;
-
-            const time_type t_1 = static_cast<time_type>( 1.0 );
-            const time_type t_05 = static_cast<time_type>( 0.5 );
-
-            const time_type h = dt / static_cast<time_type>( m_step_number );
-            const time_type h2 = static_cast<time_type>( 2.0 ) * h;
-
-
-            time_type th = t + h;
-
-            // m_x1 = x + h*dxdt
-            scale_sum( traits_type::begin(m_x1),
-		       traits_type::end(m_x1),
-                       t_1, traits_type::begin(x),
-                       h, traits_type::begin(dxdt) );
-            system( m_x1, m_dxdt, th );
-
-            m_x0 = x;
-            
-            unsigned short i = 1;
-            while( i != m_step_number )
-            {
-                // general step
-                //tmp = m_x1; m_x1 = m_x0 + h2*m_dxdt; m_x0 = tmp
-                scale_sum_swap( traits_type::begin(m_x1),
-				traits_type::end(m_x1), 
-                                traits_type::begin(m_x0),
-                                h2, traits_type::begin(m_dxdt) );
-                th += h;
-                system( m_x1, m_dxdt, th);
-                i++;
-            }
-
-            // last step
-            // x = 0.5*( m_x0 + m_x1 + h*m_dxdt )
-            scale_sum( traits_type::begin(x_out), traits_type::end(x_out),
-                       t_05, traits_type::begin(m_x0),
-                       t_05, traits_type::begin(m_x1),
-                       t_05*h, traits_type::begin(m_dxdt) );
-        }
-
-
-
-
-
-        template< class DynamicalSystem >
-        void do_step( 
-                DynamicalSystem &system ,
-                container_type &x ,
-                const container_type &dxdt ,
-                time_type t ,
-                time_type dt )
-        {
-            midpoint_step( system, x, dxdt, t, dt, x );
-        }
-
-
-
-
-
-        template< class DynamicalSystem >
-        void do_step( 
-                DynamicalSystem &system ,
-                container_type &x ,
-                time_type t ,
-                time_type dt )
-        {
-            system( x, m_dxdt, t );
-            do_step( system , x, m_dxdt, t, dt );
-        }
-            
-
-    };
-
-}
-}
-}
-
-#endif
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_rk4.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_rk4.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,164 +0,0 @@
-/* Boost odeint/stepper_rk4.hpp header file
- 
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- Copyright 2009 Andre Bergner
- 
- This file includes the explicit 4th order runge kutta 
- solver for ordinary differential equations.
-
- It solves any ODE dx/dt = f(x,t).
-
- 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_ODEINT_STEPPER_RK4_HPP
-#define BOOST_NUMERIC_ODEINT_STEPPER_RK4_HPP
-
-#include <boost/numeric/odeint/container_traits.hpp>
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-    template<
-        class Container ,
-        class Time = double ,
-        class Traits = container_traits< Container >
-        >
-    class stepper_rk4
-    {
-
-        // provide basic typedefs
-    public:
-
-        typedef unsigned short order_type;
-        typedef Time time_type;
-        typedef Traits traits_type;
-        typedef typename traits_type::container_type container_type;
-        typedef typename traits_type::value_type value_type;
-//        typedef typename traits_type::iterator iterator;
-//        typedef typename traits_type::const_iterator const_iterator;
-
-
-
-
-
-
-        // private members
-    private:
-
-        container_type m_dxdt;
-        container_type m_dxt;
-        container_type m_dxm;
-        container_type m_dxh;
-        container_type m_xt;
-
-
-	// private member functions
-    private:
-
-
-        // public interface
-    public:
-
-
-        order_type order_step() const { return 4; }
-
-	// standard constructor, internal containers are not initialized	
-	stepper_rk4( void )
-	{
-	}
-
-	// constructor, which adjusts the internal containers
-	stepper_rk4( const container_type &x )
-	{
-            adjust_size( x );
-	}
-
-	void adjust_size( const container_type &x )
-	{
-            traits_type::adjust_size( x , m_dxdt );
-            traits_type::adjust_size( x , m_dxt );
-            traits_type::adjust_size( x , m_dxm );
-            traits_type::adjust_size( x , m_xt );
-            traits_type::adjust_size( x , m_dxh );
-	}
-
-
-
-        template< class DynamicalSystem >
-        void do_step( DynamicalSystem &system ,
-                      container_type &x ,
-                      const container_type &dxdt ,
-                      time_type t ,
-                      time_type dt )
-        {
-            using namespace detail::it_algebra;
-
-            const time_type val1 = static_cast<time_type>( 1.0 );
-
-            time_type  dh = static_cast<time_type>( 0.5 ) * dt;
-            time_type th = t + dh;
-
-            // dt * dxdt = k1
-            // m_xt = x + dh*dxdt
-            scale_sum( traits_type::begin(m_xt),
-                       traits_type::end(m_xt),
-                       val1, traits_type::begin(x),
-                       dh, traits_type::begin(dxdt) );
-
-
-            // dt * m_dxt = k2
-            system( m_xt , m_dxt , th );
-            // m_xt = x + dh*m_dxt
-            scale_sum( traits_type::begin(m_xt) ,
-                       traits_type::end(m_xt) ,
-                       val1, traits_type::begin(x) ,
-                       dh, traits_type::begin(m_dxt) );
-
-
-            // dt * m_dxm = k3
-            system( m_xt , m_dxm , th ); 
-            //m_xt = x + dt*m_dxm
-            scale_sum( traits_type::begin(m_xt), traits_type::end(m_xt),
-                       val1, traits_type::begin(x) ,
-                       dt, traits_type::begin(m_dxm) );
-
-
-            // dt * m_dxh = k4
-            system( m_xt , m_dxh , t + dt );  
-            //x += dt/6 * ( m_dxdt + m_dxt + val2*m_dxm )
-            time_type dt6 = dt / static_cast<time_type>( 6.0 );
-            time_type dt3 = dt / static_cast<time_type>( 3.0 );
-            scale_sum_inplace( traits_type::begin(x) , traits_type::end(x),
-                       dt6 , traits_type::begin(dxdt),
-                       dt3 , traits_type::begin(m_dxt),
-                       dt3 , traits_type::begin(m_dxm),
-                       dt6 , traits_type::begin(m_dxh) );
-        }
-
-
-
-
-
-        template< class DynamicalSystem >
-        void do_step( DynamicalSystem &system ,
-                        container_type &x ,
-                        time_type t ,
-                        time_type dt )
-        {
-            system( x , m_dxdt , t );
-            do_step( system , x , m_dxdt , t , dt );
-        }
-
-    };
-
-} // namespace odeint
-} // namespace numeric
-} // namespace boost
-
-
-#endif // BOOST_NUMERIC_ODEINT_STEPPER_RK4_HPP
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_rk4_classical.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_rk4_classical.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,154 +0,0 @@
-/* Boost odeint/stepper_rk4.hpp header file
- 
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- Copyright 2009 Andre Bergner
- 
- This file includes the explicit runge kutta solver for
- ordinary differential equations.
-
- It solves any ODE dx/dt = f(x,t).
-
- 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_ODEINT_STEPPER_RK4_CLASSICAL_HPP
-#define BOOST_NUMERIC_ODEINT_STEPPER_RK4_CLASSICAL_HPP
-
-#include <boost/numeric/odeint/container_traits.hpp>
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-    template<
-        class Container ,
-        class Time = double ,
-        class Traits = container_traits< Container >
-        >
-    class stepper_rk4_classical
-    {
-
-        // provide basic typedefs
-    public:
-
-        typedef unsigned short order_type;
-        typedef Time time_type;
-        typedef Traits traits_type;
-        typedef typename traits_type::container_type container_type;
-        typedef typename traits_type::value_type value_type;
-//        typedef typename traits_type::iterator iterator;
-//        typedef typename traits_type::const_iterator const_iterator;
-
-
-
-
-
-
-        // private members
-    private:
-
-        container_type m_dxdt;
-        container_type m_dxt;
-        container_type m_dxm;
-        container_type m_xt;
-
-        
-
-
-
-        // public interface
-    public:
-
-        order_type order_step() const { return 4; }
-
-	// standard constructor, internal containers are not initialized
-	stepper_rk4_classical( void )
-	{
-	}
-
-	// constructor, which adjusts the internal containers
-	stepper_rk4_classical( const container_type &x )
-	{
-	    adjust_size( x );
-	}
-
-	void adjust_size( const container_type &x )
-	{
-	    traits_type::adjust_size( x , m_dxdt );
-	    traits_type::adjust_size( x , m_dxt );
-	    traits_type::adjust_size( x , m_dxm );
-	    traits_type::adjust_size( x , m_xt );
-	}
-
-        template< class DynamicalSystem >
-        void do_step( DynamicalSystem &system ,
-                      container_type &x ,
-                      const container_type &dxdt ,
-                      time_type t ,
-                      time_type dt )
-        {
-            using namespace detail::it_algebra;
-
-            const time_type val2 = time_type( 2.0 );
-
-
-            time_type  dh = time_type( 0.5 ) * dt;
-            time_type th = t + dh;
-
-            //m_xt = x + dh*dxdt
-            scale_sum( traits_type::begin(m_xt) , traits_type::end(m_xt) ,
-                       static_cast< time_type >(1.0) ,
-                       traits_type::begin(x) , 
-                       dh, 
-                       traits_type::begin(dxdt) );
-
-
-            //m_xt = x + dh*m_dxdt
-            system( m_xt , m_dxt , th );
-            scale_sum( traits_type::begin(m_xt) , traits_type::end(m_xt) ,
-                        static_cast< time_type >(1.0),
-                        traits_type::begin(x) , 
-                        dh ,
-                        traits_type::begin(m_dxt) );
-
-
-            //m_xt = x + dt*m_dxm ; m_dxm += m_dxt
-            system( m_xt , m_dxm , th );
-            assign_sum_increment( traits_type::begin(m_xt) , traits_type::end(m_xt) ,
-                                  traits_type::begin(x) , traits_type::begin(m_dxm) ,
-                                  traits_type::begin(m_dxt) , dt );
-
-
-            //x = dt/6 * ( m_dxdt + m_dxt + val2*m_dxm )
-            system( m_xt , m_dxt , t + dt );
-            increment_sum_sum( traits_type::begin(x) , traits_type::end(x) , 
-                               traits_type::begin(dxdt) ,
-                               traits_type::begin(m_dxt) ,
-                               traits_type::begin(m_dxm) ,
-                               dt /  time_type( 6.0 ) , val2 );
-        }
-
-
-
-        template< class DynamicalSystem >
-        void do_step( DynamicalSystem &system ,
-                        container_type &x ,
-                        time_type t ,
-                        time_type dt )
-        {
-            system( x , m_dxdt , t );
-            do_step( system , x , m_dxdt , t , dt );
-        }
-
-
-    };
-
-} // namespace odeint
-} // namespace numeric
-} // namespace boost
-
-
-#endif // BOOST_NUMERIC_ODEINT_STEPPER_RK4_CLASSICAL_HPP
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_rk5_ck.hpp
==============================================================================
Binary file. No diff available.
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_rk78_fehlberg.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_rk78_fehlberg.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,415 +0,0 @@
-/*
- boost header: numeric/odeint/stepper_rk78_fehlberg.hpp
-
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- Copyright 2009 Andre Bergner
-
- 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_ODEINT_STEPPER_RK78_FEHLBERG_HPP_INCLUDED
-#define BOOST_NUMERIC_ODEINT_STEPPER_RK78_FEHLBERG_HPP_INCLUDED
-
-#include <boost/numeric/odeint/container_traits.hpp>
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-    template<
-        class Container ,
-        class Time = double ,
-        class Traits = container_traits< Container >
-        >
-    class stepper_rk78_fehlberg
-    {
-        // provide basic typedefs
-    public:
-
-        typedef unsigned short order_type;
-        typedef Time time_type;
-        typedef Traits traits_type;
-        typedef typename traits_type::container_type container_type;
-        typedef typename traits_type::value_type value_type;
-//        typedef typename traits_type::iterator iterator;
-//        typedef typename traits_type::const_iterator const_iterator;
-
-
-
-
-        // private members
-    private:
-
-        container_type m_dxdt;
-        container_type m_xt;
-        container_type m_k02 , m_k03 , m_k04 , m_k05 , m_k06 , m_k07 ,
-            m_k08 , m_k09 , m_k10 , m_k11 , m_k12 , m_k13;
-
-
-        // the times at which system is called
-        time_type m_t02 , m_t03 , m_t04 , m_t05 , m_t06 , m_t07 , m_t08 ,
-            m_t09 , m_t10 , m_t11 , m_t12 , m_t13;
-
-
-
-
-        // public interface
-    public:
-
-        order_type order_step( void ) const { return 8; }
-
-	order_type order_error_step( void ) const { return 7; }
-
-	order_type order_error( void ) const { return 8; }
-
-	// standard constructor, leaves the internal containers uninitialized
-	stepper_rk78_fehlberg( void )
-	{
-	}
-
-
-	// constructor, which adjusts the internal containers
-	stepper_rk78_fehlberg( const container_type &x )
-	{
-	    adjust_size( x );
-	}
-
-
-	void adjust_size( const container_type &x )
-	{
-            traits_type::adjust_size( x , m_dxdt );
-            traits_type::adjust_size( x , m_xt );
-            traits_type::adjust_size( x , m_k02 );
-            traits_type::adjust_size( x , m_k03 );
-            traits_type::adjust_size( x , m_k04 );
-            traits_type::adjust_size( x , m_k05 );
-            traits_type::adjust_size( x , m_k06 );
-            traits_type::adjust_size( x , m_k07 );
-            traits_type::adjust_size( x , m_k08 );
-            traits_type::adjust_size( x , m_k09 );
-            traits_type::adjust_size( x , m_k10 );
-            traits_type::adjust_size( x , m_k11 );
-            traits_type::adjust_size( x , m_k12 );
-            traits_type::adjust_size( x , m_k13 );
-	}
-
-        template< class DynamicalSystem >
-        void do_step( DynamicalSystem &system ,
-                        container_type &x ,
-                        const container_type &dxdt ,
-                        time_type t ,
-                        time_type dt )
-        {
-            // the time constant
-            const time_type a02 = static_cast<time_type>( 2.0 / 27.0 );
-            const time_type a03 = static_cast<time_type>( 1.0 / 9.0 );
-            const time_type a04 = static_cast<time_type>( 1.0 / 6.0 );
-            const time_type a05 = static_cast<time_type>( 5.0 / 12.0 );
-            const time_type a06 = static_cast<time_type>( 0.50 );
-            const time_type a07 = static_cast<time_type>( 5.0 / 6.0 );
-            const time_type a08 = static_cast<time_type>( 1.0 / 6.0 );
-            const time_type a09 = static_cast<time_type>( 2.0 / 3.0 );
-            const time_type a10 = static_cast<time_type>( 1.0 / 3.0 );
-
-            // the weights for each step
-            const time_type c06 = static_cast<time_type>( 34.0 / 105.0 );
-            const time_type c07 = static_cast<time_type>( 9.0 / 35.0 );
-            const time_type c08 = static_cast<time_type>( c07 );
-            const time_type c09 = static_cast<time_type>( 9.0 / 280.0 );
-            const time_type c10 = static_cast<time_type>( c09 );
-            const time_type c12 = static_cast<time_type>( 41.0 / 840.0 );
-            const time_type c13 = static_cast<time_type>( c12 );
-
-            // the coefficients for each step
-            const time_type b02_01 = static_cast<time_type>( 2.0 / 27.0 );
-
-            const time_type b03_01 = static_cast<time_type>( 1.0 / 36.0 );
-            const time_type b03_02 = static_cast<time_type>( 1.0 / 12.0 );
-
-            const time_type b04_01 = static_cast<time_type>( 1.0 / 24.0 );
-            const time_type b04_03 = static_cast<time_type>( 1.0 / 8.0 );
-
-            const time_type b05_01 = static_cast<time_type>( 5.0 / 12.0 );
-            const time_type b05_03 = static_cast<time_type>( -25.0 / 16.0 );
-            const time_type b05_04 = static_cast<time_type>( -b05_03 );
-
-            const time_type b06_01 = static_cast<time_type>( 0.050 );
-            const time_type b06_04 = static_cast<time_type>( 0.250 );
-            const time_type b06_05 = static_cast<time_type>( 0.20 );
-
-            const time_type b07_01 = static_cast<time_type>( -25.0 / 108.0 );
-            const time_type b07_04 = static_cast<time_type>( 125.0 / 108.0 );
-            const time_type b07_05 = static_cast<time_type>( -65.0 / 27.0 );
-            const time_type b07_06 = static_cast<time_type>( 125.0 / 54.0 );
-
-            const time_type b08_01 = static_cast<time_type>( 31.0 / 300.0 );
-            const time_type b08_05 = static_cast<time_type>( 61.0 / 225.0 );
-            const time_type b08_06 = static_cast<time_type>( -2.0 / 9.0 );
-            const time_type b08_07 = static_cast<time_type>( 13.0 / 900.0 );
-
-            const time_type b09_01 = static_cast<time_type>( 2.0 );
-            const time_type b09_04 = static_cast<time_type>( -53.0 / 6.0 );
-            const time_type b09_05 = static_cast<time_type>( 704.0 / 45.0 );
-            const time_type b09_06 = static_cast<time_type>( -107.0 / 9.0 );
-            const time_type b09_07 = static_cast<time_type>( 67.0 / 90.0 );
-            const time_type b09_08 = static_cast<time_type>( 3.0 );
-
-            const time_type b10_01 = static_cast<time_type>( -91.0 / 108.0 );
-            const time_type b10_04 = static_cast<time_type>( 23.0 / 108.0 );
-            const time_type b10_05 = static_cast<time_type>( -976.0 / 135.0 );
-            const time_type b10_06 = static_cast<time_type>( 311.0 / 54.0 );
-            const time_type b10_07 = static_cast<time_type>( -19.0 / 60.0 );
-            const time_type b10_08 = static_cast<time_type>( 17.0 / 6.0 );
-            const time_type b10_09 = static_cast<time_type>( -1.0 / 12.0 );
-
-            const time_type b11_01 = static_cast<time_type>( 2383.0 / 4100.0 );
-            const time_type b11_04 = static_cast<time_type>( -341.0 / 164.0 );
-            const time_type b11_05 = static_cast<time_type>( 4496.0 / 1025.0 );
-            const time_type b11_06 = static_cast<time_type>( -301.0 / 82.0 );
-            const time_type b11_07 = static_cast<time_type>( 2133.0 / 4100.0 );
-            const time_type b11_08 = static_cast<time_type>( 45.0 / 82.0 );
-            const time_type b11_09 = static_cast<time_type>( 45.0 / 164.0 );
-            const time_type b11_10 = static_cast<time_type>( 18.0 / 41.0 );
-
-            const time_type b12_01 = static_cast<time_type>( 3.0 / 205.0 );
-            const time_type b12_06 = static_cast<time_type>( -6.0 / 41.0 );
-            const time_type b12_07 = static_cast<time_type>( -3.0 / 205.0 );
-            const time_type b12_08 = static_cast<time_type>( -3.0 / 41.0 );
-            const time_type b12_09 = static_cast<time_type>( 3.0 / 41.0 );
-            const time_type b12_10 = static_cast<time_type>( 6.0 / 41.0 );
-
-            const time_type b13_01 = static_cast<time_type>( -1777.0 / 4100.0 );
-            const time_type b13_04 = static_cast<time_type>( b11_04 );
-            const time_type b13_05 = static_cast<time_type>( b11_05 );
-            const time_type b13_06 = static_cast<time_type>( -289.0 / 82.0 );
-            const time_type b13_07 = static_cast<time_type>( 2193.0 / 4100.0 );
-            const time_type b13_08 = static_cast<time_type>( 51.0 / 82.0 );
-            const time_type b13_09 = static_cast<time_type>( 33.0 / 164.0 );
-            const time_type b13_10 = static_cast<time_type>( 12.0 / 41.0 );
-            const time_type b13_12 = static_cast<time_type>( 1.0 );
-
-            const time_type val1 = static_cast<time_type>( 1.0 );
-
-            using namespace detail::it_algebra;
-
-            // compute the times at which system is evaluated
-            m_t02 = t + a02 * dt;
-            m_t03 = t + a03 * dt;
-            m_t04 = t + a04 * dt;
-            m_t05 = t + a05 * dt;
-            m_t06 = t + a06 * dt;
-            m_t07 = t + a07 * dt;
-            m_t08 = t + a08 * dt;
-            m_t09 = t + a09 * dt;
-            m_t10 = t + a10 * dt;
-            m_t11 = t + dt;
-            m_t12 = t;
-            m_t13 = t + dt;
-
-            // k1, the first system call has allready been evaluated
-
-            // k2 step
-            scale_sum( traits_type::begin(m_xt) , traits_type::end(m_xt) , 
-                       val1 , traits_type::begin(x) , 
-                       dt * b02_01 , traits_type::begin(dxdt) );
-            system( m_xt , m_k02 , m_t02 );
-
-            // k3 step
-            scale_sum( traits_type::begin(m_xt) , traits_type::end(m_xt) ,
-                       val1 , traits_type::begin(x) ,
-                       dt * b03_01 , traits_type::begin(dxdt) ,
-                       dt * b03_02 , traits_type::begin(m_k02) );
-            system( m_xt , m_k03 , m_t03 );
-
-
-            // k4 step
-            scale_sum( traits_type::begin(m_xt) , traits_type::end(m_xt) ,
-                       val1 , traits_type::begin(x) ,
-                       dt * b04_01 , traits_type::begin(dxdt) ,
-                       dt * b04_03 , traits_type::begin(m_k03) );
-            system( m_xt , m_k04 , m_t04 );
-
-
-            // k5 step
-            scale_sum( traits_type::begin(m_xt) , traits_type::end(m_xt) ,
-                       val1 , traits_type::begin(x) ,
-                       dt * b05_01 , traits_type::begin(dxdt) ,
-                       dt * b05_03 , traits_type::begin(m_k03) ,
-                       dt * b05_04 , traits_type::begin(m_k04) );
-            system( m_xt , m_k05 , m_t05 );
-
-
-            // k6 step
-            scale_sum( traits_type::begin(m_xt) , traits_type::end(m_xt) ,
-                       val1 , traits_type::begin(x) ,
-                       dt * b06_01 , traits_type::begin(dxdt) ,
-                       dt * b06_04 , traits_type::begin(m_k04) ,
-                       dt * b06_05 , traits_type::begin(m_k05) );
-            system( m_xt , m_k06 , m_t06 );
-
-
-            // k7 step
-            scale_sum( traits_type::begin(m_xt) , traits_type::end(m_xt) ,
-                       val1 , traits_type::begin(x) ,
-                       dt * b07_01 , traits_type::begin(dxdt) ,
-                       dt * b07_04 , traits_type::begin(m_k04) ,
-                       dt * b07_05 , traits_type::begin(m_k05) ,
-                       dt * b07_06 , traits_type::begin(m_k06) );
-            system( m_xt , m_k07 , m_t07 );
-
-
-            // k8 step 
-            scale_sum( traits_type::begin(m_xt) , traits_type::end(m_xt) ,
-                       val1 , traits_type::begin(x) ,
-                       dt * b08_01 , traits_type::begin(dxdt) ,
-                       dt * b08_05 , traits_type::begin(m_k05) ,
-                       dt * b08_06 , traits_type::begin(m_k06) ,
-                       dt * b08_07 , traits_type::begin(m_k07) );
-            system( m_xt , m_k08 , m_t08 );
-
-
-            // k9 step 
-            scale_sum( traits_type::begin(m_xt) , traits_type::end(m_xt) ,
-                       val1 , traits_type::begin(x) ,
-                       dt * b09_01 , traits_type::begin(dxdt) ,
-                       dt * b09_04 , traits_type::begin(m_k04) ,
-                       dt * b09_05 , traits_type::begin(m_k05) ,
-                       dt * b09_06 , traits_type::begin(m_k06) ,
-                       dt * b09_07 , traits_type::begin(m_k07) ,
-                       dt * b09_08 , traits_type::begin(m_k08) );
-            system( m_xt , m_k09 , m_t09 );
-
-            
-            // k10 step
-            scale_sum( traits_type::begin(m_xt) , traits_type::end(m_xt) ,
-                       val1 , traits_type::begin(x) ,
-                       dt * b10_01 , traits_type::begin(dxdt) ,
-                       dt * b10_04 , traits_type::begin(m_k04) ,
-                       dt * b10_05 , traits_type::begin(m_k05) ,
-                       dt * b10_06 , traits_type::begin(m_k06) ,
-                       dt * b10_07 , traits_type::begin(m_k07) ,
-                       dt * b10_08 , traits_type::begin(m_k08) ,
-                       dt * b10_09 , traits_type::begin(m_k09) );
-            system( m_xt , m_k10 , m_t10 );
-
-
-            // k11 step
-            scale_sum( traits_type::begin(m_xt) , traits_type::end(m_xt) ,
-                       val1 , traits_type::begin(x) ,
-                       dt * b11_01 , traits_type::begin(dxdt) ,
-                       dt * b11_04 , traits_type::begin(m_k04)  ,
-                       dt * b11_05 , traits_type::begin(m_k05) ,
-                       dt * b11_06 , traits_type::begin(m_k06) ,
-                       dt * b11_07 , traits_type::begin(m_k07) ,
-                       dt * b11_08 , traits_type::begin(m_k08) ,
-                       dt * b11_09 , traits_type::begin(m_k09) ,
-                       dt * b11_10 , traits_type::begin(m_k10) );
-            system( m_xt , m_k11 , m_t11 );
-
-
-            // k12 step
-            scale_sum( traits_type::begin(m_xt) , traits_type::end(m_xt) ,
-                       val1 , traits_type::begin(x) ,
-                       dt * b12_01 , traits_type::begin(dxdt) ,
-                       dt * b12_06 , traits_type::begin(m_k06) ,
-                       dt * b12_07 , traits_type::begin(m_k07) ,
-                       dt * b12_08 , traits_type::begin(m_k08) ,
-                       dt * b12_09 , traits_type::begin(m_k09) ,
-                       dt * b12_10 , traits_type::begin(m_k10) );
-            system( m_xt , m_k12 , m_t12 );
-
-
-            // k13 step
-            scale_sum( traits_type::begin(m_xt) , traits_type::end(m_xt) ,
-                       val1 , traits_type::begin(x) ,
-                       dt * b13_01 , traits_type::begin(dxdt) ,
-                       dt * b13_04 , traits_type::begin(m_k04) ,
-                       dt * b13_05 , traits_type::begin(m_k05) ,
-                       dt * b13_06 , traits_type::begin(m_k06) ,
-                       dt * b13_07 , traits_type::begin(m_k07) ,
-                       dt * b13_08 , traits_type::begin(m_k08) ,
-                       dt * b13_09 , traits_type::begin(m_k09) ,
-                       dt * b13_10 , traits_type::begin(m_k10) ,
-                       dt * b13_12 , traits_type::begin(m_k12) );
-            system( m_xt , m_k13 , m_t13 );
-
-            scale_sum( traits_type::begin(x) , traits_type::end(x) ,
-                       val1 , traits_type::begin(x) ,
-                       dt * c06 , traits_type::begin(m_k06) ,
-                       dt * c07 , traits_type::begin(m_k07) ,
-                       dt * c08 , traits_type::begin(m_k08) ,
-                       dt * c09 , traits_type::begin(m_k09) ,
-                       dt * c10 , traits_type::begin(m_k10) ,
-                       dt * c12 , traits_type::begin(m_k12) ,
-                       dt * c13 , traits_type::begin(m_k13) );
-        }
-
-
-        template< class DynamicalSystem >
-        void do_step( DynamicalSystem &system ,
-                      container_type &x ,
-                      time_type t ,
-                      time_type dt )
-        {
-            system( x , m_dxdt , t );
-            do_step( system , x , m_dxdt , t , dt );
-        }
-
-
-        template< class DynamicalSystem >
-        void do_step( DynamicalSystem &system ,
-                      container_type &x ,
-                      container_type &dxdt ,
-                      time_type t ,
-                      time_type dt ,
-                      container_type &xerr )
-        {
-            const time_type cc01 = static_cast<time_type>( 41.0 / 840.0 );
-            const time_type cc06 = static_cast<time_type>( 34.0 / 105.0 );
-            const time_type cc07 = static_cast<time_type>( 9.0 / 35.0 );
-            const time_type cc08 = static_cast<time_type>( cc07 );
-            const time_type cc09 = static_cast<time_type>( 9.0 / 280.0 );
-            const time_type cc10 = static_cast<time_type>( cc09 );
-            const time_type cc11 = static_cast<time_type>( cc01 );
-
-            using namespace detail::it_algebra;
-
-            xerr = x;
-            do_step( system , xerr , dxdt , t , dt );
-
-            // now, k1-k13 are calculated and stored in m_k01 - m_k13
-            scale_sum( traits_type::begin(x) , traits_type::end(x) ,
-                       static_cast<time_type>(1.0) , traits_type::begin(x) ,
-                       dt * cc01 , traits_type::begin(dxdt) ,
-                       dt * cc06 , traits_type::begin(m_k06) ,
-                       dt * cc07 , traits_type::begin(m_k07) ,
-                       dt * cc08 , traits_type::begin(m_k08) ,
-                       dt * cc09 , traits_type::begin(m_k09) ,
-                       dt * cc10 , traits_type::begin(m_k10) ,
-                       dt * cc11 , traits_type::begin(m_k11) );
-
-            increment( traits_type::begin(xerr) , traits_type::end(xerr) ,
-                       traits_type::begin(x) , static_cast<time_type>(-1.0) );
-        }
-
-        template< class DynamicalSystem >
-        void do_step( DynamicalSystem &system ,
-                      container_type &x ,
-                      time_type t ,
-                      time_type dt ,
-                      container_type &xerr )
-        {
-            system( x , m_dxdt , t );
-            do_step( system , x , m_dxdt , t , dt , xerr );
-        }
-    };
-
-} // namespace odeint
-} // namespace numeric
-} // namespace boost
-
-
-#endif //BOOST_NUMERIC_ODEINT_STEPPER_RK78_FEHLBERG_HPP_INCLUDED
Deleted: sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_rk_generic.hpp
==============================================================================
--- sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_rk_generic.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,438 +0,0 @@
-/* Boost odeint/stepper_rk_generic.hpp header file
- 
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
- Copyright 2009 Andre Bergner
- 
- This file includes generic Runge Kutta solver
- for ordinary differential equations.
-
- It solves any ODE dx/dt = f(x,t) using a general Runge Kutta scheme.
-
- 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_ODEINT_STEPPER_RK_GENERIC_HPP
-#define BOOST_NUMERIC_ODEINT_STEPPER_RK_GENERIC_HPP
-
-#include <vector>
-#include <exception>
-#include <cmath> // for pow( ) and abs()
-#include <limits>
-
-#include <boost/numeric/odeint/container_traits.hpp>
-
-
-namespace boost {
-namespace numeric {
-namespace odeint {
-
-
-    class butcher_tableau_consistency_exception : public std::exception {
-        
-        virtual const char* what() const throw()
-        {
-            return "Consistency Check of Butcher Tableau failed!";
-        }
-    };
-
-    class butcher_tableau_order_condition_exception : public std::exception {
-
-        virtual const char* what() const throw()
-        {
-            return "Order Condition Check of Butcher Tableau failed!";
-        }
-    };
-
-
-    template<
-        class Container ,
-        class Time = double ,
-        class Traits = container_traits< Container >
-        >
-    class stepper_rk_generic
-    {
-
-
-        // provide basic typedefs
-    public:
-
-        typedef unsigned short order_type;
-        typedef Time time_type;
-        typedef Traits traits_type;
-        typedef typename traits_type::container_type container_type;
-        typedef typename traits_type::value_type value_type;
-        typedef typename traits_type::iterator iterator;
-        typedef typename traits_type::const_iterator const_iterator;
-
-
-
-
-
-        // private variables
-    private:
-
-        typedef std::vector< container_type > container_vector;
-        typedef std::vector< iterator > container_iterator_vector;
-        typedef std::vector< time_type > parameter_vector;
-        typedef std::vector< parameter_vector > parameter_matrix;
-
-        container_vector m_xvec;
-        container_iterator_vector m_xiter_vec;
-        container_type m_xtmp;
-        const parameter_vector m_a;
-        const parameter_matrix m_b;
-        const parameter_vector m_c;
-
-        order_type m_q;
-
-
-
-	// private member functions
-    private:
-
-        void reset_iter(typename container_iterator_vector::iterator xiter_iter)
-        {
-            typename container_vector::iterator x_iter = m_xvec.begin();
-            while( x_iter != m_xvec.end() ) {
-                (*xiter_iter++) = traits_type::begin(*x_iter++);
-            }
-        }
-
-        void check_consitency()
-        {
-            typename parameter_vector::const_iterator a_iter = m_a.begin();
-            typename parameter_vector::const_iterator c_iter = m_c.begin();
-            typename parameter_matrix::const_iterator b_iter = m_b.begin();
-            typename parameter_vector::const_iterator b_iter_iter;
-
-            // check 1: a_i = sum_j b_ij 
-            while( a_iter != m_a.end() ) {
-                time_type tmp = 0.0;
-                b_iter_iter = (*b_iter).begin();
-                while( b_iter_iter != (*b_iter).end() ) {
-                    tmp += *b_iter_iter++;
-                }
-                b_iter++;
-                if( *a_iter++ != tmp ) 
-                    throw butcher_tableau_consistency_exception();
-            }
-
-            // check 2: sum_i c_i * (a_i)^(k-1) = 1/k   k = 1..q
-            for( unsigned short k = 1; k <= m_q; k++ ) {
-                time_type tmp = 0.0;
-                a_iter = m_a.begin();
-                c_iter = m_c.begin();
-                if( k == 1 ) // special treatment for 0^0 = 1
-                    tmp += *c_iter++;
-                else
-                    c_iter++;
-                while( a_iter != m_a.end() ) {
-                    //std::clog<<pow( *a_iter , k-1 )<< ", ";
-                    tmp += (*c_iter++) * pow( *a_iter++ , k-1 );
-                }
-                //std::clog << tmp << " = " << time_type(1.0)/time_type(k) << "?" << std::endl;
-                if( std::abs(time_type(tmp - time_type(1.0)/time_type(k))) > 
-                    std::numeric_limits<time_type>::epsilon() ) {
-                    //std::clog << std::abs(time_type(tmp - time_type(1.0)/time_type(k))) << std::endl;
-                    throw butcher_tableau_order_condition_exception();
-                }
-            }
-        }
-
-
-    public:
-
-
-
-        /* Constructor
-
-           a,b,c are vectors providing the butcher tableau for the Runge Kutta scheme
-           
-           0     |
-           a_1   | b_21
-           a_2   | b_31 b_32
-           ...   | ...  ...
-           a_q-1 | b_q1 b_q2 ... b_qq-1
-           -------------------------------
-                 | c_1  c_2  ... c_q-1  c_q
-
-          The size of c is determining the order of the scheme q.
-          a is of length q-1
-          b is of length q-1, b[0] of length 1, b[1] of length 2 and so on
-          c is of length q (which defines q).
-
-          There are 2 conditions that these parameters have to fullfill:
-          Consitency:
-
-              a_i = sum_j b_ij  for i = 1 ... q-1
-
-          Condition on the order of the method (all error terms dt^k , k<q+1 cancel out):
-
-              sum_i c_i * (a_(i+1))^(k-1) = 1/k   k = 1 ... q
-
-              Note, that a_0 = 1 (implicitely) and 0^0 = 1
-              so this means sum_i c_i = 1 at k=1
-        */
-        stepper_rk_generic( parameter_vector &a,
-                            parameter_matrix &b,
-                            parameter_vector &c)
-            : m_a(a), m_b(b), m_c(c), m_q(c.size())
-        {
-            m_xvec.resize(m_q);
-            m_xiter_vec.resize(m_q);
-
-            check_consitency();
-        }
-
-        order_type order() const { return m_q; }
-
-
-        template< class DynamicalSystem >
-        void do_step( DynamicalSystem &system ,
-                      container_type &x ,
-                      container_type &dxdt ,
-                      time_type t ,
-                      time_type dt )
-        {
-            using namespace detail::it_algebra;
-            typename container_vector::iterator x_iter = m_xvec.begin();
-            typename container_iterator_vector::iterator xiter_iter = m_xiter_vec.begin();
-
-            (*x_iter) = dxdt;
-            (*xiter_iter++) = traits_type::begin(*x_iter++);
-
-            while( x_iter != m_xvec.end() )
-            {
-                traits_type::adjust_size(x, (*x_iter));
-                (*xiter_iter++) = traits_type::begin(*x_iter++);
-            }
-            traits_type::adjust_size(x, m_xtmp);
-            
-            x_iter = m_xvec.begin()+1;
-            
-            typename parameter_vector::const_iterator a_iter = m_a.begin();
-            typename parameter_matrix::const_iterator b_iter = m_b.begin();
-            while( x_iter != m_xvec.end() )
-            {
-                reset_iter(m_xiter_vec.begin());
-                scale_sum_generic( traits_type::begin(m_xtmp), traits_type::end(m_xtmp),
-                                   (*b_iter).begin(), (*b_iter).end(), dt,
-                                   traits_type::begin(x), m_xiter_vec.begin() );
-                system( m_xtmp, *x_iter++ , t + dt*(*a_iter++) );
-                b_iter++;
-            }
-
-            reset_iter(m_xiter_vec.begin());
-            typename parameter_vector::const_iterator c_iter = m_c.begin();
-            scale_sum_generic( traits_type::begin(x), traits_type::end(x),
-                               m_c.begin(), m_c.end(), dt,
-                               traits_type::begin(x), m_xiter_vec.begin() );
-        }
-
-        template< class DynamicalSystem >
-        void do_step( DynamicalSystem &system ,
-                        container_type &x ,
-                        time_type t ,
-                        time_type dt )
-        {
-            traits_type::adjust_size(x, m_xtmp);
-            system(x, m_xtmp, t);
-            do_step( system, x, m_xtmp, t, dt);
-        }
-
-    };
-
-
-
-    /* ############################################################
-       ############################################################
-
-       C-Array Version of a,b,c handling
-
-       ############################################################
-       ############################################################
-    */
-
-
-
-
-    template<
-        class Container ,
-        class Time = double ,
-        class Traits = container_traits< Container >
-        >
-    class stepper_rk_generic_ptr
-    {
-
-
-        // provide basic typedefs
-    public:
-
-        typedef unsigned short order_type;
-        typedef Time time_type;
-        typedef Traits traits_type;
-        typedef typename traits_type::container_type container_type;
-        typedef typename traits_type::value_type value_type;
-        typedef typename traits_type::iterator iterator;
-        typedef typename traits_type::const_iterator const_iterator;
-
-        // private variables
-    private:
-
-        typedef std::vector< container_type > container_vector;
-        typedef std::vector< iterator > container_iterator_vector;
-        typedef std::vector< time_type > parameter_vector;
-        typedef std::vector< parameter_vector > parameter_matrix;
-
-        container_vector m_xvec;
-        container_iterator_vector m_xiter_vec;
-        container_type m_xtmp;
-        const time_type* m_a;
-        const time_type* m_b;
-        const time_type* m_c;
-
-        order_type m_q;
-
-
-    private:
-        void reset_iter(typename container_iterator_vector::iterator xiter_iter)
-        {
-            typename container_vector::iterator x_iter = m_xvec.begin();
-            while( x_iter != m_xvec.end() ) {
-                (*xiter_iter++) = traits_type::begin(*x_iter++);
-            }
-        }
-
-        void check_consitency()
-        {
-            const time_type* a_iter = &m_a[0];
-            const time_type* b_iter = &m_b[0];
-            const time_type* c_iter = &m_c[0];
-
-            unsigned short b_len = 1;
-            // check 1: a_i = sum_j b_ij 
-            while( a_iter != &m_a[+m_q-1] ) {
-                time_type tmp = 0.0;
-                const time_type* b_end = b_iter + b_len;
-                while( b_iter != b_end ) {
-                    tmp += *b_iter++;
-                }
-                b_len++;
-                if( *a_iter++ != tmp ) 
-                    throw butcher_tableau_consistency_exception();
-            }
-
-            // check 2: sum_i c_i * (a_i)^(k-1) = 1/k   k = 1..q
-            for( unsigned short k = 1; k <= m_q; k++ ) {
-                time_type tmp = 0.0;
-                a_iter = &m_a[0];
-                c_iter = &m_c[0];
-                if( k == 1 ) // special treatment for 0^0 = 1
-                    tmp += *c_iter++;
-                else
-                    c_iter++;
-                while( a_iter != &m_a[m_q-1] ) {
-                    tmp += (*c_iter++) * pow( *a_iter++ , k-1 );
-                }
-                if( std::abs(time_type(tmp - time_type(1.0)/time_type(k))) > 
-                    std::numeric_limits<time_type>::epsilon() ) {
-                    //std::clog << std::abs(time_type(tmp - time_type(1.0)/time_type(k))) << std::endl;
-                    throw butcher_tableau_order_condition_exception();
-                }
-            }
-        }
-
-
-    public:
-
-        /* Constructor
-           
-           Same as for the stepper_rk_generic class, but with a, b and c provided 
-           as time_type*. The order q of the integration scheme is given separately 
-           as parameter. a is a pointer to an array of time_type[] of length q-1,
-           b is of length 1 + 2 + ... q-1 = (q-1)(q-2)/2 and ordered as follows:
-           b[0] = b_21, b[1] = b_31, b[2] = b_32, b[3] = b_41, b[4] = b42 ...
-           c has length q.
-           
-        */
-        stepper_rk_generic_ptr( const time_type* a,
-                                const time_type* b,
-                                const time_type* c,
-                                const unsigned short q)
-            : m_a(a), m_b(b), m_c(c), m_q(q)
-        {
-            m_xvec.resize(m_q);
-            m_xiter_vec.resize(m_q);
-
-            check_consitency();
-        }
-
-        order_type order() const { return m_q; }
-
-        template< class DynamicalSystem >
-        void do_step( DynamicalSystem &system ,
-                        container_type &x ,
-                        container_type &dxdt ,
-                        time_type t ,
-                        time_type dt )
-        {
-            using namespace detail::it_algebra;
-            typename container_vector::iterator x_iter = m_xvec.begin();
-            typename container_iterator_vector::iterator xiter_iter = m_xiter_vec.begin();
-
-            (*x_iter) = dxdt;
-            (*xiter_iter++) = traits_type::begin(*x_iter++);
-
-            while( x_iter != m_xvec.end() )
-            {
-                traits_type::adjust_size(x, (*x_iter));
-                (*xiter_iter++) = traits_type::begin(*x_iter++);
-            }
-            traits_type::adjust_size(x, m_xtmp);
-            
-            x_iter = m_xvec.begin()+1;
-            
-            const time_type* a_iter = &m_a[0];
-            const time_type* b_iter = &m_b[0];
-            unsigned short b_len= 1;
-            while( x_iter != m_xvec.end() )
-            {
-                reset_iter(m_xiter_vec.begin());
-                const time_type* b_end = b_iter + b_len;
-                scale_sum_generic( traits_type::begin(m_xtmp), traits_type::end(m_xtmp),
-                                   b_iter, b_end, dt,
-                                   traits_type::begin(x), m_xiter_vec.begin() );
-                system( m_xtmp, *x_iter++ , t + dt*(*a_iter++) );
-                b_iter = b_end;
-                b_len++;
-            }
-
-            reset_iter(m_xiter_vec.begin());
-            scale_sum_generic( traits_type::begin(x), traits_type::end(x),
-                               &m_c[0], &m_c[m_q], dt,
-                               traits_type::begin(x), m_xiter_vec.begin() );
-        }
-
-
-
-        template< class DynamicalSystem >
-        void do_step( DynamicalSystem &system ,
-                        container_type &x ,
-                        time_type t ,
-                        time_type dt )
-        {
-            traits_type::adjust_size(x, m_xtmp);
-            system(x, m_xtmp, t);
-            do_step( system, x, m_xtmp, t, dt);
-        }
-
-    };
-
-}
-}
-}
-
-#endif
Added: sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers.hpp
==============================================================================
--- (empty file)
+++ sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
@@ -0,0 +1,33 @@
+/*
+ boost header: boost/numeric/odeint/steppers.hpp
+
+ Copyright 2009 Karsten Ahnert
+ Copyright 2009 Mario Mulansky
+ Copyright 2009 Andre Bergner
+
+ 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_BOOST_NUMERIC_ODEINT_STEPPERS_HPP_INCLUDED
+#define BOOST_BOOST_NUMERIC_ODEINT_STEPPERS_HPP_INCLUDED
+
+// steppers
+#include <boost/numeric/odeint/steppers/stepper_euler.hpp>
+
+
+// error steppers
+#include <boost/numeric/odeint/steppers/stepper_half_step.hpp>
+
+
+// hamiltonian steppers
+#include <boost/numeric/odeint/steppers/hamiltonian_stepper_euler.hpp>
+
+
+// controlled steppers
+#include <boost/numeric/odeint/steppers/error_checker_standard.hpp>
+#include <boost/numeric/odeint/steppers/controlled_stepper_standard.hpp>
+
+
+#endif //BOOST_BOOST_NUMERIC_ODEINT_STEPPERS_HPP_INCLUDED
Copied: sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers/controlled_stepper_standard.hpp (from r61775, /sandbox/odeint/branches/karsten/boost/numeric/odeint/controlled_stepper_standard.hpp)
==============================================================================
--- /sandbox/odeint/branches/karsten/boost/numeric/odeint/controlled_stepper_standard.hpp	(original)
+++ sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers/controlled_stepper_standard.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
@@ -18,10 +18,10 @@
 #include <algorithm>
 #include <complex>
 
-#include <boost/numeric/odeint/error_checker_standard.hpp>
-#include <boost/numeric/odeint/container_traits.hpp>
+#include <boost/numeric/odeint/steppers/error_checker_standard.hpp>
+#include <boost/numeric/odeint/container_traits/container_traits.hpp>
 
-#include <boost/numeric/odeint/detail/iterator_algebra.hpp>
+#include <boost/numeric/odeint/steppers/detail/iterator_algebra.hpp>
 
 
 
Copied: sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers/hamiltonian_stepper_euler.hpp (from r61775, /sandbox/odeint/branches/karsten/boost/numeric/odeint/hamiltonian_stepper_euler.hpp)
==============================================================================
--- /sandbox/odeint/branches/karsten/boost/numeric/odeint/hamiltonian_stepper_euler.hpp	(original)
+++ sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers/hamiltonian_stepper_euler.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
@@ -15,8 +15,8 @@
 
 #include <stdexcept>
 
-#include <boost/numeric/odeint/detail/iterator_algebra.hpp>
-#include <boost/numeric/odeint/container_traits.hpp>
+#include <boost/numeric/odeint/steppers/detail/iterator_algebra.hpp>
+#include <boost/numeric/odeint/container_traits/container_traits.hpp>
 
 namespace boost {
 namespace numeric {
@@ -49,7 +49,7 @@
     public:
 
         template< class CoordinateFunction >
-	void do_step( CoordinateFunction &qfunc ,
+	void do_step( CoordinateFunction qfunc ,
                       container_type &q ,
                       container_type &p ,
                       time_type dt )
Copied: sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers/stepper_euler.hpp (from r61775, /sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_euler.hpp)
==============================================================================
--- /sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_euler.hpp	(original)
+++ sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers/stepper_euler.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
@@ -18,11 +18,8 @@
 #ifndef BOOST_NUMERIC_ODEINT_STEPPER_EULER_HPP
 #define BOOST_NUMERIC_ODEINT_STEPPER_EULER_HPP
 
-#include <boost/numeric/odeint/detail/iterator_algebra.hpp>
-#include <boost/numeric/odeint/container_traits.hpp>
-
-// #include <boost/numeric/odeint/stepper_base.hpp>
-
+#include <boost/numeric/odeint/steppers/detail/iterator_algebra.hpp>
+#include <boost/numeric/odeint/container_traits/container_traits.hpp>
 
 namespace boost {
 namespace numeric {
@@ -45,8 +42,6 @@
         typedef Traits traits_type;
         typedef typename traits_type::container_type container_type;
         typedef typename traits_type::value_type value_type;
-//        typedef typename traits_type::iterator iterator;
-//        typedef typename traits_type::const_iterator const_iterator;
 
 
         //
Copied: sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers/stepper_half_step.hpp (from r61775, /sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_half_step.hpp)
==============================================================================
--- /sandbox/odeint/branches/karsten/boost/numeric/odeint/stepper_half_step.hpp	(original)
+++ sandbox/odeint/branches/karsten/boost/numeric/odeint/steppers/stepper_half_step.hpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
@@ -16,7 +16,8 @@
 #ifndef BOOST_NUMERIC_ODEINT_STEPPER_HALF_STEP_HPP
 #define BOOST_NUMERIC_ODEINT_STEPPER_HALF_STEP_HPP
 
-#include <boost/numeric/odeint/detail/iterator_algebra.hpp>
+#include <boost/numeric/odeint/container_traits/container_traits.hpp>
+#include <boost/numeric/odeint/steppers/detail/iterator_algebra.hpp>
 
 #include <iostream>
 
Modified: sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/Jamfile
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/Jamfile	(original)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/Jamfile	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
@@ -8,22 +8,10 @@
     : requirements 
       <include>../../../..
       <include>$BOOST_ROOT
-      <include>$BLITZ_ROOT
-      <include>$MTL4_ROOT
       <define>BOOST_ALL_NO_LIB=1
     : build-dir .
     ;
 
-exe harmonic_oscillator : harmonic_oscillator.cpp ;
-
-
-exe lorenz_cmp_rk4_rk_generic : lorenz_cmp_rk4_rk_generic.cpp ;
-exe lorenz_controlled : lorenz_controlled.cpp ;
-exe lorenz_integrate_constant_step : lorenz_integrate_constant_step.cpp ;
-exe lorenz_integrator : lorenz_integrator.cpp ;
-exe lorenz_stepper : lorenz_stepper.cpp ;
-exe pendulum_vibrating_pivot : pendulum_vibrating_pivot.cpp ;
-exe dnls : dnls.cpp ;
-
 exe doc_harm_osc : doc_harm_osc.cpp ;
 exe doc_integrate : doc_integrate.cpp ;
+exe solar_system : solar_system.cpp point_type.hpp ;
Deleted: sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/dnls.cpp
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/dnls.cpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,115 +0,0 @@
-/* Boost numeric/odeint/examples/lorenz_integrator.cpp
- 
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
-
- compares the steppers rk4 and rk78
- the system is the dnls, which is complex and Hamiltonian
-
- 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)
-*/
-
-#include <iostream>
-#include <vector>
-#include <iterator>
-#include <list>
-#include <algorithm>
-#include <tr1/array>
-
-#include <boost/numeric/odeint.hpp>
-
-#define tab "\t"
-
-using namespace std;
-using namespace std::tr1;
-using namespace boost::numeric::odeint;
-
-
-const size_t n = 64;
-const double beta = 1.0;
-
-typedef array< complex<double> , n > state_type;
-
-const complex<double> II( 0.0 , -1.0 );
-
-void dnls( state_type &x , state_type &dxdt , double t )
-{
-    dxdt[0] = II * ( beta * norm( x[0] ) * x[0] + x[1] + x[n-1] );
-    for( size_t i=1 ; i<n-1 ; ++i )
-        dxdt[i] = II * ( beta * norm( x[i] ) * x[i] + x[i+1] + x[i-1] );
-    dxdt[n-1] = II * ( beta * norm( x[n-1] ) * x[n-1] + x[0] + x[n-2] );
-}
-
-double norm( const state_type &x )
-{
-    double nn = 0.0;
-    state_type::const_iterator iter = x.begin() ;
-    while( iter != x.end() ) nn += norm( *iter++ );
-    return nn;
-}
-
-double energy( const state_type &x )
-{
-    double e = 0.0 , nn;
-    for( size_t i=0 ; i<n-1 ; ++i )
-    {
-        nn = norm( x[i] );
-        e += 0.5 * beta * nn * nn + 2.0 * ( x[i]*conj(x[i+1]) ).real();
-    }
-    nn = norm( x[n-1] );
-    e += 0.5 * beta * nn * nn + 2.0 * ( x[n-1]*conj(x[0]) ).real();
-    return e;
-}
-
-ostream& operator<<( ostream &out , const state_type &x )
-{
-    state_type::const_iterator iter = x.begin() ;
-    while( iter != x.end() )
-    {
-        const complex<double> &y = *iter++;
-        out << y.real() << tab << y.imag() << tab << norm( y ) << "\n";
-    }
-    return out;
-}
-
-int main( int argc , char **argv )
-{
-    state_type x;
-
-    generate( x.begin() , x.end() , drand48 );
-
-    state_type x1( x ) , x2( x );
-    stepper_rk4< state_type > rk4;
-    stepper_rk78_fehlberg< state_type > rk78;
-
-    double norm0 = norm( x1 ) , energy0 = energy( x1 );
-
-    const size_t olen = 10000 , ilen = 100;
-    const double dt = 0.01;
-    double t = 0.0;
-    cout.precision(14);
-    cout.flags( ios::scientific );
-    for( size_t oi=0 ; oi<olen ; ++oi )
-    {
-        double norm1 = norm( x1 ) , norm2 = norm( x2 );
-        double energy1 = energy( x1 ) , energy2 = energy( x2 );
-
-        cout << t << tab;
-        cout << norm1 << tab << norm2 << tab;
-        cout << energy1 << tab << energy2 << tab;
-        cout << norm1 - norm0 << tab << norm2 - norm0 << tab;
-        cout << energy1 - energy0 << tab << energy2 - energy0 << endl;
-
-        for( size_t ii=0 ; ii<ilen ; ++ii,t+=dt )
-        {
-            rk4.do_step( dnls , x1 , t , dt );
-            rk78.do_step( dnls , x2 , t , dt );
-        }
-    }
-
-
-
-    return 0;
-}
Modified: sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/doc_integrate.cpp
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/doc_integrate.cpp	(original)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/doc_integrate.cpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
@@ -33,20 +33,21 @@
     harm_osc harmonic_oscillator(0.15);
 
     //[ define_const_stepper
-    stepper_rk4< state_type > rk4;
+    stepper_euler< state_type > euler;
     //]
 
     //[ integrate_const
-    integrate_const( rk4, harmonic_oscillator, x , 0.0, 10.0 , 0.01);
+    integrate_const( euler, harmonic_oscillator, x , 0.0, 10.0 , 0.01);
     //]
 
 
     //[ define_adapt_stepper
-    stepper_rk5_ck< state_type > rk5;
+    stepper_half_step< stepper_euler< state_type > > half_stepper;
     //]
 
     //[ define_conntrolled_stepper
-    controlled_stepper_standard< stepper_rk5_ck< state_type > > 
+    controlled_stepper_standard<
+        stepper_half_step< stepper_euler< state_type > > > 
         controlled_rk5( 1E-6 , 1E-7 , 1.0 , 1.0 );
     //]
 
Deleted: sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/harmonic_oscillator.cpp
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/harmonic_oscillator.cpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,294 +0,0 @@
-/* Boost numeric/odeint/examples/harm_osc.cpp
- 
- Copyright 2009 A. Constantine Ashford
-
- Demonstrates the use of odeint to estimate the (known) solution to a simple,
- undriven harmonic  oscillator:
-
- y'' = -y - gamma*y'
-
- This example uses the Euler solver as well as he fourth-order Runge Kutta. 
- The output of each is printed in the output. The accuracy can be compared, or
- the program can be profiled for a speed comparison.
- 
- The analytical solution to this ODE is (with initial displacement y and no 
- initial velocity y'):
-
- Y = exp( -.5*gamma*t ) * cos( sqrt(1-gamma^2)*t )
-
- This example calculates the analytical solution using the standard math
- library and outputs the values at the same time points for comparison and
- plotting.
-
- On a unix system, a plot of the output could be created easily using gnuplot
- and the following commands:
- 
- $ plot "harm_osc.out" using 1:2 title 'Euler' with dots,\
- $ "harm_osc.out" using 1:5 title 'Runge Kutta 4' with dots,\
- $ "harm_osc.out" using 1:8 title 'Exact' with dots
-
- The step size, number of steps to integrate, output file name, and gamma can
- be specified on the command line IFF you have the boost library files installed
- *which are at the same version as this example is compiled against*. You can
- enable the command line options by compiling with the preprocessor variable
- BOOST_PROGRAM_OPTIONS_INSTALLED defined.
-
-
- Compile with:
- g++ -Wall -O3 -march=k8 -I$BOOST_DIR -I../../../../ harmonic_oscillator.cpp
-
- 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)
-*/
-
-#include <iostream>
-#include <fstream>
-#include <iomanip>
-#include <vector>
-#include <cmath>
-
-#include <boost/numeric/odeint.hpp>
-
-#ifdef BOOST_PROGRAM_OPTIONS_INSTALLED
-#include <boost/program_options.hpp>
-namespace opts=boost::program_options;
-#endif
-
-namespace odeint=boost::numeric::odeint;
-
-// Namespace for variables specific to this example
-namespace harm_osc
-{
-  double gamma = .15;
-  double dt = 0.01; 
-  size_t olen = 10000;
-  std::ofstream fout;
-
-  // The type of container used to hold the state vector
-  typedef std::vector<double> state_type;
-
-  /*
-    void harmonic_oscillator(state_type &x, state_type &dxdt, double t)
-
-    Calculates the derivatives of the state vector for the harmonic oscillator
-    system. The system equation is described in the opening comments.
-
-    The state vector is:
-     x[0] = Y (the output)
-     x[1] = Y' (dY/dt)
-
-    Arguments:
-     state_type &x: reference to the current state vector [ Y Y' ]
-     state_type &dxdt: reference to the vector of calculated derivitives
-      [ Y' Y'']
-     double t: the current integration time
-  */
-  void harmonic_oscillator(const state_type &x, state_type &dxdt, const double t)
-  {
-    dxdt[0] = x[1];
-    dxdt[1] = -x[0] - gamma*x[1];
-  }
-
-  /*
-    Optionally included function to parse the command line. See detailed
-    comments and implementation at the bottom of this file
-  */
-  int parse_command_line(int ac, char ** av);
-}
-
-// Main
-int main(int argc, char **argv)
-{
-  using namespace std;
-
-  // Save the original destination of cout in case we redirect to a file
-  // as a result of --filename command line option
-  streambuf * cout_buf = cout.rdbuf();
-
-  // Parse the command line options iff boost::program_options is installed
-  #ifdef BOOST_PROGRAM_OPTIONS_INSTALLED
-  int parse_ret = harm_osc::parse_command_line(argc, argv);
-  if(parse_ret)
-      return parse_ret;
-  #endif
-
-  // Declare state vectors for the Euler system, and the Runge Kutta system
-  harm_osc::state_type x_euler(2);
-  harm_osc::state_type x_rk4(2);
-
-  // Set identical initial conditions for the Euler solver and the Runge Kutta
-  x_euler[0] = 1.0;
-  x_euler[1] = 0.0;
-  x_rk4[0] = 1.0;
-  x_rk4[1] = 0.0;
-
-  // Initialize the solvers
-  odeint::stepper_euler<harm_osc::state_type> euler;
-  odeint::stepper_rk4<harm_osc::state_type> rk4;
-
-  euler.adjust_size( x_euler );
-  rk4.adjust_size( x_rk4 );
-
-  
-  // Write the output header. The '#' symbol creates a comment in gnuplot
-  cout << "# Output from the simple harmonic oscillator example." << endl;
-  cout << "#" << endl;
-  cout << "# Columns:" << endl;
-  cout << "#" << endl;
-  cout << "# 	1: time (s)" << endl;
-  cout << "#	2: Euler output" << endl;
-  cout << "#	3: Euler output dY/dt" << endl;
-  cout << "# 	4: Euler output error" << endl;
-  cout << "#	5: 4th Order Runge Kutta output" << endl;
-  cout << "#	6: 4th Order Runge Kutta dY/dt" << endl;
-  cout << "# 	7: 4th Order Runge Kutta output error" << endl;
-  cout << "# 	8: Analytical (calculated) solution" <<endl;
-  cout << "#" << endl;
-  cout << "# A. Constantine Ashford" << endl;
-  cout << "#" << endl;
-
-// Initialize the time variable, and the analytical solution variable
-  double t = 0.0;
-  double reference;
-  double e_error = 0, r_error = 0;
-  double e_error_max = 0, r_error_max = 0;
-  double e_error_rms = 0, r_error_rms = 0;
-  int data_column_width = 15;
-
-  // Integrate and write the approximate and analytical results to a table
-  for(size_t oi=0; oi < harm_osc::olen; ++oi, t += harm_osc::dt)
-    {
-      // Calculate the analytical solution for this time
-      reference = exp(-.5*harm_osc::gamma*t) *
-          cos(sqrt(1-pow(harm_osc::gamma,2))*t);
-
-      // Calculate absolute errors for the data table
-      e_error = abs((reference - x_euler[0])/reference);
-      r_error = abs((reference - x_rk4[0])/reference);
-         
-      // Write all the results to a row in the table
-      cout << setw(5) << t
-	   << setw(data_column_width) << x_euler[0]
-	   << setw(data_column_width) << x_euler[1]
-	   << setw(data_column_width) << e_error
-	   << setw(data_column_width) << x_rk4[0]
-	   << setw(data_column_width) << x_rk4[1]
-	   << setw(data_column_width) << r_error
-	   << setw(data_column_width) << reference
-	   << endl;
-
-      // Aggregate statistics
-      if( (e_error = abs(e_error)) > e_error_max)
-          e_error_max = e_error;
-      
-      if((r_error = abs(r_error)) > r_error_max)
-          r_error_max = r_error;
-
-      e_error_rms += pow(e_error, 2);
-      r_error_rms += pow(r_error, 2);
-       
-      // Advance the solvers
-      euler.do_step(harm_osc::harmonic_oscillator,
-                      x_euler, t, harm_osc::dt);
-
-      rk4.do_step(harm_osc::harmonic_oscillator,
-                    x_rk4, t, harm_osc::dt);
-      
-    }
-
-  e_error_rms = sqrt(e_error_rms/harm_osc::olen);
-  r_error_rms = sqrt(r_error_rms/harm_osc::olen);
-  
-  // Restore cout to direct to standard out in case we redirected to a file
-  cout.rdbuf(cout_buf);
-  cout << "#Integration complete." << endl;
-  cout << "#Errors for the Euler solver: MAX: " << e_error_max << " RMS: "
-       << e_error_rms << endl;
-  cout << "#Errors for the Runge Kutta solver: MAX: " << r_error_max << " RMS: "
-       << r_error_rms << endl;
-  
-
-  // Success
-  return 0;
-}
-
-#ifdef BOOST_PROGRAM_OPTIONS_INSTALLED
-/*
-parse_command_line(int ac, char ** av)
-
-Uses boost::program_options to parse the command line.
-Allows the example to use runtime options such as:
---step=.001 or 
---step .001
-
-Arguments:
- int ac: the number of command line arguments. Usually just pass in argc
- from main.
-
- char ** av: an array of c-style strings holding the command line arguments.
- Usually just pass in argv from main.
-
-Return value: 1 if the user chose the --help option, and does *not* wish to
-run an integration. Otherwise 0.
-
-*/
-int harm_osc::parse_command_line(int ac, char ** av)
-{
-  using namespace std;
-
-  // Declare supported options
-  opts::options_description opts_desc("Allowed options");
-  opts_desc.add_options()
-    ("help", "Display this message.")
-    ("file", opts::value<string>(), "Output file for data.(Default: stdout)")
-    ("step", opts::value<double>(), "Set step size (in seconds)")
-    ("duration", opts::value<size_t>(), "Set integration duration (in steps)")
-    ("gamma", opts::value<double>(), "Set gamma equation parameter");
-
-  // Let Boost Program Options parse the command line
-  opts::variables_map opts_map;
-  opts::store(opts::parse_command_line(ac, av, opts_desc), opts_map);
-  opts::notify(opts_map);
-
-  // Print help message then exit
-  if(opts_map.count("help"))
-    {
-       cout << opts_desc << endl;
-       return 1;
-    }
-
-  // Alter step size in seconds
-  if(opts_map.count("step"))
-    {
-      harm_osc::dt = opts_map["step"].as<double>();
-      cout << "Step size set to " << harm_osc::dt << " seconds" << endl;
-    }
-
-  // Change integration duration (in steps)
-  if(opts_map.count("duration"))
-    {
-      harm_osc::olen = opts_map["duration"].as<size_t>();
-      cout << "Integration duration set to " << harm_osc::olen << " steps."
-	   << endl;
-    }
-
-  // Change damping constant
-  if(opts_map.count("gamma"))
-    {
-      harm_osc::gamma = opts_map["gamma"].as<double>();
-      cout << "Parameter GAMMA set to " << harm_osc::gamma << "." << endl;
-    }
-
-  // Redirect output from standard out to file 
-  if(opts_map.count("file"))
-    {
-      cout << "Writing output to file " << opts_map["file"].as<string>()
-	   << endl;
-      fout.open(opts_map["file"].as<string>().c_str());
-      cout.rdbuf(fout.rdbuf());
-    }
-
-  return 0;
-}
-#endif
Deleted: sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/lorenz_cmp_rk4_rk_generic.cpp
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/lorenz_cmp_rk4_rk_generic.cpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,151 +0,0 @@
-/* Boost numeric/odeint/examples/lorenz_cmp_rk4_rk_generic.cpp
- 
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
-
- Lorenz Eqquations:
- dx/dt = sigma * ( x - y)
- dy/dt = R*x - y - x*z
- dz/dt = x*y - b*z
-
- with sigma = 10, r=28, b = 8/3
-
- 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)
-*/
-
-#include <iostream>
-#include <vector>
-#include <list>
-#include <tr1/array>
-
-#include <boost/numeric/odeint.hpp>
-#include <boost/numeric/odeint/stepper_rk_generic.hpp>
-
-#define tab "\t"
-
-using namespace std;
-using namespace boost::numeric::odeint;
-
-
-typedef std::tr1::array< double , 3 > state_type;
-
-
-const double sigma = 10.0;
-const double R = 28.0;
-const double b = 8.0 / 3.0;
-
-void lorenz( state_type &x , state_type &dxdt , double t )
-{
-    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 )
-{
-    const double dt = 0.01;
-    const size_t olen = 100000000;
-    
-    state_type x1 = {{1.0, 0.0, 0.0}};
-    state_type x2 = {{1.0, 0.0, 0.0}};
-    state_type x3 = {{1.0, 0.0, 0.0}};
-    state_type x4 = {{1.0, 0.0, 0.0}};
-
-    stepper_rk4< state_type > stepper_rk4;
-    stepper_rk4_classical< state_type > stepper_rk4_classical;
-
-    vector< double > a(3);
-
-    a[0] = 0.5; 
-    a[1] = 0.5;
-    a[2] = 1;
-
-    vector< vector<double> > b(3);
-    b[0].resize(1);
-    b[1].resize(2);
-    b[2].resize(3);
-
-    b[0][0] = 0.5;
-    b[1][0] = 0.0; b[1][1] = 0.5;
-    b[2][0] = 0.0; b[2][1] = 0.0; b[2][2] = 1.0;
-    
-    vector< double > c(4);
-    c[0] = 1.0/6.0;
-    c[1] = 1.0/3.0;
-    c[2] = 1.0/3.0;
-    c[3] = 1.0/6.0;
-
-    const double a2[3] = {0.5, 0.5, 1.0 };
-    const double b2[6] = {0.5, 0.0, 0.5, 0.0, 0.0, 1.0};
-    const double c2[4] = {1.0/6.0, 1.0/3.0, 1.0/3.0, 1.0/6.0};
-
-    stepper_rk_generic< state_type > stepper_generic4(a, b, c);
-
-    stepper_rk_generic_ptr< state_type > stepper_generic4_ptr(a2, b2, c2, 4);
-
-    clock_t start , end;
-    double t;
-
-    cout.precision(16);
-
-    cout << "Hand written Runge Kutta 4"<<endl;
-
-    t = 0.0;
-    start= clock();
-    for( size_t oi=1 ; oi<olen ; ++oi,t+=dt ) {
-        stepper_rk4.do_step( lorenz , x1 , t , dt );
-        if( oi < 5 )
-            cout << "x after step "<<oi<<": "<<x1[0]<<tab<<x1[1]<<tab<<x1[2]<<endl;
-
-    }
-    end = clock();
-    cout << "x after "<<olen<<" steps: "<<x1[0]<<tab<<x1[1]<<tab<<x1[2]<<endl;
-    cout << "Time for "<<olen<<" steps: " << double ( end - start ) / double( CLOCKS_PER_SEC ) <<"s"<< endl;
-
-    cout << endl << "###########################" << endl << endl;
-
-    cout << "Runge Kutta 4 via generic Runge Kutta implementation"<<endl;
-    t = 0.0;
-    start= clock();
-    for( size_t oi=1 ; oi<olen ; ++oi,t+=dt ) {
-        stepper_generic4.do_step( lorenz , x2 , t , dt );
-        if( oi < 5 )
-            cout << "x after step "<<oi<<":  "<<x2[0]<<tab<<x2[1]<<tab<<x2[2]<<endl;        
-    }
-    end = clock();
-    cout << "x after "<<olen<<" steps: "<<x2[0]<<tab<<x2[1]<<tab<<x2[2]<<endl;
-    cout << "Time for "<<olen<<" steps: " << double ( end - start ) / double( CLOCKS_PER_SEC ) << endl;
-
-    cout << endl << "###########################" << endl << endl;
-    cout << "Runge Kutta 4 via C-Array styled generic Runge Kutta implementation"<<endl;
-
-    t = 0.0;
-    start= clock();
-    for( size_t oi=1 ; oi<olen ; ++oi,t+=dt ) {
-        stepper_generic4_ptr.do_step( lorenz , x3 , t , dt );
-        if( oi < 5 )
-            cout << "x after step "<<oi<<":  "<<x3[0]<<tab<<x3[1]<<tab<<x3[2]<<endl;        
-    }
-    end = clock();
-    cout << "x after "<<olen<<" steps: "<<x3[0]<<tab<<x3[1]<<tab<<x3[2]<<endl;
-    cout << "Time for "<<olen<<" steps: " << double ( end - start ) / double( CLOCKS_PER_SEC ) << endl;
-
-
-    cout << endl << "###########################" << endl << endl;
-
-    cout << "Runge Kutta 4 with classical NR-style Runge Kutta implementation"<<endl;
-    t = 0.0;
-    start= clock();
-    for( size_t oi=1 ; oi<olen ; ++oi,t+=dt ) {
-        stepper_rk4_classical.do_step( lorenz , x4 , t , dt );
-        if( oi < 5 )
-            cout << "x after step "<<oi<<":  "<<x4[0]<<tab<<x4[1]<<tab<<x4[2]<<endl;        
-    }
-    end = clock();
-    cout << "x after "<<olen<<" steps: "<<x4[0]<<tab<<x4[1]<<tab<<x4[2]<<endl;
-    cout << "Time for "<<olen<<" steps: " << double ( end - start ) / double( CLOCKS_PER_SEC ) << endl;
-
-    return 0;
-}
Deleted: sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/lorenz_controlled.cpp
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/lorenz_controlled.cpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,117 +0,0 @@
-/* Boost numeric/odeint/examples/lorenz_controlled.cpp
- 
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
-
- Shows the usage of odeint by integrating the Lorenz equations,
- a deterministic chaotic system
-
- dx/dt = sigma * ( x - y)
- dy/dt = R*x - y - x*z
- dz/dt = x*y - b*z
-
- mit sigma = 10, r=28, b = 8/3
-
- 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)
-*/
-
-#include <iostream>
-#include <fstream>
-#include <vector>
-#include <list>
-#include <tr1/array>
-
-#include <boost/numeric/odeint.hpp>
-#include <boost/numeric/odeint/container_traits_tr1_array.hpp>
- // #include <boost/numeric/odeint/controlled_stepper_bs.hpp>
-
-#define tab "\t"
-
-using namespace std;
-using namespace std::tr1;
-using namespace boost::numeric::odeint;
-
-const double sigma = 10.0;
-const double R = 28.0;
-const double b = 8.0 / 3.0;
-
-typedef array<double, 3> state_type;
-
-size_t function_calls = 0;
-
-void lorenz( state_type &x , state_type &dxdt , double t )
-{
-    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];
-    function_calls++;
-}
-
-
-class output_observer
-{
-
-    ofstream m_file;
-
-public:
-    output_observer( const char* file_name )
-        : m_file( file_name )
-    { 
-        m_file.precision(10);
-        //m_file.setf(ios::fixed,ios::floatfield);
-    }
-
-    ~output_observer()
-    {
-        m_file.close();
-    }
-
-    void operator()( double t, state_type &x, ... )
-    {
-        m_file << t << tab << x[0] << tab << x[1] << tab << x[2] << endl;
-    }
-};
-
-int main( int argc , char **argv )
-{
-    const double end_time = 25.0;
-
-    const double eps_abs = 1E-10;
-    const double eps_rel = 1E-10;;
-
-    state_type x;
-    x[0] = 1.0;
-    x[1] = 0.0;
-    x[2] = 20.0;
-
-    stepper_rk5_ck< state_type > rk5;
-    controlled_stepper_standard< stepper_rk5_ck< state_type > > controlled_rk5( eps_abs , eps_rel, 1.0, 1.0 );
-    output_observer rk5_obs("lorenz_rk5.dat");
-    size_t steps = integrate_adaptive( controlled_rk5, lorenz, x, 0.0, end_time, 1E-2, rk5_obs );
-
-    clog << "RK5: " << steps << " steps. (" << function_calls << " function calls)" << endl;
-
-    x[0] = 1.0;
-    x[1] = 0.0;
-    x[2] = 20.0;
-
-    function_calls = 0;
-
-    controlled_stepper_bs< state_type > controlled_bs(eps_abs, eps_rel, 1.0, 1.0);
-    
-    output_observer bs_obs("lorenz_bs.dat");
-    steps = integrate_adaptive( controlled_bs, lorenz, x, 0.0, end_time, 1E-2, bs_obs );
-
-    clog << "BS: " << steps << " steps. (" << function_calls << " function calls)" << endl;
-
-
-    
-    return 0;
-}
-
-/*
-  Compile with
-  g++ -Wall -O3 -I$BOOST_ROOT -I../../../../ lorenz_controlled.cpp
-*/
Deleted: sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/lorenz_integrate_constant_step.cpp
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/lorenz_integrate_constant_step.cpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,98 +0,0 @@
-/* Boost numeric/odeint/examples/lorenz_integrate_constant_step.cpp
- 
- Copyright 2009 Karsten Ahnert
-
- Shows the usage of odeint, and integrates the Lorenz equations,
- a deterministic chaotic system
-
- dx/dt = sigma * ( x - y)
- dy/dt = R*x - y - x*z
- dz/dt = x*y - b*z
-
- mit sigma = 10, r=28, b = 8/3
-
- 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)
-*/
-
-#include <iostream>
-#include <vector>
-#include <list>
-#include <tr1/array>
-
-#include <boost/lambda/lambda.hpp>
-#include <boost/lambda/bind.hpp>
-#include <boost/lambda/if.hpp>
-#include <boost/lambda/loops.hpp>
-#include <boost/lambda/switch.hpp>
-#include <boost/lambda/construct.hpp>
-#include <boost/lambda/casts.hpp>
-#include <boost/lambda/exceptions.hpp>
-#include <boost/lambda/numeric.hpp>
-#include <boost/lambda/algorithm.hpp>
-
-#include <boost/numeric/odeint.hpp>
-
-#define tab "\t"
-
-using namespace std;
-using namespace boost::lambda;
-using namespace boost::numeric::odeint;
-
-const double sigma = 10.0;
-const double R = 28.0;
-const double b = 8.0 / 3.0;
-
-const double dt = 0.01;
-const size_t olen = 10000;
-
-//typedef std::tr1::array< double , 3 > state_type;
-typedef vector< double> state_type;
-
-void lorenz( state_type &x , state_type &dxdt , double t )
-{
-    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 )
-{
-    state_type x(3);
-    x[0] = 1.0;
-    x[1] = 0.0;
-    x[2] = 0.0;
-
-    stepper_rk4< state_type > rk4;
-    stepper_euler< state_type > euler;
-    integrate_const( rk4 , lorenz , x , 0.0 , 100.0 , 0.01 ,
-	       cout << _1 << tab << _2[0] << "\n" );
-
-    integrate_const_steps( rk4 , lorenz , x, 0.0 , 0.01 , 100 ,
-		     cout << _1 << tab << _2[0] << "\n" );
-
-    integrate_const( rk4 , lorenz , x , 0.0 , 100.0, 0.01 );
-    integrate_const_steps( rk4 , lorenz , x , 0.0 , 0.01 , 1000 );
-
-/*    integrate( euler , lorenz , 0.0 , 0.01 , x , 100.0 ,
-      cout << _1 << tab << _2[0] << "\n" );*/
-
-/*    vector<double> traj;
-    back_insert_iterator< vector<double> > iter(traj);
-    integrate( euler , lorenz , 0.0 , 0.01 , x , 1.0 , var(*iter++) = _2[1] );
-    copy( traj.begin() , traj.end() ,
-	  ostream_iterator<double>( cout , "\n" ) ); */
-
-    
-
-
-    return 0;
-}
-
-
-
-/*
-  Compile with
-  g++ -Wall -I$BOOST_ROOT -I../../../../ lorenz_integrate_constant_step.cpp
-*/
Deleted: sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/lorenz_integrator.cpp
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/lorenz_integrator.cpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,115 +0,0 @@
-/* Boost numeric/odeint/examples/lorenz_integrator.cpp
- 
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
-
- Shows the usage of odeint integrator by integrating the Lorenz equations,
- a deterministic chaotic system
-
- dx/dt = sigma * ( x - y)
- dy/dt = R*x - y - x*z
- dz/dt = x*y - b*z
-
- mit sigma = 10, r=28, b = 8/3
-
- 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)
-*/
-
-#include <iostream>
-#include <vector>
-#include <iterator>
-#include <list>
-#include <tr1/array>
-
-#include <boost/numeric/odeint.hpp>
-
-#define tab "\t"
-
-using namespace std;
-using namespace std::tr1;
-using namespace boost::numeric::odeint;
-
-const double sigma = 10.0;
-const double R = 28.0;
-const double b = 8.0 / 3.0;
-
-const double eps_abs = 1E-6;
-const double eps_rel = 1E-7;
-
-const size_t time_points = 101;
-
-typedef array<double, 3> state_type;
-
-void lorenz( state_type &x , state_type &dxdt , double t )
-{
-    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 )
-{
-    state_type x1;
-    x1[0] = 1.0;
-    x1[1] = 0.0;
-    x1[2] = 20.0;
-    state_type x2(x1);
-    state_type x3(x1);
-
-
-    vector<state_type> x1_t_vec;
-    vector<double> t1_vec;
-    vector<state_type> x2_t_vec;
-    vector<double> t2_vec;
-    vector<state_type> x3_t_vec;
-    vector<double> t3_vec;
-
-    stepper_half_step< stepper_euler< state_type > > euler;
-    controlled_stepper_standard< stepper_half_step< stepper_euler< state_type > > >
-        euler_controlled( eps_abs, eps_rel, 1.0, 1.0);
-    size_t steps = integrate( euler_controlled, lorenz, x1, 
-                              0.0, 10.0, 1E-4, 
-                              back_inserter(t1_vec),
-                              back_inserter(x1_t_vec));
-
-    clog << "Euler Half Step: #steps " << steps << endl;
-
-    stepper_half_step< stepper_rk4< state_type > > rk4;
-    controlled_stepper_standard< stepper_half_step< stepper_rk4< state_type > > >
-        rk4_controlled( eps_abs, eps_rel, 1.0, 1.0);
-    steps = integrate( rk4_controlled, lorenz, x2, 0.0, 10.0, 1E-4, 
-                       back_inserter(t2_vec),
-                       back_inserter(x2_t_vec));
-
-    clog << "RK4 Half Step: #steps " << steps << endl;
-
-
-    stepper_rk5_ck< state_type > rk5;
-    controlled_stepper_standard< stepper_rk5_ck< state_type > > 
-        rk5_controlled( eps_abs, eps_rel, 1.0, 1.0);
-    steps = integrate( rk5_controlled, lorenz, x3, 0.0, 10.0, 1E-4, 
-                       back_inserter(t3_vec),
-                       back_inserter(x3_t_vec));
-    
-    clog << "RK5 Cash-Karp: #steps: " << steps << endl;
-
-    cout.precision(16);
-    cout.setf(ios::fixed,ios::floatfield);
-
-    cout << t1_vec.size() << tab << t2_vec.size() << tab << t3_vec.size() << endl;
-    
-
-    //cout << "current state: " ;
-    cout << (x1_t_vec.back())[0] << tab << (x1_t_vec.back())[1] << tab << (x1_t_vec.back())[2] << tab;
-    cout << x2_t_vec.back()[0] << tab << x2_t_vec.back()[1] << tab << x2_t_vec.back()[2] << tab;
-    cout << x3_t_vec.back()[0] << tab << x3_t_vec.back()[1] << tab << x3_t_vec.back()[2] << endl;
-
-    return 0;
-}
-
-/*
-  Compile with
-  g++ -Wall -I$BOOST_ROOT -I../../../../ lorenz_integrator.cpp
-*/
Deleted: sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/lorenz_stepper.cpp
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/lorenz_stepper.cpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,103 +0,0 @@
-/* Boost numeric/odeint/examples/lorenz_stepper.cpp
- 
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
-
- Shows the usage of odeint, and integrates the Lorenz equations,
- a deterministic chaotic system
-
- dx/dt = sigma * ( x - y)
- dy/dt = R*x - y - x*z
- dz/dt = x*y - b*z
-
- with sigma = 10, r=28, b = 8/3
-
- Furthermore, the usage of std::tr1::array and std::vector in odeint is
- shown and the performance of both containers is compared.
-
- 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)
-*/
-
-#include <iostream>
-#include <vector>
-#include <list>
-#include <tr1/array>
-
-#include <boost/numeric/odeint.hpp>
-
-#define tab "\t"
-
-using namespace std;
-using namespace boost::numeric::odeint;
-
-
-typedef std::vector< double > state_type1;
-typedef std::tr1::array< double , 3 > state_type2;
-
-
-const double sigma = 10.0;
-const double R = 28.0;
-const double b = 8.0 / 3.0;
-
-void lorenz1( state_type1 &x , state_type1 &dxdt , double t )
-{
-    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];
-}
-
-void lorenz2( state_type2 &x , state_type2 &dxdt , double t )
-{
-    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 )
-{
-    const double dt = 0.01;
-    const size_t olen = 100000000;
-    
-    state_type1 x1(3);
-    x1[0] = 1.0;
-    x1[1] = 0.0;
-    x1[2] = 0.0;
-    state_type2 x2 = {{ 1.0 , 0.0 , 0.0 }};
-
-    stepper_rk4< state_type1 > stepper1( x1 );
-    stepper_rk4< state_type2 > stepper2( x2 );
-
-    clock_t start , end;
-    double t;
-
-    start= clock();
-    t = 0.0;
-    for( size_t oi=0 ; oi<olen ; ++oi,t+=dt )
-        stepper1.do_step( lorenz1 , x1 , t , dt );
-    end = clock();
-    cout << "vector : " << double ( end - start ) / double( CLOCKS_PER_SEC ) << endl;
-    cout << "x: "<<x1[0]<<tab<<x1[1]<<tab<<x1[2]<<endl;
-
-
-    start= clock();
-    t = 0.0;
-    for( size_t oi=0 ; oi<olen ; ++oi,t+=dt )
-        stepper2.do_step( lorenz2 , x2 , t , dt );
-    end = clock();
-    cout << "array : " << double ( end - start ) / double( CLOCKS_PER_SEC ) << endl;
-    cout << "x: "<<x2[0]<<tab<<x2[1]<<tab<<x2[2]<<endl;
-
-    return 0;
-}
-
-
-
-/*
-  Compile with
-  g++ -Wall -O3 -I$BOOST_ROOT -I../../../../ lorenz_stepper.cpp
-*/
Deleted: sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/pendulum_vibrating_pivot.cpp
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/pendulum_vibrating_pivot.cpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
+++ (empty file)
@@ -1,82 +0,0 @@
-/* Boost numeric/odeint/examples/coupled_vdp.cpp
- 
- Copyright 2009 Karsten Ahnert
- Copyright 2009 Mario Mulansky
-
- Shows the usage of odeint by integrating the equations of a 
- pendulum with horizontally vibrating pivot:
-
- d^2x/dt^2 + sin(x) + alpha*x = a*omega^2*sin(omega*t)*cos(x)
-
- for large enough omega >sim 20 two new fixpoints (of the 
- slow dynamics) arise, that can be seen in the simulations as well
-
- 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)
-*/
-
-#include <iostream>
-#include <fstream>
-#include <vector>
-#include <list>
-#include <tr1/array>
-
-#include <boost/numeric/odeint.hpp>
-
-#define tab "\t"
-
-using namespace std;
-using namespace boost::numeric::odeint;
-
-
-typedef std::tr1::array< double , 2 > state_type;
-
-const double alpha = 0.1;
-const double omega = 20;
-const double a = 0.1;
-
-/* 
-   Defines the right hand side f(x,t) of the dynamical equations dx/dt = f(x,t) 
-   x consists of x=(x, dx/dt) and f has explicit time dependence
-*/
-void my_system( state_type &x , state_type &dxdt , double t ) 
-{
-    dxdt[0] = x[1];
-    dxdt[1] = -sin(x[0]) - alpha*x[1] + a*omega*omega*sin(omega*t)*cos(x[0]);
-}
-
-int main( int argc , char **argv )
-{
-    state_type x = {{ 1.0, 0.0 }};
-
-    vector<double> times;
-    vector<state_type> x_t_vec;
-    
-    stepper_half_step< stepper_rk4< state_type > > stepper;
-
-    controlled_stepper_standard
-        < stepper_half_step< stepper_rk4< state_type > >
-        > controlled_stepper( 1E-6 , 1E-7 , 1.0 , 1.0 );
-
-    size_t steps = integrate( controlled_stepper, my_system, x, 
-                              0.0, 100.0,1E-4, 
-                              back_inserter(times),
-                              back_inserter(x_t_vec));
-
-    clog << "Steps: " << steps << endl;
-
-    cout.precision(5);
-    cout.setf(ios::fixed,ios::floatfield);
-    
-
-    for( size_t i=0; i<times.size(); i++ )
-    {
-        //cout << "current state: " ;
-        cout << times[i] << tab;
-        cout << x_t_vec[i][0] << tab << x_t_vec[i][1] << endl;
-    }
-
-    return 0;
-
-}
Modified: sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/solar_system.cpp
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/solar_system.cpp	(original)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/examples/solar_system.cpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
@@ -1,114 +1,42 @@
+/* Boost libs/numeric/odeint/examples/solar_system.cpp
+
+ Copyright 2009 Karsten Ahnert
+ Copyright 2009 Mario Mulansky
+
+ solar system example for Hamiltonian stepper
+
+ 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)
+*/
+
+
 #include <bits/stdc++.h>
 #include <bits/stdtr1c++.h>
 
-#include <boost/operators.hpp>
 #include <boost/circular_buffer.hpp>
+#include <boost/ref.hpp>
 #include <boost/numeric/odeint.hpp>
 
+#include "point_type.hpp"
+
 #define tab "\t" 
 
 using namespace std;
 using namespace boost::numeric::odeint;
 
-template< class T >
-class point :
-    boost::additive1< point< T > ,
-    boost::additive2< point< T > , T ,
-    boost::multiplicative2< point< T > , T 
-    > > >
-{
-public:
-
-    typedef T value_type;
-    typedef point< value_type > point_type;
-
-    value_type x , y , z;
-
-    point( void ) : x(0.0) , y(0.0) , z(0.0) { }
-
-    point( value_type val ) : x(val) , y(val) , z(val) { }
-
-    point( value_type _x , value_type _y , value_type _z )
-	: x(_x) , y(_y) , z(_z) { }
-
-
-    point_type& operator+=( const point_type& p ) 
-    {
-	x += p.x ; y += p.y ; z += p.z;
-	return *this;
-    }
-
-    point_type& operator-=( const point_type& p )
-    {
-	x -= p.x ; y -= p.y ; z -= p.z;
-	return *this;
-    }
-
-    point_type& operator+=( const value_type& val )
-    {
-	x += val ; y += val ; z += val;
-	return *this;
-    }
+// we simulate 5 planets and the sun
+const size_t n = 6;
 
-    point_type& operator-=( const value_type& val )
-    {
-	x -= val ; y -= val ; z -= val;
-	return *this;
-    }
-
-    point_type& operator*=( const value_type &val )
-    {
-	x *= val ; y *= val ; z *= val;
-	return *this;
-    }
-
-    point_type& operator/=( const value_type &val )
-    {
-	x /= val ; y /= val ; z /= val;
-	return *this;
-    }
-};
-
-template< class T >
-T inner_product( const point< T > &p1 , const point< T > &p2 )
-{
-    return p1.x*p2.x + p1.y*p2.y + p1.z*p2.z;
-}
-
-template< class T >
-T norm( const point< T > &p )
-{
-    return inner_product( p , p );
-}
-
-template< class T >
-T abs( const point< T > &p )
-{
-    return sqrt( norm( p ) );
-}
-
-template< class T >
-ostream& operator<<( ostream &out , const point< T > &p )
-{
-    out << p.x << tab << p.y << tab << p.z;
-    return out;
-}
-
-
-
-const size_t n = 3;
-typedef point< double > point_type;
+typedef point< double , 3 > point_type;
 typedef std::tr1::array< point_type , n > state_type;
 typedef std::tr1::array< double , n > mass_type;
+typedef hamiltonian_stepper_euler< state_type > stepper_type;
 
-typedef hamiltonian_stepper_rk< state_type > stepper_type;
 
-typedef boost::circular_buffer< point_type > buffer_type;
+const double gravitational_constant = 2.95912208286e-4;
 
 
-const mass_type masses = {{ 1.0e9 , 1.0e9 , 1.0e12}};
-const double gravitational_constant = 6.657e-20;
-
 ostream& operator<<( ostream &out , const state_type &x )
 {
     typedef state_type::value_type value_type;
@@ -117,99 +45,121 @@
     return out;
 }
 
-point_type get_mean( const state_type &x )
-{
-    point_type mean( 0.0 );
-    if( x.empty() ) return mean;
-    for( size_t i=0 ; i<x.size() ; ++i ) mean += x[i];
-    mean /= double( x.size() );
-    return mean;
-}
 
-point_type get_center_of_mass( const state_type &x ,
-			       const mass_type &m )
+point_type center_of_mass( const state_type &x , const mass_type &m )
 {
-    point_type mean( 0.0 );
-    if( x.empty() ) return mean;
     double overall_mass = 0.0;
+    point_type mean( 0.0 );
     for( size_t i=0 ; i<x.size() ; ++i )
     {
         overall_mass += m[i];
         mean += m[i] * x[i];
     }
-    mean /= overall_mass;
+    if( x.size() != 0 ) mean /= overall_mass;
     return mean;
-
 }
 
-void center_system( state_type &x , point_type mean )
-{
-    for( size_t i=0 ; i<x.size() ; ++i ) x[i] -= mean;
-}
 
-
-void solar_system( state_type &q , state_type &dpdt )
+double energy( const state_type &q , const state_type &p ,
+               const mass_type &masses )
 {
-    point_type diff , tmp;
-    fill( dpdt.begin() , dpdt.end() , 0.0 );
+    const size_t n = q.size();
+    double en = 0.0;
     for( size_t i=0 ; i<n ; ++i )
     {
-	for( size_t j=i+1 ; j<n ; ++j )
-	{
-	    diff = q[j] - q[i];
-	    tmp = gravitational_constant * diff / pow( abs( diff ) , 3.0 );
-	    dpdt[i] += tmp * masses[j];
-	    dpdt[j] -= tmp * masses[i];
-	}
+        en += 0.5 * norm( p[i] ) / masses[i];
+	for( size_t j=0 ; j<i ; ++j )
+        {
+            double diff = abs( q[i] - q[j] );
+            en -= gravitational_constant * masses[j] * masses[i] / diff;
+        }
+    }
+    return en;
+}
+
+struct solar_system
+{
+    mass_type &m_masses;
+
+    solar_system( mass_type &masses ) : m_masses( masses ) { }
+
+    void operator()( const state_type &q , state_type &dpdt )
+    {
+        const size_t n = q.size();
+        fill( dpdt.begin() , dpdt.end() , 0.0 );
+        for( size_t i=0 ; i<n ; ++i )
+        {
+            for( size_t j=i+1 ; j<n ; ++j )
+            {
+                point_type diff = q[j] - q[i];
+		double d = abs( diff );
+                diff = gravitational_constant * diff / d / d / d;
+                dpdt[i] += diff * m_masses[j];
+                dpdt[j] -= diff * m_masses[i];
+            }
+        }
     }
-}
+};
 
 
 int main( int argc , char **argv )
 {
-    state_type q , p;
-    stepper_type stepper;
-
-    fill( q.begin() , q.end() , 0.0 );
-    fill( p.begin() , p.end() , 0.0 );
-    q[0] = point_type( 0.0 , 1.0 , 0.0 );
-    p[0] = point_type( 0.00001 , 0.0 , 0.0 );
-    q[2] = point_type( 1.0 , 0.0 , 0.0 );
-
-    center_system( q , get_center_of_mass( q , masses ) );
-    center_system( p , get_center_of_mass( p , masses ) );
-
-    const double dt = 1.0;
+    mass_type masses = {{
+            1.00000597682 ,      // sun
+            0.000954786104043 ,  // jupiter
+            0.000285583733151 ,  // saturn
+            0.0000437273164546 , // uranus
+            0.0000517759138449 , // neptune
+            1.0 / ( 1.3e8 )      // pluto
+        }};
+
+    state_type q = {{
+            point_type( 0.0 , 0.0 , 0.0 ) ,                        // sun
+            point_type( -3.5023653 , -3.8169847 , -1.5507963 ) ,   // jupiter
+            point_type( 9.0755314 , -3.0458353 , -1.6483708 ) ,    // saturn
+            point_type( 8.3101420 , -16.2901086 , -7.2521278 ) ,   // uranus
+            point_type( 11.4707666 , -25.7294829 , -10.8169456 ) , // neptune
+            point_type( -15.5387357 , -25.2225594 , -3.1902382 )   // pluto
+        }};
+
+    state_type p = {{
+            point_type( 0.0 , 0.0 , 0.0 ) ,                        // sun
+            point_type( 0.00565429 , -0.00412490 , -0.00190589 ) , // jupiter
+            point_type( 0.00168318 , 0.00483525 , 0.00192462 ) ,   // saturn
+            point_type( 0.00354178 , 0.00137102 , 0.00055029 ) ,   // uranus
+            point_type( 0.00288930 , 0.00114527 , 0.00039677 ) ,   // neptune
+            point_type( 0.00276725 , -0.00170702 , -0.00136504 )   // pluto
+        }};
+
+
+    point_type qmean = center_of_mass( q , masses );
+    point_type pmean = center_of_mass( p , masses );
+    for( size_t i=0 ; i<n ; ++i ) { q[i] -= qmean ; p[i] -= pmean; }
 
-    buffer_type buffers[n];
-    for( size_t i=0 ; i<n ; ++i ) buffers[i].set_capacity( 100 );
+    stepper_type stepper;
 
-    cout << "unset key\n";
-    const size_t ilen = 1000;
+    const double dt = 100.0;
     double t = 0.0;
-    while( true )
+    while( t < 10000000.0 )
     {
-	clog << get_mean( p ) << tab << get_mean( q ) << endl;
-	for( size_t i=0 ; i<n ; ++i ) buffers[i].push_back( q[i] );
-
-	cout << "p [-20:20][-20:20] '-' u 1:2 w l\n";
-	for( size_t i=0 ; i<n ; ++i )
-	{
-	    copy( buffers[i].begin() , buffers[i].end() ,
-		  ostream_iterator<point_type>( cout , "\n" ) );
-	    cout << "\n";
-	}
-	cout << "e" << endl;
-
-//	getchar();
-
-//	cout << "p [-2:2][-2:2] '-' u 1:2 pt 7 ps 5 \n" << q << "e" << endl;
-
-	for( size_t ii=0 ; ii<ilen ; ++ii,t+=dt )
-	{
-	    stepper.do_step( solar_system , q , p , dt );
-	}
+	clog << t << tab << energy( q , p , masses ) << tab;
+        clog << center_of_mass( q , masses ) << tab;
+        clog << center_of_mass( p , masses ) << endl;
+
+	cout << t;
+        for( size_t i=0 ; i<n ; ++i ) cout << tab << q[i];
+	cout << endl;
+
+        for( size_t i=0 ; i<1 ; ++i,t+=dt )
+	    stepper.do_step( solar_system( masses ) , q , p , dt );
+        t += dt;
     }
 
     return 0;
 }
+
+
+/*
+Plot with gnuplot:
+p "solar_system.dat" u 2:4 w l,"solar_system.dat" u 5:7 w l,"solar_system.dat" u 8:10 w l,"solar_system.dat" u 11:13 w l,"solar_system.dat" u 14:16 w l,"solar_system.dat" u 17:19 w l
+*/
Modified: sandbox/odeint/branches/karsten/libs/numeric/odeint/test/check_stepper_concepts.cpp
==============================================================================
--- sandbox/odeint/branches/karsten/libs/numeric/odeint/test/check_stepper_concepts.cpp	(original)
+++ sandbox/odeint/branches/karsten/libs/numeric/odeint/test/check_stepper_concepts.cpp	2010-05-05 15:52:04 EDT (Wed, 05 May 2010)
@@ -15,15 +15,9 @@
 
 #include <boost/test/unit_test.hpp>
 
-#include <boost/numeric/odeint/stepper_euler.hpp>
-#include <boost/numeric/odeint/stepper_half_step.hpp>
-#include <boost/numeric/odeint/stepper_midpoint.hpp>
-#include <boost/numeric/odeint/stepper_rk4_classical.hpp>
-#include <boost/numeric/odeint/stepper_rk4.hpp>
-#include <boost/numeric/odeint/stepper_rk5_ck.hpp>
-#include <boost/numeric/odeint/stepper_rk78_fehlberg.hpp>
-
-#include <boost/numeric/odeint/controlled_stepper_standard.hpp>
+#include <boost/numeric/odeint/steppers/stepper_euler.hpp>
+#include <boost/numeric/odeint/steppers/stepper_half_step.hpp>
+#include <boost/numeric/odeint/steppers/controlled_stepper_standard.hpp>
 
 using namespace boost::unit_test;
 using namespace boost::numeric::odeint;
@@ -149,6 +143,7 @@
     check_error_stepper_concept( stepper , 1 , 2 );
 }
 
+/*
 void test_midpoint_concept()
 {
     stepper_midpoint< std::vector< double > > stepper;
@@ -182,16 +177,16 @@
     check_stepper_concept( stepper , 8 );
     check_error_stepper_concept( stepper , 7 , 8 );
 }
+*/
 
 void test_controlled_stepper_standard_concept()
 {
-    typedef stepper_rk5_ck< std::vector< double > > stepper_type;
+    typedef stepper_euler< std::vector< double > > stepper_type;
     typedef controlled_stepper_standard< stepper_type > controlled_stepper_type;
     
     controlled_stepper_type stepper( 1.0 , 1.0 , 1.0 , 1.0 );
     check_controlled_stepper_concept( stepper );
-}
-
+    }
 
 
 
@@ -201,11 +196,11 @@
 
     test->add( BOOST_TEST_CASE( &test_euler_concept ) );
     test->add( BOOST_TEST_CASE( &test_half_step_euler_concept ) );
-    test->add( BOOST_TEST_CASE( &test_midpoint_concept ) );
+/*    test->add( BOOST_TEST_CASE( &test_midpoint_concept ) );
     test->add( BOOST_TEST_CASE( &test_rk4_classical_concept ) );
     test->add( BOOST_TEST_CASE( &test_rk4_concept ) );
     test->add( BOOST_TEST_CASE( &test_rk5_ck_concept ) );
-    test->add( BOOST_TEST_CASE( &test_rk78_fehlberg_concept ) );
+    test->add( BOOST_TEST_CASE( &test_rk78_fehlberg_concept ) );*/
     test->add( BOOST_TEST_CASE( &test_controlled_stepper_standard_concept ) );
 
     return test;