mbsim  4.0.0
MBSim Kernel
MBSim::LSODIIntegrator Class Reference

Hindmarsh’s ODE solver LSODI. More...

#include <lsodi_integrator.h>

Inheritance diagram for MBSim::LSODIIntegrator:
[legend]

Public Member Functions

void setMaximumStepSize (double dtMax_)
 
void setMinimumStepSize (double dtMin_)
 
void setInitialStepSize (double dt0_)
 
void setStepLimit (int maxSteps_)
 
void setExcludeAlgebraicVariablesFromErrorTest (bool excludeAlgebraicVariables_)
 
void integrate ()
 start the integration of the system set by setSystem. Each class implemeting this function should call debugInit first. More...
 
virtual void initializeUsingXML (xercesc::DOMElement *element)
 initialize integrator More...
 
virtual void integrate ()=0
 start the integration of the system set by setSystem. Each class implemeting this function should call debugInit first. More...
 
void integrate (MBSim::DynamicSystemSolver &sys)
 Convinent function: call setSystem(&sys) and integrate()
 
- Public Member Functions inherited from MBSim::DAEIntegrator
void initializeUsingXML (xercesc::DOMElement *element) override
 initialize integrator More...
 
void setFormalism (Formalism formalism_)
 
void setAbsoluteTolerance (const fmatvec::Vec &aTol_)
 
void setAbsoluteTolerance (double aTol_)
 
void setRelativeTolerance (const fmatvec::Vec &rTol_)
 
void setRelativeTolerance (double rTol_)
 
void setAbsolutePositionTolerance (double aTolPos_)
 
void setAbsoluteVelocityTolerance (double aTolVel_)
 
void setAbsoluteFirstOrderTolerance (double aTol1st_)
 
void setAbsoluteForceTolerance (double aTolForce_)
 
void setRelativePositionTolerance (double rTolPos_)
 
void setRelativeVelocityTolerance (double rTolVel_)
 
void setRelativeFirstOrderTolerance (double rTol1st_)
 
void setRelativeForceTolerance (double rTolForce_)
 
- Public Member Functions inherited from MBSim::ImplicitIntegrator
void setReducedForm (bool reduced_)
 
void setPartiallyAnalyticalJacobian (bool partiallyAnalyticalJacobian_)
 
- Public Member Functions inherited from MBSim::RootFindingIntegrator
void setRootFindingAccuracy (double dtRoot_)
 Define the root-finding accuracy.
 
void setPlotOnRoot (bool b)
 Define wether to trigger a plot before and after each found root.
 
void setToleranceForPositionConstraints (double gMax_)
 Set the maximum allowed position drift.
 
void setToleranceForVelocityConstraints (double gdMax_)
 Set the maximum allowed velocity drift.
 
double getToleranceForPositionConstraints ()
 Get the maximum allowed position drift.
 
double getToleranceForVelocityConstraints ()
 Get the maximum allowed velocity drift.
 
virtual void initializeUsingXML (xercesc::DOMElement *element)
 initialize integrator More...
 
- Public Member Functions inherited from MBSim::Integrator
 Integrator ()
 constructor
 
 ~Integrator () override=default
 destructor
 
void setStartTime (double tStart_)
 
void setEndTime (double tEnd_)
 
void setPlotStepSize (double dtPlot_)
 
void setInitialState (const fmatvec::Vec &z0_)
 
double getStartTime () const
 
double getEndTime () const
 
double getPlotStepSize () const
 
const fmatvec::Vec & getInitialState () const override
 
void execute () override
 start solving the dynamic system set by setSystem. More...
 
virtual void integrate ()=0
 start the integration of the system set by setSystem. Each class implemeting this function should call debugInit first. More...
 
void integrate (MBSim::DynamicSystemSolver &sys)
 Convinent function: call setSystem(&sys) and integrate()
 
void debugInit ()
 
virtual void preIntegrate ()
 
virtual void subIntegrate (double tStop)
 
virtual void postIntegrate ()
 
void initializeUsingXML (xercesc::DOMElement *element) override
 initialize integrator More...
 
- Public Member Functions inherited from MBSim::Solver
 Solver ()
 constructor
 
 ~Solver () override=default
 destructor
 
void throwError (const std::string &msg) const
 
virtual void execute ()=0
 start solving the dynamic system set by setSystem. More...
 
virtual void postprocessing ()
 
virtual void initializeUsingXML (xercesc::DOMElement *element)
 
virtual const fmatvec::Vec & getInitialState () const =0
 
void setSystem (DynamicSystemSolver *s)
 
MBSim::DynamicSystemSolvergetSystem ()
 
const MBXMLUtils::DOMEvalExceptiongetDOMEvalError () const
 

Private Types

typedef void(* Res) (int *neq, double *t, double *y_, double *yd_, double *res_, int *ires)
 
typedef void(* Jac) (int *neq, double *t, double *y_, double *yd_, int *ml, int *mu, double *J_, int *nrowp)
 

Private Member Functions

double delta (int i, double z) const override
 
void init () override
 
void reinit () override
 

Static Private Member Functions

static void resODE (int *neq, double *t, double *z_, double *zd_, double *res_, int *ires)
 
static void resDAE2 (int *neq, double *t, double *y_, double *yd_, double *res_, int *ires)
 
static void resGGL (int *neq, double *t, double *y_, double *yd_, double *res_, int *ires)
 
static void adda (int *neq, double *t, double *y_, int *ml, int *mu, double *P, int *nrowp)
 
static void jacODE (int *neq, double *t, double *y_, double *yd_, int *ml, int *mu, double *J_, int *nrowp)
 
static void jacDAE2 (int *neq, double *t, double *y_, double *yd_, int *ml, int *mu, double *J_, int *nrowp)
 
static void jacGGL (int *neq, double *t, double *y_, double *yd_, int *ml, int *mu, double *J_, int *nrowp)
 

Private Attributes

double dtMax {0}
 
double dtMin {0}
 
double dt0 {0}
 
int maxSteps {std::numeric_limits<int>::max()}
 
bool excludeAlgebraicVariables {true}
 
fmatvec::VecInt neq_
 
fmatvec::Vec rWork
 
int lewt
 
std::exception_ptr exception
 

Static Private Attributes

static Res res [5]
 
static Jac jac [5]
 

Additional Inherited Members

- Public Types inherited from MBSim::DAEIntegrator
enum  Formalism {
  ODE =0 , DAE1 , DAE2 , DAE3 ,
  GGL , unknown
}
 
- Protected Member Functions inherited from MBSim::DAEIntegrator
void par_ud_xd_gdd_par_q_u (fmatvec::Mat &J, const fmatvec::Vec &ud_=fmatvec::Vec())
 
void par_zd_gdd_par_q_u (fmatvec::Mat &J, const fmatvec::Vec &ud_=fmatvec::Vec())
 
void par_ud_xd_par_x (fmatvec::Mat &J)
 
void par_ud_xd_gd_par_q (fmatvec::Mat &J)
 
void par_zd_gd_par_q (fmatvec::Mat &J)
 
void par_ud_xd_g_par_q (fmatvec::Mat &J)
 
void par_zd_g_par_q (fmatvec::Mat &J)
 
void par_ud_xd_gd_g_par_q (fmatvec::Mat &J)
 
void par_zd_gd_g_par_q (fmatvec::Mat &J)
 
void calcSize () override
 
void init () override
 
virtual void reinit ()
 
- Protected Member Functions inherited from MBSim::ImplicitIntegrator
virtual double delta (int i, double z) const
 
void par_ud_xd_par_q (fmatvec::Mat &J)
 
void par_zd_par_q (fmatvec::Mat &J)
 
void par_ud_xd_par_u_x (fmatvec::Mat &J, bool updla)
 
void par_zd_par_z (fmatvec::Mat &J, bool updla)
 
virtual void calcSize ()
 
virtual void init ()
 
- Protected Member Functions inherited from MBSim::RootFindingIntegrator
bool signChangedWRTsvLast (const fmatvec::Vec &svStepEnd) const
 
- Protected Attributes inherited from MBSim::DAEIntegrator
Formalism formalism {ODE}
 
fmatvec::Vec aTol
 
std::optional< double > aTolScalar
 
fmatvec::Vec rTol
 
std::optional< double > rTolScalar
 
std::optional< double > aTolPos
 
std::optional< double > aTolVel
 
std::optional< double > aTol1st
 
std::optional< double > aTolForce
 
std::optional< double > rTolPos
 
std::optional< double > rTolVel
 
std::optional< double > rTol1st
 
std::optional< double > rTolForce
 
int laInd
 
int lInd
 
fmatvec::Vec gd0
 
fmatvec::Vec g0
 
fmatvec::RangeV Rla
 
fmatvec::RangeV Rl
 
fmatvec::RangeV RlaMove
 
fmatvec::RangeV RlMove
 
- Protected Attributes inherited from MBSim::ImplicitIntegrator
bool reduced {false}
 
bool partiallyAnalyticalJacobian {false}
 
int neq
 
int qMove
 
fmatvec::Vec zd0
 
fmatvec::RangeV Rq
 
fmatvec::RangeV Ru
 
fmatvec::RangeV Rx
 
fmatvec::RangeV Rz
 
fmatvec::RangeV RuMove
 
fmatvec::RangeV RxMove
 
- Protected Attributes inherited from MBSim::RootFindingIntegrator
double dtRoot {1e-10}
 
bool plotOnRoot {false}
 
double gMax {-1}
 
double gdMax {-1}
 
fmatvec::Vec svLast
 
bool shift {false}
 
- Protected Attributes inherited from MBSim::Integrator
double tStart {0.}
 start, end, plot time
 
double tEnd {1.}
 
double dtPlot {1e-4}
 
fmatvec::Vec z0
 initial state
 
std::string name
 name of integrator
 
- Protected Attributes inherited from MBSim::Solver
MBSim::DynamicSystemSolversystem
 dynamic system
 
MBXMLUtils::DOMEvalException domEvalError
 Special XML helper variable.
 

Detailed Description

Hindmarsh’s ODE solver LSODI.

Livermore Solver for Ordinary Differential Equations (Implicit form). LSODI solves the initial-value problem for differential-algebraic systems of index 2. This integrator uses ODEPACK (http://www.netlib.org/odepack).

Member Function Documentation

◆ delta()

double MBSim::LSODIIntegrator::delta ( int  i,
double  z 
) const
overrideprivatevirtual

Reimplemented from MBSim::ImplicitIntegrator.

◆ init()

void MBSim::LSODIIntegrator::init ( )
overrideprivatevirtual

Reimplemented from MBSim::DAEIntegrator.

◆ initializeUsingXML()

void MBSim::LSODIIntegrator::initializeUsingXML ( xercesc::DOMElement *  element)
virtual

initialize integrator

Parameters
XMLdescription

Reimplemented from MBSim::DAEIntegrator.

◆ integrate() [1/2]

void MBSim::LSODIIntegrator::integrate ( )
virtual

start the integration of the system set by setSystem. Each class implemeting this function should call debugInit first.

Implements MBSim::Integrator.

◆ integrate() [2/2]

virtual void MBSim::Integrator::integrate ( )
virtual

start the integration of the system set by setSystem. Each class implemeting this function should call debugInit first.

Implements MBSim::Integrator.

◆ reinit()

void MBSim::LSODIIntegrator::reinit ( )
overrideprivatevirtual

Reimplemented from MBSim::DAEIntegrator.

Member Data Documentation

◆ dt0

double MBSim::LSODIIntegrator::dt0 {0}
private

step size for the first step

◆ dtMax

double MBSim::LSODIIntegrator::dtMax {0}
private

maximal step size

◆ dtMin

double MBSim::LSODIIntegrator::dtMin {0}
private

minimal step size

◆ excludeAlgebraicVariables

bool MBSim::LSODIIntegrator::excludeAlgebraicVariables {true}
private

exclude algebraic variables from error test

◆ maxSteps

int MBSim::LSODIIntegrator::maxSteps {std::numeric_limits<int>::max()}
private

maximum number of steps allowed during one call to the solver.


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