102 DEBUGCOUT(
"Entering AbsoluteDispForce::AssRes()" << std::endl);
111 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
112 WorkVec.
PutRowIndex(iCnt, iFirstMomentumIndex + iCnt);
129 DEBUGCOUT(
"Entering AbsoluteDispForce::AssRes()" << std::endl);
131 return AssRes(WorkVec, 1., XCurr, XPrimeCurr);
142 std::ostringstream os;
144 (void)OH.CreateVar(os.str(),
"absolute displacement");
148 Var_F = OH.CreateVar<
Vec3>(os.str() +
"F",
"N",
149 "force components (x, y, z)");
182 DEBUGCOUT(
"Entering AbsoluteDispForce::InitialAssRes()" << std::endl);
191 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
192 WorkVec.
PutRowIndex(iCnt, iFirstPositionIndex + iCnt);
203 connectedNodes.resize(1);
204 connectedNodes[0] =
pNode;
273 DEBUGCOUT(
"Entering AbsoluteDispForce::AssRes()" << std::endl);
283 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
284 WorkVec.
PutRowIndex(iCnt, iFirstMomentumIndex1 + iCnt);
285 WorkVec.
PutRowIndex(3 + iCnt, iFirstMomentumIndex2 + iCnt);
289 WorkVec.
Add(1, fTmp);
290 WorkVec.
Sub(3 + 1, fTmp);
303 DEBUGCOUT(
"Entering AbsoluteDispForce::AssRes()" << std::endl);
305 return AssRes(WorkVec, 1., XCurr, XPrimeCurr);
316 std::ostringstream os;
318 (void)OH.CreateVar(os.str(),
"internal absolute displacement");
322 Var_F = OH.CreateVar<
Vec3>(os.str() +
"F",
"N",
323 "force components (x, y, z)");
362 DEBUGCOUT(
"Entering AbsoluteDispForce::InitialAssRes()" << std::endl);
372 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
373 WorkVec.
PutRowIndex(iCnt, iFirstPositionIndex1 + iCnt);
374 WorkVec.
PutRowIndex(3 + iCnt, iFirstPositionIndex2 + iCnt);
378 WorkVec.
Add(1, fTmp);
379 WorkVec.
Sub(3 + 1, fTmp);
387 connectedNodes.resize(2);
388 connectedNodes[0] =
pNode1;
389 connectedNodes[1] =
pNode2;
424 connectedNodes.resize(1);
425 connectedNodes[0] =
pNode;
489 DEBUGCOUT(
"Entering AbsoluteForce::AssJac()" << std::endl);
498 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
524 DEBUGCOUT(
"Entering AbsoluteForce::AssRes()" << std::endl);
533 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
534 WorkVec.
PutRowIndex(iCnt, iFirstMomentumIndex + iCnt);
555 DEBUGCOUT(
"Entering AbsoluteForce::AssRes()" << std::endl);
564 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
565 WorkVec.
PutRowIndex(iCnt, iFirstMomentumIndex + iCnt);
586 std::ostringstream os;
588 (void)OH.CreateVar(os.str(),
"absolute");
592 Var_F = OH.CreateVar<
Vec3>(os.str() +
"F",
"N",
593 "global force components (x, y, z)");
595 Var_A = OH.CreateVar<
Vec3>(os.str() +
"Arm",
"m",
596 "arm in global frame (x, y, z)");
632 DEBUGCOUT(
"Entering AbsoluteForce::InitialAssJac()" << std::endl);
640 integer iFirstVelocityIndex = iFirstPositionIndex + 6;
641 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
643 WM.
PutRowIndex(3+iCnt, iFirstVelocityIndex + iCnt);
645 WM.
PutColIndex(3+iCnt, iFirstVelocityIndex + iCnt);
673 DEBUGCOUT(
"Entering AbsoluteForce::InitialAssRes()" << std::endl);
682 integer iFirstVelocityIndex = iFirstPositionIndex + 6;
683 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
684 WorkVec.
PutRowIndex(iCnt, iFirstPositionIndex + iCnt);
685 WorkVec.
PutRowIndex(6+iCnt, iFirstVelocityIndex + iCnt);
694 WorkVec.
Add(1, TmpDir);
695 WorkVec.
Add(4, TmpArm.Cross(TmpDir));
697 WorkVec.
Add(10, (Omega.Cross(TmpArm)).
Cross(TmpDir));
755 <<
", position, reference, node, ",
767 DEBUGCOUT(
"Entering FollowerForce::AssJac()" << std::endl);
779 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
781 WM.
PutRowIndex(3 + iCnt, iFirstMomentumIndex + 3 + iCnt);
809 DEBUGCOUT(
"Entering FollowerForce::AssRes()" << std::endl);
818 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
819 WorkVec.
PutRowIndex(iCnt, iFirstMomentumIndex + iCnt);
843 DEBUGCOUT(
"Entering FollowerForce::AssRes()" << std::endl);
852 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
853 WorkVec.
PutRowIndex(iCnt, iFirstMomentumIndex+iCnt);
876 std::ostringstream os;
878 (void)OH.CreateVar(os.str(),
"follower");
883 Var_F = OH.CreateVar<
Vec3>(os.str() +
"f",
"N",
884 "local force components (x, y, z)");
888 Var_F = OH.CreateVar<
Vec3>(os.str() +
"F",
"N",
889 "global force components (x, y, z)");
892 Var_A = OH.CreateVar<
Vec3>(os.str() +
"Arm",
"m",
893 "arm in global frame (x, y, z)");
941 DEBUGCOUT(
"Entering FollowerForce::InitialAssJac()" << std::endl);
949 integer iFirstVelocityIndex = iFirstPositionIndex + 6;
950 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
952 WM.
PutRowIndex(3 + iCnt, iFirstPositionIndex + 3 + iCnt);
953 WM.
PutRowIndex(6 + iCnt, iFirstVelocityIndex + iCnt);
954 WM.
PutRowIndex(9 + iCnt, iFirstVelocityIndex + 3 + iCnt);
955 WM.
PutColIndex(iCnt, iFirstPositionIndex + 3 + iCnt);
956 WM.
PutColIndex(3 + iCnt, iFirstVelocityIndex + 3 + iCnt);
986 DEBUGCOUT(
"Entering FollowerForce::InitialAssRes()" << std::endl);
995 integer iFirstVelocityIndex = iFirstPositionIndex + 6;
996 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
997 WorkVec.
PutRowIndex(iCnt, iFirstPositionIndex + iCnt);
998 WorkVec.
PutRowIndex(6 + iCnt, iFirstVelocityIndex + iCnt);
1007 WorkVec.
Add(1, TmpDir);
1008 WorkVec.
Add(4, TmpArm.Cross(TmpDir));
1009 WorkVec.
Add(7, Omega.Cross(TmpDir));
1010 WorkVec.
Add(10, (Omega.Cross(TmpArm)).
Cross(TmpDir)
1011 + TmpArm.Cross(Omega.Cross(TmpDir)));
1061 out <<
" couple: " <<
GetLabel() <<
", absolute, "
1074 DEBUGCOUT(
"Entering AbsoluteCouple::AssRes()" << std::endl);
1083 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
1084 WorkVec.
PutRowIndex(iCnt, iFirstMomentumIndex+iCnt);
1100 DEBUGCOUT(
"Entering AbsoluteCouple::AssRes()" << std::endl);
1109 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
1110 WorkVec.
PutRowIndex(iCnt, iFirstMomentumIndex+iCnt);
1126 std::ostringstream os;
1127 os <<
"elem.couple." <<
GetLabel();
1128 (void)OH.CreateVar(os.str(),
"absolute");
1132 Var_F = OH.CreateVar<
Vec3>(os.str() +
"M",
"Nm",
1133 "global couple components (x, y, z)");
1135 #endif // USE_NETCDF
1148 #endif // USE_NETCDF
1168 DEBUGCOUT(
"Entering AbsoluteCouple::InitialAssRes()" << std::endl);
1174 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
1175 WorkVec.
PutRowIndex(iCnt, iFirstPositionIndex + iCnt);
1226 out <<
" couple: " <<
GetLabel() <<
", follower, "
1238 DEBUGCOUT(
"Entering FollowerCouple::AssJac()" << std::endl);
1250 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
1261 WM.
Add(1, 1, MWedge);
1274 DEBUGCOUT(
"Entering FollowerCouple::AssRes()" << std::endl);
1283 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
1284 WorkVec.
PutRowIndex(iCnt, iFirstMomentumIndex + iCnt);
1303 DEBUGCOUT(
"Entering FollowerCouple::AssRes()" << std::endl);
1312 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
1313 WorkVec.
PutRowIndex(iCnt, iFirstMomentumIndex+iCnt);
1331 std::ostringstream os;
1332 os <<
"elem.couple." <<
GetLabel();
1333 (void)OH.CreateVar(os.str(),
"follower");
1339 Var_F = OH.CreateVar<
Vec3>(os.str() +
"m",
"Nm",
1340 "local couple components (x, y, z)");
1343 Var_F = OH.CreateVar<
Vec3>(os.str() +
"M",
"Nm",
1344 "global couple components (x, y, z)");
1347 #endif // USE_NETCDF
1364 #endif // USE_NETCDF
1390 DEBUGCOUT(
"Entering FollowerCouple::InitialAssJac()" << std::endl);
1398 integer iFirstVelocityIndex = iFirstPositionIndex + 6;
1399 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
1401 WM.
PutRowIndex(3 + iCnt, iFirstVelocityIndex + iCnt);
1403 WM.
PutColIndex(3 + iCnt, iFirstVelocityIndex + iCnt);
1428 DEBUGCOUT(
"Entering FollowerCouple::InitialAssRes()" << std::endl);
1434 integer iFirstVelocityIndex = iFirstPositionIndex + 6;
1435 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
1436 WorkVec.
PutRowIndex(iCnt, iFirstPositionIndex + iCnt);
1437 WorkVec.
PutRowIndex(6 + iCnt, iFirstVelocityIndex + iCnt);
1445 WorkVec.
Add(1, TmpDir);
1446 WorkVec.
Add(4, Omega.Cross(TmpDir));
1464 pNode1(pN1), pNode2(pN2)
1485 std::vector<const Node *>& connectedNodes)
const {
1486 connectedNodes.resize(2);
1487 connectedNodes[0] =
pNode1;
1488 connectedNodes[1] =
pNode2;
1501 const Vec3& TmpArm1,
const Vec3& TmpArm2,
1505 Arm1(TmpArm1), Arm2(TmpArm2)
1561 DEBUGCOUT(
"Entering AbsoluteInternalForce::AssJac()" << std::endl);
1574 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
1575 WM.
PutRowIndex(iCnt, iFirstMomentumIndex1 + iCnt);
1576 WM.
PutColIndex(iCnt, iFirstPositionIndex1 + iCnt);
1578 WM.
PutRowIndex(3 + iCnt, iFirstMomentumIndex2 + iCnt);
1579 WM.
PutColIndex(3 + iCnt, iFirstPositionIndex2 + iCnt);
1606 DEBUGCOUT(
"Entering AbsoluteInternalForce::AssRes()" << std::endl);
1616 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
1617 WorkVec.
PutRowIndex(iCnt, iFirstMomentumIndex1 + iCnt);
1618 WorkVec.
PutRowIndex(6 + iCnt, iFirstMomentumIndex2 + iCnt);
1629 WorkVec.
Sub(10, M2);
1642 DEBUGCOUT(
"Entering AbsoluteInternalForce::AssRes()" << std::endl);
1652 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
1653 WorkVec.
PutRowIndex(iCnt, iFirstMomentumIndex1 + iCnt);
1654 WorkVec.
PutRowIndex(6 + iCnt, iFirstMomentumIndex2 + iCnt);
1665 WorkVec.
Sub(10, M2);
1678 std::ostringstream os;
1680 (void)OH.CreateVar(os.str(),
"internal absolute");
1684 Var_F = OH.CreateVar<
Vec3>(os.str() +
"F",
"N",
1685 "global force components (x, y, z)");
1687 Var_A1 = OH.CreateVar<
Vec3>(os.str() +
"Arm1",
"m",
1688 "node 1 arm in global frame (x, y, z)");
1690 Var_A2 = OH.CreateVar<
Vec3>(os.str() +
"Arm2",
"m",
1691 "node 2 arm in global frame (x, y, z)");
1693 #endif // USE_NETCDF
1707 #endif // USE_NETCDF
1732 DEBUGCOUT(
"Entering AbsoluteInternalForce::InitialAssJac()"
1741 integer iFirstVelocityIndex1 = iFirstPositionIndex1 + 6;
1744 integer iFirstVelocityIndex2 = iFirstPositionIndex2 + 6;
1746 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
1747 WM.
PutRowIndex(iCnt, iFirstPositionIndex1 + iCnt);
1748 WM.
PutRowIndex(3 + iCnt, iFirstVelocityIndex1 + iCnt);
1750 WM.
PutColIndex(iCnt, iFirstPositionIndex1 + iCnt);
1751 WM.
PutColIndex(3 + iCnt, iFirstVelocityIndex1 + iCnt);
1753 WM.
PutRowIndex(6 + iCnt, iFirstPositionIndex2 + iCnt);
1754 WM.
PutRowIndex(9 + iCnt, iFirstVelocityIndex2 + iCnt);
1756 WM.
PutColIndex(6 + iCnt, iFirstPositionIndex2 + iCnt);
1757 WM.
PutColIndex(9 + iCnt, iFirstVelocityIndex2 + iCnt);
1780 WM.
Add(10, 10, MTmp);
1791 DEBUGCOUT(
"Entering AbsoluteInternalForce::InitialAssRes()"
1801 integer iFirstVelocityIndex1 = iFirstPositionIndex1 + 6;
1804 integer iFirstVelocityIndex2 = iFirstPositionIndex2 + 6;
1806 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
1807 WorkVec.
PutRowIndex(iCnt, iFirstPositionIndex1 + iCnt);
1808 WorkVec.
PutRowIndex(6 + iCnt, iFirstVelocityIndex1 + iCnt);
1810 WorkVec.
PutRowIndex(12 + iCnt, iFirstPositionIndex2 + iCnt);
1811 WorkVec.
PutRowIndex(18 + iCnt, iFirstVelocityIndex2 + iCnt);
1821 WorkVec.
Add(1, TmpDir);
1822 WorkVec.
Add(4, TmpArm1.Cross(TmpDir));
1825 WorkVec.
Add(10, (Omega1.Cross(TmpArm1)).
Cross(TmpDir));
1827 WorkVec.
Sub(7, TmpDir);
1828 WorkVec.
Sub(10, TmpArm2.Cross(TmpDir));
1831 WorkVec.
Sub(16, (Omega2.Cross(TmpArm2)).
Cross(TmpDir));
1846 const Vec3& TmpArm1,
const Vec3& TmpArm2,
1850 Arm1(TmpArm1), Arm2(TmpArm2)
1893 <<
", position, reference, node, ",
1896 <<
", position, reference, node, ",
1908 DEBUGCOUT(
"Entering FollowerInternalForce::AssJac()" << std::endl);
1920 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
1921 WM.
PutRowIndex(iCnt, iFirstMomentumIndex1 + iCnt);
1922 WM.
PutRowIndex(3 + iCnt, iFirstMomentumIndex1 + 3 + iCnt);
1923 WM.
PutColIndex(iCnt, iFirstRotationIndex1 + iCnt);
1925 WM.
PutRowIndex(6 + iCnt, iFirstMomentumIndex1 + iCnt);
1926 WM.
PutRowIndex(9 + iCnt, iFirstMomentumIndex1 + 3 + iCnt);
1927 WM.
PutColIndex(3 + iCnt, iFirstRotationIndex1 + iCnt);
1959 DEBUGCOUT(
"Entering FollowerInternalForce::AssRes()" << std::endl);
1969 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
1970 WorkVec.
PutRowIndex(iCnt, iFirstMomentumIndex1 + iCnt);
1971 WorkVec.
PutRowIndex(6 + iCnt, iFirstMomentumIndex2 + iCnt);
1983 WorkVec.
Add(10, M2);
1996 DEBUGCOUT(
"Entering FollowerInternalForce::AssRes()" << std::endl);
2006 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
2007 WorkVec.
PutRowIndex(iCnt, iFirstMomentumIndex1 + iCnt);
2008 WorkVec.
PutRowIndex(6+iCnt, iFirstMomentumIndex2 + iCnt);
2020 WorkVec.
Add(10, M2);
2033 std::ostringstream os;
2035 (void)OH.CreateVar(os.str(),
"internal follower");
2040 Var_F = OH.CreateVar<
Vec3>(os.str() +
"f",
"N",
2041 "local force components (x, y, z)");
2043 Var_F = OH.CreateVar<
Vec3>(os.str() +
"F",
"N",
2044 "global force components (x, y, z)");
2047 Var_A1 = OH.CreateVar<
Vec3>(os.str() +
"Arm1",
"m",
2048 "node 1 arm in global frame (x, y, z)");
2050 Var_A2 = OH.CreateVar<
Vec3>(os.str() +
"Arm2",
"m",
2051 "node 2 arm in global frame (x, y, z)");
2053 #endif // USE_NETCDF
2071 #endif // USE_NETCDF
2102 DEBUGCOUT(
"Entering FollowerInternalForce::InitialAssJac()" << std::endl);
2114 integer iFirstVelocityIndex1 = iFirstPositionIndex1 + 6;
2117 integer iFirstVelocityIndex2 = iFirstPositionIndex2 + 6;
2119 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
2120 WM.
PutRowIndex(iCnt, iFirstPositionIndex1 + iCnt);
2121 WM.
PutRowIndex(3 + iCnt, iFirstPositionIndex1 + 3 + iCnt);
2122 WM.
PutRowIndex(6 + iCnt, iFirstVelocityIndex1 + iCnt);
2123 WM.
PutRowIndex(9 + iCnt, iFirstVelocityIndex1 + 3 + iCnt);
2125 WM.
PutColIndex(iCnt, iFirstPositionIndex1 +3+iCnt);
2126 WM.
PutColIndex(3 + iCnt, iFirstVelocityIndex1 + 3 + iCnt);
2128 WM.
PutRowIndex(12 + iCnt, iFirstPositionIndex2 + iCnt);
2129 WM.
PutRowIndex(15 + iCnt, iFirstPositionIndex2 + 3 + iCnt);
2130 WM.
PutRowIndex(18 + iCnt, iFirstVelocityIndex2 + iCnt);
2131 WM.
PutRowIndex(21 + iCnt, iFirstVelocityIndex2 + 3 + iCnt);
2133 WM.
PutColIndex(12 + iCnt, iFirstPositionIndex2 + 3 + iCnt);
2134 WM.
PutColIndex(15 + iCnt, iFirstVelocityIndex2 + 3 + iCnt);
2175 DEBUGCOUT(
"Entering FollowerInternalForce::InitialAssRes()" << std::endl);
2184 integer iFirstVelocityIndex1 = iFirstPositionIndex1 + 6;
2187 integer iFirstVelocityIndex2 = iFirstPositionIndex2 + 6;
2189 for (
integer iCnt = 1; iCnt <= 6; iCnt++) {
2190 WorkVec.
PutRowIndex(iCnt, iFirstPositionIndex1 + iCnt);
2191 WorkVec.
PutRowIndex(6 + iCnt, iFirstVelocityIndex1 + iCnt);
2193 WorkVec.
PutRowIndex(12 + iCnt, iFirstPositionIndex2 + iCnt);
2194 WorkVec.
PutRowIndex(18 + iCnt, iFirstVelocityIndex2 + iCnt);
2204 WorkVec.
Add(1, TmpDir);
2205 WorkVec.
Add(4, TmpArm1.Cross(TmpDir));
2206 WorkVec.
Add(7, Omega1.Cross(TmpDir));
2207 WorkVec.
Add(10, (Omega1.Cross(TmpArm1)).
Cross(TmpDir)
2208 + TmpArm1.Cross(Omega1.Cross(TmpDir)));
2210 WorkVec.
Sub(13, TmpDir);
2211 WorkVec.
Sub(16, TmpArm2.Cross(TmpDir));
2212 WorkVec.
Sub(19, Omega1.Cross(TmpDir));
2213 WorkVec.
Sub(22, (Omega2.Cross(TmpArm2)).
Cross(TmpDir)
2214 + TmpArm2.Cross(Omega1.Cross(TmpDir)));
2266 out <<
" couple: " <<
GetLabel() <<
", absolute internal, "
2280 DEBUGCOUT(
"Entering AbsoluteInternalCouple::AssRes()" << std::endl);
2290 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
2291 WorkVec.
PutRowIndex(iCnt, iFirstMomentumIndex1 + iCnt);
2292 WorkVec.
PutRowIndex(3 + iCnt, iFirstMomentumIndex2 + iCnt);
2312 DEBUGCOUT(
"Entering AbsoluteInternalCouple::AssRes()" << std::endl);
2322 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
2323 WorkVec.
PutRowIndex(iCnt, iFirstMomentumIndex1 + iCnt);
2324 WorkVec.
PutRowIndex(3 + iCnt, iFirstMomentumIndex2 + iCnt);
2344 std::ostringstream os;
2345 os <<
"elem.couple." <<
GetLabel();
2346 (void)OH.CreateVar(os.str(),
"internal absolute");
2350 Var_F = OH.CreateVar<
Vec3>(os.str() +
"M",
"Nm",
2351 "global couple components (x, y, z)");
2353 #endif // USE_NETCDF
2365 #endif // USE_NETCDF
2388 DEBUGCOUT(
"Entering AbsoluteInternalCouple::InitialAssRes()" << std::endl);
2395 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
2396 WorkVec.
PutRowIndex(iCnt, iFirstPositionIndex1 + iCnt);
2397 WorkVec.
PutRowIndex(3 + iCnt, iFirstPositionIndex2 + iCnt);
2454 out <<
" couple: " <<
GetLabel() <<
", follower internal, "
2467 DEBUGCOUT(
"Entering FollowerInternalCouple::AssJac()" << std::endl);
2480 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
2481 WM.
PutRowIndex(iCnt, iFirstMomentumIndex1 + iCnt);
2482 WM.
PutColIndex(iCnt, iFirstRotationIndex1 + iCnt);
2484 WM.
PutRowIndex(3 + iCnt, iFirstMomentumIndex2 + iCnt);
2492 WM.
Add(1, 1, MWedge);
2493 WM.
Sub(4, 1, MWedge);
2506 DEBUGCOUT(
"Entering FollowerInternalCouple::AssRes()" << std::endl);
2516 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
2517 WorkVec.
PutRowIndex(iCnt, iFirstMomentumIndex1 + iCnt);
2518 WorkVec.
PutRowIndex(3 + iCnt, iFirstMomentumIndex2 + iCnt);
2538 DEBUGCOUT(
"Entering FollowerInternalCouple::AssRes()" << std::endl);
2548 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
2549 WorkVec.
PutRowIndex(iCnt, iFirstMomentumIndex1 + iCnt);
2550 WorkVec.
PutRowIndex(3 + iCnt, iFirstMomentumIndex2 + iCnt);
2570 std::ostringstream os;
2571 os <<
"elem.couple." <<
GetLabel();
2572 (void)OH.CreateVar(os.str(),
"internal follower");
2577 Var_F = OH.CreateVar<
Vec3>(os.str() +
"m",
"Nm",
2578 "local couple components (x, y, z)");
2581 Var_F = OH.CreateVar<
Vec3>(os.str() +
"M",
"Nm",
2582 "global couple components (x, y, z)");
2585 #endif // USE_NETCDF
2601 #endif // USE_NETCDF
2630 DEBUGCOUT(
"Entering FollowerInternalCouple::InitialAssJac()" << std::endl);
2638 integer iFirstVelocityIndex1 = iFirstPositionIndex1 + 6;
2640 integer iFirstVelocityIndex2 = iFirstPositionIndex2 + 6;
2641 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
2642 WM.
PutRowIndex(iCnt, iFirstPositionIndex1 + iCnt);
2643 WM.
PutRowIndex(3 + iCnt, iFirstVelocityIndex1 + iCnt);
2645 WM.
PutColIndex(iCnt, iFirstPositionIndex1 + iCnt);
2646 WM.
PutColIndex(3 + iCnt, iFirstVelocityIndex1 + iCnt);
2648 WM.
PutRowIndex(6 + iCnt, iFirstPositionIndex2 + iCnt);
2649 WM.
PutRowIndex(9 + iCnt, iFirstVelocityIndex2 + iCnt);
2678 DEBUGCOUT(
"Entering FollowerInternalCouple::InitialAssRes()" << std::endl);
2684 integer iFirstVelocityIndex1 = iFirstPositionIndex1 + 6;
2687 integer iFirstVelocityIndex2 = iFirstPositionIndex2 + 6;
2689 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
2690 WorkVec.
PutRowIndex(iCnt, iFirstPositionIndex1+iCnt);
2691 WorkVec.
PutRowIndex(3 + iCnt, iFirstVelocityIndex1 + iCnt);
2693 WorkVec.
PutRowIndex(6 + iCnt, iFirstPositionIndex2 + iCnt);
2694 WorkVec.
PutRowIndex(9 + iCnt, iFirstVelocityIndex2 + iCnt);
2701 WorkVec.
Add(1, TmpDir);
2702 WorkVec.
Add(4, Omega1.Cross(TmpDir));
2704 WorkVec.
Sub(7, TmpDir);
2705 WorkVec.
Sub(10, Omega1.Cross(TmpDir));
2715 unsigned int uLabel,
2722 const char *sType = bCouple ?
"Couple" :
"Force";
2735 bool bLegacy(
false);
2736 bool bGotPosition(
false);
2741 silent_cerr(sType <<
"(" << uLabel <<
"): "
2742 "invalid node type at line " << HP.
GetLineData() << std::endl);
2748 bGotPosition =
true;
2749 DEBUGCOUT(
"Arm is supplied" << std::endl);
2753 silent_cerr(sType <<
"(" << uLabel <<
"): "
2754 "\"position\" keyword expected "
2756 "still using deprecated syntax?"
2763 silent_cerr(sType <<
"(" << uLabel <<
") has null direction" << std::endl);
2771 silent_cerr(sType <<
"(" << uLabel <<
") has null direction" << std::endl);
2789 pNode2 =
dynamic_cast<const StructNode *
>(pDispNode2);
2793 silent_cerr(sType <<
"(" << uLabel <<
"): "
2794 "invalid node type at line " << HP.
GetLineData() << std::endl);
2803 bGotPosition =
true;
2804 DEBUGCOUT(
"Node 2 arm is supplied" << std::endl);
2806 }
else if (bLegacy) {
2812 if (bCouple && bInternal && !bGotPosition) {
2813 silent_cerr(sType <<
"(" << uLabel <<
") "
2815 "warning, the syntax changed; "
2816 "you may safely ignore this warning if you used "
2817 "the syntax documented for MBDyn >= 1.3.7"
2834 bool bOutRel(
false);
2835 if (bFollower && HP.
IsKeyWord(
"output" "relative")) {
2924 os <<
" displacement";
2932 os <<
": " << uLabel <<
' ' << pDispNode->
GetLabel()
2935 if (pDispNode2 != 0) {
2936 os <<
' ' << pDispNode2->
GetLabel() <<
' ' << Arm2;
2940 os <<
" output_relative";
virtual std::ostream & Restart(std::ostream &out) const
flag fReadOutput(MBDynParser &HP, const T &t) const
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual void OutputPrepare(OutputHandler &OH)
virtual void OutputPrepare(OutputHandler &OH)
virtual void OutputPrepare(OutputHandler &OH)
virtual void Output(OutputHandler &OH) const
void PutColIndex(integer iSubCol, integer iCol)
FollowerCouple(unsigned int uL, const StructNode *pN, const TplDriveCaller< Vec3 > *pDC, flag fOut)
virtual void OutputPrepare(OutputHandler &OH)
~FollowerInternalCouple(void)
const Vec3 Zero3(0., 0., 0.)
Vec3 Cross(const Vec3 &v) const
virtual std::ostream & Restart(std::ostream &out) const
std::ostream & Write(std::ostream &out, const char *sFill=" ") const
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
virtual const Mat3x3 & GetRRef(void) const
virtual bool bToBeOutput(void) const
#define MBDYN_EXCEPT_ARGS
AbsoluteInternalDispForce(unsigned int uL, const StructDispNode *pN1, const StructDispNode *pN2, const TplDriveCaller< Vec3 > *pDC, flag fOut)
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual void ResizeReset(integer)
const MatCross_Manip MatCross
bool UseNetCDF(int out) const
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
FullSubMatrixHandler & SetFull(void)
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
virtual const Mat3x3 & GetRCurr(void) const
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual Node::Type GetNodeType(void) const
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
const StructNode * pNode1
void Add(integer iRow, integer iCol, const Vec3 &v)
virtual void Output(OutputHandler &OH) const
virtual void OutputPrepare(OutputHandler &OH)
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual void Sub(integer iRow, const Vec3 &v)
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual ~StructuralInternalForce(void)
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
FollowerForce(unsigned int uL, const StructNode *pN, const TplDriveCaller< Vec3 > *pDC, const Vec3 &TmpArm, flag fOut)
virtual void OutputPrepare(OutputHandler &OH)
virtual void GetConnectedNodes(std::vector< const Node * > &connectedNodes) const
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual std::ostream & Restart(std::ostream &out) const
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual const Vec3 & GetWRef(void) const
const StructDispNode * pNode
virtual void Output(OutputHandler &OH) const
FollowerInternalCouple(unsigned int uL, const StructNode *pN1, const StructNode *pN2, const TplDriveCaller< Vec3 > *pDC, flag fOut)
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
virtual void OutputPrepare(OutputHandler &OH)
FollowerInternalForce(unsigned int uL, const StructNode *pN1, const StructNode *pN2, const TplDriveCaller< Vec3 > *pDC, const Vec3 &TmpArm1, const Vec3 &TmpArm2, flag fOut)
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual void Output(OutputHandler &OH) const
virtual std::ostream & Restart(std::ostream &out) const
const StructDispNode * pNode2
StructuralInternalForce(unsigned int uL, const StructNode *pN1, const StructNode *pN2, const TplDriveCaller< Vec3 > *pDC, flag fOut)
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual std::ostream & Restart(std::ostream &out) const
TplDriveCaller< Vec3 > * ReadDCVecAbs(const DataManager *pDM, MBDynParser &HP, const ReferenceFrame &rf)
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual ~StructuralForce(void)
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
~AbsoluteInternalForce(void)
StructuralForce(unsigned int uL, const StructNode *pN, const TplDriveCaller< Vec3 > *pDC, flag fOut)
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
TplDriveCaller< T > * pGetDriveCaller(void) const
virtual std::ostream & Restart(std::ostream &out) const
~AbsoluteInternalDispForce(void)
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual void GetConnectedNodes(std::vector< const Node * > &connectedNodes) const
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Vec3 GetPosRel(const ReferenceFrame &rf)
~AbsoluteInternalCouple(void)
virtual std::ostream & Restart(std::ostream &out) const
virtual bool IsKeyWord(const char *sKeyWord)
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
long GetCurrentStep(void) const
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
T Get(const doublereal &dVar) const
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual void Output(OutputHandler &OH) const
virtual void GetConnectedNodes(std::vector< const Node * > &connectedNodes) const
virtual integer iGetFirstMomentumIndex(void) const =0
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual integer iGetFirstPositionIndex(void) const
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual const Vec3 & GetWCurr(void) const
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
AbsoluteCouple(unsigned int uL, const StructNode *pN, const TplDriveCaller< Vec3 > *pDC, flag fOut)
virtual void Output(OutputHandler &OH) const
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
bool IsOpen(int out) const
virtual std::ostream & Restart(std::ostream &out) const =0
virtual std::ostream & Restart(std::ostream &out) const
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
#define ASSERT(expression)
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
TplDriveCaller< T > * DC2TDC(DriveCaller *pDC, T &t)
VectorExpression< VectorCrossExpr< VectorLhsExpr, VectorRhsExpr >, 3 > Cross(const VectorExpression< VectorLhsExpr, 3 > &u, const VectorExpression< VectorRhsExpr, 3 > &v)
#define SAFENEWWITHCONSTRUCTOR(pnt, item, constructor)
Vec3 GetUnitVecAbs(const ReferenceFrame &rf)
virtual const Vec3 & GetXCurr(void) const
virtual void Add(integer iRow, const Vec3 &v)
virtual std::ostream & Restart(std::ostream &out) const
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
virtual void ResizeReset(integer, integer)
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
AbsoluteInternalForce(unsigned int uL, const StructNode *pN1, const StructNode *pN2, const TplDriveCaller< Vec3 > *pDC, const Vec3 &TmpArm1, const Vec3 &TmpArm2, flag fOut)
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
AbsoluteInternalCouple(unsigned int uL, const StructNode *pN1, const StructNode *pN2, const TplDriveCaller< Vec3 > *pDC, flag fOut)
const MatCrossCross_Manip MatCrossCross
virtual void OutputPrepare(OutputHandler &OH)
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
void PutRowIndex(integer iSubRow, integer iRow)
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
const doublereal * pGetVec(void) const
std::ostream & GetLogFile(void) const
virtual flag fToBeOutput(void) const
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
virtual void OutputPrepare(OutputHandler &OH)
const StructNode * pNode2
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual std::ostream & Restart(std::ostream &out) const
void Sub(integer iRow, integer iCol, const Vec3 &v)
AbsoluteDispForce(unsigned int uL, const StructDispNode *pN, const TplDriveCaller< Vec3 > *pDC, flag fOut)
DriveCaller * GetDriveCaller(bool bDeferred=false)
virtual void Output(OutputHandler &OH) const
Vec3 GetUnitVecRel(const ReferenceFrame &rf)
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
Elem * ReadStructuralForce(DataManager *pDM, MBDynParser &HP, unsigned int uLabel, bool bDisp, bool bCouple, bool bFollower, bool bInternal)
virtual void OutputPrepare(OutputHandler &OH)
virtual std::ostream & Restart(std::ostream &out) const
virtual void Output(OutputHandler &OH) const
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
AbsoluteForce(unsigned int uL, const StructNode *pN, const TplDriveCaller< Vec3 > *pDC, const Vec3 &TmpArm, flag fOut)
~FollowerInternalForce(void)
virtual HighParser::ErrOut GetLineData(void) const
unsigned int GetLabel(void) const
const StructDispNode * pNode1
Node * ReadNode(MBDynParser &HP, Node::Type type) const
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
virtual void GetConnectedNodes(std::vector< const Node * > &connectedNodes) const
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
virtual void Resize(integer iNewSize)=0
virtual void Output(OutputHandler &OH) const
std::ostream & Forces(void) const
virtual void Output(OutputHandler &OH) const
TplDriveCaller< Vec3 > * ReadDCVecRel(const DataManager *pDM, MBDynParser &HP, const ReferenceFrame &rf)
bool UseText(int out) const