ODESolverRungeKutta4< T, T_SET > Class Template Reference

#include <TAPsODESolvers.hpp>

Inheritance diagram for ODESolverRungeKutta4< T, T_SET >:

Inheritance graph
[legend]
Collaboration diagram for ODESolverRungeKutta4< T, T_SET >:

Collaboration graph
[legend]

List of all members.

Public Member Functions

 ODESolverRungeKutta4 ()
virtual void SetSize (int vectorSize)
virtual void Solve (VectorSet< T_SET > &x0, VectorSet< T_SET > &xEnd, T t0, T t1, DerivFunc dxdt, void *userData)
virtual ~ODESolverRungeKutta4 ()

Private Attributes

VectorSet< T_SET > vK1
VectorSet< T_SET > vK2
VectorSet< T_SET > vK3
VectorSet< T_SET > vK4


Detailed Description

template<typename T, typename T_SET = T>
class ODESolverRungeKutta4< T, T_SET >

Definition at line 175 of file TAPsODESolvers.hpp.


Constructor & Destructor Documentation

template<typename T, typename T_SET>
ODESolverRungeKutta4< T, T_SET >::ODESolverRungeKutta4 (  )  [inline]

Definition at line 135 of file TAPsODESolvers.cpp.

00135 : ODESolver<T, T_SET>() {}

template<typename T, typename T_SET>
ODESolverRungeKutta4< T, T_SET >::~ODESolverRungeKutta4 (  )  [inline, virtual]

Definition at line 138 of file TAPsODESolvers.cpp.

00138 {}


Member Function Documentation

template<typename T, typename T_SET>
void ODESolverRungeKutta4< T, T_SET >::SetSize ( int  vectorSize  )  [inline, virtual]

Implements ODESolver< T, T_SET >.

Definition at line 141 of file TAPsODESolvers.cpp.

00142 { 
00143     vK1.resize( vectorSize );
00144     vK2.resize( vectorSize );
00145     vK3.resize( vectorSize );
00146     vK4.resize( vectorSize );
00147 }

template<typename T, typename T_SET>
void ODESolverRungeKutta4< T, T_SET >::Solve ( VectorSet< T_SET > &  x0,
VectorSet< T_SET > &  xEnd,
t0,
t1,
DerivFunc  dxdt,
void *  userData 
) [inline, virtual]

Definition at line 150 of file TAPsODESolvers.cpp.

00151                                       : x(t_0) an initial state vector
00152         VectorSet<T_SET> &xEnd, // o/p: x(t_1) an end state vector
00153         T t0, T t1,             // i/p: starting and ending times
00154         DerivFunc dxdt,         // i/p: a derivative function
00155         void *userData          // o/p: array of user data
00156 )
00157 {
00158     bool restartNotRequired = true;
00159     T h = t1 - t0;
00160     T half = static_cast<T>( 0.5 );
00161     // Runge-Kutta of Order 4
00162     restartNotRequired = dxdt( t0, x0, vK1, userData );
00163     vK1 *= h;
00164     assert( restartNotRequired );
00165     restartNotRequired = dxdt( t0 + h*half, x0 + vK1*half, vK2, userData );
00166     vK2 *= h;
00167     assert( restartNotRequired );
00168     restartNotRequired = dxdt( t0 + h*half, x0 + vK2*half, vK3, userData );
00169     vK3 *= h;
00170     assert( restartNotRequired );
00171     restartNotRequired = dxdt( t0 + h, x0 + vK3, vK4, userData );
00172     vK4 *= h;
00173     assert( restartNotRequired );
00174     // Update the state
00175     xEnd = x0   + vK1/static_cast<T>(6) 
00176                 + vK2/static_cast<T>(3)
00177                 + vK3/static_cast<T>(3)
00178                 + vK4/static_cast<T>(6);
00179 }


Member Data Documentation

template<typename T, typename T_SET = T>
VectorSet<T_SET> ODESolverRungeKutta4< T, T_SET >::vK1 [private]

Definition at line 203 of file TAPsODESolvers.hpp.

template<typename T, typename T_SET = T>
VectorSet<T_SET> ODESolverRungeKutta4< T, T_SET >::vK2 [private]

Definition at line 203 of file TAPsODESolvers.hpp.

template<typename T, typename T_SET = T>
VectorSet<T_SET> ODESolverRungeKutta4< T, T_SET >::vK3 [private]

Definition at line 203 of file TAPsODESolvers.hpp.

template<typename T, typename T_SET = T>
VectorSet<T_SET> ODESolverRungeKutta4< T, T_SET >::vK4 [private]

Definition at line 203 of file TAPsODESolvers.hpp.


The documentation for this class was generated from the following files:

Generated on Mon Oct 13 11:45:40 2008 for TAPs by  doxygen 1.5.6