86 bConsistentInertia(
false),
157 bConsistentInertia(
true),
193 for (
unsigned i = 0; i <
NUMSEZ; i++) {
223 for (
unsigned int i = 0; i <
NUMNODES; i++) {
228 for (
unsigned int iSez = 0; iSez <
NUMSEZ; iSez++) {
273 unsigned int idx = 0;
302 if (strncasecmp(s,
"Phi",
STRLENOF(
"Phi")) != 0) {
310 if (strncasecmp(s,
"Omega",
STRLENOF(
"Omega")) != 0) {
350 unsigned int p_idx = 0;
352 if (strncmp(s,
"pI",
STRLENOF(
"pI")) != 0) {
368 if (dynamic_cast<const ViscoElasticBeam *>(
this)) {
409 return p[sez].
dGet(idx - 12);
422 silent_cerr(
"Beam(" <<
GetLabel() <<
"): "
423 "illegal private data " << i << std::endl);
439 pv1[0]*
dN3[Sec][0] + pv2[0]*
dN3[Sec][1] + pv3[0]*
dN3[Sec][2],
440 pv1[1]*
dN3[Sec][0] + pv2[1]*
dN3[Sec][1] + pv3[1]*
dN3[Sec][2],
441 pv1[2]*
dN3[Sec][0] + pv2[2]*
dN3[Sec][1] + pv3[2]*
dN3[Sec][2]);
456 (pv1[0]*
dN3P[Sec][0] + pv2[0]*
dN3P[Sec][1]
458 (pv1[1]*
dN3P[Sec][0] + pv2[1]*
dN3P[Sec][1]
460 (pv1[2]*
dN3P[Sec][0] + pv2[2]*
dN3P[Sec][1]
479 for (
unsigned int i = 0; i <
NUMNODES; i++) {
485 for (
unsigned int i = 0; i <
NUMSEZ; i++) {
493 if (d > std::numeric_limits<doublereal>::epsilon()) {
498 silent_cerr(
"warning, beam " <<
GetLabel()
499 <<
" has singular metric; aborting..." << std::endl);
506 for (
unsigned int i = 0; i <
NUMSEZ; i++) {
532 for (
unsigned int i = 0; i <
NUMNODES; i++) {
547 for (
unsigned int i = 0; i <
NUMSEZ; i++) {
556 for (
unsigned int i = 0; i <
NUMNODES; i++) {
559 for (
unsigned int i = 0; i <
NUMSEZ; i++) {
572 return Restart_(out)<<
';' << std::endl;
579 for (
unsigned int i = 0; i <
NUMNODES; i++) {
580 out <<
", " <<
pNode[i]->
GetLabel() <<
", reference, node, ",
584 for (
unsigned int i = 0; i <
NUMSEZ; i++) {
585 out <<
", reference, global, 1, ",
597 for (
unsigned i = 0; i <
NUMSEZ; i++) {
626 for (
unsigned int i = 0; i <
NUMNODES; i++) {
633 for (
unsigned int iSez = 0; iSez <
NUMSEZ; iSez++) {
634 for (
unsigned int i = 0; i <
NUMNODES; i++) {
641 AzTmp[iSez][i] =
DRef[iSez]*AzTmp[iSez][i];
651 for (
unsigned int iSez = 0; iSez <
NUMSEZ; iSez++) {
655 unsigned int iRow1 = iSez*6 + 1;
656 unsigned int iRow2 = iRow1 + 6;
658 for (
unsigned int i = 0; i <
NUMNODES; i++) {
660 WMA.
Sub(iRow1, 6*i + 1, AzTmp[iSez][i].GetMat11());
661 WMA.
Sub(iRow1, 6*i + 4, AzTmp[iSez][i].GetMat12());
663 WMA.
Sub(iRow1 + 3, 6*i + 1,
664 AzTmp[iSez][i].GetMat21()
666 + bTmp[0].
Cross(AzTmp[iSez][i].GetMat11()));
667 WMA.
Sub(iRow1 + 3, 6*i + 4,
668 AzTmp[iSez][i].GetMat22()
670 + bTmp[0].
Cross(AzTmp[iSez][i].GetMat12()));
673 WMA.
Add(iRow2, 6*i+1, AzTmp[iSez][i].GetMat11());
674 WMA.
Add(iRow2, 6*i+4, AzTmp[iSez][i].GetMat12());
676 WMA.
Add(iRow2 + 3, 6*i + 1,
677 AzTmp[iSez][i].GetMat21()
679 + bTmp[1].
Cross(AzTmp[iSez][i].GetMat11()));
680 WMA.
Add(iRow2 + 3, 6*i + 4,
681 AzTmp[iSez][i].GetMat22()
683 + bTmp[1].
Cross(AzTmp[iSez][i].GetMat12()));
688 WMA.
Sub(iRow1 + 3, 6*iSez + 1, FTmp);
689 WMA.
Add(iRow2 + 3, 6*iSez + 7, FTmp);
716 for (
unsigned int i = 0; i <
NUMNODES; i++) {
725 for (
unsigned int iSez = 0; iSez <
NUMSEZ; iSez++) {
733 R[iSez] = RDelta[iSez]*
RRef[iSez];
759 +
Az[
S_I].GetVec2());
766 -
Az[
SII].GetVec2());
795 for (
int iCnt = 1; iCnt <= 6; iCnt++) {
798 WM.
PutRowIndex(6 + iCnt, iNode2FirstMomIndex + iCnt);
799 WM.
PutColIndex(6 + iCnt, iNode2FirstPosIndex + iCnt);
800 WM.
PutRowIndex(12 + iCnt, iNode3FirstMomIndex + iCnt);
801 WM.
PutColIndex(12 + iCnt, iNode3FirstPosIndex + iCnt);
807 for (
int iCnt = 1; iCnt <= 6; iCnt++) {
808 WM.
PutRowIndex(18 + iCnt, iNode1FirstPosIndex + iCnt);
809 WM.
PutRowIndex(24 + iCnt, iNode2FirstPosIndex + iCnt);
810 WM.
PutRowIndex(30 + iCnt, iNode3FirstPosIndex + iCnt);
848 for (
int iCnt = 1; iCnt <= 6; iCnt++) {
853 WMA.
PutRowIndex(12+iCnt, iNode3FirstMomIndex+iCnt);
854 WMA.
PutColIndex(12+iCnt, iNode3FirstPosIndex+iCnt);
860 for (
unsigned int iCnt = 1; iCnt <= 6; iCnt++) {
863 WMB.
PutRowIndex(6 + iCnt, iNode2FirstMomIndex + iCnt);
864 WMB.
PutColIndex(6 + iCnt, iNode2FirstPosIndex + iCnt);
865 WMB.
PutRowIndex(12 + iCnt, iNode3FirstMomIndex + iCnt);
866 WMB.
PutColIndex(12 + iCnt, iNode3FirstPosIndex + iCnt);
869 for (
unsigned int iCnt = 1; iCnt <= 6; iCnt++) {
870 WMA.
PutRowIndex(18 + iCnt, iNode1FirstPosIndex + iCnt);
871 WMA.
PutRowIndex(24 + iCnt, iNode2FirstPosIndex + iCnt);
872 WMA.
PutRowIndex(30 + iCnt, iNode3FirstPosIndex + iCnt);
874 WMB.
PutRowIndex(18 + iCnt, iNode1FirstPosIndex + iCnt);
875 WMB.
PutRowIndex(24 + iCnt, iNode2FirstPosIndex + iCnt);
876 WMB.
PutRowIndex(30 + iCnt, iNode3FirstPosIndex + iCnt);
904 for (
unsigned int iCnt = 1; iCnt <= 6; iCnt++) {
905 WorkVec.
PutRowIndex(iCnt, iNode1FirstMomIndex+iCnt);
906 WorkVec.
PutRowIndex(6 + iCnt, iNode2FirstMomIndex + iCnt);
907 WorkVec.
PutRowIndex(12 + iCnt, iNode3FirstMomIndex + iCnt);
917 for (
unsigned int iCnt = 1; iCnt <= 6; iCnt++) {
918 WorkVec.
PutRowIndex(18 + iCnt, iNode1FirstPosIndex + iCnt);
919 WorkVec.
PutRowIndex(24 + iCnt, iNode2FirstPosIndex + iCnt);
920 WorkVec.
PutRowIndex(30 + iCnt, iNode3FirstPosIndex + iCnt);
946 for (
unsigned int iCnt = 1; iCnt <= 6; iCnt++) {
947 WorkVec.
PutRowIndex(iCnt, iNode1FirstMomIndex+iCnt);
948 WorkVec.
PutRowIndex(6 + iCnt, iNode2FirstMomIndex + iCnt);
949 WorkVec.
PutRowIndex(12 + iCnt, iNode3FirstMomIndex + iCnt);
971 for (
unsigned int iSez = 0; iSez <
NUMSEZ; iSez++) {
972 RRef[iSez] =
R[iSez];
973 LRef[iSez] =
L[iSez];
997 for (
unsigned int i = 0; i <
NUMNODES; i++) {
1006 for (
unsigned int iSez = 0; iSez <
NUMSEZ; iSez++) {
1014 R[iSez] =
RRef[iSez] = RDelta[iSez]*
RPrev[iSez];
1017 L[iSez] =
LRef[iSez]
1026 =
Vec6(
R[iSez].MulTV(
L[iSez]) -
L0[iSez],
1054 const char *type = 0;
1061 type =
"viscoelastic";
1065 type =
"piezoelectric elastic";
1069 type =
"piezoelectric viscoelastic";
1077 std::ostringstream os;
1080 (void)OH.CreateVar(os.str(), type);
1083 std::string name(os.str());
1087 static const char *sez[] = {
"I",
"II" };
1088 for (
unsigned int iSez = 0; iSez <
NUMSEZ; iSez++) {
1090 os <<
"evaluation point " << sez[iSez] <<
" ";
1091 std::string ep(os.str());
1094 Var_X[iSez] = OH.CreateVar<
Vec3>(name +
"X_" + sez[iSez],
"m",
1095 ep +
"global position vector (X, Y, Z)");
1099 Var_Phi[iSez] = OH.CreateRotationVar(name,
1100 std::string(
"_") + sez[iSez],
od, ep +
"global");
1104 Var_F[iSez] = OH.CreateVar<
Vec3>(name +
"F_" + sez[iSez],
"N",
1105 ep +
"internal force in local frame (F_X, F_Y, F_Z)");
1109 Var_M[iSez] = OH.CreateVar<
Vec3>(name +
"M_" + sez[iSez],
"Nm",
1110 ep +
"internal moment in local frame (M_X, M_Y, M_Z)");
1114 Var_Nu[iSez] = OH.CreateVar<
Vec3>(name +
"nu_" + sez[iSez],
"-",
1115 ep +
"linear strain in local frame (nu_X, nu_Y, nu_Z)");
1119 Var_K[iSez] = OH.CreateVar<
Vec3>(name +
"k_" + sez[iSez],
"1/m",
1120 ep +
"angular strain in local frame (K_X, K_Y, K_Z)");
1124 Var_NuP[iSez] = OH.CreateVar<
Vec3>(name +
"nuP_" + sez[iSez],
"1/s",
1125 ep +
"linear strain rate in local frame (nuP_X, nuP_Y, nuP_Z)");
1129 Var_KP[iSez] = OH.CreateVar<
Vec3>(name +
"kP_" + sez[iSez],
"1/ms",
1130 ep +
"angular strain rate in local frame (KP_X, KP_Y, KP_Z)");
1134 #endif // USE_NETCDF
1146 for (
unsigned iSez = 0; iSez <
NUMSEZ; iSez++) {
1151 if (Var_Phi[iSez]) {
1212 if (Var_NuP[iSez]) {
1249 for (
int iCnt = 1; iCnt <= 6; iCnt++) {
1252 WM.
PutRowIndex(6 + iCnt, iNode2FirstPosIndex + iCnt);
1253 WM.
PutColIndex(6 + iCnt, iNode2FirstPosIndex + iCnt);
1254 WM.
PutRowIndex(12 + iCnt, iNode3FirstPosIndex + iCnt);
1255 WM.
PutColIndex(12 + iCnt, iNode3FirstPosIndex + iCnt);
1277 for (
int iCnt = 1; iCnt <= 6; iCnt++) {
1278 WorkVec.
PutRowIndex(iCnt, iNode1FirstPosIndex + iCnt);
1279 WorkVec.
PutRowIndex(6 + iCnt, iNode2FirstPosIndex + iCnt);
1280 WorkVec.
PutRowIndex(12 + iCnt, iNode3FirstPosIndex + iCnt);
1292 ASSERT(i >= 1 && i <= 3);
1328 Beam(uL, pN1, pN2, pN3, F1, F2, F3, R1, R2, R3, r_I, rII, pD_I, pDII, ood, fOut)
1356 Beam(uL, pN1, pN2, pN3, F1, F2, F3, R1, R2, R3, r_I, rII, pD_I, pDII,
1357 dM_I, s0_I, j0_I, dMII, s0II, j0II, ood, fOut)
1387 for (
unsigned i = 0; i <
NUMSEZ; i++) {
1417 for (
unsigned int i = 0; i <
NUMNODES; i++) {
1425 for (
unsigned int iSez = 0; iSez <
NUMSEZ; iSez++) {
1426 for (
unsigned int i = 0; i <
NUMNODES; i++) {
1428 AzTmp[iSez][i] = AzPrimeTmp[iSez][i]
1433 AzTmp[iSez][i] =
DRef[iSez]*AzTmp[iSez][i]*dCoef;
1441 AzPrimeTmp[iSez][i] =
ERef[iSez]*AzPrimeTmp[iSez][i];
1453 for (
unsigned int iSez = 0; iSez <
NUMSEZ; iSez++) {
1457 unsigned int iRow1 = iSez*6 + 1;
1458 unsigned int iRow2 = iRow1 + 6;
1460 for (
unsigned int i = 0; i <
NUMNODES; i++) {
1462 WMA.
Sub(iRow1, 6*i + 1, AzTmp[iSez][i].GetMat11());
1463 WMA.
Sub(iRow1, 6*i + 4, AzTmp[iSez][i].GetMat12());
1465 WMA.
Sub(iRow1 + 3, 6*i + 1,
1466 AzTmp[iSez][i].GetMat21()
1468 + bTmp[0].
Cross(AzTmp[iSez][i].GetMat11()));
1469 WMA.
Sub(iRow1 + 3, 6*i + 4,
1470 AzTmp[iSez][i].GetMat22()
1472 + bTmp[0].
Cross(AzTmp[iSez][i].GetMat12()));
1475 WMA.
Add(iRow2, 6*i + 1, AzTmp[iSez][i].GetMat11());
1476 WMA.
Add(iRow2, 6*i + 4, AzTmp[iSez][i].GetMat12());
1478 WMA.
Add(iRow2 + 3, 6*i + 1,
1479 AzTmp[iSez][i].GetMat21()
1481 + bTmp[1].
Cross(AzTmp[iSez][i].GetMat11()));
1482 WMA.
Add(iRow2 + 3, 6*i + 4,
1483 AzTmp[iSez][i].GetMat22()
1485 + bTmp[1].
Cross(AzTmp[iSez][i].GetMat12()));
1489 WMB.
Sub(iRow1, 6*i + 1, AzPrimeTmp[iSez][i].GetMat11());
1490 WMB.
Sub(iRow1, 6*i + 4, AzPrimeTmp[iSez][i].GetMat12());
1492 WMB.
Sub(iRow1 + 3, 6*i + 1,
1493 AzPrimeTmp[iSez][i].GetMat21()
1494 + bTmp[0].
Cross(AzPrimeTmp[iSez][i].GetMat11()));
1495 WMB.
Sub(iRow1 + 3, 6*i + 4,
1496 AzPrimeTmp[iSez][i].GetMat22()
1497 + bTmp[0].
Cross(AzPrimeTmp[iSez][i].GetMat12()));
1500 WMB.
Add(iRow2, 6*i + 1, AzPrimeTmp[iSez][i].GetMat11());
1501 WMB.
Add(iRow2, 6*i + 4, AzPrimeTmp[iSez][i].GetMat12());
1503 WMB.
Add(iRow2 + 3, 6*i + 1,
1504 AzPrimeTmp[iSez][i].GetMat21()
1505 + bTmp[1].
Cross(AzPrimeTmp[iSez][i].GetMat11()));
1506 WMB.
Add(iRow2 + 3, 6*i + 4,
1507 AzPrimeTmp[iSez][i].GetMat22()
1508 + bTmp[1].
Cross(AzPrimeTmp[iSez][i].GetMat12()));
1513 WMA.
Sub(iRow1 + 3, 6*iSez + 1, FTmp);
1514 WMA.
Add(iRow2 + 3, 6*iSez + 7, FTmp);
1544 for (
unsigned int i = 0; i <
NUMNODES; i++) {
1557 for (
unsigned int iSez = 0; iSez <
NUMSEZ; iSez++) {
1569 R[iSez] = RDelta[iSez]*
RRef[iSez];
1622 +
Az[
S_I].GetVec2());
1627 WorkVec.
Sub(13,
Az[
SII].GetVec1());
1629 -
Az[
SII].GetVec2());
1642 for (
unsigned int iSez = 0; iSez <
NUMSEZ; iSez++) {
1669 for (
unsigned int i = 0; i <
NUMNODES; i++) {
1682 for (
unsigned int iSez = 0; iSez <
NUMSEZ; iSez++) {
1693 R[iSez] =
RRef[iSez] = RDelta[iSez]*
RPrev[iSez];
1724 =
Vec6(
R[iSez].MulTV(
L[iSez]) -
L0[iSez],
1781 while (HP.
IsArg()) {
1787 }
else if (HP.
IsKeyWord(
"orientation")) {
1790 }
else if (HP.
IsKeyWord(
"configuration")) {
1802 }
else if (HP.
IsKeyWord(
"linear" "strain")) {
1805 }
else if (HP.
IsKeyWord(
"angular" "strain")) {
1811 }
else if (HP.
IsKeyWord(
"linear" "strain" "rate")) {
1814 }
else if (HP.
IsKeyWord(
"angular" "strain" "rate")) {
1817 }
else if (HP.
IsKeyWord(
"strain rates")) {
1830 if (uFlags & uFlag) {
1831 silent_cerr(
"Beam(" << uLabel <<
"): "
1832 "duplicate custom output "
1840 silent_cerr(
"Beam(" << uLabel <<
"): "
1841 "strain rates only allowed for viscoelastic beams (ignored) "
1844 uFlag &= ~
Beam::OUTPUT_EP_STRAIN_RATES;
1898 <<
"(global frame): "
1904 Mat3x3 R2(pNode2->GetRCurr());
1917 <<
"(global frame): "
1918 << pNode2->GetXCurr()+pNode2->GetRCurr()*f2 << std::endl);
1923 Mat3x3 R3(pNode3->GetRCurr());
1936 <<
"(global frame): "
1937 << pNode3->GetXCurr()+pNode3->GetRCurr()*f3 << std::endl);
1958 <<
": Beam(" << uLabel <<
") "
1959 "does not support dynamic constitutive laws yet"
1966 Mat3x3 D11(MTmp.GetMat11());
1967 Mat3x3 D12(MTmp.GetMat12());
1968 Mat3x3 D21(MTmp.GetMat21());
1969 Mat3x3 D22(MTmp.GetMat22());
1972 "First point matrix D11: " << std::endl << D11 << std::endl
1973 <<
"First point matrix D12: " << std::endl << D12 << std::endl
1974 <<
"First point matrix D21: " << std::endl << D21 << std::endl
1975 <<
"First point matrix D22: " << std::endl << D22 << std::endl);
2003 pDII = pD_I->
pCopy();
2004 CLTypeII = CLType_I;
2011 <<
": Beam(" << uLabel <<
") "
2012 "does not support dynamic constitutive laws yet"
2028 D12 = MTmp.GetMat12();
2029 D21 = MTmp.GetMat21();
2030 D22 = MTmp.GetMat22();
2033 "Second point matrix D11: " << std::endl << D11 << std::endl
2034 <<
"Second point matrix D12: " << std::endl << D12 << std::endl
2035 <<
"Second point matrix D21: " << std::endl << D21 << std::endl
2036 <<
"Second point matrix D22: " << std::endl << D22 << std::endl);
2043 if (HP.
IsKeyWord(
"piezoelectric" "actuator")) {
2046 "Piezoelectric actuator beam is expected" << std::endl);
2050 "piezo actuator " << uLabel <<
" has " << iNumElec
2051 <<
" electrodes" << std::endl);
2052 if (iNumElec <= 0) {
2053 silent_cerr(
"PiezoElectricBeam(" << uLabel <<
"): "
2054 "illegal number of electric nodes " << iNumElec
2061 for (
integer i = 0; i < iNumElec; i++) {
2065 PiezoMat[0][0].
Resize(iNumElec);
2066 PiezoMat[1][0].
Resize(iNumElec);
2067 PiezoMat[0][1].
Resize(iNumElec);
2068 PiezoMat[1][1].
Resize(iNumElec);
2071 HP.
GetMat6xN(PiezoMat[0][0], PiezoMat[1][0], iNumElec);
2073 PiezoMat[0][1].
Copy(PiezoMat[0][0]);
2074 PiezoMat[1][1].
Copy(PiezoMat[1][0]);
2076 HP.
GetMat6xN(PiezoMat[0][1], PiezoMat[1][1], iNumElec);
2108 out <<
"beam3: " << uLabel
2110 <<
" ", f1.Write(out,
" ")
2111 <<
" " << pNode2->GetLabel()
2112 <<
" ", f2.Write(out,
" ")
2113 <<
" " << pNode3->GetLabel()
2114 <<
" ", f3.Write(out,
" ")
2126 pNode1, pNode2, pNode3,
2136 pNode1, pNode2, pNode3,
2143 PiezoMat[0][0], PiezoMat[1][0],
2144 PiezoMat[0][1], PiezoMat[1][1],
2153 pNode1, pNode2, pNode3,
2163 pNode1, pNode2, pNode3,
2170 PiezoMat[0][0], PiezoMat[1][0],
2171 PiezoMat[0][1], PiezoMat[1][1],
2193 silent_cerr(
"semicolon expected "
flag fReadOutput(MBDynParser &HP, const T &t) const
const MatGm1_Manip MatGm1
Beam(unsigned int uL, const StructNode *pN1, const StructNode *pN2, const StructNode *pN3, const Vec3 &F1, const Vec3 &F2, const Vec3 &F3, const Mat3x3 &R1, const Mat3x3 &R2, const Mat3x3 &R3, const Mat3x3 &r_I, const Mat3x3 &rII, const ConstitutiveLaw6D *pD_I, const ConstitutiveLaw6D *pDII, OrientationDescription ood, flag fOut)
Mat3x3 GetRotRel(const ReferenceFrame &rf)
virtual void AssStiffnessVec(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Mat3x3 MultRMRt(const Mat3x3 &m, const Mat3x3 &R)
void PutColIndex(integer iSubCol, integer iCol)
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
const Vec3 Zero3(0., 0., 0.)
Vec3 Cross(const Vec3 &v) const
virtual void AfterConvergence(const VectorHandler &X, const VectorHandler &XP)
std::ostream & Write(std::ostream &out, const char *sFill=" ") const
Vec3 MultRV(const Vec3 &v, const Mat3x3 &R)
virtual unsigned int iGetNumPrivData(void) const
virtual const Mat3x3 & GetRRef(void) const
virtual bool bToBeOutput(void) const
virtual void AssInertiaMat(FullSubMatrixHandler &, FullSubMatrixHandler &, doublereal, const VectorHandler &, const VectorHandler &)
ConstitutiveLaw< T, Tder > * pGetConstLaw(void) const
#define MBDYN_EXCEPT_ARGS
#define DEBUGCOUTFNAME(fname)
virtual void ResizeReset(integer)
virtual integer GetInt(integer iDefval=0)
const Vec3 & GetVec2(void) const
const MatCross_Manip MatCross
bool UseNetCDF(int out) const
static Vec3 InterpState(const Vec3 &v1, const Vec3 &v2, const Vec3 &v3, enum Section Sec)
virtual const Vec3 & GetgCurr(void) const
FullSubMatrixHandler & SetFull(void)
virtual const Mat3x3 & GetRCurr(void) const
Mat3x3 GetRotAbs(const ReferenceFrame &rf)
virtual Node::Type GetNodeType(void) const
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
doublereal Dot(const Vec3 &v) const
void Add(integer iRow, integer iCol, const Vec3 &v)
virtual void AddInternalForces(Vec6 &, unsigned int)
ConstitutiveLawOwner< Vec6, Mat6x6 > ConstitutiveLaw6DOwner
std::ostream & Write(std::ostream &out, const FullMatrixHandler &m, const char *s, const char *s2)
const Mat3x3 RNode[NUMNODES]
void SetValue(DataManager *pDM, VectorHandler &, VectorHandler &, SimulationEntity::Hints *ph=0)
virtual void AssInertiaVec(SubVectorHandler &, doublereal, const VectorHandler &, const VectorHandler &)
virtual void GetMat6xN(Mat3xN &m1, Mat3xN &m2, integer iNumCols)
ViscoElasticBeam(unsigned int uL, const StructNode *pN1, const StructNode *pN2, const StructNode *pN3, const Vec3 &F1, const Vec3 &F2, const Vec3 &F3, const Mat3x3 &R1, const Mat3x3 &R2, const Mat3x3 &R3, const Mat3x3 &r_I, const Mat3x3 &rII, const ConstitutiveLaw6D *pD_I, const ConstitutiveLaw6D *pDII, OrientationDescription ood, flag fOut)
ConstitutiveLaw6DOwner * pD[NUMSEZ]
virtual void AssStiffnessVec(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual const Tder & GetFDE(void) const
virtual void Sub(integer iRow, const Vec3 &v)
const Mat3x3 Eye3(1., 0., 0., 0., 1., 0., 0., 0., 1.)
static const unsigned int iNumPrivData
void GetOutput(Elem::Type t, unsigned &, OrientationDescription &) const
virtual const Vec3 & GetWRef(void) const
Mat3x3 mb_deye< Mat3x3 >(const doublereal d)
OrientationDescription ReadOptionalOrientationDescription(DataManager *pDM, MBDynParser &HP)
std::vector< Hint * > Hints
virtual void AfterConvergence(const VectorHandler &X, const VectorHandler &XP)
virtual void AfterPredict(VectorHandler &, VectorHandler &)
static const unsigned int iNumPrivData
Vec6 DefPrimeLocRef[NUMSEZ]
Vec3 GetVec(unsigned short int i) const
virtual const StructNode * pGetNode(unsigned int i) const
virtual unsigned int iGetPrivDataIdx(const char *s) const
Vec3 VecRot(const Mat3x3 &Phi)
virtual doublereal dGetPrivData(unsigned int i) const
void ReadBeamCustomOutput(DataManager *pDM, MBDynParser &HP, unsigned int uLabel, Beam::Type BT, unsigned &uFlags, OrientationDescription &od)
Vec3 MulTV(const Vec3 &v) const
virtual void Output(OutputHandler &OH) const
OrientationDescription od
virtual void AssStiffnessMat(FullSubMatrixHandler &WMA, FullSubMatrixHandler &WMB, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
const Mat3x3 Zero3x3(0., 0., 0., 0., 0., 0., 0., 0., 0.)
const ReferenceFrame AbsRefFrame(0, Vec3(0., 0., 0), Mat3x3(1., 0., 0., 0., 1., 0., 0., 0., 1.), Vec3(0., 0., 0), Vec3(0., 0., 0), EULER_123)
void SetValue(DataManager *pDM, VectorHandler &, VectorHandler &, SimulationEntity::Hints *ph=0)
const Vec3 & GetVec1(void) const
Vec3 MatR2EulerAngles313(const Mat3x3 &R)
void SubMat12(const Mat3x3 &x)
Vec3 GetPosRel(const ReferenceFrame &rf)
void SubMat22(const Mat3x3 &x)
const doublereal dN3[2][3]
virtual bool IsKeyWord(const char *sKeyWord)
virtual ConstitutiveLaw< T, Tder > * pCopy(void) const =0
const Vec6 Zero6(0., 0., 0., 0., 0., 0.)
OrientationDescription od
long GetCurrentStep(void) const
const doublereal & dGet(unsigned short int iRow) const
Vec3 MatR2EulerAngles123(const Mat3x3 &R)
virtual doublereal dGetPrivData(unsigned int i) const
virtual integer iGetFirstMomentumIndex(void) const =0
virtual integer iGetFirstPositionIndex(void) const
virtual const Vec3 & GetWCurr(void) const
virtual void AfterPredict(VectorHandler &, VectorHandler &)
Vec3 InterpDeriv(const Vec3 &v1, const Vec3 &v2, const Vec3 &v3, enum Section Sec)
bool IsOpen(int out) const
void AfterConvergence(const T &Eps, const T &EpsPrime=mb_zero< T >())
virtual void Omega0(void)
#define ASSERT(expression)
const StructNode * pNode[NUMNODES]
ConstitutiveLaw6D * GetConstLaw6D(ConstLawType::Type &clt)
static unsigned int iGetPrivDataIdx_int(const char *s, ConstLawType::Type type)
GradientExpression< UnaryExpr< FuncSqrt, Expr > > sqrt(const GradientExpression< Expr > &u)
Mat3x3 MulTM(const Mat3x3 &m) const
VectorExpression< VectorCrossExpr< VectorLhsExpr, VectorRhsExpr >, 3 > Cross(const VectorExpression< VectorLhsExpr, 3 > &u, const VectorExpression< VectorRhsExpr, 3 > &v)
#define SAFENEWWITHCONSTRUCTOR(pnt, item, constructor)
virtual const Vec3 & GetXCurr(void) const
virtual void Add(integer iRow, const Vec3 &v)
virtual void ResizeReset(integer, integer)
void ReadOptionalBeamCustomOutput(DataManager *pDM, MBDynParser &HP, unsigned int uLabel, Beam::Type BT, unsigned &uFlags, OrientationDescription &od)
virtual unsigned int iGetNumDof(void) const
const MatCrossCross_Manip MatCrossCross
std::ostream & Beams(void) const
void AssMats(VariableSubMatrixHandler &WorkMatA, VariableSubMatrixHandler &WorkMatB, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
void PutRowIndex(integer iSubRow, integer iRow)
const T & GetF(void) const
const doublereal * pGetVec(void) const
virtual const Vec3 & GetgRef(void) const
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
std::ostream & GetLogFile(void) const
virtual bool bInverseDynamics(void) const
virtual flag fToBeOutput(void) const
Vec3 MatR2EulerAngles321(const Mat3x3 &R)
virtual const Vec3 & GetgPCurr(void) const
virtual const Vec3 & GetVCurr(void) const
void Sub(integer iRow, integer iCol, const Vec3 &v)
#define SAFENEWARR(pnt, item, sz)
virtual std::ostream & Restart(std::ostream &out) const
Elem * ReadBeam(DataManager *pDM, MBDynParser &HP, unsigned int uLabel)
StructNode(unsigned int uL, const DofOwner *pDO, const Vec3 &X0, const Mat3x3 &R0, const Vec3 &V0, const Vec3 &W0, const StructNode *pRN, const RigidBodyKinematics *pRBK, doublereal dPosStiff, doublereal dVelStiff, bool bOmRot, OrientationDescription ood, flag fOut)
virtual void OutputPrepare(OutputHandler &OH)
virtual const Vec3 & GetgPRef(void) const
const Mat3xN & Copy(const Mat3xN &m)
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
const bool bConsistentInertia
virtual HighParser::ErrOut GetLineData(void) const
void Update(const T &Eps, const T &EpsPrime=mb_zero< T >())
virtual void AssStiffnessMat(FullSubMatrixHandler &WMA, FullSubMatrixHandler &WMB, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
unsigned int GetLabel(void) const
Node * ReadNode(MBDynParser &HP, Node::Type type) const
const doublereal & dGet(unsigned short int i) const
#define DEBUGLCOUT(level, msg)
const doublereal dN3P[2][3]
bool UseText(int out) const
virtual std::ostream & Restart_(std::ostream &out) const
virtual Beam::Type GetBeamType(void) const