89 out <<
" body: " <<
GetLabel() <<
", "
167 Vec3 GravityAcceleration;
169 return -Xn.
Dot(GravityAcceleration)*
dMass;
190 if (dynamic_cast<DynamicMass *>(
this)) {
200 WorkVec.
Sub(iIdx + 1, f);
212 if (dynamic_cast<DynamicMass *>(
this)) {
220 WMA.
Add(iIdx + 1, 1, MTmp*(
dMass*dCoef));
233 Mass(uL, pNode, dMass, fOut)
257 Vec3 GravityAcceleration;
259 GravityAcceleration);
278 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
285 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
286 WM.
PutRowIndex(3 + iCnt, iFirstMomentumIndex + iCnt);
290 AssMats(WM, WM, dCoef, g, GravityAcceleration);
308 Vec3 GravityAcceleration;
310 GravityAcceleration);
330 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
340 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
341 WMA.
PutRowIndex(3 + iCnt, iFirstMomentumIndex + iCnt);
345 AssMats(WMA, WMB, 1., g, GravityAcceleration);
354 const Vec3& GravityAcceleration)
384 Vec3 GravityAcceleration;
386 GravityAcceleration);
398 for (
integer iCnt = 1; iCnt <= iNumRows; iCnt++) {
399 WorkVec.
PutRowIndex(iCnt, iFirstPositionIndex + iCnt);
408 WorkVec.
Add(3 + 1, GravityAcceleration*dMass);
482 Mass(uL, pNode, dMass, fOut)
519 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
558 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
624 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
625 WorkVec.
PutRowIndex(iCnt, iFirstMomentumIndex + iCnt);
660 Vec3 GravityAcceleration;
662 GravityAcceleration);
667 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
668 WorkVec.
PutRowIndex(iCnt, iFirstPositionIndex + iCnt);
673 Acceleration -= GravityAcceleration;
776 out <<
" body: " <<
GetLabel() <<
", "
778 <<
"reference, node, ",
Xgc.
Write(out,
", ") <<
", "
867 return ((V*V)*dMass + W*(Jgc*W))/2.;
873 Vec3 GravityAcceleration;
875 return -X.
Dot(GravityAcceleration)*
dMass;
895 if (dynamic_cast<DynamicBody *>(
this)) {
907 WorkVec.
Sub(iIdx + 1, f);
924 WorkVec.
Sub(iIdx + 3 + 1, m);
940 if (dynamic_cast<DynamicBody *>(
this)) {
948 WMA.
Add(iIdx + 1, 1, MTmp*(
dMass*dCoef));
960 WMA.
Add(iIdx + 3 + 1, 1, MTmp);
975 MTmp += VTmp.
Cross(MTmp2);
984 WMA.
Add(iIdx + 3 + 1, 3 + 1, MTmp);
991 WMB.
Add(iIdx + 3 + 1, 1, MTmp);
994 WMB.
Add(iIdx + 3 + 1, 3 + 1, MTmp2);
1009 Body(uL, pNode, dMass, Xgc, J, fOut)
1046 Vec3 GravityAcceleration;
1048 GravityAcceleration);
1067 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
1072 if (iNumRows == 12) {
1074 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
1075 WM.
PutRowIndex(6 + iCnt, iFirstMomentumIndex + iCnt);
1079 AssMats(WM, WM, dCoef, g, GravityAcceleration);
1097 Vec3 GravityAcceleration;
1099 GravityAcceleration);
1119 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
1120 WMA.
PutRowIndex(iCnt, iFirstPositionIndex + iCnt);
1121 WMA.
PutColIndex(iCnt, iFirstPositionIndex + iCnt);
1123 WMB.
PutRowIndex(iCnt, iFirstPositionIndex + iCnt);
1124 WMB.
PutColIndex(iCnt, iFirstPositionIndex + iCnt);
1129 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
1130 WMA.
PutRowIndex(6 + iCnt, iFirstMomentumIndex + iCnt);
1134 AssMats(WMA, WMB, 1., g, GravityAcceleration);
1143 const Vec3& GravityAcceleration)
1167 WMB.
Sub(1, 3 + 1, SWedge);
1175 WMB.
Add(3 + 1, 1, SWedge);
1201 Vec3 GravityAcceleration;
1203 GravityAcceleration);
1215 for (
integer iCnt = 1; iCnt <= iNumRows; iCnt++) {
1216 WorkVec.
PutRowIndex(iCnt, iFirstPositionIndex + iCnt);
1228 WorkVec.
Sub(1, V*
dMass + W.Cross(STmp));
1231 WorkVec.
Sub(3 + 1,
JTmp*W + STmp.Cross(V));
1234 WorkVec.
Add(6 + 1, GravityAcceleration*
dMass);
1237 WorkVec.
Add(9 + 1, STmp.Cross(GravityAcceleration));
1278 integer iFirstVelocityIndex = iFirstPositionIndex+6;
1279 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
1293 Mat3x3 WWedgeWWedgeSWedge(W.Cross(WWedgeSWedge));
1299 Mat3x3 MDeltag(W.Cross(
JTmp*WWedge - JWWedge));
1303 WM.
Add(1, 1, WWedgeWWedgeSWedge);
1304 WM.
Add(1, 4, FDeltaW);
1307 WM.
Add(4, 1, MDeltag);
1308 WM.
Add(4, 4, MDeltaW);
1312 WM.
Add(7, 4, W.Cross(WWedgeWWedgeSWedge));
1315 WM.
Add(4, 1, W.Cross(MDeltag));
1335 for (
integer iCnt = 1; iCnt <= 12; iCnt++) {
1336 WorkVec.
PutRowIndex(iCnt, iFirstPositionIndex+iCnt);
1347 Vec3 FC(-W.Cross(W.Cross(STmp)));
1357 WorkVec.
Add(7, W.Cross(FC));
1360 WorkVec.
Add(10, W.Cross(MC));
1364 Vec3 GravityAcceleration;
1366 WorkVec.
Add(1, GravityAcceleration*
dMass);
1367 WorkVec.
Add(3 + 1, STmp.Cross(GravityAcceleration));
1368 WorkVec.
Add(9 + 1, (W.Cross(STmp)).
Cross(GravityAcceleration));
1389 X.
Add(iFirstIndex + 1, V*
dMass + W.Cross(STmp));
1390 X.
Add(iFirstIndex + 4, STmp.Cross(V) +
JTmp*W);
1418 - X.Cross(STmp.Cross(W));
1464 Vec3 GravityAcceleration;
1466 GravityAcceleration);
1482 for (
integer iCnt = 1; iCnt <= 12; iCnt++) {
1486 for (
integer iCnt = 1; iCnt <= 12; ++iCnt) {
1490 AssMats(WM, WM, dCoef, XCurr, XPrimeCurr, g, GravityAcceleration);
1508 Vec3 GravityAcceleration;
1510 GravityAcceleration);
1527 for (
integer iCnt = 1; iCnt <= 12; iCnt++) {
1535 AssMats(WMA, WMB, 1., XCurr, XPrimeCurr, g, GravityAcceleration);
1546 const Vec3& GravityAcceleration)
1570 WMA.
Add(6 + 1, 3 + 1, J12A);
1571 WMB.
Add(6 + 1, 6 + 1, J13B);
1572 WMA.
Add(6 + 1, 9 + 1, J14A);
1573 WMB.
Add(6 + 1, 9 + 1, J14B);
1574 WMA.
Add(9 + 1, 3 + 1, J22A);
1575 WMB.
Add(9 + 1, 6 + 1, J23B);
1576 WMA.
Add(9 + 1, 9 + 1, J24A);
1577 WMB.
Add(9 + 1, 9 + 1, J24B);
1600 Vec3 GravityAcceleration;
1602 GravityAcceleration);
1611 for (
integer iCnt = 1; iCnt <= iNumRows; iCnt++) {
1612 WorkVec.
PutRowIndex(iCnt, iFirstPositionIndex + iCnt);
1624 for (
integer i = 1; i <= 3; ++i) {
1625 XPP(i) = XPrimeCurr.
dGetCoef(iFirstIndexModal + i + 6);
1626 WP(i) = XPrimeCurr.
dGetCoef(iFirstIndexModal + i + 9);
1632 WorkVec.
Add(6 + 1, F);
1633 WorkVec.
Add(9 + 1, M);
1636 WorkVec.
Add(6 + 1, GravityAcceleration*
dMass);
1639 WorkVec.
Add(9 + 1, STmp.Cross(GravityAcceleration));
1666 Body(uL, pNode, dMass, Xgc, J, fOut)
1703 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
1742 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
1743 WMA.
PutRowIndex(iCnt, iFirstMomentumIndex + iCnt);
1744 WMA.
PutColIndex(iCnt, iFirstPositionIndex + iCnt);
1746 WMB.
PutRowIndex(iCnt, iFirstMomentumIndex + iCnt);
1747 WMB.
PutColIndex(iCnt, iFirstPositionIndex + iCnt);
1817 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
1818 WorkVec.
PutRowIndex(iCnt, iFirstMomentumIndex + iCnt);
1827 WorkVec.
Add(1, Acceleration*
dMass);
1828 WorkVec.
Add(3 + 1, STmp.Cross(Acceleration));
1859 Vec3 GravityAcceleration;
1861 GravityAcceleration);
1866 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
1867 WorkVec.
PutRowIndex(iCnt, iFirstPositionIndex + iCnt);
1879 Acceleration -= GravityAcceleration;
1882 WorkVec.
Sub(1, Acceleration*
dMass);
1941 const char* sKeyWords[] = {
1968 iNumMasses = HP.
GetInt();
1969 if (iNumMasses < 1) {
1970 silent_cerr(
"Body(" << uLabel <<
"): "
1971 "at least one mass is required in \"condense\" "
1976 iNumMasses <<
" masses will be condensed" << std::endl);
2010 bool bNegative(
false);
2012 if (HP.
IsKeyWord(
"allow" "negative" "mass")) {
2016 for (
int iCnt = 1; iCnt <= iNumMasses; iCnt++) {
2019 if (!bNegative && dMTmp < 0.) {
2020 silent_cerr(
"Body(" << uLabel <<
"): "
2021 "negative mass is not allowed at line "
2032 if (iNumMasses == 1) {
2036 STmp += XgcTmp*dMTmp;
2040 <<
") center of gravity = " << XgcTmp << std::endl);
2062 <<
") =" << std::endl << JTmp << std::endl);
2063 if (!JTmp.IsSymmetric()) {
2064 silent_cerr(
"Body(" << uLabel <<
"): "
2065 "warning, non-symmetric inertia tensor at line " << HP.
GetLineData() << std::endl);
2070 "supplied in inertial reference frame" << std::endl);
2075 JTmp = RTmp*JTmp.
MulMT(RTmp);
2078 "Inertia matrix of mass(" << iCnt <<
") "
2079 "in current frame =" << JTmp << std::endl);
2086 if (!bNegative && dm < 0.) {
2087 silent_cerr(
"Body(" << uLabel <<
"): "
2088 "negative mass is not allowed at line "
2093 if (iNumMasses > 1 && pStrNode) {
2094 if (dm < std::numeric_limits<doublereal>::epsilon()) {
2095 silent_cerr(
"Body(" << uLabel <<
"): "
2096 "mass value " << dm <<
" is too small at line "
2105 <<
"Center of mass: " << Xgc << std::endl
2106 <<
"Inertia matrix:" << std::endl << J << std::endl);
2110 const char *sElemName;
2111 const char *sNodeName;
2114 sNodeName =
"StructNode";
2117 sNodeName =
"StructDispNode";
2120 if (bStaticModel || bInverseDynamics) {
2124 silent_cerr(sElemName <<
"(" << uLabel <<
"): "
2125 "illegal structural node type "
2126 "for " << sNodeName <<
"(" << pStrDispNode->
GetLabel() <<
") "
2127 "in " << (bStaticModel ?
"static model" :
"inverse dynamics") <<
" analysis "
2135 silent_cerr(sElemName <<
"(" << uLabel <<
"): "
2136 "illegal structural node type "
2137 "for " << sNodeName <<
"(" << pStrDispNode->
GetLabel() <<
") "
2147 if (bStaticModel || bInverseDynamics) {
2154 StaticBody(uLabel, dynamic_cast<const StaticStructNode *>(pStaticDispNode),
2165 if (bInverseDynamics) {
2166 bool bIsRightHandSide(
true);
2167 bool bIsErgonomy(
true);
2169 if (HP.
IsKeyWord(
"inverse" "dynamics")) {
2170 bIsRightHandSide =
false;
2171 if (HP.
IsKeyWord(
"right" "hand" "side")) {
2175 bIsErgonomy =
false;
2183 if (bIsRightHandSide) {
2205 if (pModalNode && pRBK) {
2206 silent_cerr(
"Body(" << uLabel <<
") "
2207 "is connected to ModalNode(" << pModalNode->
GetLabel() <<
") "
2208 "which uses rigid body kinematics "
2215 ModalBody(uLabel, pModalNode, dm, Xgc, J, fOut));
2219 DynamicBody(uLabel, pDynamicStructNode, dm, Xgc, J, fOut));
2229 <<
"body: " << uLabel
2238 silent_cerr(
"semicolon expected "
flag fReadOutput(MBDynParser &HP, const T &t) const
Mat3x3 GetRotRel(const ReferenceFrame &rf)
virtual std::ostream & Restart(std::ostream &out) const
virtual StructDispNode::Type GetStructDispNodeType(void) const
void PutColIndex(integer iSubCol, integer iCol)
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
const Vec3 Zero3(0., 0., 0.)
Vec3 Cross(const Vec3 &v) const
void AssVecRBK_int(SubVectorHandler &WorkVec)
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
std::ostream & Write(std::ostream &out, const char *sFill=" ") const
virtual const Mat3x3 & GetRRef(void) const
#define MBDYN_EXCEPT_ARGS
#define DEBUGCOUTFNAME(fname)
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
virtual void ResizeReset(integer)
virtual integer GetInt(integer iDefval=0)
const MatCross_Manip MatCross
FullSubMatrixHandler & SetFull(void)
virtual const Mat3x3 & GetRCurr(void) const
virtual Node::Type GetNodeType(void) const
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
void AssMats(FullSubMatrixHandler &WorkMatA, FullSubMatrixHandler &WorkMatB, doublereal dCoef, bool bGravity, const Vec3 &GravityAcceleration)
doublereal Dot(const Vec3 &v) const
void Add(integer iRow, integer iCol, const Vec3 &v)
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
std::ostream & Write(std::ostream &out, const FullMatrixHandler &m, const char *s, const char *s2)
virtual ~StaticMass(void)
Vec3 GetG_int(void) const
virtual void Sub(integer iRow, const Vec3 &v)
virtual unsigned int iGetPrivDataIdx(const char *s) const
const StructNode * pGetNode(void) const
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
DynamicBody(unsigned int uL, const DynamicStructNode *pNodeTmp, doublereal dMassTmp, const Vec3 &XgcTmp, const Mat3x3 &JTmp, flag fOut)
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual const Vec3 & GetXPP(void) const =0
doublereal dGetM(void) const
virtual ~DynamicMass(void)
virtual bool bGetGravity(const Vec3 &X, Vec3 &Acc) const
StaticMass(unsigned int uL, const StaticStructDispNode *pNode, doublereal dMass, flag fOut)
void AssVecRBK_int(SubVectorHandler &WorkVec)
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual const doublereal & dGetCoef(integer iRow) const =0
bool AssMats(FullSubMatrixHandler &WorkMatA, FullSubMatrixHandler &WorkMatB, doublereal dCoef)
virtual const Vec3 & GetWRef(void) const
Mat3x3 GetJ_int(void) const
virtual StructDispNode::Type GetStructDispNodeType(void) const
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
std::vector< Hint * > Hints
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
bool bIsStaticModel(void) const
void SetInverseDynamicsFlags(unsigned uIDF)
void IncCoef(integer iRow, integer iCol, const doublereal &dCoef)
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
virtual void AfterPredict(VectorHandler &X, VectorHandler &XP)
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
const Mat3x3DEye_Manip Mat3x3DEye
virtual bool GetYesNoOrBool(bool bDefval=false)
Vec3 GetB_int(void) const
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
Vec3 MulTV(const Vec3 &v) const
Elem * ReadBody(DataManager *pDM, MBDynParser &HP, unsigned int uLabel)
StaticBody(unsigned int uL, const StaticStructNode *pNode, doublereal dMass, const Vec3 &Xgc, const Mat3x3 &J, flag fOut)
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
const Mat3x3 Zero3x3(0., 0., 0., 0., 0., 0., 0., 0., 0.)
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
Mat3x3 MulTVCross(const Vec3 &v) const
Vec3 GetPosRel(const ReferenceFrame &rf)
bool AssMats(FullSubMatrixHandler &WorkMatA, FullSubMatrixHandler &WorkMatB, doublereal dCoef)
virtual std::ostream & Restart(std::ostream &out) const
virtual unsigned int iGetNumPrivData(void) const
virtual bool IsKeyWord(const char *sKeyWord)
ModalBody(unsigned int uL, const ModalNode *pNodeTmp, doublereal dMassTmp, const Vec3 &XgcTmp, const Mat3x3 &JTmp, flag fOut)
Mat3x3 GetMatRel(const ReferenceFrame &rf)
const StructDispNode * pNode
virtual ~DynamicBody(void)
virtual integer iGetFirstMomentumIndex(void) const =0
virtual integer iGetFirstPositionIndex(void) const
virtual const Vec3 & GetWCurr(void) const
doublereal dGetM(void) const
void AssMatsRBK_int(FullSubMatrixHandler &WMA, FullSubMatrixHandler &WMB, const doublereal &dCoef, const Vec3 &Sc)
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual const Vec3 & GetWPCurr(void) const
#define ASSERT(expression)
const RigidBodyKinematics * pGetRBK(void) const
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
DynamicMass(unsigned int uL, const DynamicStructDispNode *pNode, doublereal dMassTmp, flag fOut)
VectorExpression< VectorCrossExpr< VectorLhsExpr, VectorRhsExpr >, 3 > Cross(const VectorExpression< VectorLhsExpr, 3 > &u, const VectorExpression< VectorRhsExpr, 3 > &v)
#define SAFENEWWITHCONSTRUCTOR(pnt, item, constructor)
virtual const Vec3 & GetXCurr(void) const
virtual void Add(integer iRow, const Vec3 &v)
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
Vec3 GetB_int(void) const
virtual doublereal dGetPrivData(unsigned int i) const
virtual void ResizeReset(integer, integer)
virtual const Vec3 & GetWP(void) const =0
const StructDispNode * pGetNode(void) const
virtual bool bInverseDynamics(void) const
void AssMats(FullSubMatrixHandler &WorkMatA, FullSubMatrixHandler &WorkMatB, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr, bool bGravity, const Vec3 &GravityAcceleration)
const MatCrossCross_Manip MatCrossCross
virtual ~StaticBody(void)
virtual const Vec3 & GetW(void) const =0
virtual unsigned int iGetPrivDataIdx(const char *s) const
void PutRowIndex(integer iSubRow, integer iRow)
std::ostream & GetLogFile(void) const
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Mat3x3 GetJ_int(void) const
void AssMats(FullSubMatrixHandler &WorkMatA, FullSubMatrixHandler &WorkMatB, doublereal dCoef, bool bGravity, const Vec3 &GravityAcceleration)
Elem * ReadVariableBody(DataManager *pDM, MBDynParser &HP, unsigned int uLabel, const StructNode *pStrNode)
virtual unsigned int iGetNumPrivData(void) const
Vec3 GetS_int(void) const
virtual const Vec3 & GetVCurr(void) const
void Sub(integer iRow, integer iCol, const Vec3 &v)
virtual bool bInverseDynamics(void) const
void AssMatsRBK_int(FullSubMatrixHandler &WMA, FullSubMatrixHandler &WMB, const doublereal &dCoef)
Mass(unsigned int uL, const StructDispNode *pNode, doublereal dMassTmp, flag fOut)
static const doublereal a
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
Mat3x3 MulMT(const Mat3x3 &m) const
virtual const Vec3 & GetXPPCurr(void) const
virtual integer iGetFirstIndex(void) const
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual doublereal dGetPrivData(unsigned int i) const
virtual void AddInertia(const doublereal &dm) const
virtual HighParser::ErrOut GetLineData(void) const
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
unsigned int GetLabel(void) const
Node * ReadNode(MBDynParser &HP, Node::Type type) const
#define DEBUGLCOUT(level, msg)
virtual void Resize(integer iNewSize)=0
Vec3 GetS_int(void) const
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual void AddInertia(const doublereal &dm, const Vec3 &dS, const Mat3x3 &dJ) const
bool bIsInverseDynamics(void) const
Body(unsigned int uL, const StructNode *pNode, doublereal dMassTmp, const Vec3 &XgcTmp, const Mat3x3 &JTmp, flag fOut)
virtual doublereal GetReal(const doublereal &dDefval=0.0)