45 pNode1(pN1), pNode2(pN2), v(vTmp), p(pTmp), dF(0.)
61 <<
", reference, node, ",
63 <<
", reference, node, ";
76 DEBUGCOUT(
"Entering InPlaneJoint::AssJac()" << std::endl);
91 Vec3 Tmp(vTmp.Cross(x2mx1));
92 for(
int iCnt = 1; iCnt <= 3; iCnt++) {
94 WM.
PutItem(iCnt, iNode1FirstMomIndex+iCnt,
95 iFirstReactionIndex+1, -d);
96 WM.
PutItem(3+iCnt, iNode2FirstMomIndex+iCnt,
97 iFirstReactionIndex+1, d);
99 WM.
PutItem(6+iCnt, iFirstReactionIndex+1,
100 iNode1FirstPosIndex+iCnt, -d);
101 WM.
PutItem(9+iCnt, iFirstReactionIndex+1,
102 iNode2FirstPosIndex+iCnt, d);
105 WM.
PutItem(12+iCnt, iNode1FirstMomIndex+3+iCnt,
106 iFirstReactionIndex+1, d);
108 WM.
PutItem(15+iCnt, iFirstReactionIndex+1,
109 iNode1FirstPosIndex+3+iCnt, d);
112 WM.
PutCross(19, iNode1FirstMomIndex,
113 iNode1FirstPosIndex+3, F);
114 WM.
PutCross(25, iNode1FirstMomIndex+3,
115 iNode1FirstPosIndex, -F);
118 WM.
PutCross(40, iNode1FirstMomIndex+3,
119 iNode2FirstPosIndex, F);
120 WM.
PutCross(46, iNode2FirstMomIndex,
121 iNode2FirstPosIndex+3, -F);
132 DEBUGCOUT(
"Entering InPlaneJoint::AssRes()" << std::endl);
140 for (
int iCnt = 1; iCnt <= 6; iCnt++) {
141 WorkVec.
PutRowIndex(iCnt, iNode1FirstMomIndex+iCnt);
142 WorkVec.
PutRowIndex(6+iCnt, iNode2FirstMomIndex+iCnt);
154 dF = XCurr(iFirstReactionIndex+1);
158 WorkVec.
Add(4, x2mx1.Cross(F));
161 WorkVec.
PutCoef(13, (v.Dot(
p)-vTmp.Dot(x2mx1))/dCoef);
182 DEBUGCOUT(
"Entering InPlaneJoint::InitialAssJac()" << std::endl);
190 integer iReactionPrimeIndex = iFirstReactionIndex+1;
193 for(
int iCnt = 1; iCnt <= 12; iCnt++) {
201 for(
int iCnt = 1; iCnt <= 2; iCnt++) {
212 doublereal dFPrime = XCurr(iReactionPrimeIndex+1);
215 Vec3 FPrime(vTmp*dFPrime);
217 Vec3 Tmp1(vTmp.Cross(x2mx1));
218 Vec3 Tmp2(Omega.Cross(vTmp));
219 Vec3 Tmp3((Omega.Cross(x2mx1)-xp2mxp1).
Cross(vTmp));
220 Vec3 Tmp4(-(xp2mxp1.Cross(vTmp)+x2mx1.Cross(Tmp2)));
221 for(
int iCnt = 1; iCnt <= 3; iCnt++) {
261 WM.
Add(10, 19, MTmp);
266 WM.
Sub(19, 10, MTmp);
272 WM.
Add(10, 10, MTmp);
280 WM.
Add(10, 13, MTmp);
294 DEBUGCOUT(
"Entering InPlaneJoint::InitialAssRes()" << std::endl);
301 integer iReactionPrimeIndex = iFirstReactionIndex+1;
304 for(
int iCnt = 1; iCnt <= 12; iCnt++) {
305 WorkVec.
PutRowIndex(iCnt, iNode1FirstPosIndex+iCnt);
306 WorkVec.
PutRowIndex(12+iCnt, iNode2FirstPosIndex+iCnt);
322 dF = XCurr(iFirstReactionIndex+1);
323 doublereal dFPrime = XCurr(iReactionPrimeIndex+1);
325 Vec3 FPrime(vTmp*dFPrime);
326 Vec3 Tmp(Omega.Cross(F)+FPrime);
329 WorkVec.
Add(4, x2mx1.Cross(F));
331 WorkVec.
Add(10, xp2mxp1.Cross(F)+x2mx1.Cross(Tmp));
333 WorkVec.
Add(19, -Tmp);
335 WorkVec.
PutCoef(25, v.Dot(
p)-vTmp.Dot(x2mx1));
336 WorkVec.
PutCoef(26, x2mx1.Dot(vTmp.Cross(Omega))-vTmp.Dot(xp2mxp1));
363 pNode1(pN1), pNode2(pN2), v(vT), p(pT), q(qT), dF(0.)
379 <<
", reference, node, ",
381 <<
", reference, node, ",
382 v.
Write(out,
", ") <<
", "
384 return q.
Write(out,
", ") <<
';' << std::endl;
394 DEBUGCOUT(
"Entering InPlaneWithOffsetJoint::AssJac()" << std::endl);
410 Vec3 Tmp1(vTmp.Cross(x2pqmx1));
411 Vec3 Tmp2(qTmp.Cross(vTmp));
412 for(
int iCnt = 1; iCnt <= 3; iCnt++) {
414 WM.
PutItem(iCnt, iNode1FirstMomIndex+iCnt,
415 iFirstReactionIndex+1, -d);
416 WM.
PutItem(3+iCnt, iNode2FirstMomIndex+iCnt,
417 iFirstReactionIndex+1, d);
419 WM.
PutItem(6+iCnt, iFirstReactionIndex+1,
420 iNode1FirstPosIndex+iCnt, -d);
421 WM.
PutItem(9+iCnt, iFirstReactionIndex+1,
422 iNode2FirstPosIndex+iCnt, d);
425 WM.
PutItem(12+iCnt, iNode1FirstMomIndex+3+iCnt,
426 iFirstReactionIndex+1, d);
428 WM.
PutItem(15+iCnt, iFirstReactionIndex+1,
429 iNode1FirstPosIndex+3+iCnt, d);
432 WM.
PutItem(18+iCnt, iNode2FirstMomIndex+3+iCnt,
433 iFirstReactionIndex+1, d);
435 WM.
PutItem(21+iCnt, iFirstReactionIndex+1,
436 iNode2FirstPosIndex+3+iCnt, d);
439 WM.
PutCross(25, iNode1FirstMomIndex,
440 iNode1FirstPosIndex+3, F);
441 WM.
PutCross(31, iNode1FirstMomIndex+3,
442 iNode1FirstPosIndex, -F);
445 WM.
PutCross(46, iNode1FirstMomIndex+3,
446 iNode2FirstPosIndex, F);
447 WM.
PutCross(52, iNode2FirstMomIndex,
448 iNode2FirstPosIndex+3, -F);
452 iNode2FirstPosIndex+3, -MTmp);
454 iNode2FirstPosIndex+3, -MTmp);
469 DEBUGCOUT(
"Entering InPlaneWithOffsetJoint::AssRes()" << std::endl);
479 for(
int iCnt = 1; iCnt <= 6; iCnt++) {
480 WorkVec.
PutRowIndex(iCnt, iNode1FirstMomIndex+iCnt);
481 WorkVec.
PutRowIndex(6+iCnt, iNode2FirstMomIndex+iCnt);
492 dF = XCurr(iFirstReactionIndex+1);
496 WorkVec.
Add(4, x2pqmx1.Cross(F));
500 WorkVec.
PutCoef(13, (
v.
Dot(
p)-vTmp.Dot(x2pqmx1))/dCoef);
522 DEBUGCOUT(
"Entering InPlaneWithOffsetJoint::InitialAssJac()" << std::endl);
530 integer iReactionPrimeIndex = iFirstReactionIndex+1;
533 for(
int iCnt = 1; iCnt <= 12; iCnt++) {
541 for(
int iCnt = 1; iCnt <= 2; iCnt++) {
555 doublereal dFPrime = XCurr(iReactionPrimeIndex+1);
557 Vec3 FPrime(vTmp*dFPrime);
559 Vec3 Tmp1(vTmp.Cross(x2pqmx1));
560 Vec3 Tmp2(Omega1.Cross(vTmp));
561 Vec3 Tmp3((Omega1.Cross(x2pqmx1) - xp2pqpmxp1).
Cross(vTmp));
562 Vec3 Tmp4(-(xp2pqpmxp1.Cross(vTmp) + x2pqmx1.Cross(Tmp2)));
564 Vec3 Tmp5(qTmp.Cross(vTmp));
565 Vec3 Tmp6(qTmp.Cross(vTmp.Cross(Omega2-Omega1)));
566 Vec3 Tmp7(qTmp.Cross(Omega1.Cross(vTmp)) - vTmp.Cross(Omega2.Cross(qTmp)));
567 for(
int iCnt = 1; iCnt <= 3; iCnt++) {
620 WM.
Add(10, 19, MTmp);
625 WM.
Sub(19, 10, MTmp);
631 WM.
Add(10, 10, MTmp);
639 WM.
Add(10, 13, MTmp);
646 WM.
Add(16, 16, MTmp);
647 WM.
Add(22, 22, MTmp);
650 WM.
Sub(10, 22, MTmp);
654 WM.
Add(22, 10, MTmp);
657 WM.
Add(22, 16, MTmp);
658 WM.
Sub(10, 16, MTmp);
673 DEBUGCOUT(
"Entering InPlaneWithOffsetJoint::InitialAssRes()" << std::endl);
680 integer iReactionPrimeIndex = iFirstReactionIndex+1;
683 for(
int iCnt = 1; iCnt <= 12; iCnt++) {
684 WorkVec.
PutRowIndex(iCnt, iNode1FirstPosIndex+iCnt);
685 WorkVec.
PutRowIndex(12+iCnt, iNode2FirstPosIndex+iCnt);
702 dF = XCurr(iFirstReactionIndex+1);
703 doublereal dFPrime = XCurr(iReactionPrimeIndex+1);
705 Vec3 FPrime(vTmp*dFPrime);
706 Vec3 Tmp(Omega1.Cross(F)+FPrime);
709 WorkVec.
Add(4, x2pqmx1.Cross(F));
711 WorkVec.
Add(10, xp2pqpmxp1.Cross(F)+x2pqmx1.Cross(Tmp));
714 WorkVec.
Add(19, -Tmp);
715 WorkVec.
Add(22, F.
Cross(Omega2.Cross(qTmp))-qTmp.
Cross(Tmp));
718 WorkVec.
PutCoef(26, x2pqmx1.Dot(vTmp.Cross(Omega1))
719 -vTmp.Dot(xp2pqpmxp1));
void PutColIndex(integer iSubCol, integer iCol)
virtual std::ostream & Restart(std::ostream &out) const
void PutMat3x3(integer iSubIt, integer iFirstRow, integer iFirstCol, const Mat3x3 &m)
const Vec3 Zero3(0., 0., 0.)
Vec3 Cross(const Vec3 &v) const
std::ostream & Write(std::ostream &out, const char *sFill=" ") const
virtual const Mat3x3 & GetRRef(void) const
virtual bool bToBeOutput(void) const
virtual void ResizeReset(integer)
const StructNode * pNode2
const MatCross_Manip MatCross
SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
FullSubMatrixHandler & SetFull(void)
virtual const Mat3x3 & GetRCurr(void) const
doublereal Dot(const Vec3 &v) const
const StructNode * pNode2
void Add(integer iRow, integer iCol, const Vec3 &v)
virtual std::ostream & Restart(std::ostream &out) const
VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
void PutCoef(integer iRow, integer iCol, const doublereal &dCoef)
void ResizeReset(integer iNewRow, integer iNewCol)
virtual const Vec3 & GetWRef(void) const
void PutCross(integer iSubIt, integer iFirstRow, integer iFirstCol, const Vec3 &v)
VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
virtual void Output(OutputHandler &OH) const
void PutItem(integer iSubIt, integer iRow, integer iCol, const doublereal &dCoef)
virtual void SetInitialValue(VectorHandler &X)
SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
const doublereal & dGet(unsigned short int iRow) const
virtual integer iGetFirstMomentumIndex(void) const =0
virtual integer iGetFirstPositionIndex(void) const
virtual const Vec3 & GetWCurr(void) const
virtual void SetInitialValue(VectorHandler &X)
virtual std::ostream & Restart(std::ostream &out) const
std::ostream & Joints(void) const
#define ASSERT(expression)
virtual void PutCoef(integer iRow, const doublereal &dCoef)=0
VectorExpression< VectorCrossExpr< VectorLhsExpr, VectorRhsExpr >, 3 > Cross(const VectorExpression< VectorLhsExpr, 3 > &u, const VectorExpression< VectorRhsExpr, 3 > &v)
SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual const Vec3 & GetXCurr(void) const
virtual void Add(integer iRow, const Vec3 &v)
virtual void ResizeReset(integer, integer)
Mat3x3 Transpose(void) const
const MatCrossCross_Manip MatCrossCross
InPlaneWithOffsetJoint(unsigned int uL, const DofOwner *pDO, const StructNode *pN1, const StructNode *pN2, const Vec3 &vT, const Vec3 &pT, const Vec3 &qT, flag fOut)
void PutRowIndex(integer iSubRow, integer iRow)
InPlaneJoint(unsigned int uL, const DofOwner *pDO, const StructNode *pN1, const StructNode *pN2, const Vec3 &vTmp, const Vec3 &pTmp, flag fOut)
~InPlaneWithOffsetJoint(void)
virtual void Output(OutputHandler &OH) const
virtual const Vec3 & GetVCurr(void) const
void Sub(integer iRow, integer iCol, const Vec3 &v)
const StructNode * pNode1
VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
SparseSubMatrixHandler & SetSparse(void)
virtual integer iGetFirstIndex(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
const StructNode * pNode1
unsigned int GetLabel(void) const
VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)