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