mbsim
4.0.0
MBSim Kernel
|
Half-explicit time-stepping integrator of first or higer order with StepSize Control (SSC) important options / settings :
More...
#include <time_stepping_ssc_integrator.h>
Public Member Functions | |
~TimeSteppingSSCIntegrator () override | |
void | setInitialStepSize (double dt_) |
void | setMaximumStepSize (double dtMax_) |
void | setMinimumStepSize (double dtMin_) |
void | setMaximumGain (double maxGain) |
void | setSafetyFactor (double sfactor) |
void | setSafetyFactorForGapControl (double s) |
void | setOutputInterpolation (bool flag) |
void | setFlagOutputOnlyAtTPlot (bool flag) |
void | setGapControl (GapControl gapControl) |
void | setDriftCompensation (bool dc) |
void | setMaximumOrder (int maxOrder_) |
void | setMethod (Method method_) |
void | setStepSizeControl (bool flag) |
void | setErrorTest (ErrorTest errorTest) |
void | setAlwaysValid (bool alwaysValid) |
void | integrate () override |
start the integration of the system set by setSystem. Each class implemeting this function should call debugInit first. More... | |
void | integrate (MBSim::DynamicSystemSolver &systemT1_, MBSim::DynamicSystemSolver &systemT2_, MBSim::DynamicSystemSolver &systemT3_, int Threads=0) |
void | setAbsoluteTolerance (const fmatvec::Vec &aTol_) |
void | setAbsoluteTolerance (double aTol_) |
void | setRelativeTolerance (const fmatvec::Vec &rTol_) |
void | setRelativeTolerance (double rTol_) |
void | setgapTolerance (double gTol) |
void | preIntegrate () override |
void | subIntegrate (double tStop) override |
void | postIntegrate () override |
void | preIntegrate (MBSim::DynamicSystemSolver &systemT1_, MBSim::DynamicSystemSolver &systemT2_, MBSim::DynamicSystemSolver &systemT3_) |
void | getDataForGapControl () |
bool | testTolerances () |
bool | GapControl (double qUnsafe, bool SSCTestOK) |
bool | changedLinkStatus (const fmatvec::VecInt &L1, const fmatvec::VecInt &L2, int ex) |
double | calculatedtNewRel (const fmatvec::Vec &ErrorLocal, double H) |
void | plot () |
virtual void | initializeUsingXML (xercesc::DOMElement *element) override |
initialize integrator More... | |
void | updatebi () |
void | updatela () |
void | updatezd () |
virtual void | integrate ()=0 |
void | integrate (MBSim::DynamicSystemSolver &sys) |
![]() | |
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... | |
![]() | |
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::DynamicSystemSolver * | getSystem () |
const MBXMLUtils::DOMEvalException & | getDOMEvalError () const |
Protected Member Functions | |
void | resize (MBSim::DynamicSystemSolver *system) |
Protected Attributes | |
MBSim::DynamicSystemSolver * | sysT1 {NULL} |
MBSim::DynamicSystemSolver * | sysT2 {NULL} |
MBSim::DynamicSystemSolver * | sysT3 {NULL} |
double | dt {1e-6} |
double | dtOld {1e-6} |
double | dte {1e-6} |
double | dtMin {0} |
double | dtMax {1e-3} |
double | dt_SSC_vorGapControl {0} |
bool | driftCompensation {false} |
double | t {0} |
double | tPlot {0} |
int | qSize {0} |
int | xSize {0} |
int | uSize {0} |
int | zSize {0} |
fmatvec::Vec | ze |
fmatvec::Vec | zi |
fmatvec::Vec | z1d |
fmatvec::Vec | z2d |
fmatvec::Vec | z2dRE |
fmatvec::Vec | z3d |
fmatvec::Vec | z4d |
fmatvec::Vec | z6d |
fmatvec::Vec | z2b |
fmatvec::Vec | z3b |
fmatvec::Vec | z4b |
fmatvec::Vec | z6b |
fmatvec::Vec | zStern |
fmatvec::VecInt | LS |
fmatvec::VecInt | LSe |
fmatvec::VecInt | LStmp_T1 |
fmatvec::VecInt | LStmp_T2 |
fmatvec::VecInt | LStmp_T3 |
fmatvec::VecInt | LSA |
fmatvec::VecInt | LSB1 |
fmatvec::VecInt | LSB2 |
fmatvec::VecInt | LSC1 |
fmatvec::VecInt | LSC2 |
fmatvec::VecInt | LSC3 |
fmatvec::VecInt | LSC4 |
fmatvec::VecInt | LSD1 |
fmatvec::VecInt | LSD2 |
fmatvec::VecInt | LSD3 |
fmatvec::VecInt | LSD4 |
fmatvec::VecInt | LSD5 |
fmatvec::VecInt | LSD6 |
fmatvec::Vec | la |
fmatvec::Vec | lae |
fmatvec::Vec | la1d |
fmatvec::Vec | la2b |
fmatvec::VecInt | laSizes |
fmatvec::VecInt | laeSizes |
fmatvec::VecInt | la1dSizes |
fmatvec::VecInt | la2bSizes |
fmatvec::Vec | gInActive |
fmatvec::Vec | gdInActive |
std::vector< MBSim::Link * > | SetValuedLinkListT1 |
std::vector< MBSim::Link * > | SetValuedLinkListT2 |
std::vector< MBSim::Link * > | SetValuedLinkListT3 |
int | StepsWithUnchangedConstraints {-1} |
int | FlagErrorTest {2} |
bool | FlagErrorTestAlwaysValid {true} |
fmatvec::Vec | aTol |
fmatvec::Vec | rTol |
bool | FlagSSC {true} |
int | maxOrder {1} |
Method | method {extrapolation} |
bool | FlagGapControl {false} |
double | gapTol {1e-6} |
double | maxGainSSC {2.2} |
double | safetyFactorSSC {0.7} |
bool | FlagOutputOnlyAtTPlot {false} |
bool | FlagPlotEveryStep {false} |
bool | outputInterpolation {false} |
double | safetyFactorGapControl {-1} |
GapControl | GapControlStrategy {biggestRoot} |
int | numThreads {1} |
double | time {0} |
MBSim::StopWatch | Timer |
int | iter {0} |
int | iterA {0} |
int | iterB1 {0} |
int | iterB2 {0} |
int | iterC1 {0} |
int | iterC2 {0} |
int | iterC3 {0} |
int | iterC4 {0} |
int | iterB2RE {0} |
int | maxIterUsed {0} |
int | maxIter {0} |
int | sumIter {0} |
int | integrationSteps {0} |
int | integrationStepswithChange {0} |
int | refusedSteps {0} |
int | refusedStepsWithImpact {0} |
int | wrongAlertGapControl {0} |
int | stepsOkAfterGapControl {0} |
int | stepsRefusedAfterGapControl {0} |
int | statusGapControl {0} |
int | singleStepsT1 {0} |
int | singleStepsT2 {0} |
int | singleStepsT3 {0} |
double | dtRelGapControl {1} |
double | qUncertaintyByExtrapolation {0} |
int | indexLSException {-1} |
fmatvec::Vec | gUniActive |
double | Penetration {0} |
double | PenetrationCounter {0} |
double | PenetrationLog {0} |
double | PenetrationMin {0} |
double | PenetrationMax {0} |
double | maxdtUsed {0} |
double | mindtUsed {0} |
bool | ChangeByGapControl {false} |
bool | calcBlock2 {0} |
bool | IterConvergence {0} |
bool | ConstraintsChanged {0} |
bool | ConstraintsChangedBlock1 {0} |
bool | ConstraintsChangedBlock2 {0} |
int | integrationStepsOrder1 {0} |
int | integrationStepsOrder2 {0} |
int | order {1} |
int | StepTrials {0} |
int | AnzahlAktiverKontakte {0} |
double | gNDurchschnittprostep {0} |
fmatvec::Vec | bi |
![]() | |
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 | |
![]() | |
MBSim::DynamicSystemSolver * | system |
dynamic system | |
MBXMLUtils::DOMEvalException | domEvalError |
Special XML helper variable. | |
Half-explicit time-stepping integrator of first or higer order with StepSize Control (SSC) important options / settings :
a) setMaxOrder(int order, int method=0) order: maximum order of integration scheme 1 to 3 with SSC by extrapolation (method=0) (order=4 without SSC) 1 to 4 with embedded SSC (1=1(2), ... 4=4(5)) (method=1 or 2) method: method used for error estimation and step size control 0: step size control by extrapolation (steps wit dt and dt/2 are compared) DEFAULT 1: embedded method (compare maxOrder maxOrder+1); proceed with maxOrder (recommended) 2: embedded method with local extrapolation (integration is continued with maxOrder+1)
b) setFlagErrorTest(int Flag, bool alwaysValid= true) Flag: for scaling variables for the purpose of error estimation
0: include velocities u for error test 2: scale velocities u with stepsize for error test 3: exclude velocities u for error test alwaysValid: true : u is scaled resp. exluded during smooth and nonsmooth steps alwaysValid: false : u is scaled resp. exluded only during nonsmooth steps
c) deactivateSSC(bool flag=false) : maximum order: 1 to 4
d) setGapControl(bool FlagGapControl=true, int GapControlStrategy=0)
FlagGapControl activate / deactivate gap control GapControlStrategy choose strategy for Gap Control (1:maximal Stepsize to 4:minimal Penetration) 1: uses biggest root (maximal dt) 2: score for all roots are evaluated 3: gapTol is used 4: uses smallest root (minimal penetration) 0: gap control deactivated
|
override |
Destructor
void MBSim::TimeSteppingSSCIntegrator::getDataForGapControl | ( | ) |
internal subroutines
|
overridevirtual |
|
overridevirtual |
start the integration of the system set by setSystem. Each class implemeting this function should call debugInit first.
Implements MBSim::Integrator.
|
virtual |
Start the integration
Implements MBSim::Integrator.
|
inline |
Start the integration
void MBSim::TimeSteppingSSCIntegrator::integrate | ( | MBSim::DynamicSystemSolver & | systemT1_, |
MBSim::DynamicSystemSolver & | systemT2_, | ||
MBSim::DynamicSystemSolver & | systemT3_, | ||
int | Threads = 0 |
||
) |
Threads: Number of Threads (0,1,2 or 3) 0: auto (number of threads depends on order and SSC)
|
overridevirtual |
Reimplemented from MBSim::Integrator.
|
overridevirtual |
subroutines for integrate function
Reimplemented from MBSim::Integrator.
|
inline |
alwaysValid = true : u is scaled resp. exluded during the smooth and nonsmooth part alwaysValid = false : u is scaled resp. exluded only during nonsmooth steps
|
inline |
Set drift compensation
|
inline |
Set error test (default 0: all variables ae tested; 2: u is scaled with dt; 3: exclude u
|
inline |
set Flag for writing output only at tPlot-Time instances or not (default false)
|
inline |
Set Flag to optimise dt for minmal penetration of unilateral links; choose strategy for Gap Control (1:maximal Stepsize to 4:minimal Penetration) 1: uses biggest root (maximal dt) 2: score for all roots are evaluated 3: gapTol is used 4: uses smallest root (minimal penetration) 0: gap control deactivated with statistic calculations -1: gap control deactivated without statistic calculations
|
inline |
Set initial step size
|
inline |
Set maximal gain for increasing dt by stepsize control
|
inline |
set maximum order (1,2,3 (method=extrapolation) or 1 to 4 (method=embedded,embeddedHigherOrder) and without SSC maximum order from 1 to 4 is possible
|
inline |
Set maximal step size
|
inline |
set method extrapolation: SSC by extrapolation (recommended!!); embedded,embeddedHigherOrder: embedded SSC; proceed with maxOrder [1] (recommended if you don't want to use 0) or with maxOrder+1 [2]
|
inline |
Set minimal step size (default 2*maxOrder*epsroot
|
inline |
Set Flag for output interpolation
|
inline |
safety factor for stepsize estimation: dt = dt_estimate * safetyFactorSSC (]0;1]; default 0.6)
|
overridevirtual |
Reimplemented from MBSim::Integrator.
|
protected |
Absolute Toleranz
|
protected |
include (0) or exclude (3) variable u or scale (2) with stepsize for error test
|
protected |
FlagErrorTest is always valid or only during nonsmooth steps
|
protected |
Flag: write output info to cout only for plot-time-instances (default false)
|
protected |
every successful integration step is ploted (set dtPlot=0 to activate FlagPlotEveryStep) (default false)
|
protected |
activate step size control
|
protected |
choose strategy for Gap Control (1:maximal Stepsize to 4:minimal Penetration) 1: uses biggest root (maximal dt) 2: score for all roots are evaluated 3: gapTol is used 4: uses smallest root (minimal penetration) 0: gap control deactivated
|
protected |
Toleranz for closing gaps
|
protected |
maximal gain factor for increasing dt by stepsize control (default 2.5; maxGain * safetyFactor must be GT 1)
|
protected |
maximum order of integration scheme SSC by extrapolation (steps with differnt dt are compared): 1, 2, 3
SSC with embedded methods (differnt orders are compared): 1 to 4 [ 1= 1(2), ... 4= 4(5) ] maxOrder(maxOrder+1)
|
protected |
method for intrgration and step size control method=extrapolation step size control by extrapolation (steps wit dt and dt/2 are compared) DEFAULT method=embedded embedded method for step size control (maxOrder and maxOrder+1 are compared); proceed with maxOrder (recommended) method=embeddedHigherOrder embedded method for SSC with -local extrapolation- (integration is continued with maxOrder+1)
|
protected |
Number of Threads
|
protected |
Flag interpolate z and la for plotting (default false)
|
protected |
Relative Toleranz
|
protected |
Safety factor for GapControl (dtNew = dt_gapcontrol*safetyFactor; default min(1+RTol,1.001)
|
protected |
safety factor for stepsize estimation: dt = dt_estimate * safetyFactorSSC (]0;1]; default 0.6)
|
protected |
computaional time
|
protected |
for internal use (start clock, integration info ...)