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

#include <rodj.h>

Inheritance diagram for ViscoElasticRod:
Collaboration diagram for ViscoElasticRod:

Public Member Functions

 ViscoElasticRod (unsigned int uL, const DofOwner *pDO, const ConstitutiveLaw1D *pCL, const StructDispNode *pN1, const StructDispNode *pN2, doublereal dLength, flag fOut)
 
virtual ~ViscoElasticRod (void)
 
virtual void AfterConvergence (const VectorHandler &X, const VectorHandler &XP)
 
virtual VariableSubMatrixHandlerAssJac (VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual SubVectorHandlerAssRes (SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
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 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 ReadInitialState (MBDynParser &HP)
 
- Public Member Functions inherited from ToBeOutput
 ToBeOutput (flag fOut=fDefaultOut)
 
virtual ~ToBeOutput (void)
 
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 Rod
 Rod (unsigned int uL, const DofOwner *pDO, const ConstitutiveLaw1D *pCL, const StructDispNode *pN1, const StructDispNode *pN2, doublereal dLength, flag fOut, bool bHasOffsets=0)
 
virtual ~Rod (void)
 
virtual Joint::Type GetJointType (void) const
 
virtual std::ostream & Restart (std::ostream &out) const
 
virtual unsigned int iGetNumDof (void) const
 
virtual void WorkSpaceDim (integer *piNumRows, integer *piNumCols) const
 
virtual void AssMats (VariableSubMatrixHandler &WorkMatA, VariableSubMatrixHandler &WorkMatB, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual void OutputPrepare (OutputHandler &OH)
 
virtual void Output (OutputHandler &OH) const
 
virtual unsigned int iGetInitialNumDof (void) const
 
virtual bool bInverseDynamics (void) const
 
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 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
 
virtual void SetInitialValue (VectorHandler &)
 
virtual void SetValue (DataManager *pDM, VectorHandler &, VectorHandler &, SimulationEntity::Hints *ph=0)
 
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
 

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
}
 
- Protected Member Functions inherited from Rod
virtual doublereal dCalcEpsilon (void)
 
void AssMat (FullSubMatrixHandler &WorkMat, doublereal dCoef=1.)
 
void AssVec (SubVectorHandler &WorkVec)
 
- 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 Rod
const StructDispNodepNode1
 
const StructDispNodepNode2
 
doublereal dL0
 
Vec3 v
 
doublereal dElle
 
doublereal dEpsilon
 
doublereal dEpsilonPrime
 
- Protected Attributes inherited from GravityOwner
GravitypGravity
 
- Protected Attributes inherited from ConstitutiveLawOwner< T, Tder >
ConstitutiveLaw< T, Tder > * pConstLaw
 

Detailed Description

Definition at line 207 of file rodj.h.

Constructor & Destructor Documentation

ViscoElasticRod::ViscoElasticRod ( unsigned int  uL,
const DofOwner pDO,
const ConstitutiveLaw1D pCL,
const StructDispNode pN1,
const StructDispNode pN2,
doublereal  dLength,
flag  fOut 
)

Definition at line 526 of file rodj.cc.

References NO_OP.

532 : Elem(uL, fOut),
533 Rod(uL, pDO, pCL, pN1, pN2, dLength, fOut)
534 {
535  NO_OP;
536 }
#define NO_OP
Definition: myassert.h:74
Rod(unsigned int uL, const DofOwner *pDO, const ConstitutiveLaw1D *pCL, const StructDispNode *pN1, const StructDispNode *pN2, doublereal dLength, flag fOut, bool bHasOffsets=0)
Definition: rodj.cc:46
Elem(unsigned int uL, flag fOut)
Definition: elem.cc:41
ViscoElasticRod::~ViscoElasticRod ( void  )
virtual

Definition at line 539 of file rodj.cc.

References NO_OP.

540 {
541  NO_OP;
542 }
#define NO_OP
Definition: myassert.h:74

Member Function Documentation

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

Reimplemented from Rod.

Definition at line 545 of file rodj.cc.

References ConstitutiveLawOwner< T, Tder >::AfterConvergence(), Rod::dEpsilon, and Rod::dEpsilonPrime.

547 {
549 }
doublereal dEpsilonPrime
Definition: rodj.h:56
doublereal dEpsilon
Definition: rodj.h:55
void AfterConvergence(const T &Eps, const T &EpsPrime=mb_zero< T >())
Definition: constltp.h:288

Here is the call graph for this function:

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

Implements Elem.

Definition at line 552 of file rodj.cc.

References FullSubMatrixHandler::Add(), Vec3::Cross(), DEBUGCOUT, Rod::dElle, Rod::dL0, Vec3::Dot(), ConstitutiveLawOwner< T, Tder >::GetF(), ConstitutiveLawOwner< T, Tder >::GetFDE(), ConstitutiveLawOwner< T, Tder >::GetFDEPrime(), WithLabel::GetLabel(), StructDispNode::GetVCurr(), StructDispNode::iGetFirstMomentumIndex(), StructDispNode::iGetFirstPositionIndex(), MatCrossCross, MBDYN_EXCEPT_ARGS, Rod::pNode1, Rod::pNode2, FullSubMatrixHandler::PutColIndex(), FullSubMatrixHandler::PutRowIndex(), FullSubMatrixHandler::ResizeReset(), VariableSubMatrixHandler::SetFull(), grad::sqrt(), FullSubMatrixHandler::Sub(), Vec3::Tens(), Rod::v, and Elem::WorkSpaceDim().

556 {
557  DEBUGCOUT("Entering ViscoElasticRod::AssJac()" << std::endl);
558 
559  FullSubMatrixHandler& WM = WorkMat.SetFull();
560 
561  /* Dimensiona e resetta la matrice di lavoro */
562  integer iNumRows = 0;
563  integer iNumCols = 0;
564  WorkSpaceDim(&iNumRows, &iNumCols);
565  WM.ResizeReset(iNumRows, iNumCols);
566 
567  /* Recupera gli indici */
568  integer iNode1FirstPosIndex = pNode1->iGetFirstPositionIndex();
569  integer iNode1FirstMomIndex = pNode1->iGetFirstMomentumIndex();
570  integer iNode2FirstPosIndex = pNode2->iGetFirstPositionIndex();
571  integer iNode2FirstMomIndex = pNode2->iGetFirstMomentumIndex();
572 
573  /* Setta gli indici della matrice */
574  for (int iCnt = 1; iCnt <= 3; iCnt++) {
575  WM.PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
576  WM.PutColIndex(iCnt, iNode1FirstPosIndex + iCnt);
577  WM.PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
578  WM.PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
579  }
580 
581  /* v = x2-x1 */
582  /* v(pNode2->GetXCurr()-pNode1->GetXCurr()); */
583  doublereal dCross = v.Dot();
584 
585  /* Verifica che la distanza non sia nulla */
586  if (dCross <= std::numeric_limits<doublereal>::epsilon()) {
587  silent_cerr("ViscoElasticRod(" << GetLabel() << "): "
588  "null distance between nodes " << pNode1->GetLabel()
589  << " and " << pNode2->GetLabel() << std::endl);
591  }
592 
593  /* Lunghezza corrente */
594  dElle = sqrt(dCross);
595 
596  /* Velocita' di deformazione */
597  Vec3 vPrime(pNode2->GetVCurr()-pNode1->GetVCurr());
598 
599  /* Forza e slopes */
600  doublereal dF = GetF();
601  doublereal dFDE = GetFDE();
602  doublereal dFDEPrime = GetFDEPrime();
603 
604  Mat3x3 K(Mat3x3( MatCrossCross, v, v*((-dF*dCoef)/(dElle*dCross)) )
605  + v.Tens( v*((dFDE*dCoef+dFDEPrime)/(dL0*dCross)) )
606  + v.Tens( v.Cross( vPrime.Cross( v*((dFDEPrime*dCoef)/(dL0*dCross*dCross)) ) ) ));
607 
608  /* Termini diagonali */
609  WM.Add(1, 1, K);
610  WM.Add(4, 4, K);
611 
612  /* termini extradiagonali */
613  WM.Sub(1, 4, K);
614  WM.Sub(4, 1, K);
615 
616  return WorkMat;
617 }
void PutColIndex(integer iSubCol, integer iCol)
Definition: submat.h:325
Vec3 Cross(const Vec3 &v) const
Definition: matvec3.h:218
#define MBDYN_EXCEPT_ARGS
Definition: except.h:63
Definition: matvec3.h:98
FullSubMatrixHandler & SetFull(void)
Definition: submat.h:1168
doublereal Dot(const Vec3 &v) const
Definition: matvec3.h:243
void Add(integer iRow, integer iCol, const Vec3 &v)
Definition: submat.cc:209
doublereal dElle
Definition: rodj.h:53
const Tder & GetFDE(void) const
Definition: constltp.h:298
doublereal dL0
Definition: rodj.h:50
const StructDispNode * pNode2
Definition: rodj.h:49
#define DEBUGCOUT(msg)
Definition: myassert.h:232
Vec3 v
Definition: rodj.h:52
virtual integer iGetFirstMomentumIndex(void) const =0
virtual integer iGetFirstPositionIndex(void) const
Definition: strnode.h:452
Mat3x3 Tens(const Vec3 &v) const
Definition: matvec3.cc:53
GradientExpression< UnaryExpr< FuncSqrt, Expr > > sqrt(const GradientExpression< Expr > &u)
Definition: gradient.h:2974
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
const T & GetF(void) const
Definition: constltp.h:293
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const =0
virtual const Vec3 & GetVCurr(void) const
Definition: strnode.h:322
void Sub(integer iRow, integer iCol, const Vec3 &v)
Definition: submat.cc:215
const StructDispNode * pNode1
Definition: rodj.h:48
double doublereal
Definition: colamd.c:52
const Tder & GetFDEPrime(void) const
Definition: constltp.h:303
long int integer
Definition: colamd.c:51
unsigned int GetLabel(void) const
Definition: withlab.cc:62

Here is the call graph for this function:

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

Implements Elem.

Definition at line 620 of file rodj.cc.

References VectorHandler::Add(), Rod::dCalcEpsilon(), DEBUGCOUT, Rod::dElle, Rod::dEpsilon, Rod::dEpsilonPrime, Rod::dL0, Vec3::Dot(), ConstitutiveLawOwner< T, Tder >::GetF(), WithLabel::GetLabel(), StructDispNode::GetVCurr(), StructDispNode::GetXCurr(), StructDispNode::iGetFirstMomentumIndex(), MBDYN_EXCEPT_ARGS, Rod::pNode1, Rod::pNode2, SubVectorHandler::PutRowIndex(), VectorHandler::ResizeReset(), grad::sqrt(), VectorHandler::Sub(), ConstitutiveLawOwner< T, Tder >::Update(), Rod::v, and Elem::WorkSpaceDim().

624 {
625  DEBUGCOUT("Entering ViscoElasticRod::AssRes()" << std::endl);
626 
627  /* Dimensiona e resetta la matrice di lavoro */
628  integer iNumRows = 0;
629  integer iNumCols = 0;
630  WorkSpaceDim(&iNumRows, &iNumCols);
631  WorkVec.ResizeReset(iNumRows);
632 
633  /* Indici */
634  integer iNode1FirstMomIndex = pNode1->iGetFirstMomentumIndex();
635  integer iNode2FirstMomIndex = pNode2->iGetFirstMomentumIndex();
636 
637  /* Setta gli indici */
638  for (int iCnt = 1; iCnt <= 3; iCnt++) {
639  WorkVec.PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
640  WorkVec.PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
641  }
642 
643  /* v = x2-x1 */
644  v = pNode2->GetXCurr()-pNode1->GetXCurr();
645  doublereal dCross = v.Dot();
646 
647  /* Verifica che la distanza non sia nulla */
648  if (dCross <= std::numeric_limits<doublereal>::epsilon()) {
649  silent_cerr("ViscoElasticRod(" << GetLabel() << "): "
650  "null distance between nodes " << pNode1->GetLabel()
651  << " and " << pNode2->GetLabel() << std::endl);
653  }
654 
655  /* Lunghezza corrente */
656  dElle = sqrt(dCross);
657 
658  /* Deformazione */
660 
661  /* Velocita' di deformazione */
662  Vec3 vPrime(pNode2->GetVCurr() - pNode1->GetVCurr());
663  dEpsilonPrime = (v.Dot(vPrime))/(dElle*dL0);
664 
665  /* Ampiezza della forza */
666  bool ChangeJac(false);
667  try {
669 
671  ChangeJac = true;
672  }
673  doublereal dF = GetF();
674 
675  /* Vettore forza */
676  Vec3 F(v*(dF/dElle));
677 
678  WorkVec.Add(1, F);
679  WorkVec.Sub(4, F);
680 
681  if (ChangeJac) {
683  }
684 
685  return WorkVec;
686 }
virtual doublereal dCalcEpsilon(void)
Definition: rodj.cc:97
doublereal dEpsilonPrime
Definition: rodj.h:56
#define MBDYN_EXCEPT_ARGS
Definition: except.h:63
Definition: matvec3.h:98
virtual void ResizeReset(integer)
Definition: vh.cc:55
doublereal Dot(const Vec3 &v) const
Definition: matvec3.h:243
doublereal dElle
Definition: rodj.h:53
virtual void Sub(integer iRow, const Vec3 &v)
Definition: vh.cc:78
doublereal dL0
Definition: rodj.h:50
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
const StructDispNode * pNode2
Definition: rodj.h:49
doublereal dEpsilon
Definition: rodj.h:55
#define DEBUGCOUT(msg)
Definition: myassert.h:232
Vec3 v
Definition: rodj.h:52
virtual integer iGetFirstMomentumIndex(void) const =0
GradientExpression< UnaryExpr< FuncSqrt, Expr > > sqrt(const GradientExpression< Expr > &u)
Definition: gradient.h:2974
virtual const Vec3 & GetXCurr(void) const
Definition: strnode.h:310
virtual void Add(integer iRow, const Vec3 &v)
Definition: vh.cc:63
const T & GetF(void) const
Definition: constltp.h:293
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const =0
virtual const Vec3 & GetVCurr(void) const
Definition: strnode.h:322
const StructDispNode * pNode1
Definition: rodj.h:48
double doublereal
Definition: colamd.c:52
long int integer
Definition: colamd.c:51
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:

VariableSubMatrixHandler & ViscoElasticRod::InitialAssJac ( VariableSubMatrixHandler WorkMat,
const VectorHandler XCurr 
)
virtual

Reimplemented from Rod.

Definition at line 689 of file rodj.cc.

References FullSubMatrixHandler::Add(), Vec3::Cross(), DEBUGCOUT, Rod::dElle, Rod::dL0, Vec3::Dot(), ConstitutiveLawOwner< T, Tder >::GetF(), ConstitutiveLawOwner< T, Tder >::GetFDE(), ConstitutiveLawOwner< T, Tder >::GetFDEPrime(), WithLabel::GetLabel(), StructDispNode::GetVCurr(), StructDispNode::iGetFirstPositionIndex(), InitialWorkSpaceDim(), MatCrossCross, MBDYN_EXCEPT_ARGS, Rod::pNode1, Rod::pNode2, FullSubMatrixHandler::PutColIndex(), FullSubMatrixHandler::PutRowIndex(), FullSubMatrixHandler::ResizeReset(), VariableSubMatrixHandler::SetFull(), grad::sqrt(), FullSubMatrixHandler::Sub(), Vec3::Tens(), and Rod::v.

691 {
692  DEBUGCOUT("Entering ViscoElasticRod::InitialAssJac()" << std::endl);
693 
694  FullSubMatrixHandler& WM = WorkMat.SetFull();
695 
696  /* Dimensiona e resetta la matrice di lavoro */
697  integer iNumRows = 0;
698  integer iNumCols = 0;
699  InitialWorkSpaceDim(&iNumRows, &iNumCols);
700  WM.ResizeReset(iNumRows, iNumCols);
701 
702  /* Recupera gli indici */
703  integer iNode1FirstPosIndex = pNode1->iGetFirstPositionIndex();
704  integer iNode1FirstVelIndex = iNode1FirstPosIndex+6;
705  integer iNode2FirstPosIndex = pNode2->iGetFirstPositionIndex();
706  integer iNode2FirstVelIndex = iNode2FirstPosIndex+6;
707 
708  /* Setta gli indici della matrice */
709  for (int iCnt = 1; iCnt <= 3; iCnt++) {
710  WM.PutRowIndex(iCnt, iNode1FirstPosIndex+iCnt);
711  WM.PutColIndex(iCnt, iNode1FirstPosIndex+iCnt);
712  WM.PutColIndex(3+iCnt, iNode1FirstVelIndex+iCnt);
713 
714  WM.PutRowIndex(3+iCnt, iNode2FirstPosIndex+iCnt);
715  WM.PutColIndex(6+iCnt, iNode2FirstPosIndex+iCnt);
716  WM.PutColIndex(9+iCnt, iNode2FirstVelIndex+iCnt);
717  }
718 
719  /* v = x2-x1 */
720  /* v(pNode2->GetXCurr()-pNode1->GetXCurr()); */
721  doublereal dCross = v.Dot();
722 
723  /* Verifica che la distanza non sia nulla */
724  if (dCross <= std::numeric_limits<doublereal>::epsilon()) {
725  silent_cerr("ViscoElasticRod(" << GetLabel() << "): "
726  "null distance between nodes " << pNode1->GetLabel()
727  << " and " << pNode2->GetLabel() << std::endl);
729  }
730 
731  /* Lunghezza corrente */
732  dElle = sqrt(dCross);
733 
734  /* Velocita' di deformazione */
735  Vec3 vPrime(pNode2->GetVCurr()-pNode1->GetVCurr());
736 
737  /* Forza e slopes */
738  doublereal dF = GetF();
739  doublereal dFDE = GetFDE();
740  doublereal dFDEPrime = GetFDEPrime();
741 
742  Mat3x3 K(Mat3x3(MatCrossCross, v, v*((-dF)/(dElle*dCross)))
743  + v.Tens(v*((dFDE)/(dL0*dCross)))
744  + v.Tens(v.Cross(vPrime.Cross(v*((dFDEPrime)/(dL0*dCross*dCross))))));
745  Mat3x3 KPrime(v.Tens(v*((dFDEPrime)/(dL0*dCross))));
746 
747  /* Termini diagonali */
748  WM.Add(1, 1, K);
749  WM.Add(4, 7, K);
750 
751  WM.Add(1, 4, KPrime);
752  WM.Add(4, 10, KPrime);
753 
754  /* termini extradiagonali */
755  WM.Sub(1, 7, K);
756  WM.Sub(4, 1, K);
757 
758  WM.Sub(1, 10, KPrime);
759  WM.Sub(4, 4, KPrime);
760 
761  return WorkMat;
762 }
void PutColIndex(integer iSubCol, integer iCol)
Definition: submat.h:325
Vec3 Cross(const Vec3 &v) const
Definition: matvec3.h:218
#define MBDYN_EXCEPT_ARGS
Definition: except.h:63
Definition: matvec3.h:98
FullSubMatrixHandler & SetFull(void)
Definition: submat.h:1168
doublereal Dot(const Vec3 &v) const
Definition: matvec3.h:243
void Add(integer iRow, integer iCol, const Vec3 &v)
Definition: submat.cc:209
doublereal dElle
Definition: rodj.h:53
const Tder & GetFDE(void) const
Definition: constltp.h:298
doublereal dL0
Definition: rodj.h:50
const StructDispNode * pNode2
Definition: rodj.h:49
#define DEBUGCOUT(msg)
Definition: myassert.h:232
Vec3 v
Definition: rodj.h:52
virtual integer iGetFirstPositionIndex(void) const
Definition: strnode.h:452
Mat3x3 Tens(const Vec3 &v) const
Definition: matvec3.cc:53
GradientExpression< UnaryExpr< FuncSqrt, Expr > > sqrt(const GradientExpression< Expr > &u)
Definition: gradient.h:2974
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: rodj.h:232
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
const T & GetF(void) const
Definition: constltp.h:293
virtual const Vec3 & GetVCurr(void) const
Definition: strnode.h:322
void Sub(integer iRow, integer iCol, const Vec3 &v)
Definition: submat.cc:215
const StructDispNode * pNode1
Definition: rodj.h:48
double doublereal
Definition: colamd.c:52
const Tder & GetFDEPrime(void) const
Definition: constltp.h:303
long int integer
Definition: colamd.c:51
unsigned int GetLabel(void) const
Definition: withlab.cc:62

Here is the call graph for this function:

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

Reimplemented from Rod.

Definition at line 765 of file rodj.cc.

References VectorHandler::Add(), Rod::dCalcEpsilon(), DEBUGCOUT, Rod::dElle, Rod::dEpsilon, Rod::dEpsilonPrime, Rod::dL0, Vec3::Dot(), ConstitutiveLawOwner< T, Tder >::GetF(), WithLabel::GetLabel(), StructDispNode::GetVCurr(), StructDispNode::GetXCurr(), StructDispNode::iGetFirstPositionIndex(), InitialWorkSpaceDim(), MBDYN_EXCEPT_ARGS, Rod::pNode1, Rod::pNode2, SubVectorHandler::PutRowIndex(), VectorHandler::ResizeReset(), grad::sqrt(), VectorHandler::Sub(), ConstitutiveLawOwner< T, Tder >::Update(), and Rod::v.

767 {
768  DEBUGCOUT("Entering ViscoElasticRod::InitialAssRes()" << std::endl);
769 
770  /* Dimensiona e resetta la matrice di lavoro */
771  integer iNumRows = 0;
772  integer iNumCols = 0;
773  InitialWorkSpaceDim(&iNumRows, &iNumCols);
774  WorkVec.ResizeReset(iNumRows);
775 
776  /* Indici */
777  integer iNode1FirstPosIndex = pNode1->iGetFirstPositionIndex();
778  integer iNode2FirstPosIndex = pNode2->iGetFirstPositionIndex();
779 
780  /* Setta gli indici */
781  for (int iCnt = 1; iCnt <= 3; iCnt++) {
782  WorkVec.PutRowIndex(iCnt, iNode1FirstPosIndex + iCnt);
783  WorkVec.PutRowIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
784  }
785 
786  /* v = x2-x1 */
787  v = pNode2->GetXCurr() - pNode1->GetXCurr();
788  doublereal dCross = v.Dot();
789 
790  /* Verifica che la distanza non sia nulla */
791  if (dCross <= std::numeric_limits<doublereal>::epsilon()) {
792  silent_cerr("ViscoElasticRod(" << GetLabel() << "): "
793  "null distance between nodes " << pNode1->GetLabel()
794  << " and " << pNode2->GetLabel() << std::endl);
796  }
797 
798  /* Lunghezza corrente */
799  dElle = sqrt(dCross);
800 
801  /* Deformazione */
803 
804  /* Velocita' di deformazione */
805  Vec3 vPrime(pNode2->GetVCurr() - pNode1->GetVCurr());
806  dEpsilonPrime = (v.Dot(vPrime))/(dElle*dL0);
807 
808  /* Ampiezza della forza */
810  doublereal dF = GetF();
811 
812  /* Vettore forza */
813  Vec3 F(v*(dF/dElle));
814 
815  WorkVec.Add(1, F);
816  WorkVec.Sub(4, F);
817 
818  return WorkVec;
819 }
virtual doublereal dCalcEpsilon(void)
Definition: rodj.cc:97
doublereal dEpsilonPrime
Definition: rodj.h:56
#define MBDYN_EXCEPT_ARGS
Definition: except.h:63
Definition: matvec3.h:98
virtual void ResizeReset(integer)
Definition: vh.cc:55
doublereal Dot(const Vec3 &v) const
Definition: matvec3.h:243
doublereal dElle
Definition: rodj.h:53
virtual void Sub(integer iRow, const Vec3 &v)
Definition: vh.cc:78
doublereal dL0
Definition: rodj.h:50
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
const StructDispNode * pNode2
Definition: rodj.h:49
doublereal dEpsilon
Definition: rodj.h:55
#define DEBUGCOUT(msg)
Definition: myassert.h:232
Vec3 v
Definition: rodj.h:52
virtual integer iGetFirstPositionIndex(void) const
Definition: strnode.h:452
GradientExpression< UnaryExpr< FuncSqrt, Expr > > sqrt(const GradientExpression< Expr > &u)
Definition: gradient.h:2974
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: rodj.h:232
virtual const Vec3 & GetXCurr(void) const
Definition: strnode.h:310
virtual void Add(integer iRow, const Vec3 &v)
Definition: vh.cc:63
const T & GetF(void) const
Definition: constltp.h:293
virtual const Vec3 & GetVCurr(void) const
Definition: strnode.h:322
const StructDispNode * pNode1
Definition: rodj.h:48
double doublereal
Definition: colamd.c:52
long int integer
Definition: colamd.c:51
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 void ViscoElasticRod::InitialWorkSpaceDim ( integer piNumRows,
integer piNumCols 
) const
inlinevirtual

Reimplemented from Rod.

Definition at line 232 of file rodj.h.

Referenced by InitialAssJac(), and InitialAssRes().

232  {
233  *piNumRows = 6;
234  *piNumCols = 12;
235  };

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