MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
BeamSliderJoint Class Reference

#include <beamslider.h>

Inheritance diagram for BeamSliderJoint:
Collaboration diagram for BeamSliderJoint:

Public Types

enum  Type { SPHERICAL, CLASSIC, SPLINE }
 
- Public Types inherited from Elem
enum  Type {
  UNKNOWN = -1, AIRPROPERTIES = 0, INDUCEDVELOCITY, AUTOMATICSTRUCTURAL,
  GRAVITY, BODY, JOINT, JOINT_REGULARIZATION,
  BEAM, PLATE, FORCE, INERTIA,
  ELECTRICBULK, ELECTRIC, THERMAL, HYDRAULIC,
  BULK, LOADABLE, DRIVEN, EXTERNAL,
  AEROMODAL, AERODYNAMIC, GENEL, SOCKETSTREAM_OUTPUT,
  RTAI_OUTPUT = SOCKETSTREAM_OUTPUT, LASTELEMTYPE
}
 
- Public Types inherited from SimulationEntity
typedef std::vector< Hint * > Hints
 
- Public Types inherited from ToBeOutput
enum  { OUTPUT = 0x1U, OUTPUT_MASK = 0xFU, OUTPUT_PRIVATE = 0x10U, OUTPUT_PRIVATE_MASK = ~OUTPUT_MASK }
 
- Public Types inherited from Joint
enum  Type {
  UNKNOWN = -1, DISTANCE = 0, DISTANCEWITHOFFSET, CLAMP,
  SPHERICALHINGE, PIN, UNIVERSALHINGE, UNIVERSALROTATION,
  UNIVERSALPIN, PLANEHINGE, PLANEROTATION, PLANEPIN,
  AXIALROTATION, PLANEDISP, PLANEDISPPIN, INPLANE,
  INPLANECONTACT, J_INLINE, ROD, RODBEZIER,
  DEFORMABLEHINGE, DEFORMABLEDISPJOINT, DEFORMABLEJOINT, DEFORMABLEAXIALJOINT,
  VISCOUSBODY, LINEARVELOCITY, ANGULARVELOCITY, LINEARACCELERATION,
  ANGULARACCELERATION, PRISMATIC, DRIVEHINGE, DRIVEDISP,
  DRIVEDISPPIN, IMPOSEDORIENTATION, IMPOSEDDISP, IMPOSEDDISPPIN,
  IMPOSEDKINEMATICS, BEAMSLIDER, BRAKE, GIMBAL,
  POINT_SURFACE_CONTACT, TOTALJOINT, TOTALPINJOINT, TOTALEQUATION,
  TOTALREACTION, MODAL, SCREWJOINT, LASTJOINTTYPE
}
 

Public Member Functions

 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)
 
 ~BeamSliderJoint (void)
 
virtual std::ostream & Restart (std::ostream &out) const
 
virtual Joint::Type GetJointType (void) const
 
virtual unsigned int iGetNumDof (void) const
 
DofOrder::Order GetDofType (unsigned int i) const
 
void WorkSpaceDim (integer *piNumRows, integer *piNumCols) const
 
VariableSubMatrixHandlerAssJac (VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
SubVectorHandlerAssRes (SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
void Output (OutputHandler &OH) const
 
virtual unsigned int iGetInitialNumDof (void) const
 
virtual void InitialWorkSpaceDim (integer *piNumRows, integer *piNumCols) const
 
VariableSubMatrixHandlerInitialAssJac (VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
 
SubVectorHandlerInitialAssRes (SubVectorHandler &WorkVec, const VectorHandler &XCurr)
 
virtual void GetConnectedNodes (std::vector< const Node * > &connectedNodes) const
 
- Public Member Functions inherited from Elem
 Elem (unsigned int uL, flag fOut)
 
virtual ~Elem (void)
 
virtual std::ostream & DescribeDof (std::ostream &out, const char *prefix="", bool bInitial=false) const
 
virtual void DescribeDof (std::vector< std::string > &desc, bool bInitial=false, int i=-1) const
 
virtual std::ostream & DescribeEq (std::ostream &out, const char *prefix="", bool bInitial=false) const
 
virtual void DescribeEq (std::vector< std::string > &desc, bool bInitial=false, int i=-1) const
 
virtual void AssMats (VariableSubMatrixHandler &WorkMatA, VariableSubMatrixHandler &WorkMatB, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual bool bInverseDynamics (void) const
 
void SetInverseDynamicsFlags (unsigned uIDF)
 
unsigned GetInverseDynamicsFlags (void) const
 
bool bIsErgonomy (void) const
 
bool bIsRightHandSide (void) const
 
virtual VariableSubMatrixHandlerAssJac (VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
 
virtual SubVectorHandlerAssRes (SubVectorHandler &WorkVec, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr, const VectorHandler &XPrimePrimeCurr, InverseDynamics::Order iOrder=InverseDynamics::INVERSE_DYNAMICS)
 
virtual int GetNumConnectedNodes (void) const
 
- Public Member Functions inherited from WithLabel
 WithLabel (unsigned int uL=0, const std::string &sN="")
 
virtual ~WithLabel (void)
 
void PutLabel (unsigned int uL)
 
void PutName (const std::string &sN)
 
unsigned int GetLabel (void) const
 
const std::string & GetName (void) const
 
- Public Member Functions inherited from SimulationEntity
 SimulationEntity (void)
 
virtual ~SimulationEntity (void)
 
virtual bool bIsValidIndex (unsigned int i) const
 
virtual DofOrder::Order GetEqType (unsigned int i) const
 
virtual HintParseHint (DataManager *pDM, const char *s) const
 
virtual void BeforePredict (VectorHandler &, VectorHandler &, VectorHandler &, VectorHandler &) const
 
virtual void AfterPredict (VectorHandler &X, VectorHandler &XP)
 
virtual void Update (const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual void DerivativesUpdate (const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual void AfterConvergence (const VectorHandler &X, const VectorHandler &XP)
 
virtual void AfterConvergence (const VectorHandler &X, const VectorHandler &XP, const VectorHandler &XPP)
 
virtual unsigned int iGetNumPrivData (void) const
 
virtual unsigned int iGetPrivDataIdx (const char *s) const
 
virtual doublereal dGetPrivData (unsigned int i) const
 
virtual std::ostream & OutputAppend (std::ostream &out) const
 
virtual void ReadInitialState (MBDynParser &HP)
 
- Public Member Functions inherited from ToBeOutput
 ToBeOutput (flag fOut=fDefaultOut)
 
virtual ~ToBeOutput (void)
 
virtual void OutputPrepare (OutputHandler &OH)
 
virtual void Output (OutputHandler &OH, const VectorHandler &X, const VectorHandler &XP) const
 
virtual flag fToBeOutput (void) const
 
virtual bool bToBeOutput (void) const
 
virtual void SetOutputFlag (flag f=flag(1))
 
- Public Member Functions inherited from Joint
 Joint (unsigned int uL, const DofOwner *pD, flag fOut)
 
virtual ~Joint (void)
 
virtual Elem::Type GetElemType (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
 
virtual void SetInitialValue (VectorHandler &)
 
virtual void SetValue (DataManager *pDM, VectorHandler &, VectorHandler &, SimulationEntity::Hints *ph=0)
 
virtual void Update (const VectorHandler &XCurr, InverseDynamics::Order iOrder=InverseDynamics::INVERSE_DYNAMICS)
 
bool bIsPrescribedMotion (void) const
 
bool bIsTorque (void) const
 
- Public Member Functions inherited from ElemGravityOwner
 ElemGravityOwner (unsigned int uL, flag fOut)
 
virtual ~ElemGravityOwner (void)
 
virtual doublereal dGetM (void) const
 
Vec3 GetS (void) const
 
Mat3x3 GetJ (void) const
 
Vec3 GetB (void) const
 
Vec3 GetG (void) const
 
- Public Member Functions inherited from GravityOwner
 GravityOwner (void)
 
virtual ~GravityOwner (void)
 
void PutGravity (const Gravity *pG)
 
virtual bool bGetGravity (const Vec3 &X, Vec3 &Acc) const
 
- Public Member Functions inherited from ElemWithDofs
 ElemWithDofs (unsigned int uL, const DofOwner *pDO, flag fOut)
 
virtual ~ElemWithDofs (void)
 
- Public Member Functions inherited from DofOwnerOwner
 DofOwnerOwner (const DofOwner *pDO)
 
virtual ~DofOwnerOwner ()
 
virtual const DofOwnerpGetDofOwner (void) const
 
virtual integer iGetFirstIndex (void) const
 
- Public Member Functions inherited from InitialAssemblyElem
 InitialAssemblyElem (unsigned int uL, flag fOut)
 
virtual ~InitialAssemblyElem (void)
 
- Public Member Functions inherited from SubjectToInitialAssembly
 SubjectToInitialAssembly (void)
 
virtual ~SubjectToInitialAssembly (void)
 

Private Attributes

unsigned int nRotConstr
 
unsigned int nBeams
 
unsigned int iCurrBeam
 
enum Type iType
 
const StructNodepNode
 
const BeamConn *const * ppBeam
 
Vec3 f
 
Mat3x3 R
 
Vec3 F
 
Vec3 m
 
Vec3 M
 
doublereal sRef
 
doublereal s
 
int activeNode
 
doublereal dL
 
doublereal dW [2]
 
Vec3 xNod [Beam::NUMNODES]
 
Vec3 fTmp [Beam::NUMNODES]
 
Vec3 xTmp [Beam::NUMNODES]
 
doublereal dN [Beam::NUMNODES]
 
doublereal dNp [Beam::NUMNODES]
 
doublereal dNpp [Beam::NUMNODES]
 
Vec3 x
 
Vec3 l
 
Vec3 fb
 
Vec3 xc
 
Mat3x3 Rb
 

Additional Inherited Members

- Protected Member Functions inherited from Joint
virtual void OutputPrepare_int (const std::string &type, OutputHandler &OH, std::string &name)
 
- Protected Member Functions inherited from ElemGravityOwner
virtual Vec3 GetS_int (void) const
 
virtual Mat3x3 GetJ_int (void) const
 
virtual Vec3 GetB_int (void) const
 
virtual Vec3 GetG_int (void) const
 
- Protected Attributes inherited from WithLabel
unsigned int uLabel
 
std::string sName
 
- Protected Attributes inherited from ToBeOutput
flag fOutput
 
- Protected Attributes inherited from GravityOwner
GravitypGravity
 

Detailed Description

Definition at line 95 of file beamslider.h.

Member Enumeration Documentation

Enumerator
SPHERICAL 
CLASSIC 
SPLINE 

Definition at line 97 of file beamslider.h.

Constructor & Destructor Documentation

BeamSliderJoint::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 
)

Definition at line 74 of file beamslider.cc.

References activeNode, ASSERT, CLASSIC, iCurrBeam, iType, nBeams, Beam::NODE1, Beam::NODE2, Beam::NODE3, nRotConstr, pNode, ppBeam, s, SPLINE, and sRef.

80 : Elem(uL, fOut),
81 Joint(uL, pDO, fOut),
82 nRotConstr(0), nBeams(nB), iCurrBeam(0), iType(iT),
83 pNode(pN), ppBeam(ppB),
84 f(fTmp), R(RTmp),
85 F(Zero3), M(Zero3),
86 sRef(0.), s(0.),
87 dL(dl),
88 x(Zero3), l(Zero3)
89 {
90  ASSERT(pNode != NULL);
91  ASSERT(nBeams > 0);
92  ASSERT(ppBeam != NULL);
93  ASSERT(uIB > 0 && uIB <= nBeams);
94  ASSERT(uIN > 0 && uIN <= 3);
95 
96  iCurrBeam = uIB-1;
97 
98  switch (uIN) {
99  case 1:
101  break;
102 
103  case 2:
105  break;
106 
107  case 3:
109  break;
110  }
111 
112  sRef = 2.*iCurrBeam + activeNode - 2.;
113  s = sRef;
114 
115  switch (iType) {
116  case CLASSIC:
117  nRotConstr = 2;
118  break;
119 
120  case SPLINE:
121  nRotConstr = 3;
122  break;
123 
124  default:
125  break;
126  }
127 
128 #ifdef DEBUG
129  for (unsigned int i = 0; i < nBeams; i++) {
130  ASSERT(ppBeam[i] != NULL);
131  }
132 #endif /* DEBUG */
133 }
const Vec3 Zero3(0., 0., 0.)
unsigned int nBeams
Definition: beamslider.h:100
unsigned int iCurrBeam
Definition: beamslider.h:101
Joint(unsigned int uL, const DofOwner *pD, flag fOut)
Definition: joint.cc:83
const StructNode * pNode
Definition: beamslider.h:105
const BeamConn *const * ppBeam
Definition: beamslider.h:106
#define ASSERT(expression)
Definition: colamd.c:977
doublereal dL
Definition: beamslider.h:115
doublereal sRef
Definition: beamslider.h:112
enum Type iType
Definition: beamslider.h:103
doublereal s
Definition: beamslider.h:113
Elem(unsigned int uL, flag fOut)
Definition: elem.cc:41
unsigned int nRotConstr
Definition: beamslider.h:99
BeamSliderJoint::~BeamSliderJoint ( void  )

Definition at line 135 of file beamslider.cc.

References NO_OP.

136 {
137  NO_OP;
138 }
#define NO_OP
Definition: myassert.h:74

Member Function Documentation

VariableSubMatrixHandler & BeamSliderJoint::AssJac ( VariableSubMatrixHandler WorkMat,
doublereal  dCoef,
const VectorHandler XCurr,
const VectorHandler XPrimeCurr 
)
virtual

Implements Elem.

Definition at line 183 of file beamslider.cc.

References activeNode, FullSubMatrixHandler::Add(), Vec3::Cross(), grad::Cross(), DEBUGCOUT, FullSubMatrixHandler::DecCoef(), Vec3::dGet(), dL, dN, dNp, dNpp, dW, F, fb, fTmp, Mat3x3::GetVec(), iCurrBeam, DofOwnerOwner::iGetFirstIndex(), StructDispNode::iGetFirstMomentumIndex(), StructDispNode::iGetFirstPositionIndex(), iGetNumDof(), FullSubMatrixHandler::IncCoef(), iType, l, m, M, MatCross, MatCrossCross, Beam::NUMNODES, BeamConn::pGetNode(), pNode, ppBeam, FullSubMatrixHandler::PutColIndex(), FullSubMatrixHandler::PutRowIndex(), Rb, FullSubMatrixHandler::ResizeReset(), VariableSubMatrixHandler::SetFull(), SPHERICAL, FullSubMatrixHandler::Sub(), WorkSpaceDim(), xc, xNod, xTmp, and Zero3.

187 {
188  DEBUGCOUT("Entering BeamSliderJoint::AssJac()" << std::endl);
189 
190  /* Dimensiona e resetta la matrice di lavoro */
191  integer iNumRows = 0;
192  integer iNumCols = 0;
193  WorkSpaceDim(&iNumRows, &iNumCols);
194 
195  FullSubMatrixHandler& WM = WorkMat.SetFull();
196  WM.ResizeReset(iNumRows, iNumCols);
197 
198  /* Indici */
199  integer iNodeFirstMomIndex = pNode->iGetFirstMomentumIndex();
200  integer iNodeFirstPosIndex = pNode->iGetFirstPositionIndex();
201  integer iFirstReactionIndex = iGetFirstIndex();
202  const StructNode *pBeamNode[Beam::NUMNODES];
203 
204  /*
205  * 1 => 6: nodo corpo
206  * 7 => 12: nodo 1 trave
207  * 13 => 18: nodo 2 trave
208  * 19 => 24: nodo 3 trave
209  * 25: l^T F = 0 (s)
210  * 26 => 28: vincolo posizione (F)
211  * 29 => 31: vincoli rotazione, se presenti
212  */
213 
214  /* Indici dei nodi */
215  for (int iCnt = 1; iCnt <= 6; iCnt++) {
216  WM.PutRowIndex(iCnt, iNodeFirstMomIndex+iCnt);
217  WM.PutColIndex(iCnt, iNodeFirstPosIndex+iCnt);
218  }
219 
220  for (int nCnt = 1; nCnt <= Beam::NUMNODES; nCnt++) {
221  pBeamNode[nCnt-1] = ppBeam[iCurrBeam]->pGetNode(nCnt);
222  integer iBeamFirstMomIndex =
223  pBeamNode[nCnt-1]->iGetFirstMomentumIndex();
224  integer iBeamFirstPosIndex =
225  pBeamNode[nCnt-1]->iGetFirstPositionIndex();
226 
227  for (int iCnt = 1; iCnt <= 6; iCnt++) {
228  WM.PutRowIndex(6*nCnt+iCnt,
229  iBeamFirstMomIndex+iCnt);
230  WM.PutColIndex(6*nCnt+iCnt,
231  iBeamFirstPosIndex+iCnt);
232  }
233  }
234 
235  /* Indici del vincolo */
236  for (unsigned int iCnt = 1; iCnt <= iGetNumDof(); iCnt++) {
237  WM.PutRowIndex(6*(1+Beam::NUMNODES)+iCnt,
238  iFirstReactionIndex+iCnt);
239  WM.PutColIndex(6*(1+Beam::NUMNODES)+iCnt,
240  iFirstReactionIndex+iCnt);
241  }
242 
243  /* vincolo in posizione */
244  for (unsigned int i = 1; i <= 3; i++) {
245  /* l^T F = 0 : Delta F */
246  doublereal d = l.dGet(i)/dCoef;
247  WM.DecCoef(6*(1+Beam::NUMNODES)+1,
248  6*(1+Beam::NUMNODES)+1+i, d);
249 
250  /* xc - x = 0: l Delta s */
251  WM.IncCoef(6*(1+Beam::NUMNODES)+1+i,
252  6*(1+Beam::NUMNODES)+1, d);
253 
254  /* xc - x = 0: Delta x_b */
255  WM.DecCoef(6*(1+Beam::NUMNODES)+1+i, i, 1.);
256  }
257 
258  Vec3 lp(Zero3);
259  for (unsigned int iN = 0; iN < Beam::NUMNODES; iN++) {
260  Vec3 Tmp(fTmp[iN].Cross(F));
261 
262  /* l^T F = 0 : Delta s */
263  lp += xTmp[iN]*dNpp[iN];
264 
265  for (unsigned int i = 1; i <= 3; i++) {
266  /* l^T F = 0 : Delta x */
267  doublereal d = F.dGet(i)*dNp[iN];
268  WM.DecCoef(6*(1+Beam::NUMNODES)+1,
269  6*(1+iN)+i, d);
270 
271  /* l^T F = 0 : Delta g */
272  d = Tmp.dGet(i)*dNp[iN];
273  WM.DecCoef(6*(1+Beam::NUMNODES)+1,
274  6*(1+iN)+3+i, d);
275 
276  /* xc - x = 0: Delta x */
277  WM.IncCoef(6*(1+Beam::NUMNODES)+1+i,
278  6*(1+iN)+i, dN[iN]);
279  }
280 
281  /* xc - x = 0: Delta g */
282  WM.Sub(6*(1+Beam::NUMNODES)+1+1,
283  6*(1+iN)+3+1, Mat3x3(MatCross, fTmp[iN]*dN[iN]));
284  }
285 
286  /* l^T F = 0 : Delta s */
287  WM.DecCoef(6*(1+Beam::NUMNODES)+1,
288  6*(1+Beam::NUMNODES)+1, (F*lp)/dCoef);
289 
290  /* reazioni vincolari */
291  for (unsigned int i = 1; i <= 3; i++) {
292  /* corpo: Delta F */
293  WM.DecCoef(i, 6*(1+Beam::NUMNODES)+1+i, 1.);
294 
295  /* trave: Delta F */
296  WM.IncCoef(6*activeNode+i, 6*(1+Beam::NUMNODES)+1+i, dW[0]);
297  }
298 
299  /* corpo: Delta F (momento) */
300  Mat3x3 MTmp(MatCross, fb);
301  WM.Sub(3+1, 6*(1+Beam::NUMNODES)+1+1, MTmp);
302 
303  /* vincolo posizione: Delta gb */
304  WM.Add(6*(1+Beam::NUMNODES)+1+1, 3+1, MTmp);
305 
306  /* corpo: Delta gb (momento) */
307  Mat3x3 Ffb(MatCrossCross, F, fb*dCoef);
308  WM.Sub(3+1, 3+1, Ffb);
309 
310  /* trave: Delta gb (momento) */
311  WM.Add(6*activeNode+3+1, 3+1, Ffb*dW[0]);
312 
313  /* trave: Delta F (momento) */
314  MTmp = Mat3x3(MatCross, F*(dCoef*dW[0]));
315  WM.Add(6*activeNode+3+1, 6*(1+Beam::NUMNODES)+1+1,
316  Mat3x3(MatCross, (xc - xNod[activeNode-1])*dW[0]));
317  WM.Sub(6*activeNode+3+1, 1, MTmp);
318  WM.Add(6*activeNode+3+1, 6*activeNode+1, MTmp);
319 
320  if (dW[1] != 0.) {
321  /* trave: Delta gb (momento) */
322  WM.Add(6*(activeNode+1)+3+1, 3+1, Ffb*dW[1]);
323 
324 /* NOTE: these terms are questionable: the perturbation
325  * related to the amplitude of the smearing should go
326  * in the jacobian, but there is no evidence of improvements
327  * in convergence */
328 #define DELTADW
329 #ifdef DELTADW
330  Vec3 m1(M+(xc-xNod[activeNode-1]).Cross(F));
331  Vec3 m2(M+(xc-xNod[activeNode]).Cross(F));
332 #endif /* DELTADW */
333 
334  /* reazioni vincolari */
335  for (unsigned int i = 1; i <= 3; i++) {
336  /* trave: Delta F */
337  WM.IncCoef(6*(activeNode+1)+i,
338  6*(1+Beam::NUMNODES)+1+i, dW[1]);
339 
340 #ifdef DELTADW
341  /* trave: Delta s (Delta dW forza) */
342  doublereal d = F(i)/(2.*dL);
343  WM.DecCoef(6*activeNode+i,
344  6*(1+Beam::NUMNODES)+1, d);
345  WM.IncCoef(6*(activeNode+1)+i,
346  6*(1+Beam::NUMNODES)+1, d);
347 
348  /* trave: Delta s (Delta dW momento) */
349  d = m1(i)/(2.*dL);
350  WM.DecCoef(6*activeNode+3+i,
351  6*(1+Beam::NUMNODES)+1, d);
352  d = m2(i)/(2.*dL);
353  WM.IncCoef(6*(activeNode+1)+3+i,
354  6*(1+Beam::NUMNODES)+1, d);
355 #endif /* DELTADW */
356  }
357 
358  /* trave: Delta F (momento) */
359  Mat3x3 MTmp(MatCross, F*(dCoef*dW[1]));
360  WM.Add(6*(activeNode+1)+3+1, 6*(1+Beam::NUMNODES)+1+1,
361  Mat3x3(MatCross, (xc-xNod[activeNode]))*dW[1]);
362  WM.Sub(6*(activeNode+1)+3+1, 1, MTmp);
363  WM.Add(6*(activeNode+1)+3+1, 6*(activeNode+1)+1, MTmp);
364  }
365 
366  /* Vincolo in rotazione */
367  if (iType != SPHERICAL) {
368  Vec3 eb2 = Rb.GetVec(2);
369  Vec3 eb3 = Rb.GetVec(3);
370 
371  Vec3 mm(eb2*m(2) + eb3*m(3));
372 
373  doublereal d;
374 
375  for (unsigned int iN = 0; iN < Beam::NUMNODES; iN++) {
376  Vec3 Tmpf2(fTmp[iN].Cross(eb2));
377  Vec3 Tmpf3(fTmp[iN].Cross(eb3));
378 
379  for (unsigned int i = 1; i <= 3; i++) {
380  /* Vincolo in rotazione: Delta x */
381  d = eb2.dGet(i)*dNp[iN];
382  WM.DecCoef(6*(1+Beam::NUMNODES)+1+3+1,
383  6*(1+iN)+i, d);
384 
385  d = eb3.dGet(i)*dNp[iN];
386  WM.DecCoef(6*(1+Beam::NUMNODES)+1+3+2,
387  6*(1+iN)+i, d);
388 
389  /* Vincolo in rotazione: Delta g */
390  d = Tmpf2.dGet(i)*dNp[iN];
391  WM.DecCoef(6*(1+Beam::NUMNODES)+1+3+1,
392  6*(1+iN)+3+i, d);
393 
394  d = Tmpf3.dGet(i)*dNp[iN];
395  WM.DecCoef(6*(1+Beam::NUMNODES)+1+3+2,
396  6*(1+iN)+3+i, d);
397 
398  }
399 
400  Vec3 mmTmp(mm*(dNp[iN]*dCoef));
401  Mat3x3 mmTmp2(MatCross, mmTmp);
402  Mat3x3 mmTmp3(MatCrossCross, mmTmp, fTmp[iN]);
403 
404 #if 0
405  Vec3 MTmp(M*(dNp[iN]*dCoef));
406  Mat3x3 MTmp2(MTmp);
407  Mat3x3 MTmp3(MTmp, fTmp[iN]);
408 #endif
409 
410  /* Reazione vincolare: Delta x */
411  WM.Sub(3+1, 6*(1+iN)+1, mmTmp2);
412 
413  /* Reazione vincolare: Delta g */
414  WM.Add(3+1, 6*(1+iN)+3+1, mmTmp3);
415 
416  if (dW[1] == 0.) {
417  /* Reazione vincolare: Delta x */
418  WM.Add(6*activeNode+3+1, 6*(1+iN)+1, mmTmp2);
419 
420  /* Reazione vincolare: Delta g */
421  WM.Sub(6*activeNode+3+1, 6*(1+iN)+3+1, mmTmp3);
422  } else {
423  /* Reazione vincolare: Delta x */
424  WM.Add(6*activeNode+3+1, 6*(1+iN)+1,
425  mmTmp2*dW[0]);
426  WM.Add(6*(activeNode+1)+3+1, 6*(1+iN)+1,
427  mmTmp2*dW[1]);
428 
429  /* Reazione vincolare: Delta g */
430  WM.Sub(6*activeNode+3+1, 6*(1+iN)+3+1,
431  mmTmp3*dW[0]);
432  WM.Sub(6*(activeNode+1)+3+1, 6*(1+iN)+3+1,
433  mmTmp3*dW[1]);
434  }
435  }
436 
437  Vec3 Tmpl2(eb2.Cross(l));
438  Vec3 Tmpl3(eb3.Cross(l));
439  Vec3 Tmpmmlp(mm.Cross(lp));
440 
441  for (unsigned int i = 1; i <= 3; i++) {
442 
443  /* Vincolo in rotazione: Delta gb */
444  d = Tmpl2.dGet(i);
445  WM.DecCoef(6*(1+Beam::NUMNODES)+1+3+1, 3+i, d);
446 
447  /* Reazione vincolare: Delta M */
448  WM.DecCoef(3+i, 6*(1+Beam::NUMNODES)+1+3+1, d);
449  WM.IncCoef(6*activeNode+3+i,
450  6*(1+Beam::NUMNODES)+1+3+1, d*dW[0]);
451  if (dW[1] != 0) {
452  WM.IncCoef(6*(activeNode+1)+3+i,
453  6*(1+Beam::NUMNODES)+1+3+1,
454  d*dW[1]);
455  }
456 
457  /* Vincolo in rotazione: Delta gb */
458  d = Tmpl3.dGet(i);
459  WM.DecCoef(6*(1+Beam::NUMNODES)+1+3+2, 3+i, d);
460 
461  /* Reazione vincolare: Delta M */
462  WM.DecCoef(3+i, 6*(1+Beam::NUMNODES)+1+3+2, d);
463  WM.IncCoef(6*activeNode+3+i,
464  6*(1+Beam::NUMNODES)+1+3+2, d*dW[0]);
465  if (dW[1] != 0) {
466  WM.IncCoef(6*(activeNode+1)+3+i,
467  6*(1+Beam::NUMNODES)+1+3+2,
468  d*dW[1]);
469  }
470 
471  /* Reazione vincolare: Delta s */
472  d = Tmpmmlp(i);
473  WM.DecCoef(3+i, 6*(1+Beam::NUMNODES)+1, d);
474  WM.IncCoef(6*activeNode+3+i,
475  6*(1+Beam::NUMNODES)+1, d*dW[0]);
476  if (dW[1] != 0) {
477  WM.IncCoef(6*(activeNode+1)+3+i,
478  6*(1+Beam::NUMNODES)+1,
479  d*dW[1]);
480  }
481  }
482 
483  /* Vincolo in rotazione: Delta s */
484  d = (eb2*lp)/dCoef;
485  WM.DecCoef(6*(1+Beam::NUMNODES)+1+3+1,
486  6*(1+Beam::NUMNODES)+1, d);
487 
488  d = (eb3*lp)/dCoef;
489  WM.DecCoef(6*(1+Beam::NUMNODES)+1+3+2,
490  6*(1+Beam::NUMNODES)+1, d);
491 
492  /* Reazione vincolare: Delta gb */
493  Mat3x3 mmTmp(MatCrossCross, l, mm*dCoef);
494  WM.Sub(3+1, 3+1, mmTmp);
495  if (dW[1] == 0) {
496  WM.Add(6*activeNode+3+1, 3+1, mmTmp);
497  } else {
498  WM.Add(6*activeNode+3+1, 3+1, mmTmp*dW[0]);
499  WM.Add(6*(activeNode+1)+3+1, 3+1, mmTmp*dW[1]);
500  }
501 
502  }
503 
504  return WorkMat;
505 }
void PutColIndex(integer iSubCol, integer iCol)
Definition: submat.h:325
const Vec3 Zero3(0., 0., 0.)
Vec3 Cross(const Vec3 &v) const
Definition: matvec3.h:218
Definition: matvec3.h:98
Vec3 xNod[Beam::NUMNODES]
Definition: beamslider.h:118
const MatCross_Manip MatCross
Definition: matvec3.cc:639
FullSubMatrixHandler & SetFull(void)
Definition: submat.h:1168
void Add(integer iRow, integer iCol, const Vec3 &v)
Definition: submat.cc:209
unsigned int iCurrBeam
Definition: beamslider.h:101
doublereal dNp[Beam::NUMNODES]
Definition: beamslider.h:122
doublereal dNpp[Beam::NUMNODES]
Definition: beamslider.h:123
void IncCoef(integer iRow, integer iCol, const doublereal &dCoef)
Definition: submat.h:683
Vec3 GetVec(unsigned short int i) const
Definition: matvec3.h:893
void DecCoef(integer iRow, integer iCol, const doublereal &dCoef)
Definition: submat.h:694
doublereal dN[Beam::NUMNODES]
Definition: beamslider.h:121
const StructNode * pNode
Definition: beamslider.h:105
const StructNode * pGetNode(unsigned int i) const
Definition: beamslider.h:73
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: beamslider.h:160
const BeamConn *const * ppBeam
Definition: beamslider.h:106
const doublereal & dGet(unsigned short int iRow) const
Definition: matvec3.h:285
#define DEBUGCOUT(msg)
Definition: myassert.h:232
virtual integer iGetFirstMomentumIndex(void) const =0
virtual integer iGetFirstPositionIndex(void) const
Definition: strnode.h:452
doublereal dL
Definition: beamslider.h:115
VectorExpression< VectorCrossExpr< VectorLhsExpr, VectorRhsExpr >, 3 > Cross(const VectorExpression< VectorLhsExpr, 3 > &u, const VectorExpression< VectorRhsExpr, 3 > &v)
Definition: matvec.h:3248
enum Type iType
Definition: beamslider.h:103
Vec3 fTmp[Beam::NUMNODES]
Definition: beamslider.h:119
virtual void ResizeReset(integer, integer)
Definition: submat.cc:182
const MatCrossCross_Manip MatCrossCross
Definition: matvec3.cc:640
void PutRowIndex(integer iSubRow, integer iRow)
Definition: submat.h:311
void Sub(integer iRow, integer iCol, const Vec3 &v)
Definition: submat.cc:215
doublereal dW[2]
Definition: beamslider.h:116
virtual unsigned int iGetNumDof(void) const
Definition: beamslider.h:151
virtual integer iGetFirstIndex(void) const
Definition: dofown.h:127
double doublereal
Definition: colamd.c:52
long int integer
Definition: colamd.c:51
Vec3 xTmp[Beam::NUMNODES]
Definition: beamslider.h:120

Here is the call graph for this function:

SubVectorHandler & BeamSliderJoint::AssRes ( SubVectorHandler WorkVec,
doublereal  dCoef,
const VectorHandler XCurr,
const VectorHandler XPrimeCurr 
)
virtual

Implements Elem.

Definition at line 509 of file beamslider.cc.

References activeNode, VectorHandler::Add(), CLASSIC, Vec3::Cross(), grad::Cross(), DEBUGCOUT, dL, dN, dNp, dNpp, dS, dW, f, F, fb, fTmp, BeamConn::Getf(), StructNode::GetRCurr(), Mat3x3::GetVec(), StructDispNode::GetXCurr(), iCurrBeam, DofOwnerOwner::iGetFirstIndex(), StructDispNode::iGetFirstMomentumIndex(), iGetNumDof(), iType, l, m, M, nBeams, NO_OP, Beam::NUMNODES, ORD_D1, ORD_D2, BeamConn::pGetNode(), pNode, ppBeam, Vec3::Put(), VectorHandler::PutCoef(), SubVectorHandler::PutRowIndex(), R, Rb, VectorHandler::ResizeReset(), s, ShapeFunc3N(), SPHERICAL, SPLINE, sRef, VectorHandler::Sub(), WorkSpaceDim(), x, xc, xNod, xTmp, and Zero3.

513 {
514  DEBUGCOUT("Entering BeamSliderJoint::AssRes()" << std::endl);
515 
516  /*
517  * Nota: posso risparmiare tutte le righe dei nodi della trave
518  * che non sono attivi ...
519  */
520 
521  /* Dimensiona e resetta la matrice di lavoro */
522  integer iNumRows = 0;
523  integer iNumCols = 0;
524  WorkSpaceDim(&iNumRows, &iNumCols);
525  WorkVec.ResizeReset(iNumRows);
526 
527  /* Indici */
528  integer iNodeFirstMomIndex = pNode->iGetFirstMomentumIndex();
529  integer iFirstReactionIndex = iGetFirstIndex();
530  const StructNode *pBeamNode[Beam::NUMNODES];
531 
532  /* Aggiorna i dati propri */
533  sRef = XCurr(iFirstReactionIndex+1);
534  F = Vec3(XCurr, iFirstReactionIndex+1+1);
535  switch (iType) {
536  /*
537  * m(2), m(3) are the moments about the axes
538  * orthogonal to the tangent to the reference line
539  */
540  case CLASSIC:
541  m.Put(2, XCurr(iFirstReactionIndex+1+3+1));
542  m.Put(3, XCurr(iFirstReactionIndex+1+3+2));
543  break;
544 
545  /*
546  * m(1) is the moment about the tangent to the
547  * reference line;
548  * m(2), m(3) are the moments about the axes
549  * orthogonal to the tangent to the reference line
550  */
551  case SPLINE:
552  m = Vec3(XCurr, iFirstReactionIndex+1+3+1);
553  break;
554 
555  /*
556  * No moment
557  */
558  default:
559  /* M is set to zero by someone else ... */
560  break;
561  }
562 
563  /*
564  * in base al valore di s decide su quale trave sta operando
565  * (da studiare e implementare ...)
566  *
567  * Nota: passando da una trave all'altra non e' detto che la
568  * metrica sia la stessa (se hanno lunghezze diverse o i nodi
569  * non sono equispaziati, cambia).
570  * In prima approssimazione faccio finta che sia la stessa;
571  * un raffinamento si potra' avere considerando il rapporto
572  * tra le metriche.
573  */
574  s = sRef - 2*iCurrBeam;
575  if (s < -1.) {
576  /* passo alla trave precedente */
577  if (iCurrBeam > 0) {
578  s += 2.;
579  iCurrBeam--;
580  }
581 
582  } else if (s > 1.) {
583  /* passo alla trave successiva */
584  if (iCurrBeam < nBeams-1) {
585  s -= 2.;
586  iCurrBeam++;
587  }
588  }
589 
590  /* Cerco il tratto di trave a cui le forze si applicano ... */
591  /* Primo tratto */
592  if (s < -dS - dL) {
593  activeNode = 1;
594 
595  dW[0] = 1.;
596  dW[1] = 0.;
597 
598  } else if ( s < -dS + dL) {
599  activeNode = 1;
600 
601  doublereal d = .5*(dS + s)/dL;
602  dW[0] = .5 - d;
603  dW[1] = .5 + d;
604 
605  /* Ultimo tratto */
606  } else if (s > dS + dL) {
607  activeNode = 3;
608 
609  dW[0] = 1.;
610  dW[1] = 0.;
611 
612  } else if (s > dS - dL) {
613  activeNode = 2;
614 
615  doublereal d = .5*(dS - s)/dL;
616  dW[0] = .5 + d;
617  dW[1] = .5 - d;
618 
619  /* Tratto centrale */
620  } else {
621  activeNode = 2;
622 
623  dW[0] = 1.;
624  dW[1] = 0.;
625  }
626 
627  /* Indici dei nodi */
628  for (int iCnt = 1; iCnt <= 6; iCnt++) {
629  WorkVec.PutRowIndex(iCnt, iNodeFirstMomIndex+iCnt);
630  }
631  for (int nCnt = 1; nCnt <= Beam::NUMNODES; nCnt++) {
632  pBeamNode[nCnt-1] = ppBeam[iCurrBeam]->pGetNode(nCnt);
633  integer iBeamFirstMomIndex =
634  pBeamNode[nCnt-1]->iGetFirstMomentumIndex();
635 
636  for (int iCnt = 1; iCnt <= 6; iCnt++) {
637  WorkVec.PutRowIndex(6*nCnt+iCnt,
638  iBeamFirstMomIndex+iCnt);
639  }
640  }
641 
642  /* Indici del vincolo */
643  for (unsigned int iCnt = 1; iCnt <= iGetNumDof(); iCnt++) {
644  WorkVec.PutRowIndex(6*(1+Beam::NUMNODES)+iCnt,
645  iFirstReactionIndex+iCnt);
646  }
647 
648  /*
649  * Recupero dati
650  */
651  x = Vec3(Zero3);
652  l = Vec3(Zero3);
653  for (unsigned int i = 0; i < Beam::NUMNODES; i++) {
654  xNod[i] = pBeamNode[i]->GetXCurr();
655  fTmp[i] = pBeamNode[i]->GetRCurr()*ppBeam[iCurrBeam]->Getf(i+1);
656  xTmp[i] = xNod[i]+fTmp[i];
657 
658  dN[i] = ShapeFunc3N(s, i+1);
659  dNp[i] = ShapeFunc3N(s, i+1, ORD_D1);
660  dNpp[i] = ShapeFunc3N(s, i+1, ORD_D2);
661  x += xTmp[i]*dN[i];
662  l += xTmp[i]*dNp[i];
663  }
664 
665  Rb = pNode->GetRCurr()*R;
666  fb = pNode->GetRCurr()*f;
667  xc = pNode->GetXCurr()+fb;
668 
669  Vec3 eb2 = Rb.GetVec(2);
670  Vec3 eb3 = Rb.GetVec(3);
671 
672  /*
673  * vincoli di posizione
674  *
675  * FIXME: togliere la scalatura da F*l ?????
676  */
677  WorkVec.PutCoef(6*(1+Beam::NUMNODES)+1, (F*l)/dCoef);
678  WorkVec.Add(6*(1+Beam::NUMNODES)+1+1, (xc-x)/dCoef);
679 
680  /*
681  * Vincoli di rotazione
682  */
683  if (iType != SPHERICAL) {
684  /* 2 vincoli di rotazione */
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);
687 
688  /* calcolo momento */
689  M = eb2.Cross(l*m(2))+eb3.Cross(l*m(3));
690 
691  if (iType == SPLINE) {
692  /* FIXME: vincolo spline */
693  NO_OP;
694  }
695  }
696 
697  /*
698  * reazioni vincolari
699  */
700  WorkVec.Add(1, F);
701  WorkVec.Add(3+1, M+fb.Cross(F));
702 
703  WorkVec.Sub(6*activeNode+1, F*dW[0]);
704  WorkVec.Sub(6*activeNode+3+1,
705  (M+(xc-xNod[activeNode-1]).Cross(F))*dW[0]);
706 
707  if (dW[1] != 0.) {
708  WorkVec.Sub(6*(activeNode+1)+1, F*dW[1]);
709  WorkVec.Sub(6*(activeNode+1)+3+1,
710  (M+(xc-xNod[activeNode]).Cross(F))*dW[1]);
711  }
712 
713  return WorkVec;
714 }
const Vec3 & Getf(unsigned int i) const
Definition: beamslider.h:78
const Vec3 Zero3(0., 0., 0.)
Vec3 Cross(const Vec3 &v) const
Definition: matvec3.h:218
unsigned int nBeams
Definition: beamslider.h:100
Definition: matvec3.h:98
Vec3 xNod[Beam::NUMNODES]
Definition: beamslider.h:118
virtual void ResizeReset(integer)
Definition: vh.cc:55
virtual const Mat3x3 & GetRCurr(void) const
Definition: strnode.h:1012
unsigned int iCurrBeam
Definition: beamslider.h:101
virtual void Sub(integer iRow, const Vec3 &v)
Definition: vh.cc:78
doublereal ShapeFunc3N(doublereal d, integer iNode, enum Order Ord)
Definition: shapefnc.cc:173
#define NO_OP
Definition: myassert.h:74
doublereal dNp[Beam::NUMNODES]
Definition: beamslider.h:122
doublereal dNpp[Beam::NUMNODES]
Definition: beamslider.h:123
Vec3 GetVec(unsigned short int i) const
Definition: matvec3.h:893
doublereal dN[Beam::NUMNODES]
Definition: beamslider.h:121
const StructNode * pNode
Definition: beamslider.h:105
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
const StructNode * pGetNode(unsigned int i) const
Definition: beamslider.h:73
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: beamslider.h:160
const BeamConn *const * ppBeam
Definition: beamslider.h:106
#define DEBUGCOUT(msg)
Definition: myassert.h:232
virtual integer iGetFirstMomentumIndex(void) const =0
doublereal dL
Definition: beamslider.h:115
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)
Definition: matvec.h:3248
doublereal sRef
Definition: beamslider.h:112
virtual const Vec3 & GetXCurr(void) const
Definition: strnode.h:310
virtual void Add(integer iRow, const Vec3 &v)
Definition: vh.cc:63
enum Type iType
Definition: beamslider.h:103
Vec3 fTmp[Beam::NUMNODES]
Definition: beamslider.h:119
doublereal s
Definition: beamslider.h:113
const doublereal dS
Definition: beamslider.cc:71
doublereal dW[2]
Definition: beamslider.h:116
virtual unsigned int iGetNumDof(void) const
Definition: beamslider.h:151
virtual integer iGetFirstIndex(void) const
Definition: dofown.h:127
double doublereal
Definition: colamd.c:52
long int integer
Definition: colamd.c:51
Vec3 xTmp[Beam::NUMNODES]
Definition: beamslider.h:120
void Put(unsigned short int iRow, const doublereal &dCoef)
Definition: matvec3.h:276

Here is the call graph for this function:

virtual void BeamSliderJoint::GetConnectedNodes ( std::vector< const Node * > &  connectedNodes) const
inlinevirtual

Reimplemented from Elem.

Definition at line 212 of file beamslider.h.

References nBeams, Beam::NUMNODES, BeamConn::pGetNode(), pNode, and ppBeam.

212  {
213  connectedNodes.resize(1 + nBeams*Beam::NUMNODES);
214  connectedNodes[0] = pNode;
215 
216  /* for each beam */
217  for (unsigned int i = 0; i < nBeams; i++) {
218  /* for each node */
219  for (int j = 1; j <= Beam::NUMNODES; j++) {
220  connectedNodes[Beam::NUMNODES*i + j] = ppBeam[i]->pGetNode(j);
221  }
222  }
223  };
unsigned int nBeams
Definition: beamslider.h:100
const StructNode * pNode
Definition: beamslider.h:105
const StructNode * pGetNode(unsigned int i) const
Definition: beamslider.h:73
const BeamConn *const * ppBeam
Definition: beamslider.h:106

Here is the call graph for this function:

DofOrder::Order BeamSliderJoint::GetDofType ( unsigned int  i) const
inlinevirtual

Reimplemented from Elem.

Definition at line 155 of file beamslider.h.

References DofOrder::ALGEBRAIC, ASSERT, and iGetNumDof().

155  {
156  ASSERT(i >= 0 && i < iGetNumDof());
157  return DofOrder::ALGEBRAIC;
158  }
#define ASSERT(expression)
Definition: colamd.c:977
virtual unsigned int iGetNumDof(void) const
Definition: beamslider.h:151

Here is the call graph for this function:

virtual Joint::Type BeamSliderJoint::GetJointType ( void  ) const
inlinevirtual

Implements Joint.

Definition at line 147 of file beamslider.h.

References Joint::BEAMSLIDER.

147  {
148  return Joint::BEAMSLIDER;
149  };
virtual unsigned int BeamSliderJoint::iGetInitialNumDof ( void  ) const
inlinevirtual

Implements SubjectToInitialAssembly.

Definition at line 180 of file beamslider.h.

Referenced by InitialWorkSpaceDim().

180  {
181  // return 8+2*nRotConstr;
182  return 0;
183  };
virtual unsigned int BeamSliderJoint::iGetNumDof ( void  ) const
inlinevirtual

Reimplemented from Elem.

Definition at line 151 of file beamslider.h.

References nRotConstr.

Referenced by AssJac(), AssRes(), GetDofType(), and WorkSpaceDim().

151  {
152  return 4+nRotConstr;
153  };
unsigned int nRotConstr
Definition: beamslider.h:99
VariableSubMatrixHandler & BeamSliderJoint::InitialAssJac ( VariableSubMatrixHandler WorkMat,
const VectorHandler XCurr 
)
virtual

Implements SubjectToInitialAssembly.

Definition at line 718 of file beamslider.cc.

References VariableSubMatrixHandler::SetNullMatrix().

722 {
723  WorkMat.SetNullMatrix();
724 
725  return WorkMat;
726 }
void SetNullMatrix(void)
Definition: submat.h:1159

Here is the call graph for this function:

SubVectorHandler & BeamSliderJoint::InitialAssRes ( SubVectorHandler WorkVec,
const VectorHandler XCurr 
)
virtual

Implements SubjectToInitialAssembly.

Definition at line 730 of file beamslider.cc.

References VectorHandler::Resize().

734 {
735  WorkVec.Resize(0);
736 
737  return WorkVec;
738 }
virtual void Resize(integer iNewSize)=0

Here is the call graph for this function:

virtual void BeamSliderJoint::InitialWorkSpaceDim ( integer piNumRows,
integer piNumCols 
) const
inlinevirtual

Implements SubjectToInitialAssembly.

Definition at line 185 of file beamslider.h.

References iGetInitialNumDof(), and Beam::NUMNODES.

185  {
186  *piNumRows = 12*(1+Beam::NUMNODES)+iGetInitialNumDof();
187  *piNumCols = *piNumRows;
188  };
virtual unsigned int iGetInitialNumDof(void) const
Definition: beamslider.h:180

Here is the call graph for this function:

void BeamSliderJoint::Output ( OutputHandler OH) const
virtual

Reimplemented from ToBeOutput.

Definition at line 148 of file beamslider.cc.

References ToBeOutput::bToBeOutput(), F, WithLabel::GetLabel(), StructNode::GetRCurr(), iCurrBeam, OutputHandler::Joints(), l, M, Joint::Output(), pNode, ppBeam, R, and sRef.

149 {
150  if (bToBeOutput()) {
151  Mat3x3 RTmp(pNode->GetRCurr()*R);
152  Mat3x3 RTmpT(RTmp.Transpose());
153 
154  Joint::Output(OH.Joints(), "BeamSlider", GetLabel(),
155  RTmpT*F, M, F, RTmp*M)
156  << " " << ppBeam[iCurrBeam]->pGetBeam()->GetLabel()
157  << " " << sRef << " " << l << std::endl;
158  }
159 }
virtual bool bToBeOutput(void) const
Definition: output.cc:890
virtual const Mat3x3 & GetRCurr(void) const
Definition: strnode.h:1012
unsigned int iCurrBeam
Definition: beamslider.h:101
const StructNode * pNode
Definition: beamslider.h:105
const BeamConn *const * ppBeam
Definition: beamslider.h:106
std::ostream & Joints(void) const
Definition: output.h:443
doublereal sRef
Definition: beamslider.h:112
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
Definition: joint.cc:138
unsigned int GetLabel(void) const
Definition: withlab.cc:62

Here is the call graph for this function:

std::ostream & BeamSliderJoint::Restart ( std::ostream &  out) const
virtual

Implements Elem.

Definition at line 141 of file beamslider.cc.

142 {
143  return out << "# beam slider not implemented yet" << std::endl
144  << "beam slider;" << std::endl;
145 }
void BeamSliderJoint::WorkSpaceDim ( integer piNumRows,
integer piNumCols 
) const
inlinevirtual

Implements Elem.

Definition at line 160 of file beamslider.h.

References iGetNumDof(), and Beam::NUMNODES.

Referenced by AssJac(), and AssRes().

160  {
161  *piNumRows = 6*(1+Beam::NUMNODES)+iGetNumDof();
162  *piNumCols = *piNumRows;
163  };
virtual unsigned int iGetNumDof(void) const
Definition: beamslider.h:151

Here is the call graph for this function:

Member Data Documentation

int BeamSliderJoint::activeNode
private

Definition at line 114 of file beamslider.h.

Referenced by AssJac(), AssRes(), and BeamSliderJoint().

doublereal BeamSliderJoint::dL
private

Definition at line 115 of file beamslider.h.

Referenced by AssJac(), and AssRes().

doublereal BeamSliderJoint::dN[Beam::NUMNODES]
private

Definition at line 121 of file beamslider.h.

Referenced by AssJac(), and AssRes().

doublereal BeamSliderJoint::dNp[Beam::NUMNODES]
private

Definition at line 122 of file beamslider.h.

Referenced by AssJac(), and AssRes().

doublereal BeamSliderJoint::dNpp[Beam::NUMNODES]
private

Definition at line 123 of file beamslider.h.

Referenced by AssJac(), and AssRes().

doublereal BeamSliderJoint::dW[2]
private

Definition at line 116 of file beamslider.h.

Referenced by AssJac(), and AssRes().

Vec3 BeamSliderJoint::f
private

Definition at line 107 of file beamslider.h.

Referenced by AssRes().

Vec3 BeamSliderJoint::F
private

Definition at line 109 of file beamslider.h.

Referenced by AssJac(), AssRes(), and Output().

Vec3 BeamSliderJoint::fb
private

Definition at line 127 of file beamslider.h.

Referenced by AssJac(), and AssRes().

Vec3 BeamSliderJoint::fTmp[Beam::NUMNODES]
private

Definition at line 119 of file beamslider.h.

Referenced by AssJac(), and AssRes().

unsigned int BeamSliderJoint::iCurrBeam
private

Definition at line 101 of file beamslider.h.

Referenced by AssJac(), AssRes(), BeamSliderJoint(), and Output().

enum Type BeamSliderJoint::iType
private

Definition at line 103 of file beamslider.h.

Referenced by AssJac(), AssRes(), and BeamSliderJoint().

Vec3 BeamSliderJoint::l
private

Definition at line 125 of file beamslider.h.

Referenced by AssJac(), AssRes(), and Output().

Vec3 BeamSliderJoint::m
private

Definition at line 110 of file beamslider.h.

Referenced by AssJac(), and AssRes().

Vec3 BeamSliderJoint::M
private

Definition at line 111 of file beamslider.h.

Referenced by AssJac(), AssRes(), and Output().

unsigned int BeamSliderJoint::nBeams
private

Definition at line 100 of file beamslider.h.

Referenced by AssRes(), BeamSliderJoint(), and GetConnectedNodes().

unsigned int BeamSliderJoint::nRotConstr
private

Definition at line 99 of file beamslider.h.

Referenced by BeamSliderJoint(), and iGetNumDof().

const StructNode* BeamSliderJoint::pNode
private

Definition at line 105 of file beamslider.h.

Referenced by AssJac(), AssRes(), BeamSliderJoint(), GetConnectedNodes(), and Output().

const BeamConn* const* BeamSliderJoint::ppBeam
private

Definition at line 106 of file beamslider.h.

Referenced by AssJac(), AssRes(), BeamSliderJoint(), GetConnectedNodes(), and Output().

Mat3x3 BeamSliderJoint::R
private

Definition at line 108 of file beamslider.h.

Referenced by AssRes(), and Output().

Mat3x3 BeamSliderJoint::Rb
private

Definition at line 129 of file beamslider.h.

Referenced by AssJac(), and AssRes().

doublereal BeamSliderJoint::s
private

Definition at line 113 of file beamslider.h.

Referenced by AssRes(), and BeamSliderJoint().

doublereal BeamSliderJoint::sRef
private

Definition at line 112 of file beamslider.h.

Referenced by AssRes(), BeamSliderJoint(), and Output().

Vec3 BeamSliderJoint::x
private

Definition at line 124 of file beamslider.h.

Referenced by AssRes().

Vec3 BeamSliderJoint::xc
private

Definition at line 128 of file beamslider.h.

Referenced by AssJac(), and AssRes().

Vec3 BeamSliderJoint::xNod[Beam::NUMNODES]
private

Definition at line 118 of file beamslider.h.

Referenced by AssJac(), and AssRes().

Vec3 BeamSliderJoint::xTmp[Beam::NUMNODES]
private

Definition at line 120 of file beamslider.h.

Referenced by AssJac(), and AssRes().


The documentation for this class was generated from the following files: