76 unsigned int nB,
const BeamConn *
const * ppB,
77 unsigned int uIB,
unsigned int uIN,
82 nRotConstr(0), nBeams(nB), iCurrBeam(0), iType(iT),
83 pNode(pN), ppBeam(ppB),
94 ASSERT(uIN > 0 && uIN <= 3);
129 for (
unsigned int i = 0; i <
nBeams; i++) {
143 return out <<
"# beam slider not implemented yet" << std::endl
144 <<
"beam slider;" << std::endl;
152 Mat3x3 RTmpT(RTmp.Transpose());
155 RTmpT*
F,
M,
F, RTmp*
M)
157 <<
" " <<
sRef <<
" " <<
l << std::endl;
188 DEBUGCOUT(
"Entering BeamSliderJoint::AssJac()" << std::endl);
215 for (
int iCnt = 1; iCnt <= 6; iCnt++) {
227 for (
int iCnt = 1; iCnt <= 6; iCnt++) {
229 iBeamFirstMomIndex+iCnt);
231 iBeamFirstPosIndex+iCnt);
236 for (
unsigned int iCnt = 1; iCnt <=
iGetNumDof(); iCnt++) {
238 iFirstReactionIndex+iCnt);
240 iFirstReactionIndex+iCnt);
244 for (
unsigned int i = 1; i <= 3; i++) {
265 for (
unsigned int i = 1; i <= 3; i++) {
268 WM.
DecCoef(6*(1+Beam::NUMNODES)+1,
273 WM.
DecCoef(6*(1+Beam::NUMNODES)+1,
277 WM.
IncCoef(6*(1+Beam::NUMNODES)+1+i,
282 WM.
Sub(6*(1+Beam::NUMNODES)+1+1,
287 WM.
DecCoef(6*(1+Beam::NUMNODES)+1,
288 6*(1+Beam::NUMNODES)+1, (
F*lp)/dCoef);
291 for (
unsigned int i = 1; i <= 3; i++) {
293 WM.
DecCoef(i, 6*(1+Beam::NUMNODES)+1+i, 1.);
301 WM.
Sub(3+1, 6*(1+Beam::NUMNODES)+1+1, MTmp);
304 WM.
Add(6*(1+Beam::NUMNODES)+1+1, 3+1, MTmp);
308 WM.
Sub(3+1, 3+1, Ffb);
335 for (
unsigned int i = 1; i <= 3; i++) {
338 6*(1+Beam::NUMNODES)+1+i, dW[1]);
344 6*(1+Beam::NUMNODES)+1, d);
346 6*(1+Beam::NUMNODES)+1, d);
351 6*(1+Beam::NUMNODES)+1, d);
353 WM.
IncCoef(6*(activeNode+1)+3+i,
354 6*(1+Beam::NUMNODES)+1, d);
360 WM.
Add(6*(activeNode+1)+3+1, 6*(1+Beam::NUMNODES)+1+1,
362 WM.
Sub(6*(activeNode+1)+3+1, 1, MTmp);
363 WM.
Add(6*(activeNode+1)+3+1, 6*(activeNode+1)+1, MTmp);
371 Vec3 mm(eb2*
m(2) + eb3*
m(3));
379 for (
unsigned int i = 1; i <= 3; i++) {
382 WM.
DecCoef(6*(1+Beam::NUMNODES)+1+3+1,
386 WM.
DecCoef(6*(1+Beam::NUMNODES)+1+3+2,
391 WM.
DecCoef(6*(1+Beam::NUMNODES)+1+3+1,
395 WM.
DecCoef(6*(1+Beam::NUMNODES)+1+3+2,
400 Vec3 mmTmp(mm*(
dNp[iN]*dCoef));
411 WM.
Sub(3+1, 6*(1+iN)+1, mmTmp2);
414 WM.
Add(3+1, 6*(1+iN)+3+1, mmTmp3);
441 for (
unsigned int i = 1; i <= 3; i++) {
445 WM.
DecCoef(6*(1+Beam::NUMNODES)+1+3+1, 3+i, d);
448 WM.
DecCoef(3+i, 6*(1+Beam::NUMNODES)+1+3+1, d);
450 6*(1+Beam::NUMNODES)+1+3+1, d*dW[0]);
453 6*(1+Beam::NUMNODES)+1+3+1,
459 WM.
DecCoef(6*(1+Beam::NUMNODES)+1+3+2, 3+i, d);
462 WM.
DecCoef(3+i, 6*(1+Beam::NUMNODES)+1+3+2, d);
464 6*(1+Beam::NUMNODES)+1+3+2, d*dW[0]);
467 6*(1+Beam::NUMNODES)+1+3+2,
473 WM.
DecCoef(3+i, 6*(1+Beam::NUMNODES)+1, d);
475 6*(1+Beam::NUMNODES)+1, d*dW[0]);
478 6*(1+Beam::NUMNODES)+1,
485 WM.
DecCoef(6*(1+Beam::NUMNODES)+1+3+1,
486 6*(1+Beam::NUMNODES)+1, d);
489 WM.
DecCoef(6*(1+Beam::NUMNODES)+1+3+2,
490 6*(1+Beam::NUMNODES)+1, d);
494 WM.
Sub(3+1, 3+1, mmTmp);
514 DEBUGCOUT(
"Entering BeamSliderJoint::AssRes()" << std::endl);
533 sRef = XCurr(iFirstReactionIndex+1);
534 F =
Vec3(XCurr, iFirstReactionIndex+1+1);
541 m.
Put(2, XCurr(iFirstReactionIndex+1+3+1));
542 m.
Put(3, XCurr(iFirstReactionIndex+1+3+2));
552 m =
Vec3(XCurr, iFirstReactionIndex+1+3+1);
584 if (iCurrBeam <
nBeams-1) {
598 }
else if (
s < -
dS +
dL) {
606 }
else if (
s >
dS +
dL) {
612 }
else if (
s >
dS -
dL) {
628 for (
int iCnt = 1; iCnt <= 6; iCnt++) {
629 WorkVec.
PutRowIndex(iCnt, iNodeFirstMomIndex+iCnt);
636 for (
int iCnt = 1; iCnt <= 6; iCnt++) {
638 iBeamFirstMomIndex+iCnt);
643 for (
unsigned int iCnt = 1; iCnt <=
iGetNumDof(); iCnt++) {
645 iFirstReactionIndex+iCnt);
677 WorkVec.
PutCoef(6*(1+Beam::NUMNODES)+1, (
F*
l)/dCoef);
678 WorkVec.
Add(6*(1+Beam::NUMNODES)+1+1, (
xc-
x)/dCoef);
685 WorkVec.
PutCoef(6*(1+Beam::NUMNODES)+1+3+1, (eb2*l)/dCoef);
686 WorkVec.
PutCoef(6*(1+Beam::NUMNODES)+1+3+2, (eb3*l)/dCoef);
virtual std::ostream & Restart(std::ostream &out) const
const Vec3 & Getf(unsigned int i) const
void PutColIndex(integer iSubCol, integer iCol)
const Vec3 Zero3(0., 0., 0.)
Vec3 Cross(const Vec3 &v) const
virtual bool bToBeOutput(void) const
SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Vec3 xNod[Beam::NUMNODES]
virtual void ResizeReset(integer)
const MatCross_Manip MatCross
FullSubMatrixHandler & SetFull(void)
virtual const Mat3x3 & GetRCurr(void) const
void Add(integer iRow, integer iCol, const Vec3 &v)
virtual unsigned int iGetPrivDataIdx(const char *s) const
virtual void Sub(integer iRow, const Vec3 &v)
doublereal ShapeFunc3N(doublereal d, integer iNode, enum Order Ord)
doublereal dNp[Beam::NUMNODES]
doublereal dNpp[Beam::NUMNODES]
void IncCoef(integer iRow, integer iCol, const doublereal &dCoef)
Vec3 GetVec(unsigned short int i) const
BeamConn(const Beam *pB, const Vec3 &f1, const Vec3 &f2, const Vec3 &f3, const Mat3x3 &R1=Eye3, const Mat3x3 &R2=Eye3, const Mat3x3 &R3=Eye3)
void DecCoef(integer iRow, integer iCol, const doublereal &dCoef)
doublereal dN[Beam::NUMNODES]
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
const StructNode * pGetNode(unsigned int i) const
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
const BeamConn *const * ppBeam
const doublereal & dGet(unsigned short int iRow) const
virtual integer iGetFirstMomentumIndex(void) const =0
virtual integer iGetFirstPositionIndex(void) const
std::ostream & Joints(void) const
#define ASSERT(expression)
void Output(OutputHandler &OH) const
GradientExpression< UnaryExpr< FuncSqrt, Expr > > sqrt(const GradientExpression< Expr > &u)
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 void Add(integer iRow, const Vec3 &v)
BeamSliderJoint(unsigned int uL, const DofOwner *pDO, const StructNode *pN, enum Type iT, unsigned int nB, const BeamConn *const *pB, unsigned int uIB, unsigned int uIN, doublereal dl, const Vec3 &fTmp, const Mat3x3 &RTmp, flag fOut)
Vec3 fTmp[Beam::NUMNODES]
virtual void ResizeReset(integer, integer)
virtual doublereal dGetPrivData(unsigned int i) const
virtual unsigned int iGetNumPrivData(void) const
const MatCrossCross_Manip MatCrossCross
void PutRowIndex(integer iSubRow, integer iRow)
void Sub(integer iRow, integer iCol, const Vec3 &v)
virtual unsigned int iGetNumDof(void) const
SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
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
Vec3 xTmp[Beam::NUMNODES]
unsigned int GetLabel(void) const
void Put(unsigned short int iRow, const doublereal &dCoef)
VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
virtual void Resize(integer iNewSize)=0