119 std::ostream&
Restart(std::ostream& out)
const;
140 "Author: Stefania Gualdi <gualdi@aero.polimi.it> \n"
141 " Pierangelo Masarati <masarati@aero.polimi.it> \n"
142 "Organization: Dipartimento di Ingegneria Aerospaziale \n"
143 " Politecnico di Milano \n"
144 " http://www.aero.polimi.it \n"
146 " All rights reserved \n"
148 "Connects 2 structural nodes: \n"
153 " - The Axle and the Wheel structural nodes must be connected \n"
154 " by a joint that allows relative rotations only about \n"
155 " one axis (the axle) \n"
156 " - The center of the wheel is assumed coincident with \n"
157 " the position of the wheel structural node \n"
158 " - The Ground structural node supports a plane defined \n"
159 " a point and a direction orthogonal to the plane (future \n"
160 " versions might use an arbitrary, deformable surface) \n"
161 " - The forces are applied at the \"contact point\", that \n"
162 " is defined according to geometrical properties \n"
163 " of the system and according to the relative position \n"
164 " and orientation of the Wheel and Ground structural nodes \n"
167 " <wheel structural node label> , \n"
168 " <wheel axle direction> , \n"
169 " <ground structural node label> , \n"
170 " <reference point position of the ground plane> , \n"
171 " <direction orthogonal to the ground plane> , \n"
172 " <wheel radius> , \n"
173 " <torus radius> , \n"
174 " <volume coefficient (black magic?)> , \n"
175 " <tire pressure> , \n"
176 " <tire polytropic exponent> , \n"
177 " <reference velocity for tire hysteresis> \n"
179 " <longitudinal friction coefficient drive> \n"
180 " <lateral friction coefficient drive for s.r.=0> \n"
181 " <lateral friction coefficient drive for s.r.=1> \n"
182 " [ , threshold , <slip ratio velocity threshold> , \n"
183 " <slip angle velocity threshold> ] ] \n"
186 " 1) element label \n"
187 " 2-4) tire force in global reference frame \n"
188 " 5-7) tire couple in global reference frame \n"
189 " 8) effective radius \n"
190 " 9) tire radial deformation \n"
191 " 10) tire radial deformation velocity \n"
194 " 13) longitudinal friction coefficient \n"
195 " 14) lateral friction coefficient \n"
196 " 15) axis relative tangential velocity \n"
197 " 16) point of contact relative tangential velocity \n"
225 if (d <= std::numeric_limits<doublereal>::epsilon()) {
226 silent_cerr(
"Wheel2(" << uLabel <<
"): "
270 silent_cerr(
"Wheel2(" << uLabel <<
"): "
278 silent_cerr(
"Wheel2(" << uLabel <<
"): "
289 out <<
"wheel2: " << uLabel
293 <<
" " << GroundDirection
396 for (
int iCnt = 1; iCnt <= 6; iCnt++) {
397 WorkVec.
PutRowIndex(iCnt, iGroundFirstMomIndex + iCnt);
398 WorkVec.
PutRowIndex(6 + iCnt, iWheelFirstMomIndex + iCnt);
405 dVa = (va - n*(n*va)).Norm();
438 if (d < std::numeric_limits<doublereal>::epsilon()) {
439 silent_cerr(
"Wheel2(" <<
GetLabel() <<
"): "
440 "wheel axle is (neraly) orthogonal "
441 "to the ground" << std::endl);
479 dMuX = dMuX0*sgn*(1. - std::abs(
dAlpha)/M_PI_2);
489 dMuY = dMuY0 + (dMuY1 - dMuY0)*
dSr;
524 connectedNodes.resize(2);
526 connectedNodes[0] =
pWheel;
541 return out <<
"# not implemented yet" << std::endl;
577 if (!
SetUDE(
"wheel2", rf)) {
585 #ifndef STATIC_MODULES
590 silent_cerr(
"Wheel2: "
591 "module_init(" << module_name <<
") "
592 "failed" << std::endl);
597 #endif // ! STATIC_MODULES
flag fReadOutput(MBDynParser &HP, const T &t) const
GradientExpression< UnaryExpr< FuncTanh, Expr > > tanh(const GradientExpression< Expr > &u)
const Vec3 Zero3(0., 0., 0.)
Vec3 Cross(const Vec3 &v) const
void GetConnectedNodes(std::vector< const Node * > &connectedNodes) const
virtual bool bToBeOutput(void) const
const DriveCaller * pMuX0
GradientExpression< BinaryExpr< FuncPow, LhsExpr, RhsExpr > > pow(const GradientExpression< LhsExpr > &u, const GradientExpression< RhsExpr > &v)
const DriveCaller * pMuY1
unsigned int iGetNumPrivData(void) const
#define MBDYN_EXCEPT_ARGS
virtual void ResizeReset(integer)
virtual const Mat3x3 & GetRCurr(void) const
doublereal Dot(const Vec3 &v) const
const StructNode * pGround
VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
virtual void Sub(integer iRow, const Vec3 &v)
std::vector< Hint * > Hints
const StructNode * pWheel
VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
const DriveCaller * pMuY0
virtual unsigned int iGetInitialNumDof(void) const
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph)
Vec3 GetPosRel(const ReferenceFrame &rf)
virtual bool IsKeyWord(const char *sKeyWord)
std::ostream & Loadable(void) const
doublereal copysign(doublereal x, doublereal y)
doublereal dAlphaThreshold
std::ostream & Restart(std::ostream &out) const
virtual integer iGetFirstMomentumIndex(void) const =0
virtual const Vec3 & GetWCurr(void) const
Wheel2(unsigned uLabel, const DofOwner *pDO, DataManager *pDM, MBDynParser &HP)
GradientExpression< UnaryExpr< FuncSqrt, Expr > > sqrt(const GradientExpression< Expr > &u)
VectorExpression< VectorCrossExpr< VectorLhsExpr, VectorRhsExpr >, 3 > Cross(const VectorExpression< VectorLhsExpr, 3 > &u, const VectorExpression< VectorRhsExpr, 3 > &v)
virtual const Vec3 & GetXCurr(void) const
virtual void Add(integer iRow, const Vec3 &v)
int iGetNumConnectedNodes(void) const
virtual doublereal dGet(const doublereal &dVar) const =0
Vec3 GetVecRel(const ReferenceFrame &rf)
VectorExpression< VectorExpr, N_rows >::ScalarType Norm(const VectorExpression< VectorExpr, N_rows > &u)
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
std::ostream & GetLogFile(void) const
bool SetUDE(const std::string &s, UserDefinedElemRead *rude)
int module_init(const char *module_name, void *pdm, void *php)
This function registers our user defined element for the math parser.
virtual void Output(OutputHandler &OH) const
virtual const Vec3 & GetVCurr(void) const
DriveCaller * GetDriveCaller(bool bDeferred=false)
SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
doublereal dInternalRadius
virtual void SetOutputFlag(flag f=flag(1))
GradientExpression< BinaryExpr< FuncAtan2, LhsExpr, RhsExpr > > atan2(const GradientExpression< LhsExpr > &u, const GradientExpression< RhsExpr > &v)
virtual HighParser::ErrOut GetLineData(void) const
unsigned int GetLabel(void) const
Node * ReadNode(MBDynParser &HP, Node::Type type) const
virtual void Resize(integer iNewSize)=0
SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
virtual doublereal GetReal(const doublereal &dDefval=0.0)