101 tilde_R1h(tilde_R1h),
102 tilde_R2h(tilde_R2h),
130 return pGetConstLaw()->Restart(out) <<
';' << std::endl;
168 for (
unsigned i = 0; i < ph->size(); i++) {
178 }
else if (dynamic_cast<Joint::ReactionsHint *>(pjh)) {
207 if (strncasecmp(s,
"hinge{" ,
STRLENOF(
"hinge{" )) == 0) {
210 if (strcmp(&s[1],
"}") != 0) {
237 if (s[1] ==
'z' && s[2] ==
'\0') {
250 const size_t l =
STRLENOF(
"constitutiveLaw.");
251 if (strncmp(s,
"constitutiveLaw.", l) == 0) {
336 DEBUGCOUT(
"Entering ElasticAxialJoint::AssJac()" << std::endl);
353 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
356 WM.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
357 WM.
PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
372 DEBUGCOUT(
"Entering ElasticAxialJoint::AssJac()" << std::endl);
390 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
393 WMA.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
394 WMA.
PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
418 Vec3 e1z(R1h.GetVec(3));
448 return AssJac(WorkMat, 1., XCurr, XCurr);
458 DEBUGCOUT(
"Entering ElasticAxialJoint::AssRes()" << std::endl);
471 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
472 WorkVec.
PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
473 WorkVec.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
489 DEBUGCOUT(
"Entering ElasticAxialJoint::AssRes()" << std::endl);
508 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
509 WorkVec.
PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
510 WorkVec.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
553 silent_cerr(
"ElasticAxialJoint(" <<
GetLabel() <<
"): axes non-colinear (err=" << dErr <<
")" << std::endl);
559 M = R1h.GetVec(3)*
GetF();
570 DEBUGCOUT(
"Entering ElasticAxialJoint::InitialAssJac()" << std::endl);
585 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
588 WM.
PutRowIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
589 WM.
PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
613 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
614 WorkVec.
PutRowIndex(iCnt, iNode1FirstPosIndex + iCnt);
615 WorkVec.
PutRowIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
693 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
696 WM.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
697 WM.
PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
729 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
732 WMA.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
733 WMA.
PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
737 WMB.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
738 WMB.
PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
772 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
773 WorkVec.
PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
774 WorkVec.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
805 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
806 WorkVec.
PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
807 WorkVec.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
851 integer iNode1FirstVelIndex = iNode1FirstPosIndex + 6;
853 integer iNode2FirstVelIndex = iNode2FirstPosIndex + 6;
856 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
859 WM.
PutColIndex(3 + iCnt, iNode1FirstVelIndex + iCnt);
861 WM.
PutRowIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
862 WM.
PutColIndex(6 + iCnt, iNode2FirstPosIndex + iCnt);
863 WM.
PutColIndex(9 + iCnt, iNode2FirstVelIndex + iCnt);
880 WM.
Add(1, 4, MDEPrime);
881 WM.
Add(4, 10, MDEPrime);
883 WM.
Sub(1, 10, MDEPrime);
884 WM.
Sub(4, 4, MDEPrime);
905 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
906 WorkVec.
PutRowIndex(iCnt, iNode1FirstPosIndex + iCnt);
907 WorkVec.
PutRowIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
975 Vec3 e1z(R1h.GetVec(3));
1014 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
1017 WM.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
1018 WM.
PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
1050 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
1051 WMA.
PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
1052 WMA.
PutColIndex(iCnt, iNode1FirstPosIndex + iCnt);
1053 WMA.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
1054 WMA.
PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
1056 WMB.
PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
1057 WMB.
PutColIndex(iCnt, iNode1FirstPosIndex + iCnt);
1058 WMB.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
1059 WMB.
PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
1094 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
1095 WorkVec.
PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
1096 WorkVec.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
1127 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
1128 WorkVec.
PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
1129 WorkVec.
PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
1142 Vec3 e1z(R1h.GetVec(3));
1181 integer iNode1FirstVelIndex = iNode1FirstPosIndex + 6;
1183 integer iNode2FirstVelIndex = iNode2FirstPosIndex + 6;
1186 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
1189 WM.
PutColIndex(3 + iCnt, iNode1FirstVelIndex + iCnt);
1191 WM.
PutRowIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
1192 WM.
PutColIndex(6 + iCnt, iNode2FirstPosIndex + iCnt);
1193 WM.
PutColIndex(9 + iCnt, iNode2FirstVelIndex + iCnt);
1235 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
1236 WorkVec.
PutRowIndex(iCnt, iNode1FirstPosIndex + iCnt);
1237 WorkVec.
PutRowIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
1241 Vec3 e1z(R1h.GetVec(3));
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual void AssMats(FullSubMatrixHandler &WMA, FullSubMatrixHandler &WMB, doublereal dCoef)
void PutColIndex(integer iSubCol, integer iCol)
const Vec3 Zero3(0., 0., 0.)
virtual void AfterPredict(void)
ViscoElasticAxialJoint(unsigned int uL, const DofOwner *pDO, const ConstitutiveLaw1D *pCL, const StructNode *pN1, const StructNode *pN2, const Mat3x3 &tilde_R1h, const Mat3x3 &tilde_R2h, flag fOut)
virtual const Mat3x3 & GetRRef(void) const
virtual bool bToBeOutput(void) const
void Update(const VectorHandler &XCurr, InverseDynamics::Order iOrder=InverseDynamics::INVERSE_DYNAMICS)
ConstitutiveLaw< T, Tder > * pGetConstLaw(void) const
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
virtual void ResizeReset(integer)
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
const MatCross_Manip MatCross
FullSubMatrixHandler & SetFull(void)
virtual const Mat3x3 & GetRCurr(void) const
virtual Node::Type GetNodeType(void) const
virtual void AfterConvergence(const VectorHandler &X, const VectorHandler &XP)
bool bIsErgonomy(void) const
void Add(integer iRow, integer iCol, const Vec3 &v)
virtual void AssVec(SubVectorHandler &WorkVec)
virtual unsigned int iGetPrivDataIdx(const char *s) const
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
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 Sub(integer iRow, const Vec3 &v)
~ViscoElasticAxialJoint(void)
virtual void AfterConvergence(const VectorHandler &X, const VectorHandler &XP)
const Tder & GetFDE(void) const
virtual void AssVec(SubVectorHandler &WorkVec)
virtual unsigned int iGetNumPrivData(void) const
virtual void AssVec(SubVectorHandler &WorkVec)
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
const Mat3x3 & Tens(const Vec3 &a, const Vec3 &b)
virtual const Vec3 & GetWRef(void) const
std::vector< Hint * > Hints
virtual ~ElasticAxialJoint(void)
virtual void AfterConvergence(const VectorHandler &X, const VectorHandler &XP)
virtual void AfterPredict(void)
Vec3 GetVec(unsigned short int i) const
Vec3 VecRot(const Mat3x3 &Phi)
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual void AssMats(FullSubMatrixHandler &WMA, FullSubMatrixHandler &WMB, doublereal dCoef)
virtual void AssMats(VariableSubMatrixHandler &WorkMatA, VariableSubMatrixHandler &WorkMatB, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
ElasticAxialJoint(unsigned int uL, const DofOwner *pDO, const ConstitutiveLaw1D *pCL, const StructNode *pN1, const StructNode *pN2, const Mat3x3 &tilde_R1h, const Mat3x3 &tilde_R2h, flag fOut)
ViscousAxialJoint(unsigned int uL, const DofOwner *pDO, const ConstitutiveLaw1D *pCL, const StructNode *pN1, const StructNode *pN2, const Mat3x3 &tilde_R1h, const Mat3x3 &tilde_R2h, flag fOut)
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
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
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
void AfterConvergence(const T &Eps, const T &EpsPrime=mb_zero< T >())
#define ASSERT(expression)
virtual void Add(integer iRow, const Vec3 &v)
virtual void ResizeReset(integer, integer)
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual doublereal dGetPrivData(unsigned int i) const
Mat3x3 Transpose(void) const
void PutRowIndex(integer iSubRow, integer iRow)
const T & GetF(void) const
virtual ~ViscousAxialJoint(void)
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const =0
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
void Sub(integer iRow, integer iCol, const Vec3 &v)
Mat3x3 MulMT(const Mat3x3 &m) const
virtual void AssMat(FullSubMatrixHandler &WM, doublereal dCoef)
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
void Update(const T &Eps, const T &EpsPrime=mb_zero< T >())
unsigned int GetLabel(void) const
Mat3x3 DRot_I(const Vec3 &phi)
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual void AfterPredict(void)