adevs::rk45< X > Class Template Reference

#include <adevs_rk45.h>

Inheritance diagram for adevs::rk45< X >:

adevs::DESS< X > adevs::Atomic< X > adevs::Devs< X > List of all members.

Public Member Functions

 rk45 (int num_state_vars, double h_max, double err_tol, int zero_crossing_funcs, double event_tol=1E-12)
void init (int i, double q0)
const double * getStateVars () const
int getNumStateVars () const
virtual void der_func (const double *q, double *dq)=0
virtual void state_event_func (const double *q, double *z)=0
virtual double time_event_func (const double *q)=0
virtual void discrete_action (double *q, const Bag< X > &xb)=0
virtual void discrete_output (const double *q, Bag< X > &yb)=0
virtual void state_changed (const double *q)
void evolve_func (double h)
double next_event_func (bool &is_event)
void discrete_action_func (const Bag< X > &xb)
void discrete_output_func (Bag< X > &yb)
void state_changed ()
 ~rk45 ()
 Destructor.

Detailed Description

template<class X>
class adevs::rk45< X >

This class is deprecated. Use the Hybrid class instead.

This class can be used to simulate a set of ordinary differential equations with state and time events. An adaptive fourth/fifth order Runge-Kutta integration scheme is used to advance to solution, and interval halving is used for event detection. Truncation errors are estimated for the fourth order scheme, but the solution is advanced with the fifth order scheme. The inf-norm is used in the error tolerance test.


Constructor & Destructor Documentation

template<class X>
adevs::rk45< X >::rk45 ( int  num_state_vars,
double  h_max,
double  err_tol,
int  zero_crossing_funcs,
double  event_tol = 1E-12 
)

The constructor requires the number of continuous state variables, the maximum allowed integration time step, maximum truncation error tolerance, and the number of zero crossing functions in this system. An optional event tolerance sets the absolute time by which events can be missed (default is 1E-12).


Member Function Documentation

template<class X>
virtual void adevs::rk45< X >::der_func ( const double *  q,
double *  dq 
) [pure virtual]

Compute the derivative function using the supplied state variable values. The derivatives should be stored in dq.

template<class X>
virtual void adevs::rk45< X >::discrete_action ( double *  q,
const Bag< X > &  xb 
) [pure virtual]

This function is called when an event occurs. The event can be due to the zero crossing function reaching zero or because of an external input. The continuous and discrete variables can be updated here. The q array contains continuous state when the event occurs, and can be modified if desired.

template<class X>
void adevs::rk45< X >::discrete_action_func ( const Bag< X > &  xb  )  [virtual]

This is the discrete action function. The input bag contains the discrete events that are available at this time (if any).

Implements adevs::DESS< X >.

template<class X>
virtual void adevs::rk45< X >::discrete_output ( const double *  q,
Bag< X > &  yb 
) [pure virtual]

This output function is evaluated when internal events occur. Output events should be placed into the bag yb.

template<class X>
void adevs::rk45< X >::discrete_output_func ( Bag< X > &  yb  )  [virtual]

This is the output function. The output function is evaluated when the next_event_func() elapses. The bag should be filled with output events.

Implements adevs::DESS< X >.

template<class X>
void adevs::rk45< X >::evolve_func ( double  h  )  [virtual]

This virtual function is the continuous evolution function. Its purpose is to advance the continuous state variables for h units of time. A derived class should implement its integration scheme in this function.

Implements adevs::DESS< X >.

template<class X>
int adevs::rk45< X >::getNumStateVars (  )  const [inline]

Get the number of items in the state variable array.

template<class X>
const double* adevs::rk45< X >::getStateVars (  )  const [inline]

Get read-only access to the state variable array.

template<class X>
void adevs::rk45< X >::init ( int  i,
double  q0 
) [inline]

Initialize the ith state variable

template<class X>
double adevs::rk45< X >::next_event_func ( bool &  is_event  )  [virtual]

This function should return the time until the next state or time event in the continuous system. This method can also return the time until the next integration step, in which case the variable is_event should be set to false. If the is_event flag is true, then next state change will be treated as an internal event of the DEVS model.

Implements adevs::DESS< X >.

template<class X>
void adevs::rk45< X >::state_changed (  )  [inline, virtual]

This method is executed initially (i.e., at simulation start or just following creation if added dynamically), after every evaluation of the evolution function, and after every evaluation of the discrete_action_func method. This method is intended to facilitate writing the continuous system trajectory to an output file. The overridden method should call some integrator specific method that the user can implement for that purpose.

Implements adevs::DESS< X >.

template<class X>
virtual void adevs::rk45< X >::state_changed ( const double *  q  )  [inline, virtual]

This method is called immediately following every time step, and just prior and following every discrete action. It is meant to allow output variables to be recorded to file or log every time that the model state changes. You chould not change the simulation state as part of this method! It is non-const just for convenience - please be careful. This method does nothing by default.

template<class X>
virtual void adevs::rk45< X >::state_event_func ( const double *  q,
double *  z 
) [pure virtual]

This function should fill the array z with the value of the zero crossing functions. The z array will have a number of entries equal to the zero_crossing_funcs argument that was passed to the constructor. An event occurs when any of these functions are equal to zero.

template<class X>
virtual double adevs::rk45< X >::time_event_func ( const double *  q  )  [pure virtual]

This method is used to schedule time event. The returned value is the time remaining until the next time event.


The documentation for this class was generated from the following file:
Generated on Tue Oct 6 20:46:41 2009 for adevs by  doxygen 1.4.7