Click here to Skip to main content
15,896,063 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 130.1K   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>Dense Output 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="controlled_stepper.html" title="Controlled Stepper">
<link rel="next" href="state_algebra_operations.html" title="State Algebra Operations">
</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="controlled_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="state_algebra_operations.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.dense_output_stepper"></a><a class="link" href="dense_output_stepper.html" title="Dense Output Stepper">Dense
      Output Stepper</a>
</h3></div></div></div>
<p>
        This concept specifies the interface a dense ouput 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.dense_output_stepper.description"></a><h5>
<a name="id614806"></a>
        <a class="link" href="dense_output_stepper.html#boost_sandbox_numeric_odeint.concepts.dense_output_stepper.description">Description</a>
      </h5>
<p>
        A dense ouput stepper following this Dense Output Stepper concept provides
        the possibility to perform a single step of the solution <span class="emphasis"><em>x(t)</em></span>
        of an ODE to obtain <span class="emphasis"><em>x(t+dt)</em></span>. The step-size <code class="computeroutput"><span class="identifier">dt</span></code> might be adjusted automatically due
        to error control. Dense output steppers also can interpolate the solution
        to calculate the state <span class="emphasis"><em>x(t')</em></span> at any point <span class="emphasis"><em>t
        &lt;= t' &lt;= t+dt</em></span>.
      </p>
<a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.associated_types"></a><h5>
<a name="id614857"></a>
        <a class="link" href="dense_output_stepper.html#boost_sandbox_numeric_odeint.concepts.dense_output_stepper.associated_types">Associated
        types</a>
      </h5>
<div class="variablelist">
<p class="title"><b></b></p>
<dl>
<dt><span class="term"><code class="computeroutput"><span class="identifier">Stepper</span><span class="special">::</span><span class="identifier">state_type</span></code></span></dt>
<dd><p>
              A type representing the state <span class="emphasis"><em>x</em></span> of the system
            </p></dd>
<dt><span class="term"><code class="computeroutput"><span class="identifier">Stepper</span><span class="special">::</span><span class="identifier">time_type</span></code></span></dt>
<dd><p>
              A type representing the time <span class="emphasis"><em>t</em></span> of the system
            </p></dd>
</dl>
</div>
<a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.notation"></a><h5>
<a name="id614951"></a>
        <a class="link" href="dense_output_stepper.html#boost_sandbox_numeric_odeint.concepts.dense_output_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">Stepper</span></code></span></dt>
<dd><p>
              A type that is a model of Dense Output 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">stepper</span></code></span></dt>
<dd><p>
              An object of type <code class="computeroutput"><span class="identifier">Stepper</span></code>
            </p></dd>
<dt><span class="term"><code class="computeroutput"><span class="identifier">x0</span></code>, <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">t0</span></code>, <code class="computeroutput"><span class="identifier">dt0</span></code>, <code class="computeroutput"><span class="identifier">t</span></code></span></dt>
<dd><p>
              Objects of type <code class="computeroutput"><span class="identifier">Stepper</span><span class="special">::</span><span class="identifier">time_type</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.dense_output_stepper.valid_expressions"></a><h5>
<a name="id615208"></a>
        <a class="link" href="dense_output_stepper.html#boost_sandbox_numeric_odeint.concepts.dense_output_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>
                  Initialize integration
                </p>
              </td>
<td>
                <p>
                  <code class="computeroutput"><span class="identifier">stepper</span><span class="special">.</span><span class="identifier">initialize</span><span class="special">(</span>
                  <span class="identifier">x0</span> <span class="special">,</span>
                  <span class="identifier">t0</span> <span class="special">,</span>
                  <span class="identifier">dt0</span> <span class="special">)</span></code>
                </p>
              </td>
<td>
                <p>
                  void
                </p>
              </td>
<td>
                <p>
                  Initializes the stepper with initial values <code class="computeroutput"><span class="identifier">x0</span></code>,
                  <code class="computeroutput"><span class="identifier">t0</span></code> and <code class="computeroutput"><span class="identifier">dt0</span></code>.
                </p>
              </td>
</tr>
<tr>
<td>
                <p>
                  Do step
                </p>
              </td>
<td>
                <p>
                  <code class="computeroutput"><span class="identifier">stepper</span><span class="special">.</span><span class="identifier">do_step</span><span class="special">(</span>
                  <span class="identifier">sys</span> <span class="special">)</span></code>
                </p>
              </td>
<td>
                <p>
                  <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span>
                  <span class="identifier">Stepper</span><span class="special">::</span><span class="identifier">time_type</span> <span class="special">,</span>
                  <span class="identifier">Stepper</span><span class="special">::</span><span class="identifier">time_type</span> <span class="special">&gt;</span></code>
                </p>
              </td>
<td>
                <p>
                  Performs one step using the ODE defined by <code class="computeroutput"><span class="identifier">sys</span></code>.
                  The step-size might be changed internally due to error control.
                  This function returns a pair containing <code class="computeroutput"><span class="identifier">t</span></code>
                  and <code class="computeroutput"><span class="identifier">t</span><span class="special">+</span><span class="identifier">dt</span></code> representing the interval
                  for which interpolation can be performed.
                </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">do_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></code>
                </p>
              </td>
<td>
                <p>
                  <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span>
                  <span class="identifier">Stepper</span><span class="special">::</span><span class="identifier">time_type</span> <span class="special">,</span>
                  <span class="identifier">Stepper</span><span class="special">::</span><span class="identifier">time_type</span> <span class="special">&gt;</span></code>
                </p>
              </td>
<td>
                <p>
                  Same as above with <code class="computeroutput"><span class="identifier">System</span></code>
                  as reference
                </p>
              </td>
</tr>
<tr>
<td>
                <p>
                  Do interpolation
                </p>
              </td>
<td>
                <p>
                  <code class="computeroutput"><span class="identifier">stepper</span><span class="special">.</span><span class="identifier">calc_state</span><span class="special">(</span>
                  <span class="identifier">t_inter</span> <span class="special">,</span>
                  <span class="identifier">x</span> <span class="special">)</span></code>
                </p>
              </td>
<td>
                <p>
                  <code class="computeroutput"><span class="keyword">void</span></code>
                </p>
              </td>
<td>
                <p>
                  Performs the interpolation to calculate /x(t<sub>inter</sub>/) where /t &lt;=
                  t<sub>inter</sub> &lt;= t+dt/.
                </p>
              </td>
</tr>
<tr>
<td>
                <p>
                  Get current time
                </p>
              </td>
<td>
                <p>
                  <code class="computeroutput"><span class="identifier">stepper</span><span class="special">.</span><span class="identifier">current_time</span><span class="special">()</span></code>
                </p>
              </td>
<td>
                <p>
                  <code class="computeroutput"><span class="identifier">Stepper</span><span class="special">::</span><span class="identifier">time_type</span><span class="special">&amp;</span></code>
                </p>
              </td>
<td>
                <p>
                  Returns the current time <span class="emphasis"><em>t+dt</em></span> of the stepper,
                  that is the end time of the last step and the starting time for
                  the next call of <code class="computeroutput"><span class="identifier">do_step</span></code>
                </p>
              </td>
</tr>
<tr>
<td>
                <p>
                  Get current state
                </p>
              </td>
<td>
                <p>
                  <code class="computeroutput"><span class="identifier">stepper</span><span class="special">.</span><span class="identifier">current_state</span><span class="special">()</span></code>
                </p>
              </td>
<td>
                <p>
                  <code class="computeroutput"><span class="identifier">Stepper</span><span class="special">::</span><span class="identifier">state_type</span><span class="special">&amp;</span></code>
                </p>
              </td>
<td>
                <p>
                  Returns the current state of the stepper, that is <span class="emphasis"><em>x(t+dt)</em></span>,
                  the state at the time returned by <code class="computeroutput"><span class="identifier">stepper</span><span class="special">.</span><span class="identifier">current_time</span><span class="special">()</span></code>
                </p>
              </td>
</tr>
</tbody>
</table></div>
<a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.models"></a><h5>
<a name="id616021"></a>
        <a class="link" href="dense_output_stepper.html#boost_sandbox_numeric_odeint.concepts.dense_output_stepper.models">Models</a>
      </h5>
<div class="itemizedlist"><ul type="disc">
<li>
            <code class="computeroutput"><span class="identifier">dense_output_controlled_explicit_fsal</span><span class="special">&lt;</span> <span class="identifier">controlled_error_stepper_fsal</span><span class="special">&lt;</span> <span class="identifier">runge_kutta_dopri5</span>
            <span class="special">&gt;</span></code>
          </li>
<li>
            <code class="computeroutput"><span class="identifier">bulirsch_stoer_dense_out</span></code>
          </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="controlled_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="state_algebra_operations.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