All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Pages
Classes | Public Member Functions | Protected Attributes | Private Attributes | List of all members
MBSim::Contact Class Reference

class for contacts More...

#include <contact.h>

Inheritance diagram for MBSim::Contact:
MBSim::LinkMechanics MBSim::Link MBSim::Element fmatvec::Atom

Classes

struct  saved_references
 

Public Member Functions

 Contact (const std::string &name="")
 constructor More...
 
virtual ~Contact ()
 destructor
 
virtual void setDynamicSystemSolver (DynamicSystemSolver *sys)
 sets the used dynamics system solver to the element More...
 
virtual void updatewb (double t, int i=0)
 
virtual void updateW (double t, int i=0)
 
virtual void updateV (double t, int i=0)
 
virtual void updateh (double t, int i=0)
 
virtual void updateg (double t)
 
virtual void updategd (double t)
 
virtual void updateStopVector (double t)
 
virtual void updateJacobians (double t, int j=0)
 
virtual void updateWRef (const fmatvec::Mat &ref, int j=0)
 references to contact force direction matrix of dynamic system parent
 
virtual void updateVRef (const fmatvec::Mat &ref, int j=0)
 references to condensed contact force direction matrix of dynamic system parent
 
virtual void updatehRef (const fmatvec::Vec &hRef, int j=0)
 references to complete and link smooth force vector of dynamic system parent
 
virtual void updatewbRef (const fmatvec::Vec &ref)
 references to TODO of dynamic system parent
 
virtual void updatelaRef (const fmatvec::Vec &ref)
 references to contact force parameter of dynamic system parent
 
virtual void updategRef (const fmatvec::Vec &ref)
 references to contact relative distances of dynamic system parent
 
virtual void updategdRef (const fmatvec::Vec &ref)
 references to contact relative velocities of dynamic system parent
 
virtual void updateresRef (const fmatvec::Vec &ref)
 references to residuum of nonlinear contact equations of dynamic system parent
 
virtual void updaterFactorRef (const fmatvec::Vec &ref)
 references to rfactors of dynamic system parent
 
virtual void updatesvRef (const fmatvec::Vec &ref)
 references to stopvector of dynamic system parent (root function for event driven integration)
 
virtual void updatejsvRef (const fmatvec::VecInt &ref)
 references to stopvector evaluation of dynamic system parent (root detection with corresponding bool array by event driven integrator)
 
virtual void updateLinkStatusRef (const fmatvec::VecInt &LinkStatusParent)
 reference to vector of link status (for set valued links with piecewise link equations)
 
virtual void updateLinkStatusRegRef (const fmatvec::VecInt &LinkStatusRegParent)
 reference to vector of link status (for single-valued links)
 
virtual void calcxSize ()
 
virtual void calclaSize (int j)
 calculates size of contact force parameters
 
virtual void calcgSize (int j)
 calculates size of relative distances
 
virtual void calcgdSize (int j)
 calculates size of gap velocities More...
 
virtual void calcrFactorSize (int j)
 calculates size of rfactors
 
virtual void calcsvSize ()
 calculates size of stopvector (root function for event driven integration)
 
virtual void calcLinkStatusSize ()
 calculates size of vector LinkStatus
 
virtual void calcLinkStatusRegSize ()
 calculates size of vector LinkStatusReg
 
virtual void init (InitStage stage)
 plots time series header More...
 
virtual bool isSetValued () const
 asks the link if it contains force laws that contribute to the lagrange multiplier and is therefore set valued More...
 
virtual bool isSingleValued () const
 asks the link if it contains single valued force laws that contribute to the right-hand side vector h More...
 
virtual void updateLinkStatus (double dt)
 
virtual void updateLinkStatusReg (double dt)
 
virtual bool isActive () const
 
virtual bool gActiveChanged ()
 
virtual bool detectImpact ()
 
virtual void solveImpactsFixpointSingle (double dt)
 
virtual void solveConstraintsFixpointSingle ()
 
virtual void solveImpactsGaussSeidel (double dt)
 
virtual void solveConstraintsGaussSeidel ()
 
virtual void solveImpactsRootFinding (double dt)
 
virtual void solveConstraintsRootFinding ()
 
virtual void jacobianConstraints ()
 computes JACOBIAN and mass action matrix of nonlinear contact equations
 
virtual void jacobianImpacts ()
 computes JACOBIAN and mass action matrix of nonlinear contact equations on velocity level
 
virtual void updaterFactors ()
 update relaxation factors for contact equations
 
virtual void checkConstraintsForTermination ()
 verify underlying force laws concerning given tolerances
 
virtual void checkImpactsForTermination (double dt)
 verify underlying force laws on velocity level concerning given tolerances
 
virtual void checkActive (int j)
 check if set-valued contacts are active and set corresponding attributes More...
 
virtual void setlaTol (double tol)
 
virtual void setLaTol (double tol)
 
virtual void setgTol (double tol)
 
virtual void setgdTol (double tol)
 
virtual void setgddTol (double tol)
 
virtual void setrMax (double rMax_)
 
virtual void setLinkStatusInd (int LinkStatusInd_)
 
virtual void setLinkStatusRegInd (int LinkStatusRegInd_)
 
virtual void setsvInd (int svInd_)
 
virtual void setlaInd (int laInd_)
 
virtual void setgInd (int gInd_)
 
virtual void setgdInd (int gdInd_)
 
virtual void setrFactorInd (int rFactorInd_)
 
virtual void LinearImpactEstimation (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 step More...
 
virtual void SizeLinearImpactEstimation (int *sizeInActive_, int *sizeActive_)
 calculates the number of active and inactive unilateral constraints and increments sizeActive/sizeInActive
 
virtual void updatecorrRef (const fmatvec::Vec &ref)
 
virtual void updatecorr (int j)
 
virtual void calccorrSize (int j)
 
virtual void setcorrInd (int corrInd_)
 
virtual void checkRoot ()
 
virtual std::string getType () const
 
virtual void plot (double t, double dt=1)
 plots time dependent data More...
 
virtual void closePlot ()
 closes plot file
 
void setNormalForceLaw (GeneralizedForceLaw *fcl_)
 
GeneralizedForceLawgetNormalForceLaw () const
 
void setNormalImpactLaw (GeneralizedImpactLaw *fnil_)
 
void setTangentialForceLaw (FrictionForceLaw *fdf_)
 
void setTangentialImpactLaw (FrictionImpactLaw *ftil_)
 
void setContactKinematics (ContactKinematics *ck, size_t index=0)
 
ContactKinematics * getContactKinematics (size_t index=0) const
 
ContactKinematics * findContactKinematics (std::string cKName) const
 
const std::vector< std::vector
< SingleContact > > & 
getSubcontacts () const
 
virtual void setPlotFeatureContactKinematics (std::string cKName, PlotFeature pf, PlotFeatureStatus value)
 
virtual int getFrictionDirections ()
 
void connect (Contour *contour1, Contour *contour2, ContactKinematics *contactKinematics=0, const std::string &name="")
 
void computeCurvatures (fmatvec::Vec &r, int contactKinematicsIndex) const
 
virtual void initializeUsingXML (xercesc::DOMElement *element)
 
virtual xercesc::DOMElement * writeXMLFile (xercesc::DOMNode *element)
 
- Public Member Functions inherited from MBSim::LinkMechanics
 LinkMechanics (const std::string &name)
 constructor More...
 
virtual ~LinkMechanics ()
 destructor
 
virtual void updatedhdz (double t)
 
std::string getType () const
 
virtual void updatedhdqRef (const fmatvec::Mat &ref, int i=0)
 
virtual void updatedhduRef (const fmatvec::SqrMat &ref, int i=0)
 
virtual void updatedhdtRef (const fmatvec::Vec &ref, int i=0)
 
virtual void updaterRef (const fmatvec::Vec &ref, int i=0)
 references to nonsmooth force vector of dynamic system parent
 
const std::vector< Contour * > & getContour () const
 
virtual void connect (Frame *frame_)
 
virtual void connect (Contour *contour_)
 
const std::vector< Frame * > & getFrame () const
 
- Public Member Functions inherited from MBSim::Element
 Element (const std::string &name)
 constructor
 
virtual ~Element ()
 destructor
 
virtual void initDataInterfaceBase (DynamicSystemSolver *parentds)
 TODO.
 
virtual void plotAtSpecialEvent (double t, double dt=1)
 plots time dependent data at special events More...
 
const std::string & getName () const
 
void setName (const std::string &str)
 
void setPath (const std::string &str)
 
DynamicSystemSolvergetDynamicSystemSolver ()
 
virtual void createPlotGroup ()
 creates the plotGroup for H5-output
 
H5::GroupBasegetPlotGroup ()
 
virtual void setPlotFeature (PlotFeature pf, PlotFeatureStatus value)
 Set a plot feature. More...
 
void setPlotFeatureForChildren (PlotFeature pf, PlotFeatureStatus value)
 Set a plot feature for the children of this object. More...
 
void setPlotFeatureRecursive (PlotFeature pf, PlotFeatureStatus value)
 Set a plot feature for this object and the children of this object. More...
 
PlotFeatureStatus getPlotFeature (PlotFeature pf)
 
PlotFeatureStatus getPlotFeatureForChildren (PlotFeature pf)
 
const std::vector
< MBXMLUtils::EmbedDOMLocator > & 
getLocationStack () const
 
template<class T >
T * getByPath (const std::string &path, bool initialCaller=true) const
 Get the object of type T represented by the path path. Do not set any argurment other than path!
 
std::string getPath (const Element *relTo=NULL, std::string sep="/") const
 Return the path of this object. If relativeTo is not NULL return a relative path to relativeTo. Do not set any argurment other than relTo and sep!
 
virtual ElementgetChildByContainerAndName (const std::string &container, const std::string &name) const
 Get the Element named name in the container named container.
 
virtual ElementgetParent ()
 
virtual const ElementgetParent () const
 
virtual void setParent (Element *parent_)
 
std::vector< Element * > getElementsDependingOn () const
 checks dependency on other elements. More...
 
void addDependency (Element *ele)
 
int computeLevel ()
 computes the length of the pathes in the graph that represents the dependencies between all elements. More...
 
- Public Member Functions inherited from fmatvec::Atom
Atomoperator= (const Atom &)
 
void setMessageStreamActive (MsgType type, bool active)
 
void getMessageStream (MsgType type, boost::shared_ptr< bool > &a, boost::shared_ptr< std::ostream > &s)
 
void adoptMessageStreams (const Atom *src=NULL)
 
std::ostream & msg (MsgType type)
 
bool msgAct (MsgType type)
 

Protected Attributes

std::vector< std::vector
< SingleContact > > 
contacts
 list of the single sub-contact(-points)
 
std::vector< ContactKinematics * > contactKinematics
 list of the single contact kinematics
 
std::vector< std::string > ckNames
 names for the contact kinematics More...
 
std::map< std::pair
< std::string, PlotFeature >
, PlotFeatureStatus
plotFeatureMap
 plotFeatures of sub-contacts More...
 
GeneralizedForceLawfcl
 force laws in normal and tangential direction on acceleration and velocity level
 
FrictionForceLawfdf
 force law defining relation between tangential velocities and tangential forces
 
GeneralizedImpactLawfnil
 force law defining relation between penetration velocity and resulting normal impulses
 
FrictionImpactLawftil
 force law defining relation between tangential velocities and forces impulses
 
- Protected Attributes inherited from MBSim::LinkMechanics
std::vector< fmatvec::Vec3 > WF
 force and moment direction for smooth right hand side
 
std::vector< fmatvec::Vec3 > WM
 
std::vector< fmatvec::Mat3xV > fF
 cartesian force and moment direction matrix for nonsmooth right hand side
 
std::vector< fmatvec::Mat3xV > fM
 
std::vector< Frame * > frame
 array in which all frames are listed, connecting bodies via a link
 
std::vector< Contour * > contour
 array in which all contours are listed, connecting bodies via link
 
- Protected Attributes inherited from MBSim::Element
Elementparent
 
std::string name
 name of element
 
std::string path
 The path of this object. Is set during the init stage reorganizeHierarchy. Before this the path is calculated dynamically using getPath() after this stage getPath just returns this value.
 
std::vector
< MBXMLUtils::EmbedDOMLocator > 
locationStack
 
DynamicSystemSolverds
 dynamic system
 
H5::VectorSerie< double > * plotVectorSerie
 time series
 
std::vector< double > plotVector
 one entry of time series
 
std::vector< std::string > plotColumns
 columns of time series
 
H5::GroupBaseplotGroup
 associated plot group
 
std::vector< Element * > dependency
 vector containing all dependencies.
 

Private Attributes

std::vector< saved_referencessaved_ref
 

Additional Inherited Members

- Public Types inherited from MBSim::Element
enum  PlotFeatureStatus { enabled, disabled, unset }
 Plot feature status. More...
 
enum  PlotFeature {
  plotRecursive =0, separateFilePerGroup, state, stateDerivative,
  notMinimalState, rightHandSide, globalPosition, globalVelocity,
  globalAcceleration, energy, openMBV, generalizedLinkForce,
  linkKinematics, stopVector, debug, LASTPLOTFEATURE
}
 Plot Features. More...
 
enum  InitStage {
  modelBuildup =0, resolveXMLPath, preInit, resize,
  relativeFrameContourLocation, worldFrameContourLocation, plotting, reorganizeHierarchy,
  unknownStage, calculateLocalInitialValues, LASTINITSTAGE
}
 The stages of the initialization. More...
 
- Public Types inherited from fmatvec::Atom
enum  MsgType
 
- Static Public Member Functions inherited from MBSim::Element
static double getDouble (xercesc::DOMElement *e)
 
static int getInt (xercesc::DOMElement *e)
 
static bool getBool (xercesc::DOMElement *e)
 
static fmatvec::Vec3 getVec3 (xercesc::DOMElement *e)
 
static fmatvec::Vec getVec (xercesc::DOMElement *e, int rows=0)
 
static fmatvec::Mat3xV getMat3xV (xercesc::DOMElement *e, int cols=0)
 
static fmatvec::Mat getMat (xercesc::DOMElement *e, int rows=0, int cols=0)
 
static fmatvec::SqrMat3 getSqrMat3 (xercesc::DOMElement *e)
 
static fmatvec::SqrMat getSqrMat (xercesc::DOMElement *e, int size=0)
 
static fmatvec::SymMat3 getSymMat3 (xercesc::DOMElement *e)
 
static fmatvec::SymMat getSymMat (xercesc::DOMElement *e, int size=0)
 
- Static Public Member Functions inherited from fmatvec::Atom
static void setCurrentMessageStream (MsgType type, const boost::shared_ptr< bool > &a=boost::make_shared< bool >(true), const boost::shared_ptr< std::ostream > &s=boost::make_shared< std::ostream >(std::cout.rdbuf()))
 
static std::ostream & msgStatic (MsgType type)
 
static bool msgActStatic (MsgType type)
 
- Protected Member Functions inherited from MBSim::Element
void updatePlotFeatures ()
 
- Protected Member Functions inherited from fmatvec::Atom
 Atom (const Atom &src)
 

Detailed Description

class for contacts

Author
Martin Foerg
Date
2009-04-02 some comments (Thorsten Schindler)
2009-07-16 splitted link / object right hand side (Thorsten Schindler)
2009-08-03 contacts can now visualize their ContactPointFrames (Markus Schneider)
2010-07-06 added LinkStatus and LinearImpactEstimation for timestepper ssc (Robert Huber)
2012-05-08 added LinkStatusReg for AutoTimeSteppingSSCIntegrator (Jan Clauberg)
2014-09-16 contact forces are calculated on acceleration level (Thorsten Schindler)

basic class for contacts between contours, mainly implementing geometrical informations of contact-pairings

Remarks:

Constructor & Destructor Documentation

MBSim::Contact::Contact ( const std::string &  name = "")

constructor

Parameters
nameof contact

Member Function Documentation

void MBSim::Contact::calcgdSize ( int  j)
virtual

calculates size of gap velocities

Parameters
flagto decide which contacts are included in the calculation

see SingleContact for the implementation and DynamicSystem for explanation

Reimplemented from MBSim::Link.

void MBSim::Contact::checkActive ( int  j)
virtual

check if set-valued contacts are active and set corresponding attributes

Parameters
flagto decide which criteria are used to define 'activity'

see SingleContact for the implementation and DynamicSystem for explanation

Reimplemented from MBSim::Link.

void MBSim::Contact::connect ( Contour contour1,
Contour contour2,
ContactKinematics *  contactKinematics = 0,
const std::string &  name = "" 
)

connect two contours

Parameters
contour0first contour
contour1second contour
contactKinematicsThe contact kinematics that should be used to compute the contact point.
nameName of the contact in the output
bool MBSim::Contact::detectImpact ( )
virtual
Returns
has an impact occured?

Reimplemented from MBSim::Link.

bool MBSim::Contact::gActiveChanged ( )
virtual
Returns
has the relative distance vector changed?

Implements MBSim::Link.

int MBSim::Contact::getFrictionDirections ( )
virtual
Returns
number of considered friction directions
virtual std::string MBSim::Contact::getType ( ) const
inlinevirtual
Returns
std::string representation

Reimplemented from MBSim::Element.

void MBSim::Contact::init ( InitStage  stage)
virtual

plots time series header

Parameters
invocingparent class

Reimplemented from MBSim::LinkMechanics.

bool MBSim::Contact::isActive ( ) const
virtual
Returns
are link equations active?

Implements MBSim::Link.

bool MBSim::Contact::isSetValued ( ) const
virtual

asks the link if it contains force laws that contribute to the lagrange multiplier and is therefore set valued

Returns
set valued force laws used within the link?

Reimplemented from MBSim::Link.

bool MBSim::Contact::isSingleValued ( ) const
virtual

asks the link if it contains single valued force laws that contribute to the right-hand side vector h

Returns
single valued force laws used within link?

Reimplemented from MBSim::Link.

void MBSim::Contact::LinearImpactEstimation ( fmatvec::Vec gInActive_,
fmatvec::Vec gdInActive_,
int *  IndInActive_,
fmatvec::Vec gAct_,
int *  IndActive_ 
)
virtual

get gap distance and calculate gap velocity of unilateral links to estimate impacts within the next step

Parameters
gInActivegap distance of inactive links (return)
gdInActivegap velocities of inactive links (return)
IndInActiveindex for gInActive/gdInActive; incremented with size after storage (return and input)
gActgap distance of active links (return)
IndActiveindex for gActive; incremented with size after storage (return and input)

Reimplemented from MBSim::Link.

void MBSim::Contact::plot ( double  t,
double  dt = 1 
)
virtual

plots time dependent data

Parameters
simulationtime
simulationtime step size for derivative calculation

Reimplemented from MBSim::LinkMechanics.

void MBSim::Contact::setDynamicSystemSolver ( DynamicSystemSolver sys)
virtual

sets the used dynamics system solver to the element

Parameters
pointerto the dynamic system solver of which the element is part of

Reimplemented from MBSim::Element.

void MBSim::Contact::solveConstraintsFixpointSingle ( )
virtual

solve contact equations of motion with single step fixed point scheme

Reimplemented from MBSim::Link.

void MBSim::Contact::solveConstraintsGaussSeidel ( )
virtual

solve contact equations of motion with Gauss-Seidel scheme

Reimplemented from MBSim::Link.

void MBSim::Contact::solveConstraintsRootFinding ( )
virtual

solve contact equations of motion with Newton scheme

Reimplemented from MBSim::Link.

void MBSim::Contact::solveImpactsFixpointSingle ( double  dt)
virtual

solve impact equations of motion with single step fixed point scheme on velocity level

Parameters
timestep-size

Reimplemented from MBSim::Link.

void MBSim::Contact::solveImpactsGaussSeidel ( double  dt)
virtual

solve impact equations of motion with Gauss-Seidel scheme on velocity level

Parameters
timestep-size

Reimplemented from MBSim::Link.

void MBSim::Contact::solveImpactsRootFinding ( double  dt)
virtual

solve impact equations of motion with Newton scheme on velocity level

Parameters
timestep-size

Reimplemented from MBSim::Link.

Member Data Documentation

std::vector<std::string> MBSim::Contact::ckNames
protected

names for the contact kinematics

Todo:
: what really is annoying is the fact, that due to the concept of the compound contour the sub contacts can not be build when the contours are connected. Thus it is not possible before the contact kinematics are assigned (what happens in the preInit-stage) that plot featers (and everything else, like names for the plot and so on) can not be set before. Thus this properties have to be saved in a special list in the multiple contact or the things are set later on...
std::map<std::pair<std::string, PlotFeature>, PlotFeatureStatus> MBSim::Contact::plotFeatureMap
protected

plotFeatures of sub-contacts

Todo:
: see remark of ckNames

The documentation for this class was generated from the following files:

Impressum / Disclaimer / Datenschutz Generated by doxygen 1.8.5 Valid HTML