Rigid body kinematics incomplete for structural displacement nodes
It seems that the rigid body kinematics for displacement only nodes is not implemented properly because Mass::AssVecRBK_int
and Body::AssVecRBK_int
are not consistent regarding the contribution to the force equilibrium. See body.cc:184.
void
Mass::AssVecRBK_int(SubVectorHandler& WorkVec)
{
const RigidBodyKinematics *pRBK = pNode->pGetRBK();
Vec3 s0;
integer iIdx = 0;
if (dynamic_cast<DynamicMass *>(this)) {
iIdx = 3;
}
s0 = pNode->GetXCurr()*dMass;
// force
Vec3 f;
f = pRBK->GetXPP()*dMass;
WorkVec.Sub(iIdx + 1, f);
}
void
Body::AssVecRBK_int(SubVectorHandler& WorkVec)
{
const RigidBodyKinematics *pRBK = pNode->pGetRBK();
Vec3 s0;
integer iIdx = 0;
if (dynamic_cast<DynamicBody *>(this)) {
iIdx = 6;
}
s0 = pNode->GetXCurr()*dMass + STmp;
// force
Vec3 f;
f = pRBK->GetXPP()*dMass;
f += pRBK->GetWP().Cross(s0);
f += pRBK->GetW().Cross(pRBK->GetW().Cross(s0));
WorkVec.Sub(iIdx + 1, f);
...
}