173 return pGetConstLaw()->Restart(out) <<
';' << std::endl;
185 Var_Phi = OH.CreateRotationVar(name,
"",
od,
"global");
187 Var_Omega = OH.CreateVar<
Vec3>(name +
"Omega",
"radian/s",
188 "local relative angular velocity (x, y, z)");
280 OH.
Joints() <<
" " << OmegaTmp;
349 for (
unsigned i = 0; i < ph->size(); i++) {
359 }
else if (dynamic_cast<Joint::ReactionsHint *>(pjh)) {
388 if (strncasecmp(s,
"hinge{" ,
STRLENOF(
"hinge{" )) == 0) {
391 if (strcmp(&s[1],
"}") != 0) {
434 const size_t l =
STRLENOF(
"constitutiveLaw.");
435 if (strncmp(s,
"constitutiveLaw.", l) == 0) {
503 return GetF()(i - 6);
577 DEBUGCOUT(
"Entering ElasticHingeJoint::AssJac()" << std::endl);
594 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
597 WM.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
598 WM.
PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
613 DEBUGCOUT(
"Entering ElasticHingeJoint::AssJac()" << std::endl);
631 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
634 WMA.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
635 WMA.
PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
688 DEBUGCOUT(
"Entering ElasticHingeJoint::AssRes()" << std::endl);
701 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
702 WorkVec.
PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
703 WorkVec.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
721 return AssJac(WorkMat, 1., XCurr, XCurr);
732 DEBUGCOUT(
"Entering ElasticHingeJoint::AssRes()" << std::endl);
751 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
752 WorkVec.
PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
753 WorkVec.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
802 DEBUGCOUT(
"Entering ElasticHingeJoint::InitialAssJac()" << std::endl);
817 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
820 WM.
PutRowIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
821 WM.
PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
845 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
846 WorkVec.
PutRowIndex(iCnt, iNode1FirstPosIndex + iCnt);
847 WorkVec.
PutRowIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
872 Mat3x3 hat_R(R1h*tilde_R);
1021 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
1024 WM.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
1025 WM.
PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
1057 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
1058 WMA.
PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
1059 WMA.
PutColIndex(iCnt, iNode1FirstPosIndex + iCnt);
1060 WMA.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
1061 WMA.
PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
1063 WMB.
PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
1064 WMB.
PutColIndex(iCnt, iNode1FirstPosIndex + iCnt);
1065 WMB.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
1066 WMB.
PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
1100 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
1101 WorkVec.
PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
1102 WorkVec.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
1133 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
1134 WorkVec.
PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
1135 WorkVec.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
1179 integer iNode1FirstVelIndex = iNode1FirstPosIndex + 6;
1181 integer iNode2FirstVelIndex = iNode2FirstPosIndex + 6;
1184 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
1187 WM.
PutColIndex(3 + iCnt, iNode1FirstVelIndex + iCnt);
1189 WM.
PutRowIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
1190 WM.
PutColIndex(6 + iCnt, iNode2FirstPosIndex + iCnt);
1191 WM.
PutColIndex(9 + iCnt, iNode2FirstVelIndex + iCnt);
1208 WM.
Add(1, 4, MDEPrime);
1209 WM.
Add(4, 10, MDEPrime);
1211 WM.
Sub(1, 10, MDEPrime);
1212 WM.
Sub(4, 4, MDEPrime);
1233 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
1234 WorkVec.
PutRowIndex(iCnt, iNode1FirstPosIndex + iCnt);
1235 WorkVec.
PutRowIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
1293 Mat3x3 hat_R(R1h*tilde_R);
1447 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
1450 WM.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
1451 WM.
PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
1483 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
1484 WMA.
PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
1485 WMA.
PutColIndex(iCnt, iNode1FirstPosIndex + iCnt);
1486 WMA.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
1487 WMA.
PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
1489 WMB.
PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
1490 WMB.
PutColIndex(iCnt, iNode1FirstPosIndex + iCnt);
1491 WMB.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
1492 WMB.
PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
1527 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
1528 WorkVec.
PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
1529 WorkVec.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
1560 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
1561 WorkVec.
PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
1562 WorkVec.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
1613 integer iNode1FirstVelIndex = iNode1FirstPosIndex + 6;
1615 integer iNode2FirstVelIndex = iNode2FirstPosIndex + 6;
1618 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
1621 WM.
PutColIndex(3 + iCnt, iNode1FirstVelIndex + iCnt);
1623 WM.
PutRowIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
1624 WM.
PutColIndex(6 + iCnt, iNode2FirstPosIndex + iCnt);
1625 WM.
PutColIndex(9 + iCnt, iNode2FirstVelIndex + iCnt);
1667 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
1668 WorkVec.
PutRowIndex(iCnt, iNode1FirstPosIndex + iCnt);
1669 WorkVec.
PutRowIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
1729 Mat3x3 hat_R(R1h*tilde_R);
1829 virtual std::ostream&
Restart(std::ostream& out)
const;
1837 : dXi(dxi), pCL(pcl)
1868 out <<
"invariant, " <<
dXi <<
", ";
1887 EP = Rx.
MulTV(EpsPrime);
~ViscoElasticHingeJointInv(void)
virtual void AssMatM(FullSubMatrixHandler &WMA, doublereal dCoef)
virtual const T & GetF(void) const
virtual void AssVec(SubVectorHandler &WorkVec)
virtual ~ElasticHingeJoint(void)
void PutColIndex(integer iSubCol, integer iCol)
const Vec3 Zero3(0., 0., 0.)
Vec3 Cross(const Vec3 &v) const
void Update(const VectorHandler &XCurr, InverseDynamics::Order iOrder=InverseDynamics::INVERSE_DYNAMICS)
virtual const Mat3x3 & GetRRef(void) const
virtual bool bToBeOutput(void) const
virtual void AssMats(FullSubMatrixHandler &WMA, FullSubMatrixHandler &WMB, doublereal dCoef)
virtual void AfterConvergence(const VectorHandler &X, const VectorHandler &XP)
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
ConstitutiveLaw< T, Tder > * pGetConstLaw(void) const
virtual void AssVec(SubVectorHandler &WorkVec)
virtual void AssMatM(FullSubMatrixHandler &WMA, doublereal dCoef)
virtual void ResizeReset(integer)
const MatCross_Manip MatCross
bool UseNetCDF(int out) const
FullSubMatrixHandler & SetFull(void)
virtual const Mat3x3 & GetRCurr(void) const
virtual Node::Type GetNodeType(void) const
virtual void AfterPredict(void)
virtual std::ostream & Restart(std::ostream &out) const
bool bIsErgonomy(void) const
void Add(integer iRow, integer iCol, const Vec3 &v)
virtual unsigned int iGetPrivDataIdx(const char *s) const
Mat3x3 DRot(const Vec3 &phi)
virtual Hint * ParseHint(DataManager *pDM, const char *s) const
std::ostream & Write(std::ostream &out, const FullMatrixHandler &m, const char *s, const char *s2)
virtual void AssMats(FullSubMatrixHandler &WMA, FullSubMatrixHandler &WMB, doublereal dCoef)
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
ViscoElasticHingeJoint(unsigned int uL, const DofOwner *pDO, const ConstitutiveLaw3D *pCL, const StructNode *pN1, const StructNode *pN2, const Mat3x3 &tilde_R1h, const Mat3x3 &tilde_R2h, const OrientationDescription &od, flag fOut)
virtual const Tder & GetFDE(void) const
virtual void Sub(integer iRow, const Vec3 &v)
virtual void AssMatMDEPrime(FullSubMatrixHandler &WMA, FullSubMatrixHandler &WMB, doublereal dCoef)
const Tder & GetFDE(void) const
ElasticHingeJointInv(unsigned int uL, const DofOwner *pDO, const ConstitutiveLaw3D *pCL, const StructNode *pN1, const StructNode *pN2, const Mat3x3 &tilde_R1h, const Mat3x3 &tilde_R2h, const OrientationDescription &od, flag fOut)
const Mat3x3 Eye3(1., 0., 0., 0., 1., 0., 0., 0., 1.)
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual unsigned int iGetNumPrivData(void) const
virtual ~ElasticHingeJointInv(void)
virtual const Vec3 & GetWRef(void) const
std::vector< Hint * > Hints
virtual doublereal dGetPrivData(unsigned int i) const
Vec3 GetVec(unsigned short int i) const
virtual doublereal dGetPrivData(unsigned int i) const
Vec3 VecRot(const Mat3x3 &Phi)
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Vec3 MulTV(const Vec3 &v) const
InvAngularConstitutiveLaw(const doublereal &dxi, ConstitutiveLaw< Vec3, Mat3x3 > *pcl)
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
virtual std::ostream & Restart(std::ostream &out) const
virtual void Output(OutputHandler &OH) const
virtual void AssMatM(FullSubMatrixHandler &WMA, doublereal dCoef)
ViscousHingeJointInv(unsigned int uL, const DofOwner *pDO, const ConstitutiveLaw3D *pCL, const StructNode *pN1, const StructNode *pN2, const Mat3x3 &tilde_R1h, const Mat3x3 &tilde_R2h, const OrientationDescription &od, flag fOut)
ElasticHingeJoint(unsigned int uL, const DofOwner *pDO, const ConstitutiveLaw3D *pCL, const StructNode *pN1, const StructNode *pN2, const Mat3x3 &tilde_R1h, const Mat3x3 &tilde_R2h, const OrientationDescription &od, flag fOut)
virtual void AssVec(SubVectorHandler &WorkVec)
Vec3 MatR2EulerAngles313(const Mat3x3 &R)
ViscousHingeJoint(unsigned int uL, const DofOwner *pDO, const ConstitutiveLaw3D *pCL, const StructNode *pN1, const StructNode *pN2, const Mat3x3 &tilde_R1h, const Mat3x3 &tilde_R2h, const OrientationDescription &od, flag fOut)
ConstLawType::Type GetConstLawType(void) const
virtual ConstLawType::Type GetConstLawType(void) const =0
Matrix< T, 2, 2 > Inv(const Matrix< T, 2, 2 > &A)
virtual void AfterConvergence(const VectorHandler &X, const VectorHandler &XP)
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual ConstitutiveLaw< T, Tder > * pCopy(void) const =0
virtual void AfterPredict(void)
virtual void AssVec(SubVectorHandler &WorkVec)
long GetCurrentStep(void) const
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
Vec3 MatR2EulerAngles123(const Mat3x3 &R)
Mat3x3 Rot(const Vec3 &phi)
virtual integer iGetFirstMomentumIndex(void) const =0
virtual integer iGetFirstPositionIndex(void) const
virtual const Vec3 & GetWCurr(void) const
virtual std::ostream & Restart(std::ostream &out) const
std::ostream & Joints(void) const
~ViscoElasticHingeJoint(void)
void AfterConvergence(const T &Eps, const T &EpsPrime=mb_zero< T >())
#define ASSERT(expression)
virtual void Output(OutputHandler &OH) const
virtual void AssVec(SubVectorHandler &WorkVec)
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual void AssMat(FullSubMatrixHandler &WM, doublereal dCoef)
virtual void OutputPrepare_int(const std::string &type, OutputHandler &OH, std::string &name)
virtual void AfterPredict(void)
#define SAFENEWWITHCONSTRUCTOR(pnt, item, constructor)
virtual void Add(integer iRow, const Vec3 &v)
virtual void ResizeReset(integer, integer)
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
virtual ~ViscousHingeJoint(void)
virtual void AfterConvergence(const VectorHandler &X, const VectorHandler &XP)
virtual ~ViscousHingeJointInv(void)
virtual doublereal dGetPrivData(unsigned int i) const
Mat3x3 Transpose(void) const
const doublereal * pGetMat(void) const
virtual void AssVec(SubVectorHandler &WorkVec)
virtual void AssMatMDEPrime(FullSubMatrixHandler &WMA, FullSubMatrixHandler &WMB, doublereal dCoef)
virtual ~InvAngularConstitutiveLaw(void)
ViscoElasticHingeJointInv(unsigned int uL, const DofOwner *pDO, const ConstitutiveLaw3D *pCL, const StructNode *pN1, const StructNode *pN2, const Mat3x3 &tilde_R1h, const Mat3x3 &tilde_R2h, const OrientationDescription &od, flag fOut)
void PutRowIndex(integer iSubRow, integer iRow)
const T & GetF(void) const
virtual void Update(const Vec3 &Eps, const Vec3 &=Zero3)
const doublereal * pGetVec(void) const
Vec3 MatR2EulerAngles321(const Mat3x3 &R)
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const =0
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual ConstitutiveLaw< Vec3, Mat3x3 > * Read(const DataManager *pDM, MBDynParser &HP, ConstLawType::Type &CLType)
virtual void AssMats(VariableSubMatrixHandler &WorkMatA, VariableSubMatrixHandler &WorkMatB, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
void Sub(integer iRow, integer iCol, const Vec3 &v)
virtual const Tder & GetFDEPrime(void) const
virtual void AfterPredict(void)
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual void AfterPredict(void)
Mat3x3 MulMT(const Mat3x3 &m) const
virtual void Update(const T &Eps, const T &EpsPrime=mb_zero< T >())=0
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
virtual ConstitutiveLaw< Vec3, Mat3x3 > * pCopy(void) const
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *h=0)
const Tder & GetFDEPrime(void) const
std::ostream & Output(std::ostream &out, const char *sJointName, unsigned int uLabel, const Vec3 &FLocal, const Vec3 &MLocal, const Vec3 &FGlobal, const Vec3 &MGlobal) const
ConstitutiveLaw3D * GetConstLaw3D(ConstLawType::Type &clt)
virtual doublereal dGetPrivData(unsigned int i) const
void Update(const T &Eps, const T &EpsPrime=mb_zero< T >())
virtual void Output(OutputHandler &OH) const
unsigned int GetLabel(void) const
virtual void AfterPredict(void)
ConstitutiveLaw< Vec3, Mat3x3 > * pCL
Mat3x3 DRot_I(const Vec3 &phi)
bool UseText(int out) const
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual doublereal GetReal(const doublereal &dDefval=0.0)