40 static const char idx2xyz[] = { 
'x', 
'y', 
'z' };
 
   45         bool bPos[3], 
bool bVel[3],
 
   47         bool bRot[3], 
bool bAgv[3],     
 
   56 pNode1(pN1), pNode2(pN2),
 
   57 f1(f1Tmp), R1h(R1hTmp), R1hr(R1hrTmp),
 
   58 f2(f2Tmp), R2h(R2hTmp), R2hr(R2hrTmp),
 
   59 XDrv(pDCPos[0]), XPDrv(pDCPos[1]), XPPDrv(pDCPos[2]),
 
   60 ThetaDrv(pDCRot[0]), OmegaDrv(pDCRot[1]), OmegaPDrv(pDCRot[2]),
 
   61 nConstraints(0), nPosConstraints(0), nRotConstraints(0),
 
   62 nVelConstraints(0), nAgvConstraints(0),
 
   63 tilde_f1(R1h.MulTV(f1)),
 
   69         unsigned int index = 0;
 
   71         for (
unsigned int i = 0; i < 3; i++) {
 
   72                 ASSERT(bPos[i] == 
false || bVel[i] == 
false);
 
   93         for (
unsigned int i = 0; i < 3; i++) {
 
   94                 ASSERT(bRot[i] == 
false || bAgv[i] == 
false);
 
  125         const char *prefix, 
bool bInitial)
 const 
  130                 out << prefix << iIndex + 1;
 
  135                 out << 
"reaction force(s) [";
 
  137                 for (
unsigned int i = 0, cnt = 0; i < 3; i++) {
 
  146                 out << 
"]" << std::endl;
 
  155                 out << 
"reaction couple(s) [";
 
  157                 for (
unsigned int i = 0, cnt = 0; i < 3; i++) {
 
  166                 out << 
"]" << std::endl;
 
  173                         out << prefix << iIndex + 1;
 
  178                         out << 
"reaction force(s) derivative(s) [";
 
  180                         for (
unsigned int i = 0, cnt = 0; i < 3; i++) {
 
  189                         out << 
"]" << std::endl;
 
  198                         out << 
"reaction couple(s) derivative(s) [";
 
  200                         for (
unsigned int i = 0, cnt = 0; i < 3; i++) {
 
  209                         out << 
"]" << std::endl;
 
  218         bool bInitial, 
int i)
 const 
  232         std::ostringstream os;
 
  233         os << 
"TotalEquation(" << 
GetLabel() << 
")";
 
  236                 std::string name(os.str());
 
  238                 for (i = 0; i < ndof; i++) {
 
  240                         os.seekp(0, std::ios_base::end);
 
  241                         os << 
": dof(" << i + 1 << 
")";
 
  246                 os << 
": dof(" << i + 1 << 
")";
 
  254         const char *prefix, 
bool bInitial)
 const 
  259                 out << prefix << iIndex + 1;
 
  264                 out << 
"position/velocity constraint(s) [";
 
  266                 for (
unsigned int i = 0, cnt = 0; i < 3; i++) {
 
  282                 out << 
"]" << std::endl;
 
  291                 out << 
"orientation/angular velocity constraint(s) [";
 
  293                 for (
unsigned int i = 0, cnt = 0; i < 3; i++) {
 
  309                 out << 
"]" << std::endl;
 
  316                         out << prefix << iIndex + 1;
 
  321                         out << 
"velocity constraint(s) [";
 
  323                         for (
unsigned int i = 0, cnt = 0; i < 3; i++) {
 
  333                         out << 
"]" << std::endl;
 
  342                         out << 
"angular velocity constraint(s) [";
 
  344                         for (
unsigned int i = 0, cnt = 0; i < 3; i++) {
 
  354                         out << 
"]" << std::endl;
 
  363         bool bInitial, 
int i)
 const 
  377         std::ostringstream os;
 
  378         os << 
"TotalEquation(" << 
GetLabel() << 
")";
 
  381                 std::string name(os.str());
 
  383                 for (i = 0; i < ndof; i++) {
 
  385                         os.seekp(0, std::ios_base::end);
 
  386                         os << 
": equation(" << i + 1 << 
")";
 
  391                 os << 
": equation(" << i + 1 << 
")";
 
  402                 for (
unsigned int i = 0; i < ph->size(); i++) {
 
  444                                         pedantic_cout(
"TotalEquation(" << 
uLabel << 
"): " 
  445                                                 "creating drive from hint[" << i << 
"]..." << std::endl);
 
  449                                                 silent_cerr(
"TotalEquation(" << 
uLabel << 
"): " 
  450                                                         "unable to create drive " 
  451                                                         "after hint #" << i << std::endl);
 
  477                                 } 
else if (dynamic_cast<Joint::ReactionsHint *>(pjh)) {
 
  489         if (strncasecmp(s, 
"offset{"  , 
STRLENOF(
"offset{"  )) == 0)
 
  493                 if (strcmp(&s[1],  
"}") != 0) {
 
  505         } 
else if (strncasecmp(s, 
"position-hinge{" , 
STRLENOF(
"position-hinge{" )) == 0) {
 
  508                 if (strcmp(&s[1],  
"}") != 0) {
 
  520         } 
else if (strncasecmp(s, 
"position-drive3{" , 
STRLENOF(
"position-drive3{" )) == 0) {
 
  532         } 
else if (strncasecmp(s, 
"orientation-hinge{" , 
STRLENOF(
"orientation-hinge{" )) == 0) {
 
  533                 s += 
STRLENOF(
"orientation-hinge{" );
 
  535                 if (strcmp(&s[1],  
"}") != 0) {
 
  547         } 
else if (strncasecmp(s, 
"orientation-drive3{" , 
STRLENOF(
"orientation-drive3{" )) == 0) {
 
  586                         << 
"position orientation, " 
  591                         << 
"rotation orientation, " 
  599                         << 
"position orientation, " 
  604                         << 
"rotation orientation, " 
  611                 out << 
", position constraint";
 
  612                 for (
unsigned i = 0; i < 3; i++) {
 
  622                 out << 
", orientation constraint";
 
  623                 for (
unsigned i = 0; i < 3; i++) {
 
  632         return out << std::endl;
 
  646         DEBUGCOUT(
"Entering TotalEquation::AssJac()" << std::endl);
 
  662         for (
int iCnt = 1; iCnt <= 6; iCnt++) {
 
  664                 WM.
PutColIndex(6 + iCnt, iNode2FirstPosIndex + iCnt);
 
  667         for (
unsigned int iCnt = 1; iCnt <= 
nConstraints; iCnt++) {
 
  679         Mat3x3 b1Cross_R1(b1.Cross(R1)); 
 
  680         Mat3x3 b2Cross_R1(b2.Cross(R1)); 
 
  722                         Vec3 vOmega1Cross_R1(Omega1Cross_R1.GetVec(
iVelIncid[iCnt]));
 
  748                         Vec3 vDeltaWCross_R1(DeltaWCross_R1.GetVec(
iAgvIncid[iCnt]));
 
  770         DEBUGCOUT(
"Entering TotalEquation::AssRes()" << std::endl);
 
  782         for (
unsigned int iCnt = 1; iCnt <= 
nConstraints; iCnt++) {
 
  783                 WorkVec.
PutRowIndex(iCnt, iFirstReactionIndex + iCnt);
 
  794         Vec3 VDelta = R1.MulTV(
 
  857                 Vec3 b1(X2 + b2 - X1);
 
  864                         << 
" " << R1Tmp.MulTV(
V2 + Omega2.Cross(b2) - 
V1 - Omega1.Cross(b1))
 
  865                         << 
" " << R1rTmp.
MulTV(Omega2 - Omega1)
 
  907         integer iNode1FirstVelIndex = iNode1FirstPosIndex + 6;
 
  909         integer iNode2FirstVelIndex = iNode2FirstPosIndex + 6;
 
  915         for (
int iCnt = 1; iCnt <= 6; iCnt++) {
 
  917                 WM.
PutColIndex(6 + iCnt, iNode1FirstVelIndex + iCnt);
 
  918                 WM.
PutColIndex(12 + iCnt, iNode2FirstPosIndex + iCnt);
 
  919                 WM.
PutColIndex(18 + iCnt, iNode2FirstVelIndex + iCnt);
 
  923         for (
unsigned int iCnt = 1; iCnt <=  
nConstraints; iCnt++) {
 
  924                 WM.
PutRowIndex(24 + iCnt, iFirstReactionIndex + iCnt);
 
  925                 WM.
PutRowIndex(24 + nConstraints + iCnt, iReactionPrimeIndex + iCnt);
 
  944         Mat3x3 b1Cross_R1(b1.Cross(R1)); 
 
  945         Mat3x3 b2Cross_R1(b2.Cross(R1)); 
 
  953                 WM.
SubT(24 + 1 + iCnt, 1, vR1); 
 
  954                 WM.
SubT(24 + 1 + iCnt, 3 + 1, vb1Cross_R1);     
 
  957                 WM.
SubT(24 + 1 + nConstraints + iCnt, 6 + 1, vR1);      
 
  958                 WM.
SubT(24 + 1 + nConstraints + iCnt, 9 + 1, vb1Cross_R1);      
 
  961                 WM.
AddT(24 + 1 + iCnt, 12 + 1, vR1);    
 
  962                 WM.
AddT(24 + 1 + iCnt, 15 + 1, vb2Cross_R1);    
 
  965                 WM.
AddT(24 + 1 + nConstraints +  iCnt, 18 + 1, vR1);    
 
  966                 WM.
AddT(24 + 1 + nConstraints +  iCnt, 21 + 1, vb2Cross_R1);    
 
  973                 WM.
SubT(24 + 1 + nPosConstraints + iCnt, 3 + 1, vR1);   
 
  976                 WM.
SubT(24 + 1 + nConstraints + nPosConstraints + iCnt, 9 + 1, vR1);    
 
  979                 WM.
AddT(24 + 1 + nPosConstraints +  iCnt, 15 + 1, vR1); 
 
  982                 WM.
AddT(24 + 1 + nConstraints + nPosConstraints + iCnt, 21 + 1, vR1);   
 
  995         DEBUGCOUT(
"Entering TotalEquation::InitialAssRes()" << std::endl);
 
 1005         integer iNode1FirstVelIndex = iNode1FirstPosIndex + 6;
 
 1007         integer iNode2FirstVelIndex = iNode2FirstPosIndex + 6;
 
 1012         for (
int iCnt = 1; iCnt <= 6; iCnt++) {
 
 1013                 WorkVec.
PutRowIndex(iCnt, iNode1FirstPosIndex+iCnt);
 
 1014                 WorkVec.
PutRowIndex(6 + iCnt, iNode1FirstVelIndex + iCnt);
 
 1015                 WorkVec.
PutRowIndex(12 + iCnt, iNode2FirstPosIndex + iCnt);
 
 1016                 WorkVec.
PutRowIndex(18 + iCnt, iNode2FirstVelIndex + iCnt);
 
 1019         for (
unsigned int iCnt = 1; iCnt <= 
nConstraints; iCnt++)       {
 
 1020                 WorkVec.
PutRowIndex(24 + iCnt, iFirstReactionIndex + iCnt);
 
 1021                 WorkVec.
PutRowIndex(24 + nConstraints + iCnt, iReactionPrimeIndex + iCnt);
 
 1042         Vec3 XDeltaPrime = R1.MulTV(b1Prime + b1.Cross(Omega1));
 
 1051         Vec3 ThetaDeltaPrime = R1r.MulTV(Omega2 - Omega1);
 
 1061                 WorkVec.
PutCoef(24 + 1 + nConstraints + iCnt, -XDeltaPrime(
iPosIncid[iCnt]));
 
 1067                 WorkVec.
PutCoef(24 + 1 + nPosConstraints + nConstraints +  iCnt, -ThetaDeltaPrime(
iRotIncid[iCnt]));
 
 1085         unsigned int off = 0;
 
 1163                 return Theta(i - 3);
 
 1242 Joint(uL, pDO, fOut),
 
 1243 pNode1(pN1), pNode2(pN2),
 
 1244 f1(f1Tmp), R1h(R1hTmp), R1hr(R1hrTmp),
 
 1245 f2(f2Tmp), R2h(R2hTmp), R2hr(R2hrTmp),
 
 1246 nConstraints(0), nPosConstraints(0), nRotConstraints(0),
 
 1247 tilde_f1(R1h.MulTV(f1)),
 
 1249 total_equation_element(t_elm)
 
 1254         for (
unsigned int i = 0; i < 3; i++) {
 
 1268                 silent_cerr(
"Error: TotalReaction element " <<
 
 1270                         " reactions, while the corresponding TotalEquation joint " 
 1273                         " contraints" << std::endl);
 
 1285         const char *prefix, 
bool bInitial)
 const 
 1290                 out << prefix << iIndex + 1;
 
 1295                 out << 
"reaction force(s) [";
 
 1297                 for (
unsigned int i = 0, cnt = 0; i < 3; i++) {
 
 1306                 out << 
"]" << std::endl;
 
 1315                 out << 
"reaction couple(s) [";
 
 1317                 for (
unsigned int i = 0, cnt = 0; i < 3; i++) {
 
 1326                 out << 
"]" << std::endl;
 
 1333                         out << prefix << iIndex + 1;
 
 1338                         out << 
"reaction force(s) derivative(s) [";
 
 1340                         for (
unsigned int i = 0, cnt = 0; i < 3; i++) {
 
 1349                         out << 
"]" << std::endl;
 
 1358                         out << 
"reaction couple(s) derivative(s) [";
 
 1360                         for (
unsigned int i = 0, cnt = 0; i < 3; i++) {
 
 1369                         out << 
"]" << std::endl;
 
 1377         bool bInitial, 
int i)
 const 
 1388                 for (
unsigned int i = 0; i < ph->size(); i++) {
 
 1431                                         pedantic_cout(
"TotalReaction(" << 
uLabel << 
"): " 
 1432                                                 "creating drive from hint[" << i << 
"]..." << std::endl);
 
 1436                                                 silent_cerr(
"TotalReaction(" << 
uLabel << 
"): " 
 1437                                                         "unable to create drive " 
 1438                                                         "after hint #" << i << std::endl);
 
 1465                                 } 
else if (dynamic_cast<Joint::ReactionsHint *>(pjh)) {
 
 1478         if (strncasecmp(s, 
"offset{"  , 
STRLENOF(
"offset{"  )) == 0)
 
 1482                 if (strcmp(&s[1],  
"}") != 0) {
 
 1494         } 
else if (strncasecmp(s, 
"position-hinge{" , 
STRLENOF(
"position-hinge{" )) == 0) {
 
 1497                 if (strcmp(&s[1],  
"}") != 0) {
 
 1509         } 
else if (strncasecmp(s, 
"position-drive3{" , 
STRLENOF(
"position-drive3{" )) == 0) {
 
 1521         } 
else if (strncasecmp(s, 
"orientation-hinge{" , 
STRLENOF(
"orientation-hinge{" )) == 0) {
 
 1522                 s += 
STRLENOF(
"orientation-hinge{" );
 
 1524                 if (strcmp(&s[1],  
"}") != 0) {
 
 1536         } 
else if (strncasecmp(s, 
"orientation-drive3{" , 
STRLENOF(
"orientation-drive3{" )) == 0) {
 
 1574                         << 
"position orientation, " 
 1579                         << 
"rotation orientation, " 
 1587                         << 
"position orientation, " 
 1592                         << 
"rotation orientation, " 
 1599                 out << 
", position constraint";
 
 1600                 for (
unsigned i = 0; i < 3; i++) {
 
 1604                                 out << 
", inactive";
 
 1610                 out << 
", orientation constraint";
 
 1611                 for (
unsigned i = 0; i < 3; i++) {
 
 1615                                 out << 
", inactive";
 
 1620         return out << std::endl;
 
 1670         DEBUGCOUT(
"Entering TotalReaction::AssJac()" << std::endl);
 
 1688         for (
int iCnt = 1; iCnt <= 6; iCnt++) {
 
 1691                 WM.
PutRowIndex(6 + iCnt, iNode2FirstMomIndex + iCnt);
 
 1692                 WM.
PutColIndex(6 + iCnt, iNode2FirstPosIndex + iCnt);
 
 1695         for (
unsigned int iCnt = 1; iCnt <= 
nConstraints; iCnt++) {
 
 1696                 WM.
PutColIndex(12 + iCnt, iFirstReactionIndex + iCnt);
 
 1706         Vec3 FTmp(R1*(
F*dCoef));
 
 1707         Vec3 MTmp(R1r*(
M*dCoef));
 
 1717         WM.
Add(1, 3 + 1, Tmp);
 
 1720         WM.
Sub(3 + 1, 1, Tmp);
 
 1722         WM.
Add(3 + 1, 6 + 1, Tmp);
 
 1725         WM.
Sub(6 + 1, 3 + 1, Tmp);
 
 1731         WM.
Sub(3 + 1, 9 + 1, Tmp);
 
 1734         WM.
Add(9 + 1, 9 + 1, Tmp);
 
 1748         Mat3x3 b1Cross_R1(b1.Cross(R1)); 
 
 1749         Mat3x3 b2Cross_R1(b2.Cross(R1)); 
 
 1757                 WM.
Sub(1, 12 + 1 + iCnt, vR1);
 
 1758                 WM.
Sub(3 + 1, 12 + 1 + iCnt, vb1Cross_R1);
 
 1761                 WM.
Add(6 + 1, 12 + 1 + iCnt, vR1);
 
 1762                 WM.
Add(9 + 1, 12 + 1 + iCnt, vb2Cross_R1);
 
 1769                 WM.
Sub(3 + 1, 12 + 1 + nPosConstraints +  iCnt, vR1);
 
 1772                 WM.
Add(9 + 1, 12 + 1 + nPosConstraints + iCnt, vR1);
 
 1785         DEBUGCOUT(
"Entering TotalReaction::AssRes()" << std::endl);
 
 1799         for (
int iCnt = 1; iCnt <= 6; iCnt++) {
 
 1800                 WorkVec.
PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
 
 1801                 WorkVec.
PutRowIndex(6+iCnt, iNode2FirstMomIndex + iCnt);
 
 1807                 F(
iPosIncid[iCnt]) = XCurr(iFirstReactionIndex + 1 + iCnt);
 
 1811                 M(
iRotIncid[iCnt]) = XCurr(iFirstReactionIndex + 1 + nPosConstraints + iCnt);
 
 1826         WorkVec.
Add(1, FTmp);
 
 1827         WorkVec.
Add(3 + 1, MTmp + b1.
Cross(FTmp));
 
 1830         WorkVec.
Sub(6 + 1, FTmp);
 
 1831         WorkVec.
Sub(9 + 1, MTmp + b2.
Cross(FTmp));
 
 1840                 "INDEX ERROR in TotalReaction::GetEqType");
 
 1864                 Vec3 b1(X2 + b2 - X1);
 
 1868                         F, 
M, R1Tmp*
F, R1rTmp*
M)
 
 1871                         << 
" " << R1Tmp.MulTV(
V2 + Omega2.Cross(b2) - 
V1 - Omega1.Cross(b1))
 
 1872                         << 
" " << R1rTmp.
MulTV(Omega2 - Omega1)
 
 1914         integer iNode1FirstVelIndex = iNode1FirstPosIndex + 6;
 
 1916         integer iNode2FirstVelIndex = iNode2FirstPosIndex + 6;
 
 1922         for (
int iCnt = 1; iCnt <= 6; iCnt++) {
 
 1925                 WM.
PutRowIndex(6 + iCnt, iNode1FirstVelIndex + iCnt);
 
 1926                 WM.
PutColIndex(6 + iCnt, iNode1FirstVelIndex + iCnt);
 
 1927                 WM.
PutRowIndex(12 + iCnt, iNode2FirstPosIndex + iCnt);
 
 1928                 WM.
PutColIndex(12 + iCnt, iNode2FirstPosIndex + iCnt);
 
 1929                 WM.
PutRowIndex(18 + iCnt, iNode2FirstVelIndex + iCnt);
 
 1930                 WM.
PutColIndex(18 + iCnt, iNode2FirstVelIndex + iCnt);
 
 1934         for (
unsigned int iCnt = 1; iCnt <=  
nConstraints; iCnt++) {
 
 1935                 WM.
PutRowIndex(24 + iCnt, iFirstReactionIndex + iCnt);
 
 1936                 WM.
PutColIndex(24 + iCnt, iFirstReactionIndex + iCnt);
 
 1937                 WM.
PutRowIndex(24 + nConstraints + iCnt, iReactionPrimeIndex + iCnt);
 
 1938                 WM.
PutColIndex(24 + nConstraints + iCnt, iReactionPrimeIndex + iCnt);
 
 1959                 FPrime(
iPosIncid[iCnt]) = XCurr(iReactionPrimeIndex + 1 + iCnt);
 
 1963                 MPrime(
iRotIncid[iCnt]) = XCurr(iReactionPrimeIndex + 1 + nPosConstraints + iCnt);
 
 1968         Vec3 FPrimeTmp(R1 * FPrime);
 
 1969         Vec3 MPrimeTmp(R1r * MPrime);
 
 1977         WM.
Add(1, 3 + 1, Tmp);  
 
 1980         WM.
Sub(3 + 1, 1, Tmp);  
 
 1982         WM.
Add(3 + 1, 12 + 1, Tmp);     
 
 1985         WM.
Sub(12 + 1, 3 + 1, Tmp);     
 
 1991         WM.
Add(6 + 1, 9 + 1, Tmp);      
 
 1994         WM.
Sub(9 + 1, 6 + 1, Tmp);      
 
 1996         WM.
Add(9 + 1, 18 + 1, Tmp);     
 
 1999         WM.
Sub(18 + 1 , 9 + 1, Tmp);    
 
 2005         WM.
Sub(3 + 1, 15 + 1, Tmp);     
 
 2008         WM.
Add(15 + 1, 15 + 1, Tmp);    
 
 2014         WM.
Sub(9 + 1, 21 + 1, Tmp);     
 
 2017         WM.
Add(21 + 1, 21 + 1, Tmp);    
 
 2039         Mat3x3 b1Cross_R1(b1.Cross(R1)); 
 
 2040         Mat3x3 b2Cross_R1(b2.Cross(R1)); 
 
 2048                 WM.
Sub(1, 24 + 1 + iCnt, vR1);  
 
 2049                 WM.
Sub(3 + 1, 24 + 1 + iCnt, vb1Cross_R1);      
 
 2052                 WM.
SubT(24 + 1 + iCnt, 1, vR1); 
 
 2053                 WM.
SubT(24 + 1 + iCnt, 3 + 1, vb1Cross_R1);     
 
 2056                 WM.
Sub(6 + 1, 24 + 1 + nConstraints + iCnt, vR1);       
 
 2057                 WM.
Sub(9 + 1, 24 + 1 + nConstraints + iCnt, vb1Cross_R1);       
 
 2060                 WM.
SubT(24 + 1 + nConstraints + iCnt, 6 + 1, vR1);      
 
 2061                 WM.
SubT(24 + 1 + nConstraints + iCnt, 9 + 1, vb1Cross_R1);      
 
 2064                 WM.
Add(12 + 1, 24 + 1 + iCnt, vR1);     
 
 2065                 WM.
Add(15 + 1, 24 + 1 + iCnt, vb2Cross_R1);     
 
 2068                 WM.
AddT(24 + 1 + iCnt, 12 + 1, vR1);    
 
 2069                 WM.
AddT(24 + 1 + iCnt, 15 + 1, vb2Cross_R1);    
 
 2072                 WM.
Add(18 + 1, 24 + 1 + nConstraints + iCnt, vR1);      
 
 2073                 WM.
Add(21 + 1, 24 + 1 + nConstraints + iCnt, vb2Cross_R1);      
 
 2076                 WM.
AddT(24 + 1 + nConstraints +  iCnt, 18 + 1, vR1);    
 
 2077                 WM.
AddT(24 + 1 + nConstraints +  iCnt, 21 + 1, vb2Cross_R1);    
 
 2084                 WM.
Sub(3 + 1, 24 + 1 + nPosConstraints +  iCnt, vR1);   
 
 2087                 WM.
SubT(24 + 1 + nPosConstraints + iCnt, 3 + 1, vR1);   
 
 2090                 WM.
Sub(9 + 1, 24 + 1 + nConstraints + nPosConstraints +  iCnt, vR1);    
 
 2093                 WM.
SubT(24 + 1 + nConstraints + nPosConstraints + iCnt, 9 + 1, vR1);    
 
 2096                 WM.
Add(15 + 1, 24 + 1 + nPosConstraints + iCnt, vR1);   
 
 2099                 WM.
AddT(24 + 1 + nPosConstraints +  iCnt, 15 + 1, vR1); 
 
 2102                 WM.
Add(21 + 1, 24 + 1 + nConstraints + nPosConstraints + iCnt, vR1);    
 
 2105                 WM.
AddT(24 + 1 + nConstraints + nPosConstraints + iCnt, 21 + 1, vR1);   
 
 2118         DEBUGCOUT(
"Entering TotalReaction::InitialAssRes()" << std::endl);
 
 2128         integer iNode1FirstVelIndex = iNode1FirstPosIndex + 6;
 
 2130         integer iNode2FirstVelIndex = iNode2FirstPosIndex + 6;
 
 2135         for (
int iCnt = 1; iCnt <= 6; iCnt++) {
 
 2136                 WorkVec.
PutRowIndex(iCnt, iNode1FirstPosIndex+iCnt);
 
 2137                 WorkVec.
PutRowIndex(6 + iCnt, iNode1FirstVelIndex + iCnt);
 
 2138                 WorkVec.
PutRowIndex(12 + iCnt, iNode2FirstPosIndex + iCnt);
 
 2139                 WorkVec.
PutRowIndex(18 + iCnt, iNode2FirstVelIndex + iCnt);
 
 2142         for (
unsigned int iCnt = 1; iCnt <= 
nConstraints; iCnt++)       {
 
 2143                 WorkVec.
PutRowIndex(24 + iCnt, iFirstReactionIndex + iCnt);
 
 2144                 WorkVec.
PutRowIndex(24 + nConstraints + iCnt, iReactionPrimeIndex + iCnt);
 
 2166                 F(
iPosIncid[iCnt]) = XCurr(iFirstReactionIndex + 1 + iCnt);
 
 2167                 FPrime(
iPosIncid[iCnt]) = XCurr(iReactionPrimeIndex + 1 + iCnt);
 
 2171                 M(
iRotIncid[iCnt]) = XCurr(iFirstReactionIndex + 1 + nPosConstraints + iCnt);
 
 2172                 MPrime(
iRotIncid[iCnt]) = XCurr(iReactionPrimeIndex + 1 + nPosConstraints + iCnt);
 
 2177         Vec3 FPrimeTmp(R1 * FPrime);
 
 2178         Vec3 MPrimeTmp(R1r * MPrime);
 
 2181         WorkVec.
Add(1, FTmp);
 
 2182         WorkVec.
Add(3 + 1, b1.Cross(FTmp) + MTmp);
 
 2185         WorkVec.
Add(6 + 1, FPrimeTmp);
 
 2186         WorkVec.
Add(9 + 1, b1.Cross(FPrimeTmp) + MPrimeTmp);
 
 2189         WorkVec.
Sub(12 + 1, FTmp);
 
 2190         WorkVec.
Sub(15 + 1, b2.Cross(FTmp) + MTmp);
 
 2193         WorkVec.
Sub(18 + 1, FPrimeTmp);
 
 2194         WorkVec.
Sub(21 + 1, b2.Cross(FPrimeTmp) + MPrimeTmp);
 
 2211         unsigned int off = 0;
 
 2282                 return Theta(i - 3);
 
virtual void AfterConvergence(const VectorHandler &X, const VectorHandler &XP)
unsigned int nRotConstraints
const StructNode * pNode1
VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
virtual unsigned int iGetNumPrivData(void) const 
void PutColIndex(integer iSubCol, integer iCol)
unsigned int iPosIncid[3]
unsigned int nRotConstraints
const Vec3 Zero3(0., 0., 0.)
Vec3 Cross(const Vec3 &v) const 
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const 
#define ASSERTMSGBREAK(expr, msg)
void Output(OutputHandler &OH) const 
std::ostream & Write(std::ostream &out, const char *sFill=" ") const 
virtual const Mat3x3 & GetRRef(void) const 
virtual bool bToBeOutput(void) const 
virtual bool bIsDifferentiable(void) const 
TplDriveOwner< Vec3 > XDrv
SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
#define MBDYN_EXCEPT_ARGS
virtual unsigned int iGetNumDof(void) const 
void Output(OutputHandler &OH) const 
virtual void ResizeReset(integer)
unsigned int nPosConstraints
const MatCross_Manip MatCross
VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
unsigned int nConstraints
FullSubMatrixHandler & SetFull(void)
virtual const Mat3x3 & GetRCurr(void) const 
VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
unsigned int iRotIncid[3]
virtual Hint * ParseHint(DataManager *pDM, const char *s) const 
void Add(integer iRow, integer iCol, const Vec3 &v)
virtual unsigned int iGetNumPrivData(void) const 
const StructNode * pNode1
virtual void Sub(integer iRow, const Vec3 &v)
unsigned int iRotEqIndex[3]
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const 
virtual doublereal dGetPrivData(unsigned int i) const 
virtual Hint * ParseHint(DataManager *pDM, const char *s) const 
unsigned int iAgvIncid[3]
std::vector< Hint * > Hints
unsigned int iAgvEqIndex[3]
virtual std::ostream & DescribeDof(std::ostream &out, const char *prefix="", bool bInitial=false) const 
unsigned int nVelConstraints
Vec3 GetVec(unsigned short int i) const 
TotalEquation * total_equation_element
TplDriveOwner< Vec3 > OmegaDrv
SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
void Set(const TplDriveCaller< T > *pDC)
void AddT(integer iRow, integer iCol, const Vec3 &v)
Vec3 VecRot(const Mat3x3 &Phi)
TplDriveOwner< Vec3 > OmegaPDrv
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
virtual T GetP(void) const 
Vec3 MulTV(const Vec3 &v) const 
DofOrder::Order GetEqType(unsigned int i) const 
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
TplDriveOwner< Vec3 > XPDrv
virtual unsigned int iGetNumDof(void) const 
TplDriveOwner< Vec3 > ThetaDrv
virtual std::ostream & Restart(std::ostream &out) const 
virtual std::ostream & DescribeEq(std::ostream &out, const char *prefix="", bool bInitial=false) const 
SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
T Get(const doublereal &dVar) const 
virtual doublereal dGetPrivData(unsigned int i) const 
Mat3x3 Rot(const Vec3 &phi)
virtual unsigned int iGetInitialNumDof(void) const 
virtual unsigned int iGetPrivDataIdx(const char *s) const 
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 
const StructNode * pNode2
VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
std::ostream & Joints(void) const 
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const 
unsigned int iVelIncid[3]
#define ASSERT(expression)
TotalReaction(unsigned int uL, const DofOwner *pDO, bool bPos[3], bool bRot[3], const StructNode *pN1, const Vec3 &f1Tmp, const Mat3x3 &R1hTmp, const Mat3x3 &R1hrTmp, const StructNode *pN2, const Vec3 &f2Tmp, const Mat3x3 &R2hTmp, const Mat3x3 &R2hrTmp, TotalEquation *t_elm, flag fOut)
Mat3x3 MulTM(const Mat3x3 &m) const 
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)
virtual const Vec3 & GetXCurr(void) const 
virtual std::ostream & DescribeDof(std::ostream &out, const char *prefix="", bool bInitial=false) const 
virtual void Add(integer iRow, const Vec3 &v)
virtual void ResizeReset(integer, integer)
virtual void AfterConvergence(const VectorHandler &X, const VectorHandler &XP)
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
unsigned int nAgvConstraints
Vec3 Unwrap(const Vec3 &vPrev, const Vec3 &v)
TplDriveOwner< Vec3 > XPPDrv
const StructNode * pNode2
unsigned int iVelEqIndex[3]
const MatCrossCross_Manip MatCrossCross
void SubT(integer iRow, integer iCol, const Vec3 &v)
unsigned int nConstraints
SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
void PutRowIndex(integer iSubRow, integer iRow)
unsigned int iPosEqIndex[3]
unsigned int iPosIncid[3]
static const char idx2xyz[]
virtual std::ostream & Restart(std::ostream &out) const 
virtual const Vec3 & GetVCurr(void) const 
void Sub(integer iRow, integer iCol, const Vec3 &v)
TotalEquation(unsigned int uL, const DofOwner *pDO, bool bPos[3], bool bVel[3], TplDriveCaller< Vec3 > *const pDCPos[3], bool bRot[3], bool bAgv[3], TplDriveCaller< Vec3 > *const pDCRot[3], const StructNode *pN1, const Vec3 &f1Tmp, const Mat3x3 &R1hTmp, const Mat3x3 &R1hrTmp, const StructNode *pN2, const Vec3 &f2Tmp, const Mat3x3 &R2hTmp, const Mat3x3 &R2hrTmp, flag fOut)
unsigned int nPosConstraints
unsigned int iRotIncid[3]
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const 
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 
unsigned int GetLabel(void) const 
virtual unsigned int iGetPrivDataIdx(const char *s) const