20#ifndef _TIME_STEPPING_SSC_INTEGRATOR_H_
21#define _TIME_STEPPING_SSC_INTEGRATOR_H_
23#include "integrator.h"
24#include "mbsim/utils/stopwatch.h"
99 double dt{1e-6}, dtOld{1e-6}, dte{1e-6};
100 double dtMin{0}, dtMax{1e-3};
101 double dt_SSC_vorGapControl{0};
102 bool driftCompensation{
false};
103 double t{0}, tPlot{0};
104 int qSize{0}, xSize{0}, uSize{0}, zSize{0};
105 fmatvec::Vec ze, zi, z1d, z2d, z2dRE, z3d, z4d, z6d, z2b, z3b, z4b, z6b, zStern;
106 fmatvec::VecInt LS, LSe, LStmp_T1, LStmp_T2, LStmp_T3, LSA, LSB1, LSB2, LSC1, LSC2, LSC3, LSC4, LSD1, LSD2, LSD3, LSD4, LSD5, LSD6;
107 fmatvec::Vec la, lae, la1d, la2b;
108 fmatvec::VecInt laSizes, laeSizes, la1dSizes, la2bSizes;
109 fmatvec::Vec gInActive, gdInActive;
110 std::vector<MBSim::Link*> SetValuedLinkListT1;
111 std::vector<MBSim::Link*> SetValuedLinkListT2;
112 std::vector<MBSim::Link*> SetValuedLinkListT3;
114 int StepsWithUnchangedConstraints{-1};
136 bool FlagGapControl{
false};
165 int iter{0}, iterA{0}, iterB1{0}, iterB2{0}, iterC1{0}, iterC2{0}, iterC3{0}, iterC4{0}, iterB2RE{0}, maxIterUsed{0}, maxIter{0}, sumIter{0};
166 int integrationSteps{0}, integrationStepswithChange{0}, refusedSteps{0}, refusedStepsWithImpact{0};
167 int wrongAlertGapControl{0}, stepsOkAfterGapControl{0}, stepsRefusedAfterGapControl{0}, statusGapControl{0};
168 int singleStepsT1{0}, singleStepsT2{0}, singleStepsT3{0};
169 double dtRelGapControl{1}, qUncertaintyByExtrapolation{0};
170 int indexLSException{-1};
171 fmatvec::Vec gUniActive;
172 double Penetration{0}, PenetrationCounter{0}, PenetrationLog{0}, PenetrationMin{0}, PenetrationMax{0};
173 double maxdtUsed{0}, mindtUsed{0};
174 bool ChangeByGapControl{
false};
176 bool IterConvergence{0};
177 bool ConstraintsChanged{0}, ConstraintsChangedBlock1{0}, ConstraintsChangedBlock2{0};
178 int integrationStepsOrder1{0};
179 int integrationStepsOrder2{0};
182 int AnzahlAktiverKontakte{0};
183 double gNDurchschnittprostep{0};
227 void setStepSizeControl(
bool flag) {
FlagSSC = flag; }
242 void setAbsoluteTolerance(
const fmatvec::Vec &aTol_) {
aTol <<= aTol_; }
243 void setAbsoluteTolerance(
double aTol_) {
aTol.resize(1,fmatvec::INIT,aTol_); }
244 void setRelativeTolerance(
const fmatvec::Vec &rTol_) {
rTol <<= rTol_; }
245 void setRelativeTolerance(
double rTol_) {
rTol.resize(1,fmatvec::INIT,rTol_); }
246 void setgapTolerance(
double gTol) {
gapTol = gTol; }
251 void subIntegrate(
double tStop)
override;
252 void postIntegrate()
override;
257 bool testTolerances();
258 bool GapControl(
double qUnsafe,
bool SSCTestOK);
259 bool changedLinkStatus(
const fmatvec::VecInt &L1,
const fmatvec::VecInt &L2,
int ex);
260 double calculatedtNewRel(
const fmatvec::Vec &ErrorLocal,
double H);
solver interface for modelling and simulation of dynamic systems
Definition: dynamic_system_solver.h:61
integrator-interface for dynamic systems
Definition: integrator.h:37
virtual void integrate()=0
start the integration of the system set by setSystem. Each class implemeting this function should cal...
MBSim::DynamicSystemSolver * system
dynamic system
Definition: solver.h:86
Definition: stopwatch.h:35
Half-explicit time-stepping integrator of first or higer order with StepSize Control (SSC) important ...
Definition: time_stepping_ssc_integrator.h:66
double safetyFactorGapControl
Definition: time_stepping_ssc_integrator.h:150
double safetyFactorSSC
Definition: time_stepping_ssc_integrator.h:142
int numThreads
Definition: time_stepping_ssc_integrator.h:160
int FlagErrorTest
Definition: time_stepping_ssc_integrator.h:117
void preIntegrate() override
Definition: time_stepping_ssc_integrator.cc:62
bool outputInterpolation
Definition: time_stepping_ssc_integrator.h:148
bool FlagErrorTestAlwaysValid
Definition: time_stepping_ssc_integrator.h:119
double maxGainSSC
Definition: time_stepping_ssc_integrator.h:140
void setErrorTest(ErrorTest errorTest)
Definition: time_stepping_ssc_integrator.h:230
fmatvec::Vec aTol
Definition: time_stepping_ssc_integrator.h:121
void setInitialStepSize(double dt_)
Definition: time_stepping_ssc_integrator.h:191
void setMinimumStepSize(double dtMin_)
Definition: time_stepping_ssc_integrator.h:195
GapControl GapControlStrategy
Definition: time_stepping_ssc_integrator.h:158
double time
Definition: time_stepping_ssc_integrator.h:162
void setFlagOutputOnlyAtTPlot(bool flag)
Definition: time_stepping_ssc_integrator.h:204
bool FlagPlotEveryStep
Definition: time_stepping_ssc_integrator.h:146
Method method
Definition: time_stepping_ssc_integrator.h:134
~TimeSteppingSSCIntegrator() override
Definition: time_stepping_ssc_integrator.cc:45
void setGapControl(GapControl gapControl)
Definition: time_stepping_ssc_integrator.h:214
void setMaximumOrder(int maxOrder_)
Definition: time_stepping_ssc_integrator.h:220
MBSim::StopWatch Timer
Definition: time_stepping_ssc_integrator.h:164
void setOutputInterpolation(bool flag)
Definition: time_stepping_ssc_integrator.h:202
int maxOrder
Definition: time_stepping_ssc_integrator.h:129
void getDataForGapControl()
Definition: time_stepping_ssc_integrator.cc:1387
void setMaximumStepSize(double dtMax_)
Definition: time_stepping_ssc_integrator.h:193
void setSafetyFactor(double sfactor)
Definition: time_stepping_ssc_integrator.h:199
void setMethod(Method method_)
Definition: time_stepping_ssc_integrator.h:225
void integrate() override
start the integration of the system set by setSystem. Each class implemeting this function should cal...
Definition: time_stepping_ssc_integrator.cc:51
bool FlagSSC
Definition: time_stepping_ssc_integrator.h:125
void setAlwaysValid(bool alwaysValid)
Definition: time_stepping_ssc_integrator.h:234
virtual void initializeUsingXML(xercesc::DOMElement *element) override
initialize integrator
Definition: time_stepping_ssc_integrator.cc:1414
void setMaximumGain(double maxGain)
Definition: time_stepping_ssc_integrator.h:197
void setDriftCompensation(bool dc)
Definition: time_stepping_ssc_integrator.h:216
double gapTol
Definition: time_stepping_ssc_integrator.h:138
fmatvec::Vec rTol
Definition: time_stepping_ssc_integrator.h:123
bool FlagOutputOnlyAtTPlot
Definition: time_stepping_ssc_integrator.h:144
namespace MBSim
Definition: bilateral_constraint.cc:30