BackwardEulerIvpOdeSolver Class Reference

#include <BackwardEulerIvpOdeSolver.hpp>

Inherits AbstractOneStepIvpOdeSolver.

Collaboration diagram for BackwardEulerIvpOdeSolver:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 BackwardEulerIvpOdeSolver (unsigned sizeOfOdeSystem)
 ~BackwardEulerIvpOdeSolver ()
void SetEpsilonForNumericalJacobian (double epsilon)
void ForceUseOfNumericalJacobian ()
unsigned GetSystemSize () const

Protected Member Functions

void CalculateNextYValue (AbstractOdeSystem *pAbstractOdeSystem, double timeStep, double time, std::vector< double > &rCurrentYValues, std::vector< double > &rNextYValues)

Private Member Functions

template<class Archive >
void serialize (Archive &archive, const unsigned int version)
void ComputeResidual (AbstractOdeSystem *pAbstractOdeSystem, double timeStep, double time, std::vector< double > &rCurrentYValues, std::vector< double > &rCurrentGuess)
void ComputeJacobian (AbstractOdeSystem *pAbstractOdeSystem, double timeStep, double time, std::vector< double > &rCurrentYValues, std::vector< double > &rCurrentGuess)
void SolveLinearSystem ()
double ComputeNorm (double *pVector)
void ComputeNumericalJacobian (AbstractOdeSystem *pAbstractOdeSystem, double timeStep, double time, std::vector< double > &rCurrentYValues, std::vector< double > &rCurrentGuess)

Private Attributes

unsigned mSizeOfOdeSystem
double mNumericalJacobianEpsilon
bool mForceUseOfNumericalJacobian
doublemResidual
double ** mJacobian
doublemUpdate

Friends

class boost::serialization::access

Detailed Description

A concrete one step ODE solver class that employs the backward Euler method. This numerical method is implicit and hence unconditionally stable.

Definition at line 44 of file BackwardEulerIvpOdeSolver.hpp.


Constructor & Destructor Documentation

BackwardEulerIvpOdeSolver::BackwardEulerIvpOdeSolver ( unsigned  sizeOfOdeSystem  ) 

Constructor.

Parameters:
sizeOfOdeSystem the number of state variables in the ODE system

Definition at line 203 of file BackwardEulerIvpOdeSolver.cpp.

References mForceUseOfNumericalJacobian, mJacobian, mNumericalJacobianEpsilon, mResidual, mSizeOfOdeSystem, and mUpdate.

BackwardEulerIvpOdeSolver::~BackwardEulerIvpOdeSolver (  ) 

Destructor.

Definition at line 222 of file BackwardEulerIvpOdeSolver.cpp.

References mJacobian, mResidual, mSizeOfOdeSystem, and mUpdate.


Member Function Documentation

void BackwardEulerIvpOdeSolver::CalculateNextYValue ( AbstractOdeSystem pAbstractOdeSystem,
double  timeStep,
double  time,
std::vector< double > &  rCurrentYValues,
std::vector< double > &  rNextYValues 
) [protected, virtual]

Calculate the solution to the ODE system at the next timestep.

A usage example: BackwardEulerIvpOdeSolver mySolver; OdeSolution solution = mySolver.Solve(pMyOdeSystem, yInit, StartTime, EndTime, TimeStep, SamplingTime);

Parameters:
pAbstractOdeSystem the ODE system to solve
timeStep dt
time the current time
rCurrentYValues the current (initial) state
rNextYValues the state at the next timestep

Implements AbstractOneStepIvpOdeSolver.

Definition at line 160 of file BackwardEulerIvpOdeSolver.cpp.

References ComputeJacobian(), ComputeNorm(), ComputeResidual(), AbstractOdeSystem::GetNumberOfStateVariables(), mSizeOfOdeSystem, mUpdate, and SolveLinearSystem().

void BackwardEulerIvpOdeSolver::ComputeJacobian ( AbstractOdeSystem pAbstractOdeSystem,
double  timeStep,
double  time,
std::vector< double > &  rCurrentYValues,
std::vector< double > &  rCurrentGuess 
) [private]

Compute the Jacobian of the ODE system.

Parameters:
pAbstractOdeSystem the ODE system to solve
timeStep dt
time the current time
rCurrentYValues the current (initial) state
rCurrentGuess current guess for the state at the next timestep

Definition at line 47 of file BackwardEulerIvpOdeSolver.cpp.

References AbstractOdeSystemWithAnalyticJacobian::AnalyticJacobian(), ComputeNumericalJacobian(), AbstractOdeSystem::GetUseAnalyticJacobian(), mForceUseOfNumericalJacobian, mJacobian, and mSizeOfOdeSystem.

Referenced by CalculateNextYValue().

double BackwardEulerIvpOdeSolver::ComputeNorm ( double pVector  )  [private]

Compute the infinity/maximum norm of a vector. Used by the method CalculateNextYValue.

Parameters:
pVector a pointer to a vector
Returns:
the vector's norm.

Definition at line 105 of file BackwardEulerIvpOdeSolver.cpp.

References mSizeOfOdeSystem.

Referenced by CalculateNextYValue().

void BackwardEulerIvpOdeSolver::ComputeNumericalJacobian ( AbstractOdeSystem pAbstractOdeSystem,
double  timeStep,
double  time,
std::vector< double > &  rCurrentYValues,
std::vector< double > &  rCurrentGuess 
) [private]

Compute the Jacobian of the ODE system numerically.

Parameters:
pAbstractOdeSystem the ODE system to solve
timeStep dt
time the current time
rCurrentYValues the current (initial) state
rCurrentGuess current guess for the state at the next timestep

Definition at line 118 of file BackwardEulerIvpOdeSolver.cpp.

References ComputeResidual(), mJacobian, mNumericalJacobianEpsilon, mResidual, and mSizeOfOdeSystem.

Referenced by ComputeJacobian().

void BackwardEulerIvpOdeSolver::ComputeResidual ( AbstractOdeSystem pAbstractOdeSystem,
double  timeStep,
double  time,
std::vector< double > &  rCurrentYValues,
std::vector< double > &  rCurrentGuess 
) [private]

Compute the current residual.

Parameters:
pAbstractOdeSystem the ODE system to solve
timeStep dt
time the current time
rCurrentYValues the current (initial) state
rCurrentGuess current guess for the state at the next timestep

Definition at line 33 of file BackwardEulerIvpOdeSolver.cpp.

References AbstractOdeSystem::EvaluateYDerivatives(), mResidual, and mSizeOfOdeSystem.

Referenced by CalculateNextYValue(), and ComputeNumericalJacobian().

void BackwardEulerIvpOdeSolver::ForceUseOfNumericalJacobian (  ) 

Force the solver to use the numerical Jacobian even if the ODE system object provides an analytical Jacobian.

Definition at line 241 of file BackwardEulerIvpOdeSolver.cpp.

References mForceUseOfNumericalJacobian.

unsigned BackwardEulerIvpOdeSolver::GetSystemSize (  )  const [inline]

Public method used in archiving.

Returns:
the size of the system

Definition at line 208 of file BackwardEulerIvpOdeSolver.hpp.

References mSizeOfOdeSystem.

template<class Archive >
void BackwardEulerIvpOdeSolver::serialize ( Archive &  archive,
const unsigned int  version 
) [inline, private]

Archive the abstract IVP Solver, never used directly - boost uses this.

Parameters:
archive the archive
version the current version of this class

Reimplemented from AbstractOneStepIvpOdeSolver.

Definition at line 56 of file BackwardEulerIvpOdeSolver.hpp.

References mForceUseOfNumericalJacobian, and mNumericalJacobianEpsilon.

void BackwardEulerIvpOdeSolver::SetEpsilonForNumericalJacobian ( double  epsilon  ) 

Set the epsilon to use in calculating the numerical Jacobian of the ODE system.

Parameters:
epsilon 

Definition at line 235 of file BackwardEulerIvpOdeSolver.cpp.

References mNumericalJacobianEpsilon.

void BackwardEulerIvpOdeSolver::SolveLinearSystem (  )  [private]

Solve a linear system of equations to update the current guess for the solution to the ODE system at the next timestep. Used by the method CalculateNextYValue.

Definition at line 78 of file BackwardEulerIvpOdeSolver.cpp.

References mJacobian, mResidual, mSizeOfOdeSystem, and mUpdate.

Referenced by CalculateNextYValue().


Friends And Related Function Documentation

friend class boost::serialization::access [friend]

Needed for serialization.

Reimplemented from AbstractOneStepIvpOdeSolver.

Definition at line 48 of file BackwardEulerIvpOdeSolver.hpp.


Member Data Documentation

Whether to force the solver to use the numerical Jacobian even if the ODE system object provides an analytical Jacobian.

Definition at line 75 of file BackwardEulerIvpOdeSolver.hpp.

Referenced by BackwardEulerIvpOdeSolver(), ComputeJacobian(), ForceUseOfNumericalJacobian(), and serialize().

The epsilon to use in calculating the numerical Jacobian of the ODE system.

Definition at line 69 of file BackwardEulerIvpOdeSolver.hpp.

Referenced by BackwardEulerIvpOdeSolver(), ComputeNumericalJacobian(), serialize(), and SetEpsilonForNumericalJacobian().

Working memory : update vector

Definition at line 90 of file BackwardEulerIvpOdeSolver.hpp.

Referenced by BackwardEulerIvpOdeSolver(), CalculateNextYValue(), SolveLinearSystem(), and ~BackwardEulerIvpOdeSolver().


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

Generated by  doxygen 1.6.2