Explicit and Implicit time-stepping integrator of first or higer order with StepSize Control (SSC) StepSizeControl, GapControl, Extrapolation und concept analogue to TimeSteppingSSCIntegrator.
More...
|
| AutoTimeSteppingSSCIntegrator () |
|
| ~AutoTimeSteppingSSCIntegrator () |
|
void | setInitialStepSize (double dt_) |
|
void | setStepSizeMax (double dtMax_) |
|
void | setStepSizeMin (double dtMin_) |
|
void | setmaxGainSSC (double maxGain) |
|
void | setSafetyFactorSSC (double sfactor) |
|
void | setSafetyFactorGapControl (double s) |
|
void | setOutputInterpolation (bool flag=true) |
|
void | setFlagPlotIntegrator (bool flag=true) |
|
void | setGapControl (int strategy=1) |
|
void | setDriftCompensation (bool dc) |
|
void | setMaxOrder (int order_, int method_=0) |
|
void | deactivateSSC (bool flag=false) |
|
void | setFlagErrorTest (int Flag, bool alwaysValid=true) |
|
void | integrate (MBSim::DynamicSystemSolver &system_) |
|
void | integrate (MBSim::DynamicSystemSolver &system_, std::vector< MBSim::DynamicSystemSolver * > systems) |
|
void | integrate (MBSim::DynamicSystemSolver &systemT1_, MBSim::DynamicSystemSolver &systemT2_, MBSim::DynamicSystemSolver &systemT3_, MBSim::DynamicSystemSolver &systemTP_, int Threads=0) |
|
void | integrate (MBSim::DynamicSystemSolver &systemT1_, MBSim::DynamicSystemSolver &systemT2_, MBSim::DynamicSystemSolver &systemT3_, MBSim::DynamicSystemSolver &systemTP_, std::vector< MBSim::DynamicSystemSolver * > systems, 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 (MBSim::DynamicSystemSolver &system) |
|
void | subIntegrate (MBSim::DynamicSystemSolver &system, double tStop) |
|
void | postIntegrate (MBSim::DynamicSystemSolver &system) |
|
void | preIntegrate (MBSim::DynamicSystemSolver &systemT1_, MBSim::DynamicSystemSolver &systemT2_, MBSim::DynamicSystemSolver &systemT3_, MBSim::DynamicSystemSolver &systemTP_) |
|
void | getAllSetValuedla (fmatvec::Vec &la_, fmatvec::VecInt &la_Sizes, std::vector< MBSim::Link * > &SetValuedLinkList) |
|
void | setAllSetValuedla (const fmatvec::Vec &la_, const fmatvec::VecInt &la_Sizes, std::vector< MBSim::Link * > &SetValuedLinkList) |
|
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 () |
|
void | plotPar () |
|
void | doIntegPlot () |
|
virtual void | initializeUsingXML (xercesc::DOMElement *element) |
|
void | update (MBSim::DynamicSystemSolver &system, const fmatvec::Vec &z, double t, int nrSys_=1) |
| special update of dynamic system for theta time stepping integrator More...
|
|
void | doStep (MBSim::DynamicSystemSolver &system_, fmatvec::Vec &z_, int nrSys_, double t_, double dt_, bool exp_) |
|
void | doExpStep (MBSim::DynamicSystemSolver &system_, fmatvec::Vec &z_, int nrSys_, double t_, double dt_) |
| Do One Explicit Time Integration Step. More...
|
|
void | doImpStep (MBSim::DynamicSystemSolver &system_, fmatvec::Vec &z_, int nrSys_, double t_, double dt_) |
| Do One Implicit Time Integration Step. More...
|
|
void | doLinImpStep (MBSim::DynamicSystemSolver &system_, fmatvec::Vec &z_, int nrSys_, double t_, double dt_) |
| Do One Linear Implicit Time Integration Step. More...
|
|
void | setTheta (double theta_) |
|
void | getdhdqdhdu (fmatvec::Mat &dhdq_, fmatvec::Mat &dhdu_, const fmatvec::Vec z_, const double t_, const int nsys_) |
|
void | setItMax (int itMax_) |
|
void | setInexactJac (bool inexactJac_) |
|
void | setItTol (double itTol_) |
|
void | setSetValuedForceLawsExplicit (bool SetValuedForceLawsExplicit_) |
|
void | setPlotParallel (bool plotParallel_) |
|
| 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 |
|
|
MBSim::DynamicSystemSolver * | sysT1 |
|
MBSim::DynamicSystemSolver * | sysT2 |
|
MBSim::DynamicSystemSolver * | sysT3 |
|
MBSim::DynamicSystemSolver * | sysTP |
|
double | dt |
|
double | dtOld |
|
double | dte |
|
double | dtMin |
|
double | dtMax |
|
double | dt_SSC_vorGapControl |
|
bool | driftCompensation |
|
double | t |
|
double | tPlot |
|
double | tPlotP |
|
int | qSize |
|
int | xSize |
|
int | uSize |
|
int | zSize |
|
fmatvec::Vec | ze |
|
fmatvec::Vec | zeP |
|
fmatvec::Vec | zi |
|
fmatvec::Vec | ziP |
|
fmatvec::Vec | zT1 |
|
fmatvec::Vec | zT2 |
|
fmatvec::Vec | zT3 |
|
fmatvec::Vec | zTP |
|
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 | 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::VecInt | LS_Reg |
|
fmatvec::VecInt | LSe_Reg |
|
fmatvec::VecInt | LSA_Reg |
|
fmatvec::VecInt | LSB1_Reg |
|
fmatvec::VecInt | LSB2_Reg |
|
fmatvec::VecInt | LSC1_Reg |
|
fmatvec::VecInt | LSC2_Reg |
|
fmatvec::VecInt | LSC3_Reg |
|
fmatvec::VecInt | LSC4_Reg |
|
fmatvec::VecInt | LSD1_Reg |
|
fmatvec::VecInt | LSD2_Reg |
|
fmatvec::VecInt | LSD3_Reg |
|
fmatvec::VecInt | LSD4_Reg |
|
fmatvec::VecInt | LSD5_Reg |
|
fmatvec::VecInt | LSD6_Reg |
|
fmatvec::VecInt | LS_Reg_T1 |
|
fmatvec::VecInt | LS_Reg_T2 |
|
fmatvec::VecInt | LS_Reg_T3 |
|
fmatvec::VecInt | LS_Reg_z2b |
|
fmatvec::VecInt | S_Reg_z1d |
|
fmatvec::VecInt | LS_Reg_z4b |
|
fmatvec::VecInt | LS_Reg_z6b |
|
fmatvec::VecInt | LS_Reg_z1d |
|
fmatvec::VecInt | LS_Reg_z3b |
|
fmatvec::VecInt | LSB1_2_Reg |
|
fmatvec::VecInt | LS_tmp |
|
fmatvec::Vec | la |
|
fmatvec::Vec | laP |
|
fmatvec::Vec | lae |
|
fmatvec::Vec | laeP |
|
fmatvec::Vec | la1d |
|
fmatvec::Vec | la2b |
|
fmatvec::VecInt | laSizes |
|
fmatvec::VecInt | laSizesP |
|
fmatvec::VecInt | laeSizes |
|
fmatvec::VecInt | laeSizesP |
|
fmatvec::VecInt | la1dSizes |
|
fmatvec::VecInt | la2bSizes |
|
fmatvec::Vec | qT1 |
|
fmatvec::Vec | qT2 |
|
fmatvec::Vec | qT3 |
|
fmatvec::Vec | qTP |
|
fmatvec::Vec | uT1 |
|
fmatvec::Vec | uT2 |
|
fmatvec::Vec | uT3 |
|
fmatvec::Vec | uTP |
|
fmatvec::Vec | xT1 |
|
fmatvec::Vec | xT2 |
|
fmatvec::Vec | xT3 |
|
fmatvec::Vec | xTP |
|
fmatvec::Vec | gInActive |
|
fmatvec::Vec | gdInActive |
|
std::vector< MBSim::Link * > | SetValuedLinkListT1 |
|
std::vector< MBSim::Link * > | SetValuedLinkListT2 |
|
std::vector< MBSim::Link * > | SetValuedLinkListT3 |
|
std::vector< MBSim::Link * > | SetValuedLinkListTP |
|
int | StepsWithUnchangedConstraints |
|
int | FlagErrorTest |
|
bool | FlagErrorTestAlwaysValid |
|
fmatvec::Vec | aTol |
|
fmatvec::Vec | rTol |
|
bool | FlagSSC |
|
int | maxOrder |
|
int | method |
|
bool | FlagGapControl |
|
double | gapTol |
|
double | maxGainSSC |
|
double | safetyFactorSSC |
|
std::ofstream | integPlot |
|
bool | FlagPlotIntegrator |
|
bool | FlagPlotIntegrationSum |
|
bool | FlagPlotEveryStep |
|
bool | outputInterpolation |
|
double | safetyFactorGapControl |
|
int | GapControlStrategy |
|
int | numThreads |
|
int | numThreadsB1 |
|
double | time |
|
double | dhdztime |
|
double | timeB1 |
|
double | timeB2 |
|
double | timePlot |
|
double | timePlotPar |
|
MBSim::StopWatch | Timer |
|
MBSim::StopWatch | dhdzTimer |
|
MBSim::StopWatch | TimerB1 |
|
MBSim::StopWatch | TimerB2 |
|
MBSim::StopWatch | TimerPlot |
|
MBSim::StopWatch | TimerPlotPar |
|
int | iter |
|
int | iterA |
|
int | iterB1 |
|
int | iterB2 |
|
int | iterC1 |
|
int | iterC2 |
|
int | iterC3 |
|
int | iterC4 |
|
int | iterB2RE |
|
int | maxIterUsed |
|
int | maxIter |
|
int | sumIter |
|
int | integrationSteps |
|
int | integrationStepswithChange |
|
int | refusedSteps |
|
int | refusedStepsWithImpact |
|
int | JacUpdateT1 |
|
int | JacUpdateT2 |
|
int | JacUpdateT3 |
|
int | wrongAlertGapControl |
|
int | stepsOkAfterGapControl |
|
int | stepsRefusedAfterGapControl |
|
int | statusGapControl |
|
int | singleStepsT1 |
|
int | singleStepsT2 |
|
int | singleStepsT3 |
|
double | dtRelGapControl |
|
double | qUncertaintyByExtrapolation |
|
int | indexLSException |
|
fmatvec::Vec | gUniActive |
|
double | Penetration |
|
double | PenetrationCounter |
|
double | PenetrationLog |
|
double | PenetrationMin |
|
double | PenetrationMax |
|
double | maxdtUsed |
|
double | mindtUsed |
|
bool | ChangeByGapControl |
|
bool | calcBlock2 |
|
bool | IterConvergence |
|
bool | ConstraintsChanged |
|
bool | ConstraintsChangedBlock1 |
|
bool | ConstraintsChangedBlock2 |
|
bool | ConstraintsChanged_B1_A |
|
int | integrationStepsOrder1 |
|
int | integrationStepsOrder2 |
|
int | order |
|
int | StepTrials |
|
int | AnzahlAktiverKontakte |
|
double | gNDurchschnittprostep |
|
int | iter_T1 |
|
int | iter_T2 |
|
int | iter_T3 |
|
int | step |
|
fmatvec::RangeV | Iq |
|
fmatvec::RangeV | Iu |
|
fmatvec::RangeV | Ix |
|
bool | expInt |
|
int | it_T1 |
|
int | it_T2 |
|
int | it_T3 |
|
bool | gAC_T1 |
|
bool | gAC_T2 |
|
bool | gAC_T3 |
|
bool | gAC_reg_T1 |
|
bool | gAC_reg_T2 |
|
bool | gAC_reg_T3 |
|
bool | upgedated_T1 |
|
bool | upgedated_T2 |
|
bool | upgedated_T3 |
|
bool | JacUpdate_B1_T1 |
|
bool | JacUpdate_B2_T1 |
|
bool | JacUpdate_B1_T2 |
|
bool | JacUpdate_B2_T2 |
|
bool | JacUpdate_T1 |
|
bool | JacUpdate_T2 |
|
int | itMax |
|
double | itTol |
|
fmatvec::Mat | dhdq_n_T1 |
|
fmatvec::Mat | dhdu_n_T1 |
|
fmatvec::Mat | dhdq_n_T2 |
|
fmatvec::Mat | dhdu_n_T2 |
|
fmatvec::Mat | dhdq_n_T3 |
|
fmatvec::Mat | dhdu_n_T3 |
|
fmatvec::Mat | dhdq_T1 |
|
fmatvec::Mat | dhdu_T1 |
|
fmatvec::Mat | dhdq_T2 |
|
fmatvec::Mat | dhdu_T2 |
|
fmatvec::Mat | dhdq_T3 |
|
fmatvec::Mat | dhdu_T3 |
|
fmatvec::Mat | dhdq_z1d |
|
fmatvec::Mat | dhdu_z1d |
|
fmatvec::Mat | dhdq_z2b |
|
fmatvec::Mat | dhdq_z3b |
|
fmatvec::Mat | dhdq_z4b |
|
fmatvec::Mat | dhdq_z6b |
|
fmatvec::Mat | dhdu_z2b |
|
fmatvec::Mat | dhdu_z3b |
|
fmatvec::Mat | dhdu_z4b |
|
fmatvec::Mat | dhdu_z6b |
|
fmatvec::Mat | dhdq_end |
|
fmatvec::Mat | dhdu_end |
|
fmatvec::Mat | dhdq_z2d |
|
fmatvec::Mat | dhdu_z2d |
|
fmatvec::Mat | dhdq_z2dRE |
|
fmatvec::Mat | dhdu_z2dRE |
|
fmatvec::Mat | dhdq_z3d |
|
fmatvec::Mat | dhdu_z3d |
|
fmatvec::Mat | dhdq_z4d |
|
fmatvec::Mat | dhdu_z4d |
|
fmatvec::Mat | dhdq_z6d |
|
fmatvec::Mat | dhdu_z6d |
|
double | theta |
|
bool | parJac |
|
bool | parInt |
|
std::vector< MBSim::DynamicSystemSolver * > * | psystems |
|
bool | inexactJac |
|
int | maxImpIter |
|
int | JacConstSteps |
|
bool | SetValuedForceLawsExplicit |
|
bool | plotParallel |
|
fmatvec::Mat | JacVgl |
|
fmatvec::Mat | JacVgl2 |
|
fmatvec::Mat | JacVgl3 |
|
int | JacCounter |
|
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.
|
|
Explicit and Implicit time-stepping integrator of first or higer order with StepSize Control (SSC) StepSizeControl, GapControl, Extrapolation und concept analogue to TimeSteppingSSCIntegrator.
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 Stepsize 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
e) Basic Implicit Integration Implicit Integration only possible with:
- StepSizeControl method 0 (step size control by extrapolation)
- GapControl deactivated (GapControl should work, but isn't tested in detail)
f) setInexactJac(bool inexactJac_=false) inexactJac_: true: - Linear Implicit Integration: Jacobis are updated if time step size changes,
- Full Implicit Integration: Jacobis are updated of Newton-Iterations doesn't converge
e) Parallel Computation: The concept allows the following parallel computation methods:
- parallel computation of different time step sizes dt, dt/2, etc.
- parallel computation of Jacobi matrices (dhdu, dhdq)
- parallel plotting of system during the next integration step
Usage:
- integrate(sys): sequential computation
- integrate(sys, systems): sequential integration, parallel computation of Jacobis
- integrate(sys,sys,sys,sys): parallel integration, parallel plotting, sequential computation of Jacobis
- integrate(sys,sys,sys,sys,systems): parallel integration, parallel plotting, parallel computations of Jacobis
- Author
- Jan Clauberg