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)