Skip to content

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);

        ...
}
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information