Click here to Skip to main content
15,881,600 members
Articles / Programming Languages / CUDA

odeint v2 - Solving ordinary differential equations in C++

Rate me:
Please Sign up or sign in to vote.
4.64/5 (18 votes)
19 Oct 2011CPOL19 min read 128.7K   2.8K   34  
odeint v2 - Solving ordinary differential equations in C++
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Controlled Stepper</title>
<link rel="stylesheet" href="../../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
<link rel="start" href="../../index.html" title="Chapter&#160;1.&#160;boost.sandbox.numeric.odeint">
<link rel="up" href="../concepts.html" title="Concepts">
<link rel="prev" href="error_stepper.html" title="Error Stepper">
<link rel="next" href="dense_output_stepper.html" title="Dense Output Stepper">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr><td valign="top"></td></tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="error_stepper.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="dense_output_stepper.html"><img src="../../images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper"></a><a class="link" href="controlled_stepper.html" title="Controlled Stepper">Controlled
      Stepper</a>
</h3></div></div></div>
<p>
        This concept specifies the interface a controlled stepper has to fulfill
        to be used within <a class="link" href="../odeint_in_detail/integrate_functions.html" title="Integrate functions">integrate
        functions</a>.
      </p>
<a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper.description"></a><h5>
<a name="id614015"></a>
        <a class="link" href="controlled_stepper.html#boost_sandbox_numeric_odeint.concepts.controlled_stepper.description">Description</a>
      </h5>
<p>
        A controlled stepper following this Controlled Stepper concept provides the
        possibilty to perform one step of the solution <span class="emphasis"><em>x(t)</em></span>
        of an ODE with step-size <span class="emphasis"><em>dt</em></span> to obtain <span class="emphasis"><em>x(t+dt)</em></span>
        with a given step-size <span class="emphasis"><em>dt</em></span>. Depending on an error estimate
        of the solution the step might be rejected and a smaller step-size is suggested.
      </p>
<a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper.notation"></a><h5>
<a name="id614055"></a>
        <a class="link" href="controlled_stepper.html#boost_sandbox_numeric_odeint.concepts.controlled_stepper.notation">Notation</a>
      </h5>
<div class="variablelist">
<p class="title"><b></b></p>
<dl>
<dt><span class="term"><code class="computeroutput"><span class="identifier">ControlledStepper</span></code></span></dt>
<dd><p>
              A type that is a model of Controlled Stepper
            </p></dd>
<dt><span class="term"><code class="computeroutput"><span class="identifier">State</span></code></span></dt>
<dd><p>
              A type representing the state <span class="emphasis"><em>x</em></span> of the ODE
            </p></dd>
<dt><span class="term"><code class="computeroutput"><span class="identifier">Time</span></code></span></dt>
<dd><p>
              A type representing the time <span class="emphasis"><em>t</em></span> of the ODE
            </p></dd>
<dt><span class="term"><code class="computeroutput"><span class="identifier">stepper</span></code></span></dt>
<dd><p>
              An object of type <code class="computeroutput"><span class="identifier">ControlledStepper</span></code>
            </p></dd>
<dt><span class="term"><code class="computeroutput"><span class="identifier">x</span></code></span></dt>
<dd><p>
              Object of type <code class="computeroutput"><span class="identifier">State</span></code>
            </p></dd>
<dt><span class="term"><code class="computeroutput"><span class="identifier">t</span></code>, <code class="computeroutput"><span class="identifier">dt</span></code></span></dt>
<dd><p>
              Objects of type <code class="computeroutput"><span class="identifier">Time</span></code>
            </p></dd>
<dt><span class="term"><code class="computeroutput"><span class="identifier">sys</span></code></span></dt>
<dd><p>
              An object defining the ODE, should be a model of <a class="link" href="system.html" title="System">System</a>,
              <a class="link" href="symplectic_system.html" title="Symplectic_System">Symplectic_System</a>,
              <a class="link" href="simple_symplectic_system.html" title="Simple_Symplectic_System">Simple_Symplectic_System</a>
              or <a class="link" href="implicit_system.html" title="Implicit_System">Implicit_System</a>.
            </p></dd>
</dl>
</div>
<a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper.valid_expressions"></a><h5>
<a name="id614308"></a>
        <a class="link" href="controlled_stepper.html#boost_sandbox_numeric_odeint.concepts.controlled_stepper.valid_expressions">Valid
        Expressions</a>
      </h5>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
<col>
<col>
</colgroup>
<thead><tr>
<th>
                <p>
                  Name
                </p>
              </th>
<th>
                <p>
                  Expression
                </p>
              </th>
<th>
                <p>
                  Type
                </p>
              </th>
<th>
                <p>
                  Semantics
                </p>
              </th>
</tr></thead>
<tbody>
<tr>
<td>
                <p>
                  Do step
                </p>
              </td>
<td>
                <p>
                  <code class="computeroutput"><span class="identifier">stepper</span><span class="special">.</span><span class="identifier">try_step</span><span class="special">(</span>
                  <span class="identifier">sys</span> <span class="special">,</span>
                  <span class="identifier">x</span> <span class="special">,</span>
                  <span class="identifier">t</span> <span class="special">,</span>
                  <span class="identifier">dt</span> <span class="special">)</span></code>
                </p>
              </td>
<td>
                <p>
                  <code class="computeroutput"><span class="identifier">controlled_step_result</span></code>
                </p>
              </td>
<td>
                <p>
                  Tries one step of step size <code class="computeroutput"><span class="identifier">dt</span></code>.
                  If the step was succesfull, <code class="computeroutput"><span class="identifier">success</span></code>
                  is returned, the resulting state is written to <code class="computeroutput"><span class="identifier">x</span></code>,
                  the new time is stored in <code class="computeroutput"><span class="identifier">t</span></code>
                  and <code class="computeroutput"><span class="identifier">dt</span></code> now contains
                  a new (possibly larger) step-size for the next step. If the error
                  was too big, <code class="computeroutput"><span class="identifier">rejected</span></code>
                  is returned and the results are neglected - <code class="computeroutput"><span class="identifier">x</span></code>
                  and <code class="computeroutput"><span class="identifier">t</span></code> are unchanged
                  and <code class="computeroutput"><span class="identifier">dt</span></code> now contains
                  a reduced step-size to be used for the next try.
                </p>
              </td>
</tr>
<tr>
<td>
                <p>
                  Do step with reference
                </p>
              </td>
<td>
                <p>
                  <code class="computeroutput"><span class="identifier">stepper</span><span class="special">.</span><span class="identifier">try_step</span><span class="special">(</span>
                  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">ref</span><span class="special">(</span><span class="identifier">sys</span><span class="special">)</span>
                  <span class="special">,</span> <span class="identifier">x</span>
                  <span class="special">,</span> <span class="identifier">t</span>
                  <span class="special">,</span> <span class="identifier">dt</span>
                  <span class="special">)</span></code>
                </p>
              </td>
<td>
                <p>
                  <code class="computeroutput"><span class="keyword">void</span></code>
                </p>
              </td>
<td>
                <p>
                  Same as above with <code class="computeroutput"><span class="identifier">System</span></code>
                  as reference
                </p>
              </td>
</tr>
</tbody>
</table></div>
<a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper.models"></a><h5>
<a name="id614721"></a>
        <a class="link" href="controlled_stepper.html#boost_sandbox_numeric_odeint.concepts.controlled_stepper.models">Models</a>
      </h5>
<div class="itemizedlist"><ul type="disc">
<li>
            controlled_error_stepper&lt; runge_kutta_cash_karp54 &gt;
          </li>
<li>
            controlled_error_stepper_fsal&lt; runge_kutta_dopri5 &gt;
          </li>
<li>
            controlled_error_stepper&lt; runge_kutta_fehlberg78 &gt;
          </li>
<li>
            rosenbrock4_controller
          </li>
<li>
            bulirsch_stoer
          </li>
</ul></div>
</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 &#169; 2009 -2011 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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
      </p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="error_stepper.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="dense_output_stepper.html"><img src="../../images/next.png" alt="Next"></a>
</div>
</body>
</html>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Germany Germany
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions