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 StructDispNode::Type GetStructDispNodeType(void) const 
const Vec3 Zero3(0., 0., 0.)
#define MBDYN_EXCEPT_ARGS
#define DEBUGCOUTFNAME(fname)
virtual integer GetInt(integer iDefval=0)
virtual StructDispNode::Type GetStructDispNodeType(void) const 
bool bIsStaticModel(void) const 
void SetInverseDynamicsFlags(unsigned uIDF)
virtual bool GetYesNoOrBool(bool bDefval=false)
const Mat3x3 Zero3x3(0., 0., 0., 0., 0., 0., 0., 0., 0.)
Vec3 GetPosRel(const ReferenceFrame &rf)
virtual bool IsKeyWord(const char *sKeyWord)
Mat3x3 GetMatRel(const ReferenceFrame &rf)
const RigidBodyKinematics * pGetRBK(void) const 
#define SAFENEWWITHCONSTRUCTOR(pnt, item, constructor)
const MatCrossCross_Manip MatCrossCross
std::ostream & GetLogFile(void) const 
Elem * ReadVariableBody(DataManager *pDM, MBDynParser &HP, unsigned int uLabel, const StructNode *pStrNode)
Mat3x3 MulMT(const Mat3x3 &m) const 
virtual HighParser::ErrOut GetLineData(void) const 
unsigned int GetLabel(void) const 
Node * ReadNode(MBDynParser &HP, Node::Type type) const 
#define DEBUGLCOUT(level, msg)
bool bIsInverseDynamics(void) const 
virtual doublereal GetReal(const doublereal &dDefval=0.0)