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

#include <vehj4.h>

Inheritance diagram for ElasticAxialJoint:
Collaboration diagram for ElasticAxialJoint:

Public Member Functions

 ElasticAxialJoint (unsigned int uL, const DofOwner *pDO, const ConstitutiveLaw1D *pCL, const StructNode *pN1, const StructNode *pN2, const Mat3x3 &tilde_R1h, const Mat3x3 &tilde_R2h, flag fOut)
 
virtual ~ElasticAxialJoint (void)
 
virtual void AfterConvergence (const VectorHandler &X, const VectorHandler &XP)
 
virtual ConstLawType::Type GetConstLawType (void) const
 
virtual VariableSubMatrixHandlerAssJac (VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual void AssMats (VariableSubMatrixHandler &WorkMatA, VariableSubMatrixHandler &WorkMatB, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual SubVectorHandlerAssRes (SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
VariableSubMatrixHandlerAssJac (VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
 
SubVectorHandlerAssRes (SubVectorHandler &WorkVec, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr, const VectorHandler &XPrimePrimeCurr, InverseDynamics::Order iOrder=InverseDynamics::INVERSE_DYNAMICS)
 
void Update (const VectorHandler &XCurr, InverseDynamics::Order iOrder=InverseDynamics::INVERSE_DYNAMICS)
 
virtual void AfterConvergence (const VectorHandler &X, const VectorHandler &XP, const VectorHandler &XPP)
 
virtual void InitialWorkSpaceDim (integer *piNumRows, integer *piNumCols) const
 
virtual VariableSubMatrixHandlerInitialAssJac (VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
 
virtual SubVectorHandlerInitialAssRes (SubVectorHandler &WorkVec, const VectorHandler &XCurr)
 
- 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 DofOrder::Order GetDofType (unsigned int) const
 
void SetInverseDynamicsFlags (unsigned uIDF)
 
unsigned GetInverseDynamicsFlags (void) const
 
bool bIsErgonomy (void) const
 
bool bIsRightHandSide (void) const
 
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 void BeforePredict (VectorHandler &, VectorHandler &, VectorHandler &, VectorHandler &) const
 
virtual void Update (const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual void DerivativesUpdate (const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
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 DeformableAxialJoint
 DeformableAxialJoint (unsigned int uL, const DofOwner *pDO, const ConstitutiveLaw1D *pCL, const StructNode *pN1, const StructNode *pN2, const Mat3x3 &tilde_R1h, const Mat3x3 &tilde_R2h, flag fOut)
 
virtual ~DeformableAxialJoint (void)
 
virtual Joint::Type GetJointType (void) const
 
virtual std::ostream & Restart (std::ostream &out) const
 
virtual void Output (OutputHandler &OH) const
 
virtual void AfterPredict (VectorHandler &X, VectorHandler &XP)
 
void SetValue (DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
 
virtual void SetInitialValue (VectorHandler &)
 
virtual bool bInverseDynamics (void) const
 
virtual HintParseHint (DataManager *pDM, const char *s) const
 
virtual unsigned int iGetNumDof (void) const
 
virtual void WorkSpaceDim (integer *piNumRows, integer *piNumCols) const
 
virtual unsigned int iGetInitialNumDof (void) const
 
virtual void GetConnectedNodes (std::vector< const Node * > &connectedNodes) const
 
virtual unsigned int iGetNumPrivData (void) const
 
virtual unsigned int iGetPrivDataIdx (const char *s) const
 
virtual doublereal dGetPrivData (unsigned int i) const
 
- 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
 
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)
 
- Public Member Functions inherited from ConstitutiveLawOwner< T, Tder >
 ConstitutiveLawOwner (const ConstitutiveLaw< T, Tder > *pCL)
 
virtual ~ConstitutiveLawOwner (void)
 
ConstitutiveLaw< T, Tder > * pGetConstLaw (void) const
 
void Update (const T &Eps, const T &EpsPrime=mb_zero< T >())
 
void AfterConvergence (const T &Eps, const T &EpsPrime=mb_zero< T >())
 
const T & GetF (void) const
 
const Tder & GetFDE (void) const
 
const Tder & GetFDEPrime (void) const
 
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 DofOrder::Order GetDofType (unsigned int i) const
 
virtual std::ostream & OutputAppend (std::ostream &out) const
 

Protected Member Functions

virtual void AfterPredict (void)
 
virtual void AssMat (FullSubMatrixHandler &WM, doublereal dCoef)
 
virtual void AssVec (SubVectorHandler &WorkVec)
 
- Protected Member Functions inherited from DeformableAxialJoint
virtual void AssMatM (FullSubMatrixHandler &WMA, doublereal dCoef)
 
void AssMatMDE (FullSubMatrixHandler &WMA, doublereal dCoef)
 
virtual void AssMatMDEPrime (FullSubMatrixHandler &WMA, FullSubMatrixHandler &WMB, doublereal dCoef)
 
- 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

doublereal dThetaRef
 
doublereal dThetaCurr
 
- Protected Attributes inherited from WithLabel
unsigned int uLabel
 
std::string sName
 
- Protected Attributes inherited from ToBeOutput
flag fOutput
 
- Protected Attributes inherited from DeformableAxialJoint
const StructNodepNode1
 
const StructNodepNode2
 
Mat3x3 tilde_R1h
 
Mat3x3 tilde_R2h
 
bool bFirstRes
 
doublereal dTol
 
doublereal dM
 
doublereal dMDE
 
doublereal dMDEPrime
 
Vec3 M
 
Mat3x3 MDE
 
Mat3x3 MDEPrime
 
- Protected Attributes inherited from GravityOwner
GravitypGravity
 
- Protected Attributes inherited from ConstitutiveLawOwner< T, Tder >
ConstitutiveLaw< T, Tder > * pConstLaw
 

Additional Inherited Members

- 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
}
 

Detailed Description

Definition at line 159 of file vehj4.h.

Constructor & Destructor Documentation

ElasticAxialJoint::ElasticAxialJoint ( unsigned int  uL,
const DofOwner pDO,
const ConstitutiveLaw1D pCL,
const StructNode pN1,
const StructNode pN2,
const Mat3x3 tilde_R1h,
const Mat3x3 tilde_R2h,
flag  fOut 
)

Definition at line 301 of file vehj4.cc.

References AfterPredict().

309 : Elem(uL, fOut),
310 DeformableAxialJoint(uL, pDO, pCL, pN1, pN2, tilde_R1h, tilde_R2h, fOut),
311 dThetaRef(0.)
312 {
313  // force update of MDE/MDEPrime as needed
314  AfterPredict();
315 }
virtual void AfterPredict(void)
Definition: vehj4.cc:401
doublereal dThetaRef
Definition: vehj4.h:161
DeformableAxialJoint(unsigned int uL, const DofOwner *pDO, const ConstitutiveLaw1D *pCL, const StructNode *pN1, const StructNode *pN2, const Mat3x3 &tilde_R1h, const Mat3x3 &tilde_R2h, flag fOut)
Definition: vehj4.cc:88
Elem(unsigned int uL, flag fOut)
Definition: elem.cc:41

Here is the call graph for this function:

ElasticAxialJoint::~ElasticAxialJoint ( void  )
virtual

Definition at line 317 of file vehj4.cc.

References NO_OP.

318 {
319  NO_OP;
320 }
#define NO_OP
Definition: myassert.h:74

Member Function Documentation

void ElasticAxialJoint::AfterConvergence ( const VectorHandler X,
const VectorHandler XP 
)
virtual

Reimplemented from SimulationEntity.

Definition at line 323 of file vehj4.cc.

References ConstitutiveLawOwner< T, Tder >::AfterConvergence(), and dThetaCurr.

325 {
327 }
doublereal dThetaCurr
Definition: vehj4.h:162
void AfterConvergence(const T &Eps, const T &EpsPrime=mb_zero< T >())
Definition: constltp.h:288

Here is the call graph for this function:

void ElasticAxialJoint::AfterConvergence ( const VectorHandler X,
const VectorHandler XP,
const VectorHandler XPP 
)
virtual

Reimplemented from SimulationEntity.

Definition at line 527 of file vehj4.cc.

References ConstitutiveLawOwner< T, Tder >::AfterConvergence(), and dThetaCurr.

529 {
531 }
doublereal dThetaCurr
Definition: vehj4.h:162
void AfterConvergence(const T &Eps, const T &EpsPrime=mb_zero< T >())
Definition: constltp.h:288

Here is the call graph for this function:

void ElasticAxialJoint::AfterPredict ( void  )
protectedvirtual

Implements DeformableAxialJoint.

Definition at line 401 of file vehj4.cc.

References dThetaCurr, dThetaRef, ConstitutiveLawOwner< T, Tder >::GetFDE(), StructNode::GetRRef(), DeformableAxialJoint::MDE, DeformableAxialJoint::pNode1, DeformableAxialJoint::pNode2, Mat3x3::Tens(), DeformableAxialJoint::tilde_R1h, DeformableAxialJoint::tilde_R2h, ConstitutiveLawOwner< T, Tder >::Update(), and RotManip::VecRot().

Referenced by AssJac(), and ElasticAxialJoint().

402 {
403  /* Calcola le deformazioni, aggiorna il legame costitutivo
404  * e crea la MDE */
405 
406  /* Recupera i dati */
407  Mat3x3 R1h(pNode1->GetRRef()*tilde_R1h);
408  Mat3x3 R2h(pNode2->GetRRef()*tilde_R2h);
409 
410  /* Calcola la deformazione corrente nel sistema locale (nodo a) */
411  dThetaCurr = dThetaRef = RotManip::VecRot(R1h.MulTM(R2h))(3);
412 
413  /* Aggiorna il legame costitutivo */
415 
416  /* Chiede la matrice tangente di riferimento e la porta
417  * nel sistema globale */
418  Vec3 e1z(R1h.GetVec(3));
420 }
virtual const Mat3x3 & GetRRef(void) const
Definition: strnode.h:1006
Definition: matvec3.h:98
const Tder & GetFDE(void) const
Definition: constltp.h:298
const StructNode * pNode1
Definition: vehj4.h:48
const Mat3x3 & Tens(const Vec3 &a, const Vec3 &b)
Definition: matvec3.h:799
Mat3x3 tilde_R2h
Definition: vehj4.h:51
Vec3 VecRot(const Mat3x3 &Phi)
Definition: Rot.cc:136
const StructNode * pNode2
Definition: vehj4.h:49
doublereal dThetaRef
Definition: vehj4.h:161
doublereal dThetaCurr
Definition: vehj4.h:162
Mat3x3 tilde_R1h
Definition: vehj4.h:50
void Update(const T &Eps, const T &EpsPrime=mb_zero< T >())
Definition: constltp.h:283

Here is the call graph for this function:

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

Implements Elem.

Definition at line 331 of file vehj4.cc.

References AssMat(), DEBUGCOUT, StructDispNode::iGetFirstMomentumIndex(), StructDispNode::iGetFirstPositionIndex(), DeformableAxialJoint::pNode1, DeformableAxialJoint::pNode2, FullSubMatrixHandler::PutColIndex(), FullSubMatrixHandler::PutRowIndex(), FullSubMatrixHandler::ResizeReset(), VariableSubMatrixHandler::SetFull(), and Elem::WorkSpaceDim().

Referenced by AssJac().

335 {
336  DEBUGCOUT("Entering ElasticAxialJoint::AssJac()" << std::endl);
337 
338  FullSubMatrixHandler& WM = WorkMat.SetFull();
339 
340  /* Dimensiona e resetta la matrice di lavoro */
341  integer iNumRows = 0;
342  integer iNumCols = 0;
343  WorkSpaceDim(&iNumRows, &iNumCols);
344  WM.ResizeReset(iNumRows, iNumCols);
345 
346  /* Recupera gli indici */
347  integer iNode1FirstPosIndex = pNode1->iGetFirstPositionIndex() + 3;
348  integer iNode1FirstMomIndex = pNode1->iGetFirstMomentumIndex() + 3;
349  integer iNode2FirstPosIndex = pNode2->iGetFirstPositionIndex() + 3;
350  integer iNode2FirstMomIndex = pNode2->iGetFirstMomentumIndex() + 3;
351 
352  /* Setta gli indici della matrice */
353  for (int iCnt = 1; iCnt <= 3; iCnt++) {
354  WM.PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
355  WM.PutColIndex(iCnt, iNode1FirstPosIndex + iCnt);
356  WM.PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
357  WM.PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
358  }
359 
360  AssMat(WM, dCoef);
361 
362  return WorkMat;
363 }
void PutColIndex(integer iSubCol, integer iCol)
Definition: submat.h:325
FullSubMatrixHandler & SetFull(void)
Definition: submat.h:1168
const StructNode * pNode1
Definition: vehj4.h:48
const StructNode * pNode2
Definition: vehj4.h:49
#define DEBUGCOUT(msg)
Definition: myassert.h:232
virtual integer iGetFirstMomentumIndex(void) const =0
virtual integer iGetFirstPositionIndex(void) const
Definition: strnode.h:452
virtual void ResizeReset(integer, integer)
Definition: submat.cc:182
void PutRowIndex(integer iSubRow, integer iRow)
Definition: submat.h:311
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const =0
virtual void AssMat(FullSubMatrixHandler &WM, doublereal dCoef)
Definition: vehj4.cc:423
long int integer
Definition: colamd.c:51

Here is the call graph for this function:

VariableSubMatrixHandler & ElasticAxialJoint::AssJac ( VariableSubMatrixHandler WorkMat,
const VectorHandler XCurr 
)
virtual

Reimplemented from Elem.

Definition at line 440 of file vehj4.cc.

References AfterPredict(), ASSERT, AssJac(), and Elem::bIsErgonomy().

442 {
443  ASSERT(bIsErgonomy());
444 
445  // HACK? Need to call AfterPredict() here to update MDE and so
446  AfterPredict();
447 
448  return AssJac(WorkMat, 1., XCurr, XCurr);
449 }
bool bIsErgonomy(void) const
Definition: elem.cc:83
virtual void AfterPredict(void)
Definition: vehj4.cc:401
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: vehj4.cc:331
#define ASSERT(expression)
Definition: colamd.c:977

Here is the call graph for this function:

void ElasticAxialJoint::AssMat ( FullSubMatrixHandler WM,
doublereal  dCoef 
)
protectedvirtual

Definition at line 423 of file vehj4.cc.

References DeformableAxialJoint::AssMatM(), DeformableAxialJoint::AssMatMDE(), RotManip::DRot_I(), ConstitutiveLawOwner< T, Tder >::GetFDE(), DeformableAxialJoint::MDE, and Mat3x3::MulMT().

Referenced by AssJac(), AssMats(), and InitialAssJac().

424 {
425 #if 0
426  // Calcola l'inversa di Gamma di ThetaRef
427  Mat3x3 GammaCurrm1 = RotManip::DRot_I(ThetaCurr);
428 
429  // Chiede la matrice tangente di riferimento e la porta
430  // nel sistema globale
431  MDE = R1h*ConstitutiveLaw1DOwner::GetFDE()*GammaCurrm1.MulMT(R1h);
432 #endif
433 
434  AssMatM(WMA, dCoef);
435  AssMatMDE(WMA, dCoef);
436 }
const Tder & GetFDE(void) const
Definition: constltp.h:298
virtual void AssMatM(FullSubMatrixHandler &WMA, doublereal dCoef)
Definition: vehj4.cc:47
void AssMatMDE(FullSubMatrixHandler &WMA, doublereal dCoef)
Definition: vehj4.cc:59
Mat3x3 MulMT(const Mat3x3 &m) const
Definition: matvec3.cc:444
Mat3x3 DRot_I(const Vec3 &phi)
Definition: Rot.cc:111

Here is the call graph for this function:

void ElasticAxialJoint::AssMats ( VariableSubMatrixHandler WorkMatA,
VariableSubMatrixHandler WorkMatB,
const VectorHandler XCurr,
const VectorHandler XPrimeCurr 
)
virtual

Reimplemented from Elem.

Definition at line 367 of file vehj4.cc.

References AssMat(), DEBUGCOUT, StructDispNode::iGetFirstMomentumIndex(), StructDispNode::iGetFirstPositionIndex(), DeformableAxialJoint::pNode1, DeformableAxialJoint::pNode2, FullSubMatrixHandler::PutColIndex(), FullSubMatrixHandler::PutRowIndex(), FullSubMatrixHandler::ResizeReset(), VariableSubMatrixHandler::SetFull(), VariableSubMatrixHandler::SetNullMatrix(), and Elem::WorkSpaceDim().

371 {
372  DEBUGCOUT("Entering ElasticAxialJoint::AssJac()" << std::endl);
373 
374  FullSubMatrixHandler& WMA = WorkMatA.SetFull();
375  WorkMatB.SetNullMatrix();
376 
377  /* Dimensiona e resetta la matrice di lavoro */
378  integer iNumRows = 0;
379  integer iNumCols = 0;
380  WorkSpaceDim(&iNumRows, &iNumCols);
381  WMA.ResizeReset(iNumRows, iNumCols);
382 
383  /* Recupera gli indici */
384  integer iNode1FirstPosIndex = pNode1->iGetFirstPositionIndex() + 3;
385  integer iNode1FirstMomIndex = pNode1->iGetFirstMomentumIndex() + 3;
386  integer iNode2FirstPosIndex = pNode2->iGetFirstPositionIndex() + 3;
387  integer iNode2FirstMomIndex = pNode2->iGetFirstMomentumIndex() + 3;
388 
389  /* Setta gli indici della matrice */
390  for (int iCnt = 1; iCnt <= 3; iCnt++) {
391  WMA.PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
392  WMA.PutColIndex(iCnt, iNode1FirstPosIndex + iCnt);
393  WMA.PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
394  WMA.PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
395  }
396 
397  AssMat(WMA, 1.);
398 }
void PutColIndex(integer iSubCol, integer iCol)
Definition: submat.h:325
FullSubMatrixHandler & SetFull(void)
Definition: submat.h:1168
const StructNode * pNode1
Definition: vehj4.h:48
const StructNode * pNode2
Definition: vehj4.h:49
void SetNullMatrix(void)
Definition: submat.h:1159
#define DEBUGCOUT(msg)
Definition: myassert.h:232
virtual integer iGetFirstMomentumIndex(void) const =0
virtual integer iGetFirstPositionIndex(void) const
Definition: strnode.h:452
virtual void ResizeReset(integer, integer)
Definition: submat.cc:182
void PutRowIndex(integer iSubRow, integer iRow)
Definition: submat.h:311
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const =0
virtual void AssMat(FullSubMatrixHandler &WM, doublereal dCoef)
Definition: vehj4.cc:423
long int integer
Definition: colamd.c:51

Here is the call graph for this function:

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

Implements Elem.

Definition at line 453 of file vehj4.cc.

References AssVec(), DEBUGCOUT, StructDispNode::iGetFirstMomentumIndex(), DeformableAxialJoint::pNode1, DeformableAxialJoint::pNode2, SubVectorHandler::PutRowIndex(), VectorHandler::ResizeReset(), and Elem::WorkSpaceDim().

457 {
458  DEBUGCOUT("Entering ElasticAxialJoint::AssRes()" << std::endl);
459 
460  /* Dimensiona e resetta la matrice di lavoro */
461  integer iNumRows = 0;
462  integer iNumCols = 0;
463  WorkSpaceDim(&iNumRows, &iNumCols);
464  WorkVec.ResizeReset(iNumRows);
465 
466  /* Recupera gli indici */
467  integer iNode1FirstMomIndex = pNode1->iGetFirstMomentumIndex() + 3;
468  integer iNode2FirstMomIndex = pNode2->iGetFirstMomentumIndex() + 3;
469 
470  /* Setta gli indici della matrice */
471  for (int iCnt = 1; iCnt <= 3; iCnt++) {
472  WorkVec.PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
473  WorkVec.PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
474  }
475 
476  AssVec(WorkVec);
477 
478  return WorkVec;
479 }
virtual void ResizeReset(integer)
Definition: vh.cc:55
virtual void AssVec(SubVectorHandler &WorkVec)
Definition: vehj4.cc:535
const StructNode * pNode1
Definition: vehj4.h:48
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
const StructNode * pNode2
Definition: vehj4.h:49
#define DEBUGCOUT(msg)
Definition: myassert.h:232
virtual integer iGetFirstMomentumIndex(void) const =0
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const =0
long int integer
Definition: colamd.c:51

Here is the call graph for this function:

SubVectorHandler & ElasticAxialJoint::AssRes ( SubVectorHandler WorkVec,
const VectorHandler XCurr,
const VectorHandler XPrimeCurr,
const VectorHandler XPrimePrimeCurr,
InverseDynamics::Order  iOrder = InverseDynamics::INVERSE_DYNAMICS 
)
virtual

Reimplemented from Elem.

Definition at line 483 of file vehj4.cc.

References ASSERT, AssVec(), DeformableAxialJoint::bFirstRes, Elem::bIsErgonomy(), DEBUGCOUT, StructDispNode::iGetFirstPositionIndex(), InverseDynamics::INVERSE_DYNAMICS, DeformableAxialJoint::pNode1, DeformableAxialJoint::pNode2, InverseDynamics::POSITION, SubVectorHandler::PutRowIndex(), VectorHandler::ResizeReset(), and Elem::WorkSpaceDim().

488 {
489  DEBUGCOUT("Entering ElasticAxialJoint::AssRes()" << std::endl);
490 
492  || (iOrder == InverseDynamics::POSITION && bIsErgonomy()));
493 
494  /* There is no need to call AfterPredict, everything is done in AssVec*/
495  bFirstRes = false;
496 
497  /* Dimensiona e resetta la matrice di lavoro */
498  integer iNumRows = 0;
499  integer iNumCols = 0;
500  WorkSpaceDim(&iNumRows, &iNumCols);
501  WorkVec.ResizeReset(iNumRows);
502 
503  /* Recupera gli indici */
504  integer iNode1FirstMomIndex = pNode1->iGetFirstPositionIndex() + 3;
505  integer iNode2FirstMomIndex = pNode2->iGetFirstPositionIndex() + 3;
506 
507  /* Setta gli indici della matrice */
508  for (int iCnt = 1; iCnt <= 3; iCnt++) {
509  WorkVec.PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
510  WorkVec.PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
511  }
512 
513  AssVec(WorkVec);
514 
515  return WorkVec;
516 }
virtual void ResizeReset(integer)
Definition: vh.cc:55
bool bIsErgonomy(void) const
Definition: elem.cc:83
virtual void AssVec(SubVectorHandler &WorkVec)
Definition: vehj4.cc:535
const StructNode * pNode1
Definition: vehj4.h:48
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
const StructNode * pNode2
Definition: vehj4.h:49
#define DEBUGCOUT(msg)
Definition: myassert.h:232
virtual integer iGetFirstPositionIndex(void) const
Definition: strnode.h:452
#define ASSERT(expression)
Definition: colamd.c:977
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const =0
long int integer
Definition: colamd.c:51

Here is the call graph for this function:

void ElasticAxialJoint::AssVec ( SubVectorHandler WorkVec)
protectedvirtual

Definition at line 535 of file vehj4.cc.

References VectorHandler::Add(), DeformableAxialJoint::bFirstRes, dThetaCurr, DeformableAxialJoint::dTol, ConstitutiveLawOwner< T, Tder >::GetF(), WithLabel::GetLabel(), StructNode::GetRCurr(), DeformableAxialJoint::M, DeformableAxialJoint::pNode1, DeformableAxialJoint::pNode2, VectorHandler::Sub(), DeformableAxialJoint::tilde_R1h, DeformableAxialJoint::tilde_R2h, ConstitutiveLawOwner< T, Tder >::Update(), and RotManip::VecRot().

Referenced by AssRes(), and InitialAssRes().

536 {
538 
539  if (bFirstRes) {
540  bFirstRes = false;
541 
542  } else {
544  Vec3 ThetaCurr(RotManip::VecRot(R1h.MulTM(R2h)));
545  dThetaCurr = ThetaCurr(3);
547 
548  // sanity check
549  if (dTol > 0.) {
550  ThetaCurr(3) = 0.;
551  doublereal dErr = ThetaCurr.Norm();
552  if (dErr > dTol) {
553  silent_cerr("ElasticAxialJoint(" << GetLabel() << "): axes non-colinear (err=" << dErr << ")" << std::endl);
554  }
555  }
556  }
557 
558  /* Couple attached to node 1 */
559  M = R1h.GetVec(3)*GetF();
560 
561  WorkVec.Add(1, M);
562  WorkVec.Sub(4, M);
563 }
Definition: matvec3.h:98
virtual const Mat3x3 & GetRCurr(void) const
Definition: strnode.h:1012
doublereal dTol
Definition: vehj4.h:55
virtual void Sub(integer iRow, const Vec3 &v)
Definition: vh.cc:78
const StructNode * pNode1
Definition: vehj4.h:48
Mat3x3 tilde_R2h
Definition: vehj4.h:51
Vec3 VecRot(const Mat3x3 &Phi)
Definition: Rot.cc:136
const StructNode * pNode2
Definition: vehj4.h:49
doublereal dThetaCurr
Definition: vehj4.h:162
Mat3x3 tilde_R1h
Definition: vehj4.h:50
virtual void Add(integer iRow, const Vec3 &v)
Definition: vh.cc:63
const T & GetF(void) const
Definition: constltp.h:293
double doublereal
Definition: colamd.c:52
void Update(const T &Eps, const T &EpsPrime=mb_zero< T >())
Definition: constltp.h:283
unsigned int GetLabel(void) const
Definition: withlab.cc:62

Here is the call graph for this function:

virtual ConstLawType::Type ElasticAxialJoint::GetConstLawType ( void  ) const
inlinevirtual

Implements DeformableAxialJoint.

Definition at line 184 of file vehj4.h.

References ConstLawType::ELASTIC.

184  {
185  return ConstLawType::ELASTIC;
186  };
VariableSubMatrixHandler & ElasticAxialJoint::InitialAssJac ( VariableSubMatrixHandler WorkMat,
const VectorHandler XCurr 
)
virtual

Implements SubjectToInitialAssembly.

Definition at line 567 of file vehj4.cc.

References AssMat(), DEBUGCOUT, StructDispNode::iGetFirstPositionIndex(), InitialWorkSpaceDim(), DeformableAxialJoint::pNode1, DeformableAxialJoint::pNode2, FullSubMatrixHandler::PutColIndex(), FullSubMatrixHandler::PutRowIndex(), FullSubMatrixHandler::ResizeReset(), and VariableSubMatrixHandler::SetFull().

569 {
570  DEBUGCOUT("Entering ElasticAxialJoint::InitialAssJac()" << std::endl);
571 
572  FullSubMatrixHandler& WM = WorkMat.SetFull();
573 
574  /* Dimensiona e resetta la matrice di lavoro */
575  integer iNumRows = 0;
576  integer iNumCols = 0;
577  InitialWorkSpaceDim(&iNumRows, &iNumCols);
578  WM.ResizeReset(iNumRows, iNumCols);
579 
580  /* Recupera gli indici */
581  integer iNode1FirstPosIndex = pNode1->iGetFirstPositionIndex() + 3;
582  integer iNode2FirstPosIndex = pNode2->iGetFirstPositionIndex() + 3;
583 
584  /* Setta gli indici della matrice */
585  for (int iCnt = 1; iCnt <= 3; iCnt++) {
586  WM.PutRowIndex(iCnt, iNode1FirstPosIndex + iCnt);
587  WM.PutColIndex(iCnt, iNode1FirstPosIndex + iCnt);
588  WM.PutRowIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
589  WM.PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
590  }
591 
592  AssMat(WM, 1.);
593 
594  return WorkMat;
595 }
void PutColIndex(integer iSubCol, integer iCol)
Definition: submat.h:325
FullSubMatrixHandler & SetFull(void)
Definition: submat.h:1168
const StructNode * pNode1
Definition: vehj4.h:48
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: vehj4.h:244
const StructNode * pNode2
Definition: vehj4.h:49
#define DEBUGCOUT(msg)
Definition: myassert.h:232
virtual integer iGetFirstPositionIndex(void) const
Definition: strnode.h:452
virtual void ResizeReset(integer, integer)
Definition: submat.cc:182
void PutRowIndex(integer iSubRow, integer iRow)
Definition: submat.h:311
virtual void AssMat(FullSubMatrixHandler &WM, doublereal dCoef)
Definition: vehj4.cc:423
long int integer
Definition: colamd.c:51

Here is the call graph for this function:

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

Implements SubjectToInitialAssembly.

Definition at line 599 of file vehj4.cc.

References AssVec(), StructDispNode::iGetFirstPositionIndex(), InitialWorkSpaceDim(), DeformableAxialJoint::pNode1, DeformableAxialJoint::pNode2, SubVectorHandler::PutRowIndex(), and VectorHandler::ResizeReset().

601 {
602  /* Dimensiona e resetta la matrice di lavoro */
603  integer iNumRows = 0;
604  integer iNumCols = 0;
605  InitialWorkSpaceDim(&iNumRows, &iNumCols);
606  WorkVec.ResizeReset(iNumRows);
607 
608  /* Recupera gli indici */
609  integer iNode1FirstPosIndex = pNode1->iGetFirstPositionIndex() + 3;
610  integer iNode2FirstPosIndex = pNode2->iGetFirstPositionIndex() + 3;
611 
612  /* Setta gli indici della matrice */
613  for (int iCnt = 1; iCnt <= 3; iCnt++) {
614  WorkVec.PutRowIndex(iCnt, iNode1FirstPosIndex + iCnt);
615  WorkVec.PutRowIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
616  }
617 
618  AssVec(WorkVec);
619 
620  return WorkVec;
621 }
virtual void ResizeReset(integer)
Definition: vh.cc:55
virtual void AssVec(SubVectorHandler &WorkVec)
Definition: vehj4.cc:535
const StructNode * pNode1
Definition: vehj4.h:48
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: vehj4.h:244
const StructNode * pNode2
Definition: vehj4.h:49
virtual integer iGetFirstPositionIndex(void) const
Definition: strnode.h:452
long int integer
Definition: colamd.c:51

Here is the call graph for this function:

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

Implements SubjectToInitialAssembly.

Definition at line 244 of file vehj4.h.

Referenced by InitialAssJac(), and InitialAssRes().

245  {
246  *piNumRows = 6;
247  *piNumCols = 6;
248  };
void ElasticAxialJoint::Update ( const VectorHandler XCurr,
InverseDynamics::Order  iOrder = InverseDynamics::INVERSE_DYNAMICS 
)
virtual

Reimplemented from SimulationEntity.

Definition at line 520 of file vehj4.cc.

References NO_OP.

521 {
522  NO_OP;
523 }
#define NO_OP
Definition: myassert.h:74

Member Data Documentation

doublereal ElasticAxialJoint::dThetaCurr
protected

Definition at line 162 of file vehj4.h.

Referenced by AfterConvergence(), AfterPredict(), and AssVec().

doublereal ElasticAxialJoint::dThetaRef
protected

Definition at line 161 of file vehj4.h.

Referenced by AfterPredict().


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