$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r61126 - in sandbox/odeint: boost/numeric/odeint libs/numeric/odeint/doc libs/numeric/odeint/doc/html libs/numeric/odeint/doc/html/odeint libs/numeric/odeint/examples
From: mario.mulansky_at_[hidden]
Date: 2010-04-07 10:14:20
Author: mariomulansky
Date: 2010-04-07 10:14:20 EDT (Wed, 07 Apr 2010)
New Revision: 61126
URL: http://svn.boost.org/trac/boost/changeset/61126
Log:
+stepper concepts doc
Text files modified: 
   sandbox/odeint/boost/numeric/odeint/controlled_stepper_bs.hpp         |    13 +                                       
   sandbox/odeint/libs/numeric/odeint/doc/html/index.html                |    24 +-                                      
   sandbox/odeint/libs/numeric/odeint/doc/html/odeint/short_example.html |    14 +-                                      
   sandbox/odeint/libs/numeric/odeint/doc/steppers.qbk                   |   251 ++++++++++++++++++++++++++++++++++++++- 
   sandbox/odeint/libs/numeric/odeint/examples/Jamfile                   |     3                                         
   5 files changed, 275 insertions(+), 30 deletions(-)
Modified: sandbox/odeint/boost/numeric/odeint/controlled_stepper_bs.hpp
==============================================================================
--- sandbox/odeint/boost/numeric/odeint/controlled_stepper_bs.hpp	(original)
+++ sandbox/odeint/boost/numeric/odeint/controlled_stepper_bs.hpp	2010-04-07 10:14:20 EDT (Wed, 07 Apr 2010)
@@ -98,7 +98,7 @@
     public:
         
         // constructor
-	controlled_stepper_bs( 
+        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 ),
@@ -123,6 +123,17 @@
             m_d.resize(m_k_max);
         }
 
+        //constructor
+        controlled_stepper_bs( 
+                const container_type &x,
+                time_type abs_err, time_type rel_err, 
+                time_type factor_x, time_type factor_dxdt )
+        {
+            adjust_size(x);
+            this(abs_err , rel_err , factor_x , factor_dxdt);
+        }
+
+
 
         void adjust_size( const container_type &x )
         {
Modified: sandbox/odeint/libs/numeric/odeint/doc/html/index.html
==============================================================================
--- sandbox/odeint/libs/numeric/odeint/doc/html/index.html	(original)
+++ sandbox/odeint/libs/numeric/odeint/doc/html/index.html	2010-04-07 10:14:20 EDT (Wed, 07 Apr 2010)
@@ -1,10 +1,10 @@
 <html>
 <head>
-<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title>Chapter 1. boost.sandbox.numeric.odeint</title>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Chapter 1. boost.sandbox.numeric.odeint</title>
 <link rel="stylesheet" href="boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
-<link rel="home" href="index.html" title="Chapter 1. boost.sandbox.numeric.odeint">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="index.html" title="Chapter 1. boost.sandbox.numeric.odeint">
 <link rel="next" href="odeint/short_example.html" title="Short Example">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -18,19 +18,19 @@
 </tr></table>
 <hr>
 <div class="spirit-nav"><a accesskey="n" href="odeint/short_example.html"><img src="../../doc/html/images/next.png" alt="Next"></a></div>
-<div class="chapter" title="Chapter 1. boost.sandbox.numeric.odeint">
+<div class="chapter" lang="en">
 <div class="titlepage"><div>
 <div><h2 class="title">
-<a name="odeint"></a>Chapter 1. boost.sandbox.numeric.odeint</h2></div>
+<a name="odeint"></a>Chapter 1. boost.sandbox.numeric.odeint</h2></div>
 <div><div class="author"><h3 class="author">
 <span class="firstname">Karsten</span> <span class="surname">Ahnert</span>
 </h3></div></div>
 <div><div class="author"><h3 class="author">
 <span class="firstname">Mario</span> <span class="surname">Mulansky</span>
 </h3></div></div>
-<div><p class="copyright">Copyright © 2009 Karsten Ahnert and Mario Mulansky</p></div>
-<div><div class="legalnotice" title="Legal Notice">
-<a name="id366480"></a><p>
+<div><p class="copyright">Copyright © 2009 Karsten Ahnert and Mario Mulansky</p></div>
+<div><div class="legalnotice">
+<a name="id325363"></a><p>
         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)
       </p>
@@ -68,7 +68,7 @@
       your own traits</a></span></dt></dl></dd>
 </dl>
 </div>
-<div class="section" title="Overview">
+<div class="section" lang="en">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
 <a name="odeint.overview"></a><a class="link" href="index.html#odeint.overview" title="Overview">Overview</a>
 </h2></div></div></div>
@@ -86,7 +86,7 @@
       for real life problems and serves just as illustrative example. In <span class="bold"><strong>odeint</strong></span>, the following algorithms are implemented:
     </p>
 <div class="table">
-<a name="id335508"></a><p class="title"><b>Table 1.1. Stepper Algorithms</b></p>
+<a name="id326850"></a><p class="title"><b>Table 1.1. Stepper Algorithms</b></p>
 <div class="table-contents"><table class="table" summary="Stepper Algorithms">
 <colgroup>
 <col>
@@ -256,7 +256,7 @@
 </div>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
-<td align="left"><p><small>Last revised: March 01, 2010 at 12:26:11 GMT</small></p></td>
+<td align="left"><p><small>Last revised: April 07, 2010 at 14:12:31 GMT</small></p></td>
 <td align="right"><div class="copyright-footer"></div></td>
 </tr></table>
 <hr>
Modified: sandbox/odeint/libs/numeric/odeint/doc/html/odeint/short_example.html
==============================================================================
--- sandbox/odeint/libs/numeric/odeint/doc/html/odeint/short_example.html	(original)
+++ sandbox/odeint/libs/numeric/odeint/doc/html/odeint/short_example.html	2010-04-07 10:14:20 EDT (Wed, 07 Apr 2010)
@@ -1,12 +1,12 @@
 <html>
 <head>
-<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <title>Short Example</title>
 <link rel="stylesheet" href="../boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
-<link rel="home" href="../index.html" title="Chapter 1. boost.sandbox.numeric.odeint">
-<link rel="up" href="../index.html" title="Chapter 1. boost.sandbox.numeric.odeint">
-<link rel="prev" href="../index.html" title="Chapter 1. boost.sandbox.numeric.odeint">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../index.html" title="Chapter 1. boost.sandbox.numeric.odeint">
+<link rel="up" href="../index.html" title="Chapter 1. boost.sandbox.numeric.odeint">
+<link rel="prev" href="../index.html" title="Chapter 1. boost.sandbox.numeric.odeint">
 <link rel="next" href="../boost_sandbox_numeric_odeint/tutorial.html" title="Tutorial">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -22,7 +22,7 @@
 <div class="spirit-nav">
 <a accesskey="p" href="../index.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../boost_sandbox_numeric_odeint/tutorial.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
 </div>
-<div class="section" title="Short Example">
+<div class="section" lang="en">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
 <a name="odeint.short_example"></a><a class="link" href="short_example.html" title="Short Example">Short Example</a>
 </h2></div></div></div>
@@ -146,7 +146,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright © 2009 Karsten Ahnert and Mario Mulansky<p>
+<td align="right"><div class="copyright-footer">Copyright © 2009 Karsten Ahnert and Mario Mulansky<p>
         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)
       </p>
Modified: sandbox/odeint/libs/numeric/odeint/doc/steppers.qbk
==============================================================================
--- sandbox/odeint/libs/numeric/odeint/doc/steppers.qbk	(original)
+++ sandbox/odeint/libs/numeric/odeint/doc/steppers.qbk	2010-04-07 10:14:20 EDT (Wed, 07 Apr 2010)
@@ -3,31 +3,264 @@
 
 [section Concepts]
 
-; huhu
+[section Dynamical system]
 
-[section Basic stepper]
+The dynamical system represents the right hand side of the differential equation:
+
+[* x'(t) = f(x(t) , t)]
+
+In this odeint library the dynamical system is realized by a callable object, 
+e.g. a function pointer, a functor or an instance of an object with an 
+appropriate `()`-operator.
+The parameter structure has to be the following:
 
-definitions
+`(const container_type &x, container_type &dxdt, const time_type t)`
 
-which class models this concept
+`x` is the current state of the system and `t` is the current time. 
+The result *x' = f(x,t)* is then returned in `dxdt`.
+See the tutorial for examples on how to define the dynamical system.
 
 [endsect]
 
-[section Error stepper]
+[section Basic stepper]
 
-definitions
+Basic steppers execute one timestep of a specific order with a given stepsize. 
+They usually allocate internal memory to store intermediate function call 
+results.
+If state types with variable size are used (e.g. `vector`), it has to be assured
+that the stepper gets informed about any change of the state size by calling its
+`adjust_size` method.
+
+[*Template Parameters]
+
+[table
+    [[Parameter] [] [default value] [description]]
+    [[class Container] [required] [-] [Type of container that stores the state of the system]]
+    [[class Time] [optional] [double] [Type of the time variable in the ode]]
+    [[class Traits] [optional] [container_traits< Container >] [container_traits used by the stepper]]
+]
+
+[*Associated Types]
+[table
+    [[] [] [Description]]
+    [[Time] [Stepper::time_type] [Type of the time variable, e.g. `double`]]
+    [[Container] [Stepper::container_type] [Type of the system state, e.g. `vector<double>`]]
+    [[Value] [Stepper::value_type] [Value type of the state, e.g. `double`]]
+    [[Order Type] [Stepper::order_type] [Type of the order parameter, usually `unsigned short`]]
+]
+
+[*Methods]
+
+*`Stepper()` Constructor.
+
+*`Stepper( container_type &x )` Constructor that allocates internal memory to 
+store intermediate results of the same size as `x`.
+
+*`void do_step( DynamicalSystem &system ,
+      		   container_type &x ,
+		       time_type t ,
+		       time_type dt )`
+
+Executes one timestep with the given parameters:
+[table
+    [[Parameter] [Type] [Description]]
+    [[system] [DynamicalSystem] [Function (callable object) that computes the rhs of the ode]]
+    [[x] [container_type] [The current state of the system *x(t)*]]
+    [[t] [time_type] [The current time  *t*]]
+    [[dt] [time_type] [Length of the timestep to be executed]]
+]
+The result of this method is the (approximate) state of the system *x(t+dt)* and 
+is stored in the variable `x` (in-place).
+Note, that the time `t` is not automatically increased by this method.
+
+*`void do_step( DynamicalSystem &system ,
+		      container_type &x ,
+		      const container_type &dxdt ,
+		      time_type t ,
+		      time_type dt )`
+
+The same as above but with the additional parameter `dxdt` that represents the
+derivative [*x'(t) = f(x,t)] at the time *t*.
+
+*`void adjust_size( const container_type &x )`
+Adjusts the internal memory to store intermediate results of the same size as 
+`x`.
+This function /must/ be called whenever the system size changes during the 
+integration.
+
+*`order_type order_step()`
+Returns the order of the algorithm. If *n* is the order of a method, then the
+result of one iteration with the timestep *dt* is accurate up to *dt^n*. That 
+means the error made by the time discretization is of order *dt^(n+1)*.
+
+[*Stepper that model this concept]
+
+*`stepper_euler`
+*`stepper_rk4`
+*`stepper_rk78_fehlberg`
 
-which class models this concept
+[endsect]
+
+[section Error stepper]
 
+Error steppers execute one timestep of a specific order with a given stepsize.
+Additionally, an error estimation of the obtained result is computed that can 
+be used to control the error introduced by the time discretization.
+As the basic steppers, error steppers usually allocate internal memory to store
+intermediate function call results. If state types with variable size are used 
+(e.g. `vector`), it has to be assured that the stepper gets informed about any 
+change of the state size by calling its `adjust_size` method.
+
+[*Template Parameters]
+
+Same as for /basic steppers/ above.
+
+[*Associated Types]
+
+Same as for /basic steppers/ above.
+
+[*Methods]
+
+*`Error_Stepper()` Constructor.
+
+*`Error_Stepper( container_type &x )` Constructor that allocates internal memory to 
+store intermediate results of the same size as `x`.
+
+*`void do_step( DynamicalSystem &system ,
+      		   container_type &x ,
+		       time_type t ,
+		       time_type dt  ,
+               container_type &xerr)`
+
+Executes one timestep with the given parameters:
+[table
+    [[Parameter] [Type] [Description]]
+    [[system] [DynamicalSystem] [Function (callable object) that computes the rhs of the ode]]
+    [[x] [container_type] [The current state of the system *x(t)*]]
+    [[t] [time_type] [The current time  *t*]]
+    [[dt] [time_type] [Length of the timestep to be executed]]
+    [[xerr] [container_type] [Used by the method to return the error estimation of this computation]]
+]
+The result of this method is the (approximate) state of the system *x(t+dt)*, 
+which is returned in the variable `x` (in-place), and the corresponding error 
+estimation returned in `xerr`.
+Note, that the time `t` is not automatically increased by this method.
+
+*`void do_step( DynamicalSystem &system ,
+		      container_type &x ,
+		      const container_type &dxdt ,
+		      time_type t ,
+		      time_type dt ,
+              container_type &xerr)`
+
+The same as above but with the additional parameter `dxdt` that represents the
+derivative [*x'(t) = f(x,t)] at the time *t*.
+
+*`void adjust_size( const container_type &x )`
+Adjusts the internal memory to store intermediate results of the same size as 
+`x`.
+This function /must/ be called whenever the system size changes during the 
+integration.
+
+*`order_type order_error_step()`
+Returns the order of the result *x(t+dt)* of the algorithm.
+
+*`order_type order_error()`
+Returns the order of the error estimation of the algorithm.
+
+[*Stepper that model this concept]
+
+*`stepper_rk5_ck`
+*`stepper_rk78_fehlberg`
+*`stepper_half_step`
 
 [endsect]
 
 [section Controlled stepper]
 
-definitions
+Controlled steppers try to execute a timestep with a given error threshold.
+If the estimated error of the obtained solution is too big, the result is 
+rejected and a new stepsize is proposed.
+If the error is small enough the timestep is accepted and possibly an increased
+stepsize is proposed.
+
+[*Template Parameters]
+
+Same as for /basic steppers/ above.
+
+[*Associated Types]
+
+Same as for /basic steppers/ above.
+
+[*Methods]
+
+*`Controlled_Stepper( time_type abs_err, time_type rel_err, 
+                      time_type factor_x, time_type factor_dxdt )`
+
+Constructor that initializes the controlled stepper with several parameters of
+the error control. The controlled stepper assures that the error done by each 
+individual timestep yields:
+
+[* xerr < 1.1 ( eps_abs + eps_rel * (factor_x |x| + factor_dxdt h |x'|) ) ]
+
+The factor 1.1 is for safety to avoid unnecessary many stepsize adjustings.
+The above inequality should be understand to hold for /all/ components of the
+possibly more dimensional vectors *x*, *x'* and *xerr*.
+If the estimated error is too large, a reduced stepsize will be suggested.
+If the estimated error is less than half of the desired error, an increased
+stepsize will be suggested.
+
+*`Controlled_Stepper( container_type &x, time_type abs_err, time_type rel_err, 
+                      time_type factor_x, time_type factor_dxdt )`
+Same as above, but with additional allocation of the internal memory to store 
+intermediate results of the same size as `x`.
+
+*`controlled_step_result try_step( 
+                DynamicalSystem &system, 
+                container_type &x, 
+                time_type &t, 
+                time_type &dt )`
+
+Tries one timestep with the given parameters
+[table
+    [[Parameter] [Type] [Description]]
+    [[system] [DynamicalSystem] [Function (callable object) that computes the rhs of the ode]]
+    [[x] [container_type] [The current state of the system *x(t)*]]
+    [[t] [time_type] [The current time  *t*]]
+    [[dt] [time_type] [Length of the timestep to be executed]]
+]
+This method has three possible outcomes represented by the returned value `result`:
+If `result = success` the step has been applied and x contains the new state 
+*x(t)* where the time has also been increased *t += dt*.
+If `result = step_size_increased` the step has also been accomplished, but the 
+estimated error was so small that a new stepsize is proposed in the variable 
+`dt`.
+If `result = step_size_decreased` the step has been rejected due to a too big 
+error. `x` and `t` remain unchanged and `dt` now containes the suggested reduced
+stepsize that should give an error below the desired level.
+
+*`controlled_step_result try_step( 
+                DynamicalSystem &system, 
+                container_type &x, 
+                const container_type &dxdt,
+                time_type &t, 
+                time_type &dt )`
+Same as above but with the additional parameter `dxdt` that that represents the
+derivative *x'(t) = f(x,t)* at the time *t*.
+
+*`void adjust_size( const container_type &x )`
+Adjusts the internal memory to store intermediate results of the same size as 
+`x`.
+This function /must/ be called whenever the system size changes during the 
+integration.
+
+*`order_type order_error_step()`
+Returns the order of the result *x(t+dt)* of the algorithm.
 
-which class models this concept
+[*Stepper that model this concept]
 
+*`controlled_stepper_standard`
+*`controlled_stepper_bs`
 
 [endsect]
 
Modified: sandbox/odeint/libs/numeric/odeint/examples/Jamfile
==============================================================================
--- sandbox/odeint/libs/numeric/odeint/examples/Jamfile	(original)
+++ sandbox/odeint/libs/numeric/odeint/examples/Jamfile	2010-04-07 10:14:20 EDT (Wed, 07 Apr 2010)
@@ -15,7 +15,8 @@
     ;
 
 exe harmonic_oscillator : harmonic_oscillator.cpp ;
-
+#exe test_container_and_stepper : test_container_and_stepper.cpp ;
+#exe hamiltonian_test : hamiltonian_test.cpp ;
 
 exe lorenz_cmp_rk4_rk_generic : lorenz_cmp_rk4_rk_generic.cpp ;
 exe lorenz_controlled : lorenz_controlled.cpp ;