|  | 
|  | Wheel2 (unsigned uLabel, const DofOwner *pDO, DataManager *pDM, MBDynParser &HP) | 
|  | 
| virtual | ~Wheel2 (void) | 
|  | 
| virtual void | Output (OutputHandler &OH) const | 
|  | 
| virtual void | WorkSpaceDim (integer *piNumRows, integer *piNumCols) const | 
|  | 
| VariableSubMatrixHandler & | AssJac (VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr) | 
|  | 
| SubVectorHandler & | AssRes (SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr) | 
|  | 
| unsigned int | iGetNumPrivData (void) const | 
|  | 
| int | iGetNumConnectedNodes (void) const | 
|  | 
| void | GetConnectedNodes (std::vector< const Node * > &connectedNodes) const | 
|  | 
| void | SetValue (DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph) | 
|  | 
| std::ostream & | Restart (std::ostream &out) const | 
|  | 
| virtual unsigned int | iGetInitialNumDof (void) const | 
|  | 
| virtual void | InitialWorkSpaceDim (integer *piNumRows, integer *piNumCols) const | 
|  | 
| VariableSubMatrixHandler & | InitialAssJac (VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr) | 
|  | 
| SubVectorHandler & | InitialAssRes (SubVectorHandler &WorkVec, const VectorHandler &XCurr) | 
|  | 
|  | Elem (unsigned int uL, flag fOut) | 
|  | 
| virtual | ~Elem (void) | 
|  | 
| virtual unsigned int | iGetNumDof (void) const | 
|  | 
| virtual std::ostream & | DescribeDof (std::ostream &out, const char *prefix="", bool bInitial=false) const | 
|  | 
| virtual void | DescribeDof (std::vector< std::string > &desc, bool bInitial=false, int i=-1) const | 
|  | 
| virtual std::ostream & | DescribeEq (std::ostream &out, const char *prefix="", bool bInitial=false) const | 
|  | 
| virtual void | DescribeEq (std::vector< std::string > &desc, bool bInitial=false, int i=-1) const | 
|  | 
| virtual DofOrder::Order | GetDofType (unsigned int) const | 
|  | 
| virtual void | AssMats (VariableSubMatrixHandler &WorkMatA, VariableSubMatrixHandler &WorkMatB, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr) | 
|  | 
| virtual bool | bInverseDynamics (void) const | 
|  | 
| void | SetInverseDynamicsFlags (unsigned uIDF) | 
|  | 
| unsigned | GetInverseDynamicsFlags (void) const | 
|  | 
| bool | bIsErgonomy (void) const | 
|  | 
| bool | bIsRightHandSide (void) const | 
|  | 
| virtual VariableSubMatrixHandler & | AssJac (VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr) | 
|  | 
| virtual SubVectorHandler & | AssRes (SubVectorHandler &WorkVec, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr, const VectorHandler &XPrimePrimeCurr, InverseDynamics::Order iOrder=InverseDynamics::INVERSE_DYNAMICS) | 
|  | 
| virtual int | GetNumConnectedNodes (void) const | 
|  | 
|  | WithLabel (unsigned int uL=0, const std::string &sN="") | 
|  | 
| virtual | ~WithLabel (void) | 
|  | 
| void | PutLabel (unsigned int uL) | 
|  | 
| void | PutName (const std::string &sN) | 
|  | 
| unsigned int | GetLabel (void) const | 
|  | 
| const std::string & | GetName (void) const | 
|  | 
|  | SimulationEntity (void) | 
|  | 
| virtual | ~SimulationEntity (void) | 
|  | 
| virtual bool | bIsValidIndex (unsigned int i) const | 
|  | 
| virtual DofOrder::Order | GetEqType (unsigned int i) const | 
|  | 
| virtual Hint * | ParseHint (DataManager *pDM, const char *s) const | 
|  | 
| virtual void | BeforePredict (VectorHandler &, VectorHandler &, VectorHandler &, VectorHandler &) const | 
|  | 
| virtual void | AfterPredict (VectorHandler &X, VectorHandler &XP) | 
|  | 
| virtual void | Update (const VectorHandler &XCurr, const VectorHandler &XPrimeCurr) | 
|  | 
| virtual void | DerivativesUpdate (const VectorHandler &XCurr, const VectorHandler &XPrimeCurr) | 
|  | 
| virtual void | Update (const VectorHandler &XCurr, InverseDynamics::Order iOrder) | 
|  | 
| virtual void | AfterConvergence (const VectorHandler &X, const VectorHandler &XP) | 
|  | 
| virtual void | AfterConvergence (const VectorHandler &X, const VectorHandler &XP, const VectorHandler &XPP) | 
|  | 
| virtual unsigned int | iGetPrivDataIdx (const char *s) const | 
|  | 
| virtual doublereal | dGetPrivData (unsigned int i) const | 
|  | 
| virtual std::ostream & | OutputAppend (std::ostream &out) const | 
|  | 
| virtual void | ReadInitialState (MBDynParser &HP) | 
|  | 
|  | ToBeOutput (flag fOut=fDefaultOut) | 
|  | 
| virtual | ~ToBeOutput (void) | 
|  | 
| virtual void | OutputPrepare (OutputHandler &OH) | 
|  | 
| virtual void | Output (OutputHandler &OH, const VectorHandler &X, const VectorHandler &XP) const | 
|  | 
| virtual flag | fToBeOutput (void) const | 
|  | 
| virtual bool | bToBeOutput (void) const | 
|  | 
| virtual void | SetOutputFlag (flag f=flag(1)) | 
|  | 
|  | UserDefinedElem (unsigned uLabel, const DofOwner *pDO) | 
|  | 
| virtual | ~UserDefinedElem (void) | 
|  | 
| bool | NeedsAirProperties (void) const | 
|  | 
| void | NeedsAirProperties (bool yesno) | 
|  | 
| virtual Elem::Type | GetElemType (void) const | 
|  | 
| virtual AerodynamicElem::Type | GetAerodynamicElemType (void) const | 
|  | 
|  | InitialAssemblyElem (unsigned int uL, flag fOut) | 
|  | 
| virtual | ~InitialAssemblyElem (void) | 
|  | 
|  | SubjectToInitialAssembly (void) | 
|  | 
| virtual | ~SubjectToInitialAssembly (void) | 
|  | 
|  | AerodynamicElem (unsigned int uL, const DofOwner *pDO, flag fOut) | 
|  | 
| virtual | ~AerodynamicElem (void) | 
|  | 
| virtual const InducedVelocity * | pGetInducedVelocity (void) const | 
|  | 
|  | ElemWithDofs (unsigned int uL, const DofOwner *pDO, flag fOut) | 
|  | 
| virtual | ~ElemWithDofs (void) | 
|  | 
|  | DofOwnerOwner (const DofOwner *pDO) | 
|  | 
| virtual | ~DofOwnerOwner () | 
|  | 
| virtual const DofOwner * | pGetDofOwner (void) const | 
|  | 
| virtual integer | iGetFirstIndex (void) const | 
|  | 
| virtual void | SetInitialValue (VectorHandler &X) | 
|  | 
|  | AirPropOwner (void) | 
|  | 
| virtual | ~AirPropOwner (void) | 
|  | 
| virtual void | PutAirProperties (const AirProperties *pAP) | 
|  | 
| virtual flag | fGetAirVelocity (Vec3 &Velocity, const Vec3 &X) const | 
|  | 
| virtual doublereal | dGetAirDensity (const Vec3 &X) const | 
|  | 
| virtual doublereal | dGetAirPressure (const Vec3 &X) const | 
|  | 
| virtual doublereal | dGetAirTemperature (const Vec3 &X) const | 
|  | 
| virtual doublereal | dGetSoundSpeed (const Vec3 &X) const | 
|  | 
| virtual bool | GetAirProps (const Vec3 &X, doublereal &rho, doublereal &c, doublereal &p, doublereal &T) const | 
|  | 
|  | ElemGravityOwner (unsigned int uL, flag fOut) | 
|  | 
| virtual | ~ElemGravityOwner (void) | 
|  | 
| virtual doublereal | dGetM (void) const | 
|  | 
| Vec3 | GetS (void) const | 
|  | 
| Mat3x3 | GetJ (void) const | 
|  | 
| Vec3 | GetB (void) const | 
|  | 
| Vec3 | GetG (void) const | 
|  | 
|  | GravityOwner (void) | 
|  | 
| virtual | ~GravityOwner (void) | 
|  | 
| void | PutGravity (const Gravity *pG) | 
|  | 
| virtual bool | bGetGravity (const Vec3 &X, Vec3 &Acc) const | 
|  | 
Definition at line 44 of file module-wheel2.cc.
 
Definition at line 130 of file module-wheel2.cc.
References bSlip, dAlphaThreshold, dGamma, dHystVRef, dInternalRadius, Vec3::Dot(), dP0, dRadius, dRefArea, dRNP, dV0, dVolCoef, dvThreshold, DataManager::fReadOutput(), MBDynParser::GetDriveCaller(), WithLabel::GetLabel(), IncludeParser::GetLineData(), DataManager::GetLogFile(), MBDynParser::GetPosRel(), HighParser::GetReal(), MBDynParser::GetVecRel(), GroundDirection, GroundPosition, HighParser::IsArg(), HighParser::IsKeyWord(), Elem::LOADABLE, M_PI, MBDYN_EXCEPT_ARGS, pGround, pMuX0, pMuY0, pMuY1, pWheel, DataManager::ReadNode(), ToBeOutput::SetOutputFlag(), grad::sqrt(), Node::STRUCTURAL, and WheelAxle.
  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       
 
flag fReadOutput(MBDynParser &HP, const T &t) const 
const DriveCaller * pMuX0
const DriveCaller * pMuY1
#define MBDYN_EXCEPT_ARGS
doublereal Dot(const Vec3 &v) const 
const StructNode * pGround
const StructNode * pWheel
const DriveCaller * pMuY0
Vec3 GetPosRel(const ReferenceFrame &rf)
virtual bool IsKeyWord(const char *sKeyWord)
doublereal dAlphaThreshold
GradientExpression< UnaryExpr< FuncSqrt, Expr > > sqrt(const GradientExpression< Expr > &u)
Vec3 GetVecRel(const ReferenceFrame &rf)
std::ostream & GetLogFile(void) const 
UserDefinedElem(unsigned uLabel, const DofOwner *pDO)
DriveCaller * GetDriveCaller(bool bDeferred=false)
doublereal dInternalRadius
virtual void SetOutputFlag(flag f=flag(1))
Elem(unsigned int uL, flag fOut)
virtual HighParser::ErrOut GetLineData(void) const 
unsigned int GetLabel(void) const 
Node * ReadNode(MBDynParser &HP, Node::Type type) const 
virtual doublereal GetReal(const doublereal &dDefval=0.0)
 
 
 
Implements Elem.
Definition at line 345 of file module-wheel2.cc.
References VectorHandler::Add(), grad::atan2(), bSlip, copysign(), Vec3::Cross(), grad::Cross(), dAlpha, dAlphaThreshold, dDeltaL, dGamma, DriveCaller::dGet(), dHystVRef, dInstRadius, dInternalRadius, dMuX, dMuY, Vec3::Dot(), dP0, dRadius, dRefArea, dRNP, dSr, dV0, dVa, dVc, dVn, dvThreshold, F, WithLabel::GetLabel(), StructNode::GetRCurr(), StructDispNode::GetVCurr(), StructNode::GetWCurr(), StructDispNode::GetXCurr(), GroundDirection, GroundPosition, StructDispNode::iGetFirstMomentumIndex(), M, MBDYN_EXCEPT_ARGS, grad::Norm(), pGround, pMuX0, pMuY0, pMuY1, grad::pow(), SubVectorHandler::PutRowIndex(), pWheel, VectorHandler::Resize(), VectorHandler::ResizeReset(), grad::sqrt(), VectorHandler::Sub(), grad::tanh(), WheelAxle, WorkSpaceDim(), and Zero3.
  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;
 
GradientExpression< UnaryExpr< FuncTanh, Expr > > tanh(const GradientExpression< Expr > &u)
const Vec3 Zero3(0., 0., 0.)
Vec3 Cross(const Vec3 &v) const 
const DriveCaller * pMuX0
GradientExpression< BinaryExpr< FuncPow, LhsExpr, RhsExpr > > pow(const GradientExpression< LhsExpr > &u, const GradientExpression< RhsExpr > &v)
const DriveCaller * pMuY1
#define MBDYN_EXCEPT_ARGS
virtual void ResizeReset(integer)
virtual const Mat3x3 & GetRCurr(void) const 
doublereal Dot(const Vec3 &v) const 
const StructNode * pGround
virtual void Sub(integer iRow, const Vec3 &v)
const StructNode * pWheel
const DriveCaller * pMuY0
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const 
doublereal copysign(doublereal x, doublereal y)
doublereal dAlphaThreshold
virtual integer iGetFirstMomentumIndex(void) const =0
virtual const Vec3 & GetWCurr(void) const 
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)
virtual doublereal dGet(const doublereal &dVar) const =0
VectorExpression< VectorExpr, N_rows >::ScalarType Norm(const VectorExpression< VectorExpr, N_rows > &u)
virtual const Vec3 & GetVCurr(void) const 
doublereal dInternalRadius
GradientExpression< BinaryExpr< FuncAtan2, LhsExpr, RhsExpr > > atan2(const GradientExpression< LhsExpr > &u, const GradientExpression< RhsExpr > &v)
unsigned int GetLabel(void) const 
virtual void Resize(integer iNewSize)=0