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

A force law that computes the normal force of many contact kinematics based on the Maxwell-Force-Law. More...

#include <constitutive_laws.h>

Inheritance diagram for MBSim::MaxwellUnilateralConstraint:
MBSim::GeneralizedForceLaw MBSim::Element fmatvec::Atom

Classes

struct  xmlInfo
 

Public Member Functions

 MaxwellUnilateralConstraint (const double &damping=0, const double &gapLimit=0)
 constructor
 
virtual ~MaxwellUnilateralConstraint ()
 destructor
 
virtual bool isActive (double g, double gTol)
 decides, if force law is active More...
 
virtual bool remainsActive (double s, double sTol)
 
virtual bool isSetValued () const
 
virtual void computeSmoothForces (std::vector< std::vector< SingleContact > > &contacts)
 computes the normal forces for smooth constitutive law on every contact point More...
 
virtual void initializeUsingXML (xercesc::DOMElement *element)
 initialize the force law using XML More...
 
virtual void initializeContourCouplings (Contact *parent)
 initialize all saved contour couplings in the map More...
 
void setDebuglevel (int debuglevel)
 
void setLCPSolvingStrategy (LinearComplementarityProblem::LCPSolvingStrategy strategy)
 
void setLCPJacobianType (LinearComplementarityProblem::JacobianType type)
 
void addContourCoupling (Contour *contour1, Contour *contour2, InfluenceFunction *fct)
 add a function that represents the coupling between two contours More...
 
- Public Member Functions inherited from MBSim::GeneralizedForceLaw
 GeneralizedForceLaw (Function< double(double, double)> *forceFunc_=NULL)
 constructor
 
virtual ~GeneralizedForceLaw ()
 destructor
 
void init (Element::InitStage stage)
 plots time series header More...
 
virtual double project (double la, double gdn, double r, double laMin=0)
 prox function evaluation More...
 
virtual fmatvec::Vec diff (double la, double gdn, double r, double laMin=0)
 
virtual double solve (double G, double gdn)
 
virtual bool isFulfilled (double la, double gdn, double tolla, double tolgd, double laMin=0)
 
virtual xercesc::DOMElement * writeXMLFile (xercesc::DOMNode *parent)
 
virtual std::string getType () const
 
double operator() (double g, double gd)
 
void setForceFunction (Function< double(double, double)> *forceFunc_)
 Set the force function for use in regularisized constitutive laws The first input parameter to the force function is g. The second input parameter to the force function is gd. The return value is the force.
 
- Public Member Functions inherited from MBSim::Element
 Element (const std::string &name)
 constructor
 
virtual ~Element ()
 destructor
 
virtual void initDataInterfaceBase (DynamicSystemSolver *parentds)
 TODO.
 
virtual void setDynamicSystemSolver (DynamicSystemSolver *sys)
 sets the used dynamics system solver to the element More...
 
virtual void plot (double t, double dt=1)
 plots time dependent data More...
 
virtual void plotAtSpecialEvent (double t, double dt=1)
 plots time dependent data at special events More...
 
virtual void closePlot ()
 closes plot file
 
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 Member Functions

virtual void updatePossibleContactPoints (const std::vector< std::vector< SingleContact > > &contacts)
 saves all possible contacts in a vector
 
virtual void updateInfluenceMatrix (std::vector< std::vector< SingleContact > > &contacts)
 updates the influence matrix C More...
 
void updateRigidBodyGap (const std::vector< std::vector< SingleContact > > &contacts)
 update the rigid body distances (gaps) for the single contacts
 
virtual double computeInfluenceCoefficient (std::vector< std::vector< SingleContact > > &contacts, const std::pair< int, int > &contactIndex)
 computes the coupling factor for the influence matrix on one contact point (two contours) More...
 
virtual double computeInfluenceCoefficient (std::vector< std::vector< SingleContact > > &contacts, const std::pair< int, int > &contactIndex, const std::pair< int, int > &couplingContactIndex)
 computes the coupling factor for the influence matrix between two contact points (four contours) More...
 
virtual void computeMaterialConstant ()
 
- Protected Member Functions inherited from MBSim::Element
void updatePlotFeatures ()
 
- Protected Member Functions inherited from fmatvec::Atom
 Atom (const Atom &src)
 

Protected Attributes

std::vector< std::pair< int,
int > > 
possibleContactPoints
 saves the indices of all active contacts in pairs More...
 
LinearComplementarityProblem LCP
 variable for the LCP
 
fmatvec::SymMat C
 Influence matrix between contact points.
 
fmatvec::Vec rigidBodyGap
 
std::map< std::pair< Contour
*, Contour * >
, InfluenceFunction * > 
influenceFunctions
 saves the influence functions for a pair of contours. The key is the pair of contour names
 
fmatvec::Vec solution0
 Solution of the last time, where contact has to be solved (can be used as starting guess for the next algorithm)
 
double dampingCoefficient
 coefficient for possible contact damping
 
double gLim
 relative contact point distance limit under which damping is active
 
double matConst
 parameter for guessing starting values of contact force (average eigenvalue of influence-matrix)
 
bool matConstSetted
 parameter to save if matConst has been computed already
 
int DEBUGLEVEL
 print INFO output? More...
 
std::vector< xmlInforeferenceXML
 
- Protected Attributes inherited from MBSim::GeneralizedForceLaw
Function< double(double, double)> * forceFunc
 force function for a regularized contact law
 
- 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.
 

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)
 

Detailed Description

A force law that computes the normal force of many contact kinematics based on the Maxwell-Force-Law.

Author
Kilian Grundl
Date
30-07-2012 start of development

Member Function Documentation

void MBSim::MaxwellUnilateralConstraint::addContourCoupling ( Contour contour1,
Contour contour2,
InfluenceFunction *  fct 
)

add a function that represents the coupling between two contours

Parameters
nameof first contour
nameof second contour
Functionto describe coupling between contours

Remark: The parameters (LagrangeParameterPositions) of the function have to be in the same order as it was given the add(...)-method

double MBSim::MaxwellUnilateralConstraint::computeInfluenceCoefficient ( std::vector< std::vector< SingleContact > > &  contacts,
const std::pair< int, int > &  contactIndex 
)
protectedvirtual

computes the coupling factor for the influence matrix on one contact point (two contours)

Parameters
contoursvector of contours that are part of the contact
cpDatavector of ContourPointDatas
contactIndexindex pair of contact point
double MBSim::MaxwellUnilateralConstraint::computeInfluenceCoefficient ( std::vector< std::vector< SingleContact > > &  contacts,
const std::pair< int, int > &  contactIndex,
const std::pair< int, int > &  couplingContactIndex 
)
protectedvirtual

computes the coupling factor for the influence matrix between two contact points (four contours)

Parameters
contoursvector of contours that are part of the contact
cpDatavector of ContourPointDatas
contactIndexindex pair of contact point
coupledContactIndexindex pair of coupling contact point
void MBSim::MaxwellUnilateralConstraint::computeSmoothForces ( std::vector< std::vector< SingleContact > > &  contact)
virtual

computes the normal forces for smooth constitutive law on every contact point

Parameters
contactsvector of contacts that are part of the contact law

Reimplemented from MBSim::GeneralizedForceLaw.

void MBSim::MaxwellUnilateralConstraint::initializeContourCouplings ( Contact parent)
virtual

initialize all saved contour couplings in the map

Todo:
: pointer to parent class is probably not optimal (friend class maybe?)
void MBSim::MaxwellUnilateralConstraint::initializeUsingXML ( xercesc::DOMElement *  element)
virtual

initialize the force law using XML

Parameters
XMLelement

Reimplemented from MBSim::GeneralizedForceLaw.

virtual bool MBSim::MaxwellUnilateralConstraint::isActive ( double  g,
double  gTol 
)
inlinevirtual

decides, if force law is active

Parameters
gapdistance
tolerance
Returns
flag, if force law is active

Reimplemented from MBSim::GeneralizedForceLaw.

virtual bool MBSim::MaxwellUnilateralConstraint::isSetValued ( ) const
inlinevirtual
Returns
flag if the force law is setvalued

Implements MBSim::GeneralizedForceLaw.

void MBSim::MaxwellUnilateralConstraint::updateInfluenceMatrix ( std::vector< std::vector< SingleContact > > &  contacts)
protectedvirtual

updates the influence matrix C

Parameters
contoursvector of contours that are part of the contact
cpDatavector of ContourPointDatas

Member Data Documentation

int MBSim::MaxwellUnilateralConstraint::DEBUGLEVEL
protected

print INFO output?

0 = no DEBUGOutput 1 = most important information 2 = ... 5 = Matrices and Vectors

Todo:
wouldn't a logger for MBSim be nice
std::vector<std::pair<int, int> > MBSim::MaxwellUnilateralConstraint::possibleContactPoints
protected

saves the indices of all active contacts in pairs

pair.first: number of contact kinematics pair.second: number of subcontact point of contact kinematics


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

Impressum / Disclaimer / Datenschutz Generated by doxygen 1.8.5 Valid HTML