43 :
Elem(pN->GetLabel(), pN->fToBeOutput()),
80 out <<
"automatic structural displacement: " <<
GetLabel() <<
", "
81 "reference, global, ",
B.
Write(out,
", ") <<
", "
82 "reference, global, ",
BP.
Write(out,
", ") <<
";" << std::endl;
120 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
121 WM.
PutItem(iCnt, iFirstPositionIndex + iCnt,
122 iFirstMomentumIndex + iCnt, -dCoef);
123 WM.
PutItem(3 + iCnt, iFirstMomentumIndex + iCnt,
124 iFirstMomentumIndex + iCnt, 1.);
133 iFirstMomentumIndex, W0*(2.*dCoef));
169 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
170 WMA.
PutItem(iCnt, iFirstPositionIndex + iCnt,
171 iFirstMomentumIndex + iCnt, -1.);
172 WMB.
PutItem(iCnt, iFirstMomentumIndex + iCnt,
173 iFirstMomentumIndex + iCnt, 1.);
191 for (
integer iCnt = 1; iCnt <= 3; iCnt++) {
192 WorkVec.
PutRowIndex(iCnt, iFirstPositionIndex + iCnt);
193 WorkVec.
PutRowIndex(3 + iCnt, iFirstMomentumIndex + iCnt);
197 B =
Vec3(XCurr, iFirstMomentumIndex + 1);
198 BP =
Vec3(XPrimeCurr, iFirstMomentumIndex + 1);
238 std::ostringstream os;
239 os <<
"node.struct." <<
GetLabel() <<
".";
241 std::string name(os.str());
243 Var_B = OH.CreateVar<
Vec3>(name +
"B",
"kg m/s",
"momentum (X, Y, Z)");
244 Var_G = OH.CreateVar<
Vec3>(name +
"G",
"kg m^2/s",
"momenta moment (X, Y, Z)");
245 Var_BP = OH.CreateVar<
Vec3>(name +
"BP",
"kg m/s^2",
"momentum derivative (X, Y, Z)");
246 Var_GP = OH.CreateVar<
Vec3>(name +
"GP",
"kg m^2/s^2",
"momenta moment derivative (X, Y, Z)");
285 XP.
Put(iIndex + 1,
BP);
313 unsigned int idx = 0;
314 if (strcmp(s,
"KE") == 0) {
317 }
else if (strncmp(s,
"beta",
STRLENOF(
"beta")) == 0) {
320 }
else if (strncmp(s,
"gamma",
STRLENOF(
"gamma")) == 0) {
350 if (s[0] !=
']' && s[1] !=
'\0') {
364 unsigned int der = (i - 1)/6;
366 unsigned int type = (i - 1)/3;
395 ASSERT(dynamic_cast<const DynamicStructNode *>(
pNode) != 0);
442 out <<
"automatic structural: " <<
GetLabel() <<
", "
443 "reference, global, ",
B.
Write(out,
", ") <<
", "
444 "reference, global, ",
G.
Write(out,
", ") <<
", "
445 "reference, global, ",
BP.
Write(out,
", ") <<
", "
446 "reference, global, ",
GP.
Write(out,
", ") <<
";" << std::endl;
484 for (
int iCnt = 1; iCnt <= 6; iCnt++) {
485 WM.
PutItem(iCnt, iFirstPositionIndex + iCnt,
486 iFirstMomentumIndex + iCnt, -dCoef);
487 WM.
PutItem(6+iCnt, iFirstMomentumIndex + iCnt,
488 iFirstMomentumIndex + iCnt, 1.);
491 WM.
PutCross(13, iFirstMomentumIndex + 3,
493 WM.
PutCross(19, iFirstMomentumIndex + 3,
494 iFirstPositionIndex, -
B);
501 WM.
PutCross(25, iFirstMomentumIndex,
502 iFirstMomentumIndex, W0*(2.*dCoef));
503 WM.
PutCross(31, iFirstMomentumIndex + 3,
504 iFirstMomentumIndex + 3, W0*dCoef);
540 for (
int iCnt = 1; iCnt <= 6; iCnt++) {
541 WMA.
PutItem(iCnt, iFirstPositionIndex + iCnt,
542 iFirstMomentumIndex + iCnt, -1.);
543 WMB.
PutItem(iCnt, iFirstMomentumIndex + iCnt,
544 iFirstMomentumIndex + iCnt, 1.);
547 WMA.
PutCross(7, iFirstMomentumIndex + 3, iFirstMomentumIndex,
549 WMB.
PutCross(7, iFirstMomentumIndex + 3, iFirstPositionIndex, -
B);
566 for (
integer iCnt = 1; iCnt <= 12; iCnt++) {
567 WorkVec.
PutRowIndex(iCnt, iFirstPositionIndex + iCnt);
571 B =
Vec3(XCurr, iFirstMomentumIndex + 1);
572 G =
Vec3(XCurr, iFirstMomentumIndex + 4);
573 BP =
Vec3(XPrimeCurr, iFirstMomentumIndex + 1);
574 GP =
Vec3(XPrimeCurr, iFirstMomentumIndex + 4);
619 std::ostringstream os;
620 os <<
"node.struct." <<
GetLabel() <<
".";
622 std::string name(os.str());
624 Var_B = OH.CreateVar<
Vec3>(name +
"B",
"kg m/s",
"momentum (X, Y, Z)");
625 Var_G = OH.CreateVar<
Vec3>(name +
"G",
"kg m^2/s",
"momenta moment (X, Y, Z)");
626 Var_BP = OH.CreateVar<
Vec3>(name +
"BP",
"kg m/s^2",
"momentum derivative (X, Y, Z)");
627 Var_GP = OH.CreateVar<
Vec3>(name +
"GP",
"kg m^2/s^2",
"momenta moment derivative (X, Y, Z)");
666 XP.
Put(iIndex + 1,
BP);
667 XP.
Put(iIndex + 4,
GP);
695 unsigned int idx = 0;
696 if (strcmp(s,
"KE") == 0) {
699 }
else if (strncmp(s,
"beta",
STRLENOF(
"beta")) == 0) {
702 }
else if (strncmp(s,
"gamma",
STRLENOF(
"gamma")) == 0) {
732 if (s[0] !=
']' && s[1] !=
'\0') {
747 unsigned int der = (i - 1)/6;
749 unsigned int type = (i - 1)/3;
virtual void Output(OutputHandler &OH) const
const Vec3 Zero3(0., 0., 0.)
Vec3 Cross(const Vec3 &v) const
std::ostream & Write(std::ostream &out, const char *sFill=" ") const
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
virtual bool bToBeOutput(void) const
#define DEBUGCOUTFNAME(fname)
virtual void ResizeReset(integer)
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
void Init(const Vec3 &b, const Vec3 &bp)
bool UseNetCDF(int out) const
virtual void Sub(integer iRow, const Vec3 &v)
std::ostream & Inertia(void) const
virtual doublereal dGetPrivData(unsigned int i) const
virtual unsigned int iGetPrivDataIdx(const char *s) const
void ResizeReset(integer iNewRow, integer iNewCol)
void OutputPrepare(OutputHandler &OH)
void PutCross(integer iSubIt, integer iFirstRow, integer iFirstCol, const Vec3 &v)
std::vector< Hint * > Hints
virtual void AddInertia(const doublereal &dm)
AutomaticStructDispElem(const DynamicStructDispNode *pN)
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual void ComputeAccelerations(Vec3 &XPP) const
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
const Mat3x3 Zero3x3(0., 0., 0., 0., 0., 0., 0., 0., 0.)
virtual void ComputeAccelerations(Vec3 &XPP, Vec3 &WP) const
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
void OutputPrepare(OutputHandler &OH)
void AssMats(VariableSubMatrixHandler &WorkMatA, VariableSubMatrixHandler &WorkMatB, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
void PutItem(integer iSubIt, integer iRow, integer iCol, const doublereal &dCoef)
virtual unsigned int iGetPrivDataIdx(const char *s) const
virtual unsigned int iGetNumPrivData(void) const
virtual void AddInertia(const doublereal &dm, const Vec3 &dS, const Mat3x3 &dJ)
virtual void SetAutoStr(const AutomaticStructDispElem *p)
long GetCurrentStep(void) const
virtual integer iGetFirstPositionIndex(void) const
virtual const Vec3 & GetWCurr(void) const
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
bool IsOpen(int out) const
#define ASSERT(expression)
const RigidBodyKinematics * pGetRBK(void) const
DynamicStructDispNode * pNode
virtual std::ostream & Restart(std::ostream &out) const
virtual void Add(integer iRow, const Vec3 &v)
void Init(const Vec3 &b, const Vec3 &g, const Vec3 &bp, const Vec3 &gp)
Vec3 LDLSolve(const Vec3 &v) const
bool IsSymmetric(void) const
const MatCrossCross_Manip MatCrossCross
virtual void Put(integer iRow, const Vec3 &v)
AutomaticStructElem(const DynamicStructNode *pN)
virtual unsigned int iGetNumPrivData(void) const
virtual const Vec3 & GetW(void) const =0
virtual doublereal dGetPrivData(unsigned int i) const
const doublereal * pGetVec(void) const
void AssMats(VariableSubMatrixHandler &WorkMatA, VariableSubMatrixHandler &WorkMatB, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual const Vec3 & GetVCurr(void) const
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual void Output(OutputHandler &OH) const
SparseSubMatrixHandler & SetSparse(void)
virtual std::ostream & Restart(std::ostream &out) const
unsigned int GetLabel(void) const
bool UseText(int out) const
virtual integer iGetFirstMomentumIndex(void) const