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

#include <spherj.h>

Inheritance diagram for PinJoint:
Collaboration diagram for PinJoint:

Public Member Functions

 PinJoint (unsigned int uL, const DofOwner *pDO, const StructNode *pN, const Vec3 &X0Tmp, const Vec3 &dTmp, flag fOut)
 
 ~PinJoint (void)
 
virtual Joint::Type GetJointType (void) const
 
virtual std::ostream & Restart (std::ostream &out) const
 
virtual unsigned int iGetNumDof (void) const
 
virtual DofOrder::Order GetDofType (unsigned int i) const
 
virtual 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)
 
DofOrder::Order GetEqType (unsigned int i) const
 
virtual 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 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

const StructNodepNode
 
Vec3 X0
 
Vec3 d
 
Vec3 F
 

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 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 155 of file spherj.h.

Constructor & Destructor Documentation

PinJoint::PinJoint ( unsigned int  uL,
const DofOwner pDO,
const StructNode pN,
const Vec3 X0Tmp,
const Vec3 dTmp,
flag  fOut 
)

Definition at line 575 of file spherj.cc.

References NO_OP.

578 : Elem(uL, fOut),
579 Joint(uL, pDO, fOut), pNode(pN), X0(X0Tmp), d(dTmp), F(Zero3)
580 {
581  NO_OP;
582 }
const Vec3 Zero3(0., 0., 0.)
Vec3 X0
Definition: spherj.h:158
const StructNode * pNode
Definition: spherj.h:157
Joint(unsigned int uL, const DofOwner *pD, flag fOut)
Definition: joint.cc:83
#define NO_OP
Definition: myassert.h:74
Vec3 d
Definition: spherj.h:159
Elem(unsigned int uL, flag fOut)
Definition: elem.cc:41
Vec3 F
Definition: spherj.h:160
PinJoint::~PinJoint ( void  )

Definition at line 586 of file spherj.cc.

References NO_OP.

587 {
588  NO_OP;
589 };
#define NO_OP
Definition: myassert.h:74

Member Function Documentation

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

Implements Elem.

Definition at line 606 of file spherj.cc.

References d, DEBUGCOUT, F, StructNode::GetRRef(), DofOwnerOwner::iGetFirstIndex(), StructDispNode::iGetFirstMomentumIndex(), StructDispNode::iGetFirstPositionIndex(), MatCrossCross, pNode, SparseSubMatrixHandler::PutCross(), SparseSubMatrixHandler::PutItem(), SparseSubMatrixHandler::PutMat3x3(), R, SparseSubMatrixHandler::ResizeReset(), and VariableSubMatrixHandler::SetSparse().

610 {
611  DEBUGCOUT("Entering PinJoint::AssJac()" << std::endl);
612 
613  SparseSubMatrixHandler& WM = WorkMat.SetSparse();
614  WM.ResizeReset(27, 0);
615 
616  integer iFirstPositionIndex = pNode->iGetFirstPositionIndex();
617  integer iFirstMomentumIndex = pNode->iGetFirstMomentumIndex();
618  integer iFirstReactionIndex = iGetFirstIndex();
619 
620  const Mat3x3& R(pNode->GetRRef());
621  Vec3 dTmp(R*d);
622 
623  /*
624  * L'equazione di vincolo afferma che il punto in cui si trova la
625  * cerniera deve essere fissato:
626  * x + d = x0
627  *
628  * con: d = R * d_0
629  *
630  * La forza e' data dalla reazione vincolare F, nel sistema globale
631  * La coppia dovuta all'eccentricita' e' data rispettivamente da:
632  * d /\ F
633  *
634  *
635  * x g F
636  * Q1 | 0 0 I | | x | | -F |
637  * G1 | 0 cF/\d1/\ d/\ | | g | | -d/\F |
638  * F | I d/\ 0 | | F | | (x+d-x0)/c |
639  *
640  * con d = R*d_0, c = dCoef
641  */
642 
643  /* termini di reazione sul nodo */
644  for (int iCnt = 1; iCnt <= 3; iCnt++) {
645  WM.PutItem(iCnt, iFirstMomentumIndex+iCnt,
646  iFirstReactionIndex+iCnt, 1.);
647  }
648  WM.PutCross(4, iFirstMomentumIndex+3,
649  iFirstReactionIndex, dTmp);
650 
651  /* Nota: F, la reazione vincolare, e' stata aggiornata da AssRes */
652 
653  /* Termini diagonali del tipo: c*F/\d/\Delta_g
654  * nota: la forza e' gia' moltiplicata per dCoef */
655  WM.PutMat3x3(10, iFirstMomentumIndex+3,
656  iFirstPositionIndex+3, Mat3x3(MatCrossCross, F*dCoef, dTmp));
657 
658  /* Modifica: divido le equazioni di vincolo per dCoef */
659 
660  /* termini di vincolo dovuti al nodo 1 */
661  for (int iCnt = 1; iCnt <= 3; iCnt++) {
662  WM.PutItem(18+iCnt, iFirstReactionIndex+iCnt,
663  iFirstPositionIndex+iCnt, -1.);
664  }
665  WM.PutCross(22, iFirstReactionIndex,
666  iFirstPositionIndex+3, dTmp);
667 
668  return WorkMat;
669 }
void PutMat3x3(integer iSubIt, integer iFirstRow, integer iFirstCol, const Mat3x3 &m)
Definition: submat.cc:1331
virtual const Mat3x3 & GetRRef(void) const
Definition: strnode.h:1006
Definition: matvec3.h:98
const StructNode * pNode
Definition: spherj.h:157
void ResizeReset(integer iNewRow, integer iNewCol)
Definition: submat.cc:1084
void PutCross(integer iSubIt, integer iFirstRow, integer iFirstCol, const Vec3 &v)
Definition: submat.cc:1236
Vec3 d
Definition: spherj.h:159
void PutItem(integer iSubIt, integer iRow, integer iCol, const doublereal &dCoef)
Definition: submat.h:997
#define DEBUGCOUT(msg)
Definition: myassert.h:232
virtual integer iGetFirstMomentumIndex(void) const =0
virtual integer iGetFirstPositionIndex(void) const
Definition: strnode.h:452
const MatCrossCross_Manip MatCrossCross
Definition: matvec3.cc:640
SparseSubMatrixHandler & SetSparse(void)
Definition: submat.h:1178
virtual integer iGetFirstIndex(void) const
Definition: dofown.h:127
long int integer
Definition: colamd.c:51
Vec3 F
Definition: spherj.h:160
Mat3x3 R

Here is the call graph for this function:

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

Implements Elem.

Definition at line 673 of file spherj.cc.

References VectorHandler::Add(), ASSERT, Vec3::Cross(), d, DEBUGCOUT, F, StructNode::GetRCurr(), StructDispNode::GetXCurr(), DofOwnerOwner::iGetFirstIndex(), StructDispNode::iGetFirstMomentumIndex(), pNode, SubVectorHandler::PutRowIndex(), R, VectorHandler::ResizeReset(), VectorHandler::Sub(), WorkSpaceDim(), and X0.

677 {
678  DEBUGCOUT("Entering PinJoint::AssRes()" << std::endl);
679 
680  /* Dimensiona e resetta la matrice di lavoro */
681  integer iNumRows = 0;
682  integer iNumCols = 0;
683  WorkSpaceDim(&iNumRows, &iNumCols);
684  WorkVec.ResizeReset(iNumRows);
685 
686  integer iFirstMomentumIndex = pNode->iGetFirstMomentumIndex();
687  integer iFirstReactionIndex = iGetFirstIndex();
688 
689  /* Indici dei nodi */
690  for (int iCnt = 1; iCnt <= 6; iCnt++) {
691  WorkVec.PutRowIndex(iCnt, iFirstMomentumIndex+iCnt);
692  }
693 
694 
695  /* Indici del vincolo */
696  for(int iCnt = 1; iCnt <= 3; iCnt++) {
697  WorkVec.PutRowIndex(6+iCnt, iFirstReactionIndex+iCnt);
698  }
699 
700  F = Vec3(XCurr, iFirstReactionIndex+1);
701 
702  const Vec3& x(pNode->GetXCurr());
703  const Mat3x3& R(pNode->GetRCurr());
704 
705  Vec3 dTmp(R*d);
706 
707  WorkVec.Sub(1, F);
708  WorkVec.Add(4, F.Cross(dTmp)); /* Sfrutto il fatto che F/\d = -d/\F */
709 
710  /* Modifica: divido le equazioni di vincolo per dCoef */
711  ASSERT(dCoef != 0.);
712  WorkVec.Add(7, (x+dTmp-X0)/dCoef);
713 
714  return WorkVec;
715 }
Vec3 Cross(const Vec3 &v) const
Definition: matvec3.h:218
Vec3 X0
Definition: spherj.h:158
Definition: matvec3.h:98
virtual void ResizeReset(integer)
Definition: vh.cc:55
virtual const Mat3x3 & GetRCurr(void) const
Definition: strnode.h:1012
const StructNode * pNode
Definition: spherj.h:157
virtual void Sub(integer iRow, const Vec3 &v)
Definition: vh.cc:78
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: spherj.h:187
Vec3 d
Definition: spherj.h:159
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
#define DEBUGCOUT(msg)
Definition: myassert.h:232
virtual integer iGetFirstMomentumIndex(void) const =0
#define ASSERT(expression)
Definition: colamd.c:977
virtual const Vec3 & GetXCurr(void) const
Definition: strnode.h:310
virtual void Add(integer iRow, const Vec3 &v)
Definition: vh.cc:63
virtual integer iGetFirstIndex(void) const
Definition: dofown.h:127
long int integer
Definition: colamd.c:51
Vec3 F
Definition: spherj.h:160
Mat3x3 R

Here is the call graph for this function:

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

Reimplemented from Elem.

Definition at line 234 of file spherj.h.

References pNode.

234  {
235  connectedNodes.resize(1);
236  connectedNodes[0] = pNode;
237  };
const StructNode * pNode
Definition: spherj.h:157
virtual DofOrder::Order PinJoint::GetDofType ( unsigned int  i) const
inlinevirtual

Reimplemented from Elem.

Definition at line 182 of file spherj.h.

References DofOrder::ALGEBRAIC, and ASSERT.

182  {
183  ASSERT(i >= 0 && i < 3);
184  return DofOrder::ALGEBRAIC;
185  };
#define ASSERT(expression)
Definition: colamd.c:977
DofOrder::Order PinJoint::GetEqType ( unsigned int  i) const
virtual

Reimplemented from SimulationEntity.

Definition at line 717 of file spherj.cc.

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

717  {
718  ASSERTMSGBREAK(i >=0 and i < iGetNumDof(),
719  "INDEX ERROR in PinJoint::GetEqType");
720  return DofOrder::ALGEBRAIC;
721 }
#define ASSERTMSGBREAK(expr, msg)
Definition: myassert.h:222
virtual unsigned int iGetNumDof(void) const
Definition: spherj.h:178

Here is the call graph for this function:

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

Implements Joint.

Definition at line 171 of file spherj.h.

References Joint::PIN.

171  {
172  return Joint::PIN;
173  };
virtual unsigned int PinJoint::iGetInitialNumDof ( void  ) const
inlinevirtual

Implements SubjectToInitialAssembly.

Definition at line 208 of file spherj.h.

208  {
209  return 6;
210  };
virtual unsigned int PinJoint::iGetNumDof ( void  ) const
inlinevirtual

Reimplemented from Elem.

Definition at line 178 of file spherj.h.

Referenced by GetEqType().

178  {
179  return 3;
180  };
VariableSubMatrixHandler & PinJoint::InitialAssJac ( VariableSubMatrixHandler WorkMat,
const VectorHandler XCurr 
)
virtual

Implements SubjectToInitialAssembly.

Definition at line 735 of file spherj.cc.

References FullSubMatrixHandler::Add(), d, DEBUGCOUT, F, StructNode::GetRRef(), StructNode::GetWRef(), DofOwnerOwner::iGetFirstIndex(), StructDispNode::iGetFirstPositionIndex(), InitialWorkSpaceDim(), MatCross, MatCrossCross, pNode, FullSubMatrixHandler::PutCoef(), FullSubMatrixHandler::PutColIndex(), FullSubMatrixHandler::PutRowIndex(), R, FullSubMatrixHandler::ResizeReset(), and VariableSubMatrixHandler::SetFull().

737 {
738  DEBUGCOUT("Entering PinJoint::InitialAssJac()" << std::endl);
739 
740  FullSubMatrixHandler& WM = WorkMat.SetFull();
741 
742  /* Dimensiona e resetta la matrice di lavoro */
743  integer iNumRows = 0;
744  integer iNumCols = 0;
745  InitialWorkSpaceDim(&iNumRows, &iNumCols);
746  WM.ResizeReset(iNumRows, iNumCols);
747 
748  /* Equazioni: vedi joints.dvi */
749 
750  /* Indici */
751  integer iFirstPositionIndex = pNode->iGetFirstPositionIndex();
752  integer iFirstVelocityIndex = iFirstPositionIndex+6;
753  integer iFirstReactionIndex = iGetFirstIndex();
754  integer iReactionPrimeIndex = iFirstReactionIndex+3;
755 
756  /* Setto gli indici */
757  for (int iCnt = 1; iCnt <= 6; iCnt++) {
758  WM.PutRowIndex(iCnt, iFirstPositionIndex+iCnt);
759  WM.PutColIndex(iCnt, iFirstPositionIndex+iCnt);
760  WM.PutRowIndex(6+iCnt, iFirstVelocityIndex+iCnt);
761  WM.PutColIndex(6+iCnt, iFirstVelocityIndex+iCnt);
762  WM.PutRowIndex(12+iCnt, iFirstReactionIndex+iCnt);
763  WM.PutColIndex(12+iCnt, iFirstReactionIndex+iCnt);
764  }
765 
766  /* Matrici identita' */
767  for (int iCnt = 1; iCnt <= 3; iCnt++) {
768  /* Contributo di forza all'equazione della forza */
769  WM.PutCoef(iCnt, 12+iCnt, 1.);
770 
771  /* Contrib. di der. di forza all'eq. della der. della forza */
772  WM.PutCoef(6+iCnt, 15+iCnt, 1.);
773 
774  /* Equazione di vincolo */
775  WM.PutCoef(12+iCnt, iCnt, -1.);
776 
777  /* Derivata dell'equazione di vincolo */
778  WM.PutCoef(15+iCnt, 6+iCnt, -1.);
779  }
780 
781  /* Recupera i dati */
782  const Mat3x3& R(pNode->GetRRef());
783  const Vec3& Omega(pNode->GetWRef());
784  /* F e' stata aggiornata da InitialAssRes */
785  Vec3 FPrime(XCurr, iReactionPrimeIndex+1);
786 
787  /* Distanza nel sistema globale */
788  Vec3 dTmp(R*d);
789 
790  /* Matrici F/\d/\ */
791  Mat3x3 FWedgedWedge(MatCrossCross, F, dTmp);
792 
793  /* Matrici (omega/\d)/\ */
794  Mat3x3 OWedgedWedge(MatCross, Omega.Cross(dTmp));
795 
796  /* Equazione di momento */
797  WM.Add(4, 4, FWedgedWedge);
798  WM.Add(4, 13, Mat3x3(MatCross, dTmp));
799 
800  /* Derivata dell'equazione di momento */
801  WM.Add(10, 4, (Mat3x3(MatCross, FPrime) + Mat3x3(MatCrossCross, F, Omega))*Mat3x3(MatCross, dTmp));
802  WM.Add(10, 10, FWedgedWedge);
803  WM.Add(10, 13, OWedgedWedge);
804  WM.Add(10, 16, Mat3x3(MatCross, dTmp));
805 
806  /* Equazione di vincolo */
807  WM.Add(13, 4, Mat3x3(MatCross, dTmp));
808 
809  /* Derivata dell'equazione di vincolo */
810  WM.Add(16, 4, OWedgedWedge);
811  WM.Add(16, 10, Mat3x3(MatCross, dTmp));
812 
813  return WorkMat;
814 }
void PutColIndex(integer iSubCol, integer iCol)
Definition: submat.h:325
virtual const Mat3x3 & GetRRef(void) const
Definition: strnode.h:1006
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: spherj.h:211
Definition: matvec3.h:98
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
const StructNode * pNode
Definition: spherj.h:157
void PutCoef(integer iRow, integer iCol, const doublereal &dCoef)
Definition: submat.h:672
virtual const Vec3 & GetWRef(void) const
Definition: strnode.h:1024
Vec3 d
Definition: spherj.h:159
#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
const MatCrossCross_Manip MatCrossCross
Definition: matvec3.cc:640
void PutRowIndex(integer iSubRow, integer iRow)
Definition: submat.h:311
virtual integer iGetFirstIndex(void) const
Definition: dofown.h:127
long int integer
Definition: colamd.c:51
Vec3 F
Definition: spherj.h:160
Mat3x3 R

Here is the call graph for this function:

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

Implements SubjectToInitialAssembly.

Definition at line 819 of file spherj.cc.

References VectorHandler::Add(), Vec3::Cross(), d, DEBUGCOUT, F, StructNode::GetRCurr(), StructDispNode::GetVCurr(), StructNode::GetWCurr(), StructDispNode::GetXCurr(), DofOwnerOwner::iGetFirstIndex(), StructDispNode::iGetFirstPositionIndex(), InitialWorkSpaceDim(), pNode, SubVectorHandler::PutRowIndex(), R, VectorHandler::ResizeReset(), VectorHandler::Sub(), and X0.

821 {
822  DEBUGCOUT("Entering PinJoint::InitialAssRes()" << std::endl);
823 
824  /* Dimensiona e resetta la matrice di lavoro */
825  integer iNumRows = 0;
826  integer iNumCols = 0;
827  InitialWorkSpaceDim(&iNumRows, &iNumCols);
828  WorkVec.ResizeReset(iNumRows);
829 
830  /* Indici */
831  integer iFirstPositionIndex = pNode->iGetFirstPositionIndex();
832  integer iFirstVelocityIndex = iFirstPositionIndex+6;
833  integer iFirstReactionIndex = iGetFirstIndex();
834  integer iReactionPrimeIndex = iFirstReactionIndex+3;
835 
836  /* Setta gli indici */
837  for (int iCnt = 1; iCnt <= 6; iCnt++) {
838  WorkVec.PutRowIndex(iCnt, iFirstPositionIndex+iCnt);
839  WorkVec.PutRowIndex(6+iCnt, iFirstVelocityIndex+iCnt);
840  WorkVec.PutRowIndex(12+iCnt, iFirstReactionIndex+iCnt);
841  }
842 
843  /* Recupera i dati */
844  const Vec3& x(pNode->GetXCurr());
845  const Vec3& v(pNode->GetVCurr());
846  const Mat3x3& R(pNode->GetRCurr());
847  const Vec3& Omega(pNode->GetWCurr());
848  F = Vec3(XCurr, iFirstReactionIndex+1);
849  Vec3 FPrime(XCurr, iReactionPrimeIndex+1);
850 
851  /* Distanza nel sistema globale */
852  Vec3 dTmp(R*d);
853 
854  /* Vettori omega/\d */
855  Vec3 OWedged(Omega.Cross(dTmp));
856 
857  /* Equazioni di equilibrio */
858  WorkVec.Sub(1, F);
859  WorkVec.Add(4, F.Cross(dTmp)); /* Sfrutto il fatto che F/\d = -d/\F */
860 
861  /* Derivate delle equazioni di equilibrio */
862  WorkVec.Sub(7, FPrime);
863  WorkVec.Add(10, FPrime.Cross(dTmp)-OWedged.Cross(F));
864 
865  /* Equazione di vincolo */
866  WorkVec.Add(13, x+dTmp-X0);
867 
868  /* Derivata dell'equazione di vincolo */
869  WorkVec.Add(16, v+OWedged);
870 
871  return WorkVec;
872 }
Vec3 X0
Definition: spherj.h:158
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: spherj.h:211
Definition: matvec3.h:98
virtual void ResizeReset(integer)
Definition: vh.cc:55
virtual const Mat3x3 & GetRCurr(void) const
Definition: strnode.h:1012
const StructNode * pNode
Definition: spherj.h:157
virtual void Sub(integer iRow, const Vec3 &v)
Definition: vh.cc:78
Vec3 d
Definition: spherj.h:159
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
#define DEBUGCOUT(msg)
Definition: myassert.h:232
virtual integer iGetFirstPositionIndex(void) const
Definition: strnode.h:452
virtual const Vec3 & GetWCurr(void) const
Definition: strnode.h:1030
virtual const Vec3 & GetXCurr(void) const
Definition: strnode.h:310
virtual void Add(integer iRow, const Vec3 &v)
Definition: vh.cc:63
virtual const Vec3 & GetVCurr(void) const
Definition: strnode.h:322
virtual integer iGetFirstIndex(void) const
Definition: dofown.h:127
long int integer
Definition: colamd.c:51
Vec3 F
Definition: spherj.h:160
Mat3x3 R

Here is the call graph for this function:

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

Implements SubjectToInitialAssembly.

Definition at line 211 of file spherj.h.

Referenced by InitialAssJac(), and InitialAssRes().

212  {
213  *piNumRows = 18;
214  *piNumCols = 18;
215  };
void PinJoint::Output ( OutputHandler OH) const
virtual

Reimplemented from ToBeOutput.

Definition at line 724 of file spherj.cc.

References ToBeOutput::bToBeOutput(), dRaDegr, F, WithLabel::GetLabel(), StructNode::GetRCurr(), OutputHandler::Joints(), MatR2EulerAngles(), Joint::Output(), pNode, and Zero3.

725 {
726  if (bToBeOutput()) {
727  Joint::Output(OH.Joints(), "Pin", GetLabel(), F, Zero3, F, Zero3)
728  << " " << MatR2EulerAngles(pNode->GetRCurr())*dRaDegr << std::endl;
729  }
730 }
const Vec3 Zero3(0., 0., 0.)
virtual bool bToBeOutput(void) const
Definition: output.cc:890
virtual const Mat3x3 & GetRCurr(void) const
Definition: strnode.h:1012
const StructNode * pNode
Definition: spherj.h:157
const doublereal dRaDegr
Definition: matvec3.cc:884
std::ostream & Joints(void) const
Definition: output.h:443
Vec3 MatR2EulerAngles(const Mat3x3 &R)
Definition: matvec3.cc:887
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
Vec3 F
Definition: spherj.h:160
unsigned int GetLabel(void) const
Definition: withlab.cc:62

Here is the call graph for this function:

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

Implements Elem.

Definition at line 593 of file spherj.cc.

References d, WithLabel::GetLabel(), pNode, Joint::Restart(), Vec3::Write(), and X0.

594 {
595  Joint::Restart(out) << ", pin, "
596  << pNode->GetLabel() << ", reference, node, ",
597  d.Write(out, ", ") << ", reference, global, ",
598  X0.Write(out, ", ") << ';' << std::endl;
599 
600  return out;
601 }
std::ostream & Write(std::ostream &out, const char *sFill=" ") const
Definition: matvec3.cc:738
Vec3 X0
Definition: spherj.h:158
const StructNode * pNode
Definition: spherj.h:157
Vec3 d
Definition: spherj.h:159
virtual std::ostream & Restart(std::ostream &out) const
Definition: joint.h:195
unsigned int GetLabel(void) const
Definition: withlab.cc:62

Here is the call graph for this function:

virtual void PinJoint::WorkSpaceDim ( integer piNumRows,
integer piNumCols 
) const
inlinevirtual

Implements Elem.

Definition at line 187 of file spherj.h.

Referenced by AssRes().

187  {
188  *piNumRows = 9;
189  *piNumCols = 9;
190  };

Member Data Documentation

Vec3 PinJoint::d
private

Definition at line 159 of file spherj.h.

Referenced by AssJac(), AssRes(), InitialAssJac(), InitialAssRes(), and Restart().

Vec3 PinJoint::F
private

Definition at line 160 of file spherj.h.

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

const StructNode* PinJoint::pNode
private

Definition at line 157 of file spherj.h.

Referenced by AssJac(), AssRes(), GetConnectedNodes(), InitialAssJac(), InitialAssRes(), Output(), and Restart().

Vec3 PinJoint::X0
private

Definition at line 158 of file spherj.h.

Referenced by AssRes(), InitialAssRes(), and Restart().


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