23#include "mbsim/element.h"
24#include "mbsim/mbsim_event.h"
32 extern const PlotFeatureEnum generalizedRelativePosition, generalizedRelativeVelocity, generalizedForce;
56 virtual void calcSize() { }
57 int getGeneralizedRelativePositionSize() {
if(updSize) calcSize();
return ng; }
58 int getGeneralizedRelativeVelocitySize() {
if(updSize) calcSize();
return ngd; }
59 int getGeneralizedForceSize() {
if(updSize) calcSize();
return nla; }
61 virtual void updateg() { }
62 virtual void updategd() { }
63 virtual void updatewb() { }
64 virtual void updateW(
int i=0) { }
65 virtual void updateV(
int i=0) { }
66 virtual void updater(
int i=0) { }
67 virtual void updateJrla(
int i=0) { }
68 virtual void updateh(
int i=0) { }
69 virtual void updateStopVector() { }
70 virtual void updateStopVectorParameters() { }
71 virtual void updateLinkStatus() { }
72 virtual void updateLinkStatusReg() { }
73 virtual void updateJacobians(
int j=0) { }
74 virtual void updateb() { }
76 virtual void updatedx();
77 virtual void updatexd() { }
78 virtual void calcxSize() {
xSize = 0; }
79 const fmatvec::Vec& getx()
const {
return x; }
80 fmatvec::Vec& getx() {
return x; }
81 const fmatvec::Vec& getxd(
bool check=
true)
const;
82 fmatvec::Vec& getxd(
bool check=
true);
83 int getxInd() {
return xInd; }
84 virtual void setxInd(
int xInd_) { xInd = xInd_; };
85 int getxSize()
const {
return xSize; }
86 virtual void updatexRef(fmatvec::Vec& ref);
87 virtual void updatexdRef(fmatvec::Vec& ref);
88 virtual void updatedxRef(fmatvec::Vec& ref);
89 virtual void updatebRef(fmatvec::Mat &hRef);
90 void init(
InitStage stage,
const InitConfigSet &config)
override;
95 virtual void setbInd(
int bInd_) { bInd = bInd_; };
122 virtual void updateJrlaRef(fmatvec::Mat &ref,
int i=0) {}
194 int getisInd() {
return isInd; }
195 int getisSize() {
return isSize; }
196 virtual void calcisSize() { isSize = 0; }
205 virtual void postprocessing() {}
315 virtual void jacobianImpacts() { throwError(
"(Link::jacobianImpacts): Not implemented."); }
320 virtual void updaterFactors() { throwError(
"(Link::updaterFactors): Not implemented."); }
340 virtual void setGeneralizedForceTolerance(
double tol) { laTol = tol; }
341 virtual void setGeneralizedImpulseTolerance(
double tol) { LaTol = tol; }
342 virtual void setGeneralizedRelativePositionTolerance(
double tol) {
gTol = tol; }
343 virtual void setGeneralizedRelativeVelocityTolerance(
double tol) { gdTol = tol; }
344 virtual void setGeneralizedRelativeAccelerationTolerance(
double tol) { gddTol = tol; }
345 virtual void setGeneralizedRelativePositionCorrectionValue(
double corr) {
gCorr = corr; }
346 virtual void setGeneralizedRelativeVelocityCorrectionValue(
double corr) { gdCorr = corr; }
347 virtual void setrMax(
double rMax_) {
rMax = rMax_; }
348 virtual void setLinkStatusInd(
int LinkStatusInd_) { LinkStatusInd = LinkStatusInd_; };
349 virtual void setLinkStatusRegInd(
int LinkStatusRegInd_) { LinkStatusRegInd = LinkStatusRegInd_; };
350 virtual void setlaInd(
int laInd_) { laInd = laInd_;Ila=fmatvec::RangeV(laInd,laInd+
laSize-1); }
351 virtual void setisInd(
int isInd_) { isInd = isInd_; }
352 virtual void setgInd(
int gInd_) { gInd = gInd_;
Ig=fmatvec::RangeV(gInd,gInd+
gSize-1); }
353 virtual void setgdInd(
int gdInd_) { gdInd = gdInd_; }
354 virtual void setrFactorInd(
int rFactorInd_) { rFactorInd = rFactorInd_; }
363 virtual void LinearImpactEstimation(
double t, fmatvec::Vec &gInActive_,fmatvec::Vec &gdInActive_,
int *IndInActive_,fmatvec::Vec &gAct_,
int *IndActive_) { }
369 virtual void updatecorr(
int j) { corr.init(0); }
370 virtual void updatecorrRef(fmatvec::Vec &ref);
371 virtual void calccorrSize(
int j) { corrSize = 0; }
372 virtual void setcorrInd(
int corrInd_) { corrInd = corrInd_; }
373 virtual void checkRoot() { }
376 void setx(
const fmatvec::Vec &x_) {
x = x_; }
378 virtual void setsvInd(
int svInd_) { svInd = svInd_; };
379 int getsvSize()
const {
return svSize; }
385 const fmatvec::Vec& getla(
bool check=
true)
const;
386 const fmatvec::Vec& getLa(
bool check=
true)
const;
387 fmatvec::Vec& getla(
bool check=
true);
388 fmatvec::Vec& getLa(
bool check=
true);
389 fmatvec::Vec& getwb(
bool check=
true);
391 int getlaInd()
const {
return laInd; }
392 int getlaSize()
const {
return laSize; }
393 int getbSize()
const {
return bSize; }
395 const fmatvec::Vec& evalg();
396 const fmatvec::Vec& evalgd();
397 const fmatvec::Vec& evalla();
398 const fmatvec::Vec& evalLa();
399 const fmatvec::Vec& evalwb();
400 const fmatvec::Vec& evalxd();
402 int getgdInd()
const {
return gdInd; }
403 int getgSize()
const {
return gSize; }
404 int getgdSize()
const {
return gdSize; }
408 const fmatvec::VecInt& getrFactorUnsure()
const {
return rFactorUnsure; }
410 void resetUpToDate()
override { updrrel =
true; updvrel =
true; updla =
true; }
412 virtual void updateGeneralizedPositions() { updrrel =
false; }
413 virtual void updateGeneralizedVelocities() { updvrel =
false; }
414 virtual void updateGeneralizedForces() { updla =
false; }
416 const fmatvec::VecV& evalGeneralizedRelativePosition() {
if(updrrel) updateGeneralizedPositions();
return rrel; }
417 const fmatvec::VecV& evalGeneralizedRelativeVelocity() {
if(updvrel) updateGeneralizedVelocities();
return vrel; }
418 const fmatvec::VecV& evalGeneralizedForce() {
if(updla) updateGeneralizedForces();
return lambda; }
420 fmatvec::VecV& getGeneralizedRelativePosition(
bool check=
true) { assert((not check) or (not updrrel));
return rrel; }
421 fmatvec::VecV& getGeneralizedRelativeVelocity(
bool check=
true) { assert((not check) or (not updvrel));
return vrel; }
422 fmatvec::VecV& getGeneralizedForce(
bool check=
true) { assert((not check) or (not updla));
return lambda; }
450 int getcorrSize()
const {
return corrSize; }
452 bool getUpdaterrel()
const {
return updrrel; }
518 fmatvec::Vec curis, nextis;
523 fmatvec::Vec
g, gd, la, La;
555 fmatvec::RangeV
Ig, Ila;
560 double gTol, gdTol, gddTol, laTol, LaTol;
600 std::vector<fmatvec::Mat>
W[2];
605 std::vector<fmatvec::Mat>
V[2];
610 std::vector<fmatvec::Vec>
h[2];
615 std::vector<fmatvec::Mat>
dhdq;
616 std::vector<fmatvec::Mat> dhdu;
617 std::vector<fmatvec::Vec> dhdt;
622 std::vector<fmatvec::Vec>
r[2];
627 std::vector<fmatvec::Mat>
Jrla[2];
639 int corrSize, corrInd;
642 fmatvec::VecV rrel, vrel, lambda;
644 bool updSize, updrrel, updvrel, updla;
basic class of MBSim mainly for plotting
Definition: element.h:56
InitStage
The stages of the initialization.
Definition: element.h:62
std::string name
name of element
Definition: element.h:260
general link to one or more objects
Definition: link.h:48
fmatvec::RangeV Ig
local index of relative distances and contact force parameters
Definition: link.h:555
std::vector< fmatvec::Mat > W[2]
force direction matrix for nonsmooth right hand side
Definition: link.h:600
virtual bool detectImpact()
Definition: link.h:272
virtual void updatewbRef(fmatvec::Vec &ref)
references to TODO of dynamic system parent
Definition: link.cc:66
virtual void aboutToUpdateInternalState()
Definition: link.h:203
void saveLa()
saves contact impulses for use as starting value in next time step
Definition: link.cc:183
std::vector< fmatvec::Mat > dhdq
smooth Jacobians for implicit integration
Definition: link.h:615
void savela()
saves contact forces for use as starting value in next time step
Definition: link.cc:172
virtual void updaterRef(fmatvec::Vec &ref, int i=0)=0
references to nonsmooth force vector of dynamic system parent
double rMax
maximum r-factor
Definition: link.h:590
virtual void calcsvSize()
calculates size of stopvector (root function for event driven integration)
Definition: link.h:233
virtual void updatesvRef(fmatvec::Vec &sv)
references to stopvector of dynamic system parent (root function for event driven integration)
Definition: link.cc:115
virtual void calclaSize(int j)
calculates size of contact force parameters
Definition: link.h:192
void initla()
load contact forces for use as starting value
Definition: link.cc:176
virtual void calcLinkStatusSize()
calculates size of vector LinkStatus
Definition: link.h:238
virtual void updateLaRef(fmatvec::Vec &ref)
references to contact force parameter of dynamic system parent
Definition: link.cc:86
virtual void updateVRef(fmatvec::Mat &ref, int i=0)=0
references to condensed contact force direction matrix of dynamic system parent
virtual void updatehRef(fmatvec::Vec &hRef, int i=0)=0
references to complete and link smooth force vector of dynamic system parent
virtual bool isSetValued() const
asks the link if it contains force laws that contribute to the lagrange multiplier and is therefore s...
Definition: link.h:250
virtual void updateWRef(fmatvec::Mat &ref, int i=0)=0
references to contact force direction matrix of dynamic system parent
virtual void updaterFactorRef(fmatvec::Vec &ref)
references to rfactors of dynamic system parent
Definition: link.cc:111
virtual void SizeLinearImpactEstimation(int *sizeInActive_, int *sizeActive_)
calculates the number of active and inactive unilateral constraints and increments sizeActive/sizeInA...
Definition: link.h:368
int gSize
size and local index of relative distances
Definition: link.h:535
void decreaserFactors()
decrease rfactor if mass action matrix is not diagonal dominant (cf. Foerg: Dissertation,...
Definition: link.cc:194
int svSize
size and local index of stop vector
Definition: link.h:494
virtual void deletelaRef()
delete reference to contact force parameter of dynamic system parent
Definition: link.cc:90
fmatvec::Vec sv
stop vector for event driven integration (root function)
Definition: link.h:484
double gCorr
correction factor for relative position and relative velocity
Definition: link.h:565
virtual void calcrFactorSize(int j)
calculates size of rfactors
Definition: link.h:223
virtual bool isActive() const =0
fmatvec::Vec laS
contact forces of smooth contact laws
Definition: link.h:528
fmatvec::VecInt jsv
evaluation of roots of stop vector with a boolean vector
Definition: link.h:489
virtual void solveImpactsFixpointSingle()
Definition: link.h:278
virtual void updategRef(fmatvec::Vec &ref)
references to contact relative distances of dynamic system parent
Definition: link.cc:99
virtual void solveConstraintsFixpointSingle()
Definition: link.h:283
virtual void updategdRef(fmatvec::Vec &ref)
references to contact relative velocities of dynamic system parent
Definition: link.cc:103
void createPlotGroup() override
creates the plotGroup for H5-output
Definition: link.cc:259
virtual void solveImpactsGaussSeidel()
Definition: link.h:289
std::vector< fmatvec::Mat > Jrla[2]
Jacobian dr/dla.
Definition: link.h:627
virtual void updateresRef(fmatvec::Vec &ref)
references to residuum of nonlinear contact equations of dynamic system parent
Definition: link.cc:107
virtual bool isSingleValued() const
asks the link if it contains single valued force laws that contribute to the right-hand side vector h
Definition: link.h:257
virtual void jacobianImpacts()
computes JACOBIAN and mass action matrix of nonlinear contact equations on velocity level
Definition: link.h:315
fmatvec::VecInt rFactorUnsure
boolean vector defining if rfactor belongs to not diagonal dominant mass action matrix (cf....
Definition: link.h:580
virtual void calcbSize()
calculates size of rfactors
Definition: link.h:228
fmatvec::Vec x
order one parameters
Definition: link.h:462
fmatvec::Vec rFactor
vector of rfactors for relaxation of contact equations
Definition: link.h:575
int laSize
size and local index of contact force parameters
Definition: link.h:545
int bSize
size and local index of contact force parameters
Definition: link.h:550
fmatvec::Vec la0
attribute to save contact force parameter of previous time step
Definition: link.h:570
void initLa()
load contact impulses for use as starting value
Definition: link.cc:187
fmatvec::Vec xd
differentiated order one parameters
Definition: link.h:467
virtual bool gActiveChanged()=0
virtual void updatejsvRef(fmatvec::VecInt &jsvParent)
references to stopvector evaluation of dynamic system parent (root detection with corresponding bool ...
Definition: link.cc:119
fmatvec::Vec res
Definition: link.h:595
virtual void calcgSize(int j)
calculates size of relative distances
Definition: link.h:210
fmatvec::Mat b
TODO.
Definition: link.h:637
int rFactorSize
size and local index of rfactors
Definition: link.h:585
virtual void checkConstraintsForTermination()
verify underlying force laws concerning given tolerances
Definition: link.h:330
virtual void checkImpactsForTermination()
verify underlying force laws on velocity level concerning given tolerances
Definition: link.h:325
int xSize
size and local index of order one parameters
Definition: link.h:479
virtual void calcLinkStatusRegSize()
calculates size of vector LinkStatusReg
Definition: link.h:243
std::vector< fmatvec::Vec > r[2]
nonsmooth right hand side
Definition: link.h:622
virtual void updatelaRef(fmatvec::Vec &ref)
references to contact force parameter of dynamic system parent
Definition: link.cc:82
virtual void solveImpactsRootFinding()
Definition: link.h:300
fmatvec::Vec x0
order one initial value
Definition: link.h:474
double gTol
tolerance for relative position, relative velocity, relative acceleration, force and impact
Definition: link.h:560
int gdSize
size and local index of relative velocities
Definition: link.h:540
int LinkStatusRegSize
size and local index of single-valued link status vector
Definition: link.h:516
virtual void calcgdSize(int j)
calculates size of gap velocities
Definition: link.h:218
void init(InitStage stage, const InitConfigSet &config) override
plots time series header
Definition: link.cc:137
virtual void checkActive(int j)
check if set-valued contacts are active and set corresponding attributes
Definition: link.h:338
fmatvec::Vec wb
TODO.
Definition: link.h:632
virtual void LinearImpactEstimation(double t, fmatvec::Vec &gInActive_, fmatvec::Vec &gdInActive_, int *IndInActive_, fmatvec::Vec &gAct_, int *IndActive_)
get gap distance and calculate gap velocity of unilateral links to estimate impacts within the next s...
Definition: link.h:363
std::vector< fmatvec::Vec > h[2]
smooth complete and link right hand side
Definition: link.h:610
virtual void jacobianConstraints()
computes JACOBIAN and mass action matrix of nonlinear contact equations
Definition: link.h:310
virtual void updateInternalStateRef(fmatvec::Vec &cur, fmatvec::Vec &next)
references to internal state of dynamic system parent
Definition: link.cc:94
virtual void solveConstraintsGaussSeidel()
Definition: link.h:294
std::vector< fmatvec::Mat > V[2]
reduced force direction matrix for nonsmooth right hand side
Definition: link.h:605
fmatvec::VecInt LinkStatusReg
status of link
Definition: link.h:511
virtual void updateLinkStatusRef(fmatvec::VecInt &LinkStatusParent)
reference to vector of link status (for set valued links with piecewise link equations)
Definition: link.cc:123
fmatvec::VecInt LinkStatus
status of link (default 0) describing which piece of the equation is valid (e.g. stick or slip)
Definition: link.h:500
void plot() override
plots time dependent data
Definition: link.cc:42
fmatvec::Vec g
relative position, relative velocity, contact force and impact parameters
Definition: link.h:523
int LinkStatusSize
size and local index of link status vector (set-valued)
Definition: link.h:505
virtual void solveConstraintsRootFinding()
Definition: link.h:305
virtual void updateLinkStatusRegRef(fmatvec::VecInt &LinkStatusRegParent)
reference to vector of link status (for single-valued links)
Definition: link.cc:127
Link(const std::string &name)
constructor
Definition: link.cc:39
virtual void updaterFactors()
update relaxation factors for contact equations
Definition: link.h:320
namespace MBSim
Definition: bilateral_constraint.cc:30