Base class for all solvers of ode equation of order 2 of the form M(x(t), v(t)).a(t) = f(t, x(t), v(t))
More...
#include <SurgSim/Math/OdeSolver.h>
|
void | allocate (size_t size) |
| Allocates the system and compliance matrices. More...
|
|
|
std::string | m_name |
| Name for this solver. More...
|
|
OdeEquation & | m_equation |
| The ode equation (API providing the necessary evaluation methods and the initial state) More...
|
|
std::shared_ptr< LinearSolveAndInverse > | m_linearSolver |
| The specialized linear solver to use when solving the ode equation. More...
|
|
Matrix | m_systemMatrix |
| System matrix (can be M, K, combination of MDK depending on the solver) A static solver will have K for system matrix A dynamic explicit solver will have M for system matrix A dynamic implicit solver will have a combination of M, D and K for system matrix. More...
|
|
Matrix | m_compliance |
| Compliance matrix which is the inverse of the system matrix. More...
|
|
Base class for all solvers of ode equation of order 2 of the form M(x(t), v(t)).a(t) = f(t, x(t), v(t))
- Note
- This ode equation is solved as an ode of order 1 by defining the state vector y = (x v)^t:
-
y' = ( x' ) = ( dx/dt ) = ( v )
-
( v' ) = ( dv/dt ) = ( M(x, v)^{-1}.f(x, v) )
-
To allow the use of explicit and implicit solver, we need to be able to evaluate
-
M(x(t), v(t))
-
f(t, x(t), v(t)) but also
-
K = -df/dx(x(t), v(t))
-
D = -df/dv(x(t), v(t))
-
Models wanting the use of implicit solvers will need to compute these Jacobian matrices.
-
Matrices all have dense storage, but a specialized linear solver can be set per solver.
SurgSim::Math::OdeSolver::OdeSolver |
( |
OdeEquation * |
equation | ) |
|
|
explicit |
Constructor.
- Parameters
-
equation | The ode equation to be solved |
virtual SurgSim::Math::OdeSolver::~OdeSolver |
( |
| ) |
|
|
inlinevirtual |
void SurgSim::Math::OdeSolver::allocate |
( |
size_t |
size | ) |
|
|
protected |
Allocates the system and compliance matrices.
- Parameters
-
size | The size to account for in the data structure |
const Matrix & SurgSim::Math::OdeSolver::getCompliance |
( |
| ) |
const |
Queries the current compliance matrix.
- Returns
- The latest compliance matrix calculated
Gets the specialized linear solver used with this Ode solver.
- Returns
- The linear solver used when solving the ode equation
const std::string SurgSim::Math::OdeSolver::getName |
( |
| ) |
const |
Gets the solver's name.
- Returns
- The solver name
const Matrix & SurgSim::Math::OdeSolver::getSystemMatrix |
( |
| ) |
const |
Queries the current system matrix.
- Returns
- The latest system matrix calculated
Sets the specialized linear solver to use with this Ode solver.
- Parameters
-
linearSolver | the linear solver to use when solving the ode equation |
virtual void SurgSim::Math::OdeSolver::solve |
( |
double |
dt, |
|
|
const OdeState & |
currentState, |
|
|
OdeState * |
newState |
|
) |
| |
|
pure virtual |
Matrix SurgSim::Math::OdeSolver::m_compliance |
|
protected |
Compliance matrix which is the inverse of the system matrix.
The ode equation (API providing the necessary evaluation methods and the initial state)
The specialized linear solver to use when solving the ode equation.
std::string SurgSim::Math::OdeSolver::m_name |
|
protected |
Name for this solver.
- Note
- MUST be set by the derived classes
Matrix SurgSim::Math::OdeSolver::m_systemMatrix |
|
protected |
System matrix (can be M, K, combination of MDK depending on the solver) A static solver will have K for system matrix A dynamic explicit solver will have M for system matrix A dynamic implicit solver will have a combination of M, D and K for system matrix.
The documentation for this class was generated from the following files: