19 #ifndef _DYNAMIC_SYSTEM_H_
20 #define _DYNAMIC_SYSTEM_H_
22 #include "mbsim/element.h"
23 #include "mbsim/mbsim_event.h"
31 class FixedRelativeFrame;
37 class ModellingInterface;
39 class InverseKineticsJoint;
72 virtual void updateT();
73 virtual void updateh(
int i=0);
74 virtual void updateM();
75 virtual void updatedq();
76 virtual void updatezd() = 0;
77 virtual void updatedu() = 0;
78 virtual void sethSize(
int hSize_,
int i=0);
79 virtual int gethSize(
int i=0)
const {
return hSize[i]; }
80 virtual int getqSize()
const {
return qSize; }
81 virtual int getuSize(
int i=0)
const {
return uSize[i]; }
82 virtual void calcqSize();
83 virtual void calcuSize(
int j=0);
85 virtual int getuInd(
int i=0) {
return uInd[i]; }
89 virtual void setqInd(
int qInd_);
90 virtual void setuInd(
int uInd_,
int i=0);
91 virtual void sethInd(
int hInd_,
int i=0);
92 virtual void setxInd(
int xInd_);
100 void setjsv(
const fmatvec::VecInt& jsv_){
jsv = jsv_;}
104 virtual std::shared_ptr<OpenMBV::Group> getOpenMBVGrp();
106 virtual void updatewb();
107 virtual void updateW(
int j=0);
108 virtual void updateV(
int j=0);
109 virtual void updateg();
110 virtual void updategd();
111 virtual void updateStopVector();
112 virtual void updateLinkStatus();
113 virtual void updateLinkStatusReg();
115 virtual void updateWInverseKinetics();
116 virtual void updatebInverseKinetics();
118 virtual void updatedx();
119 virtual void calcxSize();
122 int getxSize()
const {
return xSize; }
127 virtual void initz();
134 virtual std::string
getType()
const {
return "DynamicSystem"; }
216 virtual Frame*
getFrame(
const std::string &name,
bool check=
true)
const;
227 void setPosition(
const fmatvec::Vec3& PrPF_) {
PrPF = PrPF_; }
228 void setOrientation(
const fmatvec::SqrMat3& APF_) {
APF = APF_; }
229 void setFrameOfReference(Frame *
frame) {
R =
frame; };
230 const fmatvec::Vec3& getPosition()
const {
return PrPF; }
231 const fmatvec::SqrMat3& getOrientation()
const {
return APF; }
232 const Frame* getFrameOfReference()
const {
return R; };
238 const fmatvec::Vec& geth(
int j=0,
bool check=
true)
const;
244 const fmatvec::Mat& getW(
int i=0,
bool check=
true)
const;
245 const fmatvec::Mat& getV(
int i=0,
bool check=
true)
const;
254 fmatvec::VecInt& getjsv() {
return jsv; }
255 const fmatvec::VecInt& getjsv()
const {
return jsv; }
262 fmatvec::VecInt& getLinkStatus() {
return LinkStatus; }
263 fmatvec::VecInt& getLinkStatusReg() {
return LinkStatusReg; }
264 const fmatvec::VecInt& getLinkStatus()
const {
return LinkStatus; }
265 const fmatvec::VecInt& getLinkStatusReg()
const {
return LinkStatusReg; }
283 void setx0(
double x0_) { x0 =
fmatvec::Vec(1,fmatvec::INIT,x0_); }
289 int getxInd() {
return xInd; }
290 int getlaInd()
const {
return laInd; }
292 int gethInd(
int i=0) {
return hInd[i]; }
293 void setlaInd(
int ind) { laInd = ind; }
294 void setgInd(
int ind) { gInd = ind; }
295 void setgdInd(
int ind) { gdInd = ind; }
296 void setrFactorInd(
int ind) { rFactorInd = ind; }
297 virtual void setsvInd(
int svInd_);
298 void setLinkStatusInd(
int LinkStatusInd_) {LinkStatusInd = LinkStatusInd_;};
299 void setLinkStatusRegInd(
int LinkStatusRegInd_) {LinkStatusRegInd = LinkStatusRegInd_;};
303 void setqSize(
int qSize_) {
qSize = qSize_; }
304 void setuSize(
int uSize_,
int i=0) {
uSize[i] = uSize_; }
305 void setxSize(
int xSize_) {
xSize = xSize_; }
307 int getlaSize()
const {
return laSize; }
308 int getgSize()
const {
return gSize; }
309 int getgdSize()
const {
return gdSize; }
311 int getsvSize()
const {
return svSize; }
316 const std::vector<Object*>& getObjects()
const {
return object; }
317 const std::vector<Link*>& getLinks()
const {
return link; }
318 const std::vector<DynamicSystem*>& getDynamicSystems()
const {
return dynamicsystem; }
319 const std::vector<Frame*>& getFrames()
const {
return frame; }
320 const std::vector<Contour*>& getContours()
const {
return contour; }
321 const std::vector<Link*>& getSetValuedLinks()
const {
return linkSetValued; }
428 void updatelaInverseKineticsRef(
const fmatvec::Vec &ref);
429 void updatebInverseKineticsRef(
const fmatvec::Mat &ref);
494 void clearElementLists();
656 virtual void setgTol(
double tol);
689 void addFrame(FixedRelativeFrame *
frame);
691 void addContour(RigidContour *contour);
715 Object*
getObject(
const std::string &name,
bool check=
true)
const;
732 Observer* getObserver(
const std::string &name,
bool check=
true)
const;
733 void addObserver(Observer *element);
740 Link*
getLink(
const std::string &name,
bool check=
true)
const;
747 Constraint*
getConstraint(
const std::string &name,
bool check=
true)
const;
752 void addModel(ModellingInterface *modell);
759 ModellingInterface*
getModel(
const std::string &name,
bool check=
true)
const;
766 virtual void updatecorr(
int j);
768 void calccorrSize(
int j);
772 void resetUpToDate();
778 void addContour(
Contour *contour);
800 std::vector<Link*> link;
801 std::vector<Link*> linkSingleValued;
802 std::vector<Link*> linkSetValued;
803 std::vector<Link*> linkSetValuedActive;
804 std::vector<ModellingInterface*> model;
805 std::vector<DynamicSystem*> dynamicsystem;
806 std::vector<Link*> inverseKineticsLink;
807 std::vector<Observer*> observer;
808 std::vector<Link*> linkSmoothPart;
809 std::vector< std::vector<Element*> > elementOrdered;
810 std::vector< std::vector<Link*> > linkOrdered;
811 std::vector<Constraint*> constraint;
957 std::vector<Contour*> contour;
959 std::shared_ptr<OpenMBV::Group> openMBVGrp;
960 std::shared_ptr<H5::File> hdf5File;
973 int corrSize, corrInd;
976 std::string saved_frameOfReference;
int rFactorSize
size and local start index of rfactors relative to parent
Definition: dynamic_system.h:936
bool gActiveChangedReg()
Definition: dynamic_system.cc:1091
virtual void setlaTol(double tol)
Definition: dynamic_system.cc:1302
fmatvec::Vec3 PrPF
relative translation with respect to parent frame
Definition: dynamic_system.h:789
fmatvec::Vec q
positions, differentiated positions, initial positions
Definition: dynamic_system.h:831
virtual int jacobianConstraints()
compute JACOBIAN of contact equations
Definition: dynamic_system.cc:535
void buildListOfModels(std::vector< ModellingInterface * > &model)
build flat list of models
Definition: dynamic_system.cc:1014
int laInverseKineticsSize
size of contact force parameters of special links relative to parent
Definition: dynamic_system.h:968
Link * getLink(const std::string &name, bool check=true) const
Definition: dynamic_system.cc:1414
int laSize
size and local start index of contact force parameters relative to parent
Definition: dynamic_system.h:931
Vector< Ref, double > Vec
virtual void init(InitStage stage)
plots time series header
Definition: dynamic_system.cc:388
solver interface for modelling and simulation of dynamic systems
Definition: dynamic_system_solver.h:48
void addModel(ModellingInterface *modell)
Definition: dynamic_system.cc:1442
void addGroup(DynamicSystem *dynamicsystem)
Definition: dynamic_system.cc:1465
virtual int solveImpactsRootFinding()
solve impact equations with Newton scheme on velocity level
Definition: dynamic_system.cc:527
Frame * getFrameI()
Definition: dynamic_system.h:762
void buildListOfObjects(std::vector< Object * > &obj)
build flat list of objects
Definition: dynamic_system.cc:969
fmatvec::SymMat LLM
Cholesky decomposition of mass matrix.
Definition: dynamic_system.h:826
void checkActiveReg(int i)
check if single-valued contacts are active
Definition: dynamic_system.cc:1276
void buildListOfContours(std::vector< Contour * > &cnt)
build flat list of contours
Definition: dynamic_system.cc:1005
virtual void plot()
plots time dependent data
Definition: dynamic_system.cc:330
virtual void updateWRef(const fmatvec::Mat &ref, int i=0)
references to contact force direction matrix of dynamic system parent
Definition: dynamic_system.cc:824
fmatvec::Mat T
linear relation matrix of position and velocity parameters
Definition: dynamic_system.h:816
int frameIndex(const Frame *frame_) const
Definition: dynamic_system.cc:1349
fmatvec::VecInt LinkStatus
status of set-valued links
Definition: dynamic_system.h:891
void setUpLinks()
distribute links to set- and single valued container
Definition: dynamic_system.cc:1052
fmatvec::Vec u
velocities, differentiated velocities, initial velocities
Definition: dynamic_system.h:836
virtual void updaterFactors()
update relaxation factors for contact equations
Definition: dynamic_system.cc:563
void updateqdRef(const fmatvec::Vec &ref)
references to differentiated positions of dynamic system parent
Definition: dynamic_system.cc:607
void updateLLMRef(const fmatvec::SymMat &ref)
references to Cholesky decomposition of dynamic system parent
Definition: dynamic_system.cc:769
int uSize[2]
size and local start index of velocities relative to parent
Definition: dynamic_system.h:906
fmatvec::Vec x
order one parameters, differentiated order one parameters, initial order one parameters ...
Definition: dynamic_system.h:841
virtual void checkImpactsForTermination()
validate force laws concerning given tolerances on velocity level
Definition: dynamic_system.cc:557
bool detectImpact()
Definition: dynamic_system.cc:1105
virtual void plotAtSpecialEvent()
plots time dependent data at special events
Definition: dynamic_system.cc:351
void updaterRef(const fmatvec::Vec &ref, int j=0)
references to nonsmooth right hand side of dynamic system parent
Definition: dynamic_system.cc:729
virtual int solveConstraintsRootFinding()
solve contact equations with Newton scheme
Definition: dynamic_system.cc:519
void updateresRef(const fmatvec::Vec &ref)
references to residuum of contact equations of dynamic system parent
Definition: dynamic_system.cc:872
int LinkStatusSize
size and local start index of set-valued link status vector relative to parent
Definition: dynamic_system.h:946
basic class for contour definition for rigid (which do not know about their shape) and flexible (they...
Definition: contour.h:40
virtual void closePlot()
closes plot file
Definition: dynamic_system.cc:372
virtual void setgTol(double tol)
Definition: dynamic_system.cc:1281
basic class of MBSim mainly for plotting
Definition: element.h:58
void updateqRef(const fmatvec::Vec &ref)
references to positions of dynamic system parent
Definition: dynamic_system.cc:597
int gSize
size and local start index of relative distances relative to parent
Definition: dynamic_system.h:921
virtual void setLaTol(double tol)
Definition: dynamic_system.cc:1309
void updatesvRef(const fmatvec::Vec &ref)
references to stopvector (rootfunction for event driven integrator) of dynamic system parent ...
Definition: dynamic_system.cc:852
virtual Contour * getContour(const std::string &name, bool check=true) const
Definition: dynamic_system.cc:583
void buildListOfConstraints(std::vector< Constraint * > &crt)
build flat list of all constraints
Definition: dynamic_system.cc:987
void updateudRef(const fmatvec::Vec &ref)
references to differentiated velocities of dynamic system parent
Definition: dynamic_system.cc:645
int gdSize
size and local start index of relative velocities relative to parent
Definition: dynamic_system.h:926
fmatvec::Vec h[2]
smooth, smooth with respect to objects, smooth with respect to links and nonsmooth ...
Definition: dynamic_system.h:846
void calcrFactorSize(int j)
calculates size of relaxation factors for contact equations
Definition: dynamic_system.cc:1250
void calcbInverseKineticsSize()
calculates size of contact force parameters
Definition: dynamic_system.cc:1220
std::vector< Frame * > frame
vector of frames and contours
Definition: dynamic_system.h:956
void updateLinkStatusRegRef(const fmatvec::VecInt &LinkStatusRegParent)
references to status vector of single valued links
Definition: dynamic_system.cc:896
fmatvec::Vec res
residuum of nonlinear contact equations for Newton scheme
Definition: dynamic_system.h:871
virtual void updategdRef(const fmatvec::Vec &ref)
references to relative velocities of dynamic system parent
Definition: dynamic_system.cc:786
fmatvec::SqrMat3 APF
relative rotation with respect to parent frame
Definition: dynamic_system.h:794
void updaterFactorRef(const fmatvec::Vec &ref)
references to relaxation factors for contact equations of dynamic system parent
Definition: dynamic_system.cc:879
void buildListOfFrames(std::vector< Frame * > &frm)
build flat list of frames
Definition: dynamic_system.cc:996
virtual void updateLLM()=0
compute Cholesky decomposition of mass matrix TODO necessary?
dynamic system as topmost hierarchical level
Definition: dynamic_system.h:59
void updateuallRef(const fmatvec::Vec &ref)
references to velocities of dynamic system parent
Definition: dynamic_system.cc:637
void buildListOfObservers(std::vector< Observer * > &obsrv)
build flat list of observers
Definition: dynamic_system.cc:1032
virtual std::string getType() const
Definition: dynamic_system.h:134
Frame * I
Definition: dynamic_system.h:963
Frame * R
parent frame
Definition: dynamic_system.h:784
void calclaInverseKineticsSize()
calculates size of contact force parameters
Definition: dynamic_system.cc:1210
void calcLinkStatusSize()
calculates size of set-valued link status vector
Definition: dynamic_system.cc:1157
virtual int solveImpactsGaussSeidel()
solve impact equations with Gauss-Seidel scheme on velocity level
Definition: dynamic_system.cc:511
Constraint * getConstraint(const std::string &name, bool check=true) const
Definition: dynamic_system.cc:1428
virtual void updategRef(const fmatvec::Vec &ref)
references to relative distances of dynamic system parent
Definition: dynamic_system.cc:779
fmatvec::VecInt LinkStatusReg
status of single-valued links
Definition: dynamic_system.h:896
void checkActive(int i)
check if set-valued contacts are active and set corresponding attributes
Definition: dynamic_system.cc:1270
InitStage
The stages of the initialization.
Definition: element.h:97
virtual Element * getChildByContainerAndName(const std::string &container, const std::string &name) const
Get the Element named name in the container named container.
Definition: dynamic_system.cc:1483
int qSize
size and local start index of positions relative to parent
Definition: dynamic_system.h:901
virtual int solveConstraintsGaussSeidel()
solve contact equations with Gauss-Seidel scheme
Definition: dynamic_system.cc:503
DynamicSystem(const std::string &name)
constructor
Definition: dynamic_system.cc:45
void setUpActiveLinks()
rearrange vector of active setvalued links
Definition: dynamic_system.cc:1260
void updateudallRef(const fmatvec::Vec &ref)
references to velocities of dynamic system parent
Definition: dynamic_system.cc:665
PlotFeatureStatus getPlotFeature(PlotFeature pf)
Definition: element.h:214
virtual void setgdTol(double tol)
Definition: dynamic_system.cc:1288
void buildListOfLinks(std::vector< Link * > &lnk)
build flat list of links
Definition: dynamic_system.cc:978
void updateTRef(const fmatvec::Mat &ref)
references to linear transformation matrix between differentiated positions and velocities of dynamic...
Definition: dynamic_system.cc:749
Object * getObject(const std::string &name, bool check=true) const
Definition: dynamic_system.cc:1371
virtual void updateVRef(const fmatvec::Mat &ref, int i=0)
references to condensed contact force direction matrix of dynamic system parent
Definition: dynamic_system.cc:845
void buildListOfInverseKineticsLinks(std::vector< Link * > &lnk)
build flat list of inverse kinetics links
Definition: dynamic_system.cc:1023
void setrMax(double rMax)
Definition: dynamic_system.cc:1316
std::string name
name of element
Definition: element.h:298
int LinkStatusRegSize
size and local start index of single-valued link status vector relative to parent ...
Definition: dynamic_system.h:951
DynamicSystem * getGroup(const std::string &name, bool check=true) const
Definition: dynamic_system.cc:1357
void addLink(Link *link)
Definition: dynamic_system.cc:1385
void calcgdSize(int j)
calculates size of gap velocities
Definition: dynamic_system.cc:1240
ModellingInterface * getModel(const std::string &name, bool check=true) const
Definition: dynamic_system.cc:1451
fmatvec::Vec wb
TODO.
Definition: dynamic_system.h:866
void updatejsvRef(const fmatvec::VecInt &ref)
references to boolean evaluation of stopvector concerning roots of dynamic system parent ...
Definition: dynamic_system.cc:862
virtual void checkConstraintsForTermination()
validate force laws concerning given tolerances
Definition: dynamic_system.cc:551
int svSize
size and local start index of stop vector relative to parent
Definition: dynamic_system.h:941
cartesian frame on bodies used for application of e.g. links and loads
Definition: frame.h:37
void updateWInverseKineticsRef(const fmatvec::Mat &ref)
references to contact force direction matrix of dynamic system parent
Definition: dynamic_system.cc:831
fmatvec::Vec rFactor
rfactors for relaxation nonlinear contact equations
Definition: dynamic_system.h:876
void calcgSize(int j)
calculates size of relative distances
Definition: dynamic_system.cc:1230
fmatvec::Vec sv
stop vector (root functions for event driven integration
Definition: dynamic_system.h:881
virtual int solveImpactsFixpointSingle()
solve impact equations with single step fixed point scheme on velocity level
Definition: dynamic_system.cc:495
fmatvec::Vec g
relative distances and velocities
Definition: dynamic_system.h:861
void calcLinkStatusRegSize()
calculates size of single-valued link status vector
Definition: dynamic_system.cc:1172
void updaterdtRef(const fmatvec::Vec &ref)
references to nonsmooth right hand side of dynamic system parent
Definition: dynamic_system.cc:739
bool gActiveChanged()
Definition: dynamic_system.cc:1077
void updatehRef(const fmatvec::Vec &hRef, int i=0)
references to smooth right hand side of dynamic system parent
Definition: dynamic_system.cc:712
void addInverseKineticsLink(Link *link)
Definition: dynamic_system.cc:1405
H5::GroupBase * plotGroup
associated plot group
Definition: element.h:332
void calcsvSize()
calculates size of stop vector
Definition: dynamic_system.cc:1187
virtual ~DynamicSystem()
destructor
Definition: dynamic_system.cc:61
void updateLaRef(const fmatvec::Vec &ref)
references to contact impulses of dynamic system parent
Definition: dynamic_system.cc:800
std::vector< Object * > object
container for possible ingredients
Definition: dynamic_system.h:799
fmatvec::Vec la
contact force parameters
Definition: dynamic_system.h:856
virtual void setDynamicSystemSolver(DynamicSystemSolver *sys)
sets the used dynamics system solver to the element
Definition: dynamic_system.cc:303
void updateuRef(const fmatvec::Vec &ref)
references to velocities of dynamic system parent
Definition: dynamic_system.cc:627
void setUpInverseKinetics()
analyse constraints of dynamic systems for usage in inverse kinetics
Definition: dynamic_system.cc:1041
int hSize[2]
size and local start index of order smooth right hand side relative to parent
Definition: dynamic_system.h:916
virtual Frame * getFrame(const std::string &name, bool check=true) const
Definition: dynamic_system.cc:569
int xSize
size and local start index of order one parameters relative to parent
Definition: dynamic_system.h:911
void calclaSize(int j)
calculates size of contact force parameters
Definition: dynamic_system.cc:1200
fmatvec::VecInt jsv
boolean evaluation of stop vector concerning roots
Definition: dynamic_system.h:886
PlotFeatureStatus
Plot feature status.
Definition: element.h:61
virtual int solveConstraintsFixpointSingle()
solve contact equations with single step fixed point scheme
Definition: dynamic_system.cc:487
virtual int jacobianImpacts()
compute JACOBIAN of contact equations on velocity level
Definition: dynamic_system.cc:543
fmatvec::SymMat M
mass matrix
Definition: dynamic_system.h:821
void updateMRef(const fmatvec::SymMat &ref)
references to mass matrix of dynamic system parent
Definition: dynamic_system.cc:759
void updateLinkStatusRef(const fmatvec::VecInt &LinkStatusParent)
references to status vector of set valued links with piecewise link equations (which piece is valid) ...
Definition: dynamic_system.cc:886
void buildListOfDynamicSystems(std::vector< DynamicSystem * > &sys)
build flat list of dynamic systems
Definition: dynamic_system.cc:960
void addConstraint(Constraint *constraint)
Definition: dynamic_system.cc:1395
PlotFeature
Plot Features.
Definition: element.h:74
virtual void updatewbRef(const fmatvec::Vec &ref)
references to TODO of dynamic system parent
Definition: dynamic_system.cc:817
virtual void setgddTol(double tol)
Definition: dynamic_system.cc:1295
PlotFeatureStatus getPlotFeatureForChildren(PlotFeature pf)
Definition: element.h:219
void addObject(Object *object)
Definition: dynamic_system.cc:1474
void updatelaRef(const fmatvec::Vec &ref)
references to contact forces of dynamic system parent
Definition: dynamic_system.cc:793