SurgSim::Math::OdeEquation Class Referenceabstract

Ode equation of 2nd order of the form \(M(x,v).a = F(x, v)\) with \((x0, v0)\) for initial conditions and a set of boundary conditions. More...

`#include <SurgSim/Math/OdeEquation.h>`

Inheritance diagram for SurgSim::Math::OdeEquation:

## Public Member Functions

virtual | ~OdeEquation ()
| Virtual destructor. More...
const std::shared_ptr< OdeState > | getInitialState () const
| Retrieves the ode initial conditions \((x0, v0)\) (i.e the initial state) More...
virtual Matrix | applyCompliance (const OdeState &state, const Matrix &b)=0
| Calculate the product C.b where C is the compliance matrix with boundary conditions applied. More...
virtual void | updateFMDK (const OdeState &state, int options)
| Update the OdeEquation (and support data) based on the given state. More...
const Vector & | getF () const
const SparseMatrix & | getM () const
const SparseMatrix & | getD () const
const SparseMatrix & | getK () const

## Protected Member Functions

virtual void | computeF (const OdeState &state)=0
| Evaluation of the RHS function \(f(x, v)\) for a given state. More...
virtual void | computeM (const OdeState &state)=0
| Evaluation of the LHS matrix \(M(x,v)\) for a given state. More...
virtual void | computeD (const OdeState &state)=0
| Evaluation of \(D = -\frac{\partial f}{\partial v}(x,v)\) for a given state. More...
virtual void | computeK (const OdeState &state)=0
| Evaluation of \(K = -\frac{\partial f}{\partial x}(x,v)\) for a given state. More...
virtual void | computeFMDK (const OdeState &state)=0
| Evaluation of \(f(x,v)\), \(M(x,v)\), \(D = -\frac{\partial f}{\partial v}(x,v)\) and \(K = -\frac{\partial f}{\partial x}(x,v)\). More...

## Protected Attributes

std::shared_ptr< OdeState > | m_initialState
| The initial state (which defines the ODE initial conditions \((x0, v0)\)) More...
Vector | m_f
| The vector containing \(f(x, v)\). More...
SparseMatrix | m_M
| The matrix \(M(x,v)\). More...
SparseMatrix | m_D
| The The matrix \(D = -\frac{\partial f}{\partial v}(x,v)\). More...
SparseMatrix | m_K
| The The matrix \(K = -\frac{\partial f}{\partial x}(x,v)\). More...

## Detailed Description

Ode equation of 2nd order of the form \(M(x,v).a = F(x, v)\) with \((x0, v0)\) for initial conditions and a set of boundary conditions.

The problem is called a Boundary Value Problem (BVP). This ode equation is solved as an ode of order 1 by defining the state vector \(y = \left(\begin{array}{c}x\\v\end{array}\right)\):

\[ y' = \left(\begin{array}{c} x' \\ v' \end{array}\right) = \left(\begin{array}{c} v \\ M(x, v)^{-1}.f(t, x, v) \end{array}\right) \]

Note
  To allow the use of explicit and implicit solver, we need to be able to evaluate
  \(M(x, v)\), \(f(t, x, v)\) but also \(K = -dF/dx(x, v)\) and \(D = -dF/dv(x, v)\)
  Models wanting the use of implicit solvers will need to compute these Jacobian matrices.

## Constructor & Destructor Documentation

## ~OdeEquation()

virtual SurgSim::Math::OdeEquation::~OdeEquation | ( |  | ) |

inline virtual

Virtual destructor.

## Member Function Documentation

## applyCompliance()

virtual Matrix SurgSim::Math::OdeEquation::applyCompliance | ( | const OdeState & | state,
|  | const Matrix & | b
| ) |  |

pure virtual

Calculate the product C.b where C is the compliance matrix with boundary conditions applied.

Note that this can be rewritten as (Bt)(M^-1)(B.b) = (Bt)((M^-1)(B.b)) = x, where (M^-1)(B.b) = y is simply the solution to M.y = B.b and Bt.y = x.

Parameters

  state | \((x, v)\) the current position and velocity to evaluate the various terms with
  b | The input matrix

Returns
  The matrix \(C.b\)

Implemented in SurgSim::Physics::DeformableRepresentation, and SurgSim::Physics::FemRepresentation.

## computeD()

virtual void SurgSim::Math::OdeEquation::computeD | ( | const OdeState & | state | ) |

protected pure virtual

Evaluation of \(D = -\frac{\partial f}{\partial v}(x,v)\) for a given state.

Parameters

  state | \((x, v)\) the current position and velocity to evaluate the Jacobian matrix with

Implemented in SurgSim::Physics::FemRepresentation, and SurgSim::Physics::MassSpringRepresentation.

## computeF()

virtual void SurgSim::Math::OdeEquation::computeF | ( | const OdeState & | state | ) |

protected pure virtual

Evaluation of the RHS function \(f(x, v)\) for a given state.

Parameters

  state | \((x, v)\) the current position and velocity to evaluate the function \(f(x,v)\) with

Implemented in SurgSim::Physics::FemRepresentation, and SurgSim::Physics::MassSpringRepresentation.

## computeFMDK()

virtual void SurgSim::Math::OdeEquation::computeFMDK | ( | const OdeState & | state | ) |

protected pure virtual

Evaluation of \(f(x,v)\), \(M(x,v)\), \(D = -\frac{\partial f}{\partial v}(x,v)\) and \(K = -\frac{\partial f}{\partial x}(x,v)\).

When all the terms are needed, this method can perform optimization in evaluating everything together

Parameters

  state | \((x, v)\) the current position and velocity to evaluate the various terms with

Note
  computeF(), computeM(), computeD(), computeK()

Implemented in SurgSim::Physics::FemRepresentation, and SurgSim::Physics::MassSpringRepresentation.

## computeK()

virtual void SurgSim::Math::OdeEquation::computeK | ( | const OdeState & | state | ) |

protected pure virtual

Evaluation of \(K = -\frac{\partial f}{\partial x}(x,v)\) for a given state.

Parameters

  state | \((x, v)\) the current position and velocity to evaluate the Jacobian matrix with

Implemented in SurgSim::Physics::FemRepresentation, and SurgSim::Physics::MassSpringRepresentation.

## computeM()

virtual void SurgSim::Math::OdeEquation::computeM | ( | const OdeState & | state | ) |

protected pure virtual

Evaluation of the LHS matrix \(M(x,v)\) for a given state.

Parameters

  state | \((x, v)\) the current position and velocity to evaluate the matrix \(M(x,v)\) with

Implemented in SurgSim::Physics::FemRepresentation, and SurgSim::Physics::MassSpringRepresentation.

## getD()

const SparseMatrix & SurgSim::Math::OdeEquation::getD | ( |  | ) | const

Returns
  The matrix \(D = -\frac{\partial f}{\partial v}(x,v)\)

## getF()

const Vector & SurgSim::Math::OdeEquation::getF | ( |  | ) | const

Returns
  The vector containing \(f(x, v)\)

## getInitialState()

const std::shared_ptr< OdeState > SurgSim::Math::OdeEquation::getInitialState | ( |  | ) | const

Retrieves the ode initial conditions \((x0, v0)\) (i.e the initial state)

Returns
  The initial state

## getK()

const SparseMatrix & SurgSim::Math::OdeEquation::getK | ( |  | ) | const

Returns
  The matrix \(K = -\frac{\partial f}{\partial x}(x,v)\)

## getM()

const SparseMatrix & SurgSim::Math::OdeEquation::getM | ( |  | ) | const

Returns
  The matrix \(M(x,v)\)

## updateFMDK()

void SurgSim::Math::OdeEquation::updateFMDK | ( | const OdeState & | state,
|  | int | options
| ) |  |

virtual

Update the OdeEquation (and support data) based on the given state.

Parameters

  state | \((x, v)\) the current position and velocity to evaluate the various terms with
  options | Flag to specify which of F, M, D, K needs to be updated.

Reimplemented in SurgSim::Physics::FemRepresentation.

## Member Data Documentation

## m_D

SparseMatrix SurgSim::Math::OdeEquation::m_D

protected

The The matrix \(D = -\frac{\partial f}{\partial v}(x,v)\).

## m_f

Vector SurgSim::Math::OdeEquation::m_f

protected

The vector containing \(f(x, v)\).

## m_initialState

std::shared_ptr<OdeState> SurgSim::Math::OdeEquation::m_initialState

protected

The initial state (which defines the ODE initial conditions \((x0, v0)\))

Note
  MUST be set by the derived classes

## m_K

SparseMatrix SurgSim::Math::OdeEquation::m_K

protected

The The matrix \(K = -\frac{\partial f}{\partial x}(x,v)\).

## m_M

SparseMatrix SurgSim::Math::OdeEquation::m_M

protected

The matrix \(M(x,v)\).

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

- SurgSim/Math/OdeEquation.h
- SurgSim/Math/OdeEquation.cpp