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

#include <univj.h>

Inheritance diagram for UniversalRotationJoint:
Collaboration diagram for UniversalRotationJoint:

Public Member Functions

 UniversalRotationJoint (unsigned int uL, const DofOwner *pDO, const StructNode *pN1, const StructNode *pN2, const Mat3x3 &R1hTmp, const Mat3x3 &R2hTmp, const OrientationDescription &od, flag fOut)
 
 ~UniversalRotationJoint (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 OutputPrepare (OutputHandler &OH)
 
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 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)
 

Protected Attributes

OrientationDescription od
 
- Protected Attributes inherited from WithLabel
unsigned int uLabel
 
std::string sName
 
- Protected Attributes inherited from ToBeOutput
flag fOutput
 
- Protected Attributes inherited from GravityOwner
GravitypGravity
 

Private Attributes

const StructNodepNode1
 
const StructNodepNode2
 
Mat3x3 R1h
 
Mat3x3 R2h
 
doublereal dM
 

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
 

Detailed Description

Definition at line 138 of file univj.h.

Constructor & Destructor Documentation

UniversalRotationJoint::UniversalRotationJoint ( unsigned int  uL,
const DofOwner pDO,
const StructNode pN1,
const StructNode pN2,
const Mat3x3 R1hTmp,
const Mat3x3 R2hTmp,
const OrientationDescription od,
flag  fOut 
)

Definition at line 603 of file univj.cc.

References NO_OP.

611 : Elem(uL, fOut),
612 Joint(uL, pDO, fOut),
613 pNode1(pN1), pNode2(pN2),
614 #ifdef USE_NETCDF
615 Var_Phi(0),
616 #endif // USE_NETCDF
617 R1h(R1hTmp), R2h(R2hTmp), dM(0.), od(od)
618 {
619  NO_OP;
620 }
Joint(unsigned int uL, const DofOwner *pD, flag fOut)
Definition: joint.cc:83
#define NO_OP
Definition: myassert.h:74
const StructNode * pNode2
Definition: univj.h:144
const StructNode * pNode1
Definition: univj.h:143
OrientationDescription od
Definition: univj.h:153
Elem(unsigned int uL, flag fOut)
Definition: elem.cc:41
doublereal dM
Definition: univj.h:150
UniversalRotationJoint::~UniversalRotationJoint ( void  )

Definition at line 624 of file univj.cc.

References NO_OP.

625 {
626  NO_OP;
627 }
#define NO_OP
Definition: myassert.h:74

Member Function Documentation

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

Implements Elem.

Definition at line 649 of file univj.cc.

References FullSubMatrixHandler::Add(), DEBUGCOUT, FullSubMatrixHandler::DecCoef(), dM, StructNode::GetRRef(), Mat3x3::GetVec(), DofOwnerOwner::iGetFirstIndex(), StructDispNode::iGetFirstMomentumIndex(), StructDispNode::iGetFirstPositionIndex(), FullSubMatrixHandler::IncCoef(), MatCrossCross, pNode1, pNode2, FullSubMatrixHandler::PutColIndex(), FullSubMatrixHandler::PutRowIndex(), R1h, R2h, FullSubMatrixHandler::ResizeReset(), VariableSubMatrixHandler::SetFull(), FullSubMatrixHandler::Sub(), and WorkSpaceDim().

653 {
654  DEBUGCOUT("Entering UniversalRotationJoint::AssJac()" << std::endl);
655 
656  /* Setta la sottomatrice come piena (e' un po' dispersivo, ma lo jacobiano
657  * e' complicato */
658  FullSubMatrixHandler& WM = WorkMat.SetFull();
659 
660  /* Ridimensiona la sottomatrice in base alle esigenze */
661  integer iNumRows = 0;
662  integer iNumCols = 0;
663  WorkSpaceDim(&iNumRows, &iNumCols);
664  WM.ResizeReset(iNumRows, iNumCols);
665 
666  /* Recupera gli indici delle varie incognite */
667  integer iNode1FirstPosIndex = pNode1->iGetFirstPositionIndex() + 3;
668  integer iNode1FirstMomIndex = pNode1->iGetFirstMomentumIndex() + 3;
669  integer iNode2FirstPosIndex = pNode2->iGetFirstPositionIndex() + 3;
670  integer iNode2FirstMomIndex = pNode2->iGetFirstMomentumIndex() + 3;
671  integer iFirstReactionIndex = iGetFirstIndex();
672 
673  /* Setta gli indici delle equazioni */
674  for (int iCnt = 1; iCnt <= 3; iCnt++) {
675  WM.PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
676  WM.PutColIndex(iCnt, iNode1FirstPosIndex + iCnt);
677  WM.PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
678  WM.PutColIndex(3 + iCnt, iNode2FirstPosIndex + iCnt);
679  }
680 
681  WM.PutRowIndex(6 + 1, iFirstReactionIndex + 1);
682  WM.PutColIndex(6 + 1, iFirstReactionIndex + 1);
683 
684  /* Recupera i dati che servono */
685  const Mat3x3& R1(pNode1->GetRRef());
686  const Mat3x3& R2(pNode2->GetRRef());
687 
688  /* Suppongo che le reazioni F, M siano gia' state aggiornate da AssRes;
689  * ricordo che la forza F e' nel sistema globale, mentre la coppia M
690  * e' nel sistema locale ed il terzo termine, M(3), e' nullo in quanto
691  * diretto come l'asse attorno al quale la rotazione e' consentita */
692 
693  Vec3 e3a(R1*R1h.GetVec(3));
694  Vec3 e2b(R2*R2h.GetVec(2));
695  Vec3 MTmp = e2b*(dM*dCoef);
696 
697  Mat3x3 MWedgee3aWedge(MatCrossCross, MTmp, e3a);
698  Mat3x3 e3aWedgeMWedge(MatCrossCross, e3a, MTmp);
699 
700  WM.Sub(0 + 1, 0 + 1, MWedgee3aWedge);
701  WM.Add(0 + 1, 3 + 1, e3aWedgeMWedge);
702 
703  WM.Add(3 + 1, 0 + 1, MWedgee3aWedge);
704  WM.Sub(3 + 1, 3 + 1, e3aWedgeMWedge);
705 
706  /* Contributo del momento alle equazioni di equilibrio dei nodi */
707  Vec3 Tmp(e2b.Cross(e3a));
708 
709  for (int iCnt = 1; iCnt <= 3; iCnt++) {
710  doublereal d = Tmp(iCnt);
711  WM.IncCoef(iCnt, 6 + 1, d);
712  WM.DecCoef(3 + iCnt, 6 + 1, d);
713 
714  /* Modifica: divido le equazioni di vincolo per dCoef */
715  WM.IncCoef(6 + 1, iCnt, d);
716  WM.DecCoef(6 + 1, 3 + iCnt, d);
717  }
718 
719  return WorkMat;
720 }
void PutColIndex(integer iSubCol, integer iCol)
Definition: submat.h:325
virtual const Mat3x3 & GetRRef(void) const
Definition: strnode.h:1006
Definition: matvec3.h:98
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: univj.h:183
FullSubMatrixHandler & SetFull(void)
Definition: submat.h:1168
void Add(integer iRow, integer iCol, const Vec3 &v)
Definition: submat.cc:209
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
#define DEBUGCOUT(msg)
Definition: myassert.h:232
virtual integer iGetFirstMomentumIndex(void) const =0
virtual integer iGetFirstPositionIndex(void) const
Definition: strnode.h:452
const StructNode * pNode2
Definition: univj.h:144
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 StructNode * pNode1
Definition: univj.h:143
void Sub(integer iRow, integer iCol, const Vec3 &v)
Definition: submat.cc:215
virtual integer iGetFirstIndex(void) const
Definition: dofown.h:127
double doublereal
Definition: colamd.c:52
doublereal dM
Definition: univj.h:150
long int integer
Definition: colamd.c:51

Here is the call graph for this function:

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

Implements Elem.

Definition at line 725 of file univj.cc.

References VectorHandler::Add(), ASSERT, DEBUGCOUT, dM, StructNode::GetRCurr(), Mat3x3::GetVec(), DofOwnerOwner::iGetFirstIndex(), StructDispNode::iGetFirstMomentumIndex(), pNode1, pNode2, VectorHandler::PutCoef(), SubVectorHandler::PutRowIndex(), R1h, R2h, VectorHandler::ResizeReset(), VectorHandler::Sub(), and WorkSpaceDim().

729 {
730  DEBUGCOUT("Entering UniversalRotationJoint::AssRes()" << std::endl);
731 
732  /* Dimensiona e resetta la matrice di lavoro */
733  integer iNumRows = 0;
734  integer iNumCols = 0;
735  WorkSpaceDim(&iNumRows, &iNumCols);
736  WorkVec.ResizeReset(iNumRows);
737 
738  /* Indici */
739  integer iNode1FirstMomIndex = pNode1->iGetFirstMomentumIndex()+3;
740  integer iNode2FirstMomIndex = pNode2->iGetFirstMomentumIndex()+3;
741  integer iFirstReactionIndex = iGetFirstIndex();
742 
743  /* Indici dei nodi */
744  for (int iCnt = 1; iCnt <= 3; iCnt++) {
745  WorkVec.PutRowIndex(iCnt, iNode1FirstMomIndex + iCnt);
746  WorkVec.PutRowIndex(3 + iCnt, iNode2FirstMomIndex + iCnt);
747  }
748 
749  /* Indici del vincolo */
750  WorkVec.PutRowIndex(6 + 1, iFirstReactionIndex + 1);
751 
752  /* Aggiorna i dati propri */
753  dM = XCurr(iFirstReactionIndex+1);
754 
755  /* Recupera i dati */
756  const Mat3x3& R1(pNode1->GetRCurr());
757  const Mat3x3& R2(pNode2->GetRCurr());
758 
759  /* Costruisce i dati propri nella configurazione corrente */
760  Vec3 e3a(R1*R1h.GetVec(3));
761  Vec3 e2b(R2*R2h.GetVec(2));
762 
763  Vec3 MTmp(e2b.Cross(e3a)*dM);
764 
765  /* Equazioni di equilibrio, nodo 1 */
766  WorkVec.Sub(1, MTmp); /* Sfrutto F/\d = -d/\F */
767 
768  /* Equazioni di equilibrio, nodo 2 */
769  WorkVec.Add(4, MTmp);
770 
771  /* Modifica: divido le equazioni di vincolo per dCoef */
772  ASSERT(dCoef != 0.);
773  /* Equazione di vincolo di rotazione */
774  WorkVec.PutCoef(6 + 1, (e3a*e2b)/dCoef);
775 
776  return WorkVec;
777 }
Definition: matvec3.h:98
virtual void ResizeReset(integer)
Definition: vh.cc:55
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: univj.h:183
virtual const Mat3x3 & GetRCurr(void) const
Definition: strnode.h:1012
virtual void Sub(integer iRow, const Vec3 &v)
Definition: vh.cc:78
Vec3 GetVec(unsigned short int i) const
Definition: matvec3.h:893
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
const StructNode * pNode2
Definition: univj.h:144
virtual void PutCoef(integer iRow, const doublereal &dCoef)=0
virtual void Add(integer iRow, const Vec3 &v)
Definition: vh.cc:63
const StructNode * pNode1
Definition: univj.h:143
virtual integer iGetFirstIndex(void) const
Definition: dofown.h:127
doublereal dM
Definition: univj.h:150
long int integer
Definition: colamd.c:51

Here is the call graph for this function:

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

Reimplemented from Elem.

Definition at line 227 of file univj.h.

References pNode1, and pNode2.

227  {
228  connectedNodes.resize(2);
229  connectedNodes[0] = pNode1;
230  connectedNodes[1] = pNode2;
231  };
const StructNode * pNode2
Definition: univj.h:144
const StructNode * pNode1
Definition: univj.h:143
DofOrder::Order UniversalRotationJoint::GetDofType ( unsigned int  i) const
inlinevirtual

Reimplemented from Elem.

Definition at line 178 of file univj.h.

References DofOrder::ALGEBRAIC, and ASSERT.

178  {
179  ASSERT(i >= 0 && i < 1);
180  return DofOrder::ALGEBRAIC;
181  };
#define ASSERT(expression)
Definition: colamd.c:977
virtual Joint::Type UniversalRotationJoint::GetJointType ( void  ) const
inlinevirtual

Implements Joint.

Definition at line 170 of file univj.h.

References Joint::UNIVERSALROTATION.

170  {
172  };
virtual unsigned int UniversalRotationJoint::iGetInitialNumDof ( void  ) const
inlinevirtual

Implements SubjectToInitialAssembly.

Definition at line 204 of file univj.h.

204  {
205  return 2;
206  };
virtual unsigned int UniversalRotationJoint::iGetNumDof ( void  ) const
inlinevirtual

Reimplemented from Elem.

Definition at line 174 of file univj.h.

174  {
175  return 1;
176  };
VariableSubMatrixHandler & UniversalRotationJoint::InitialAssJac ( VariableSubMatrixHandler WorkMat,
const VectorHandler XCurr 
)
virtual

Implements SubjectToInitialAssembly.

Definition at line 885 of file univj.cc.

References FullSubMatrixHandler::Add(), Vec3::Cross(), DEBUGCOUT, FullSubMatrixHandler::DecCoef(), dM, WithLabel::GetLabel(), StructNode::GetRRef(), Mat3x3::GetVec(), StructNode::GetWRef(), DofOwnerOwner::iGetFirstIndex(), StructDispNode::iGetFirstPositionIndex(), FullSubMatrixHandler::IncCoef(), InitialWorkSpaceDim(), MatCross, MatCrossCross, MBDYN_EXCEPT_ARGS, pNode1, pNode2, FullSubMatrixHandler::PutCoef(), FullSubMatrixHandler::PutColIndex(), FullSubMatrixHandler::PutRowIndex(), R1h, R2h, FullSubMatrixHandler::ResizeReset(), VariableSubMatrixHandler::SetFull(), and FullSubMatrixHandler::Sub().

887 {
888  DEBUGCOUT("Entering UniversalRotationJoint::InitialAssJac()" << std::endl);
889 
890  /* Per ora usa la matrice piena; eventualmente si puo'
891  * passare a quella sparsa quando si ottimizza */
892  FullSubMatrixHandler& WM = WorkMat.SetFull();
893 
894  /* Dimensiona e resetta la matrice di lavoro */
895  integer iNumRows = 0;
896  integer iNumCols = 0;
897  InitialWorkSpaceDim(&iNumRows, &iNumCols);
898  WM.ResizeReset(iNumRows, iNumCols);
899 
900  /* Equazioni: vedi joints.dvi */
901 
902  /* Indici */
903  integer iNode1FirstPosIndex = pNode1->iGetFirstPositionIndex() + 3;
904  integer iNode1FirstVelIndex = iNode1FirstPosIndex + 6;
905  integer iNode2FirstPosIndex = pNode2->iGetFirstPositionIndex() + 3;
906  integer iNode2FirstVelIndex = iNode2FirstPosIndex + 6;
907  integer iFirstReactionIndex = iGetFirstIndex();
908  integer iReactionPrimeIndex = iFirstReactionIndex + 1;
909 
910  /* Nota: le reazioni vincolari sono:
911  * Forza, 3 incognite, riferimento globale,
912  * Momento, 1 incognita, riferimento locale
913  */
914 
915  /* Setta gli indici dei nodi */
916  for (int iCnt = 1; iCnt <= 3; iCnt++) {
917  WM.PutRowIndex(iCnt, iNode1FirstPosIndex + iCnt);
918  WM.PutColIndex(iCnt, iNode1FirstPosIndex + iCnt);
919  WM.PutRowIndex(3 + iCnt, iNode1FirstVelIndex + iCnt);
920  WM.PutColIndex(3 + iCnt, iNode1FirstVelIndex + iCnt);
921  WM.PutRowIndex(6 + iCnt, iNode2FirstPosIndex + iCnt);
922  WM.PutColIndex(6 + iCnt, iNode2FirstPosIndex + iCnt);
923  WM.PutRowIndex(9 + iCnt, iNode2FirstVelIndex + iCnt);
924  WM.PutColIndex(9 + iCnt, iNode2FirstVelIndex + iCnt);
925  }
926 
927  /* Setta gli indici delle reazioni */
928  for (int iCnt = 1; iCnt <= 2; iCnt++) {
929  WM.PutRowIndex(12 + iCnt, iFirstReactionIndex + iCnt);
930  WM.PutColIndex(12 + iCnt, iFirstReactionIndex + iCnt);
931  }
932 
933  /* Recupera i dati */
934  const Mat3x3& R1(pNode1->GetRRef());
935  const Mat3x3& R2(pNode2->GetRRef());
936  const Vec3& Omega1(pNode1->GetWRef());
937  const Vec3& Omega2(pNode2->GetWRef());
938  /* F ed M sono gia' state aggiornate da InitialAssRes */
939  doublereal dMPrime(XCurr(iReactionPrimeIndex+1));
940 
941  /* Matrici di rotazione dai nodi alla cerniera
942  * nel sistema globale */
943  Vec3 e3a(R1*R1h.GetVec(3));
944  Vec3 e2b(R2*R2h.GetVec(2));
945 
946  /* Ruota il momento e la sua derivata con le matrici della cerniera
947  * rispetto ai nodi */
948  Vec3 MTmp(e2b*dM);
949  Vec3 MPrimeTmp(e2b*dMPrime);
950 
951  /* Matrici (omega1/\d1)/\, -(omega2/\d2)/\ */
952  Mat3x3 MDeltag1((Mat3x3(MatCross, Omega2.Cross(MTmp) + MPrimeTmp)
953  + Mat3x3(MatCrossCross, MTmp, Omega1))*Mat3x3(MatCross, e3a));
954  Mat3x3 MDeltag2(Mat3x3(MatCrossCross, Omega1.Cross(e3a), MTmp)
955  + Mat3x3(MatCrossCross, e3a, MPrimeTmp)
956  + e3a.Cross(Mat3x3(MatCrossCross, Omega2, MTmp)));
957 
958  /* Vettori temporanei */
959  Vec3 Tmp(e2b.Cross(e3a));
960 
961  /* Prodotto vettore tra il versore 3 della cerniera secondo il nodo 1
962  * ed il versore 1 della cerniera secondo il nodo 2. A convergenza
963  * devono essere ortogonali, quindi il loro prodotto vettore deve essere
964  * unitario */
965 
966  /* Error handling: il programma si ferma, pero' segnala dov'e' l'errore */
967  if (Tmp.Dot() < std::numeric_limits<doublereal>::epsilon()) {
968  silent_cerr("CardanoRotationJoint(" << GetLabel() << "): "
969  "first and second node hinge axes are (nearly) orthogonal"
970  << std::endl);
972  }
973 
974  Vec3 TmpPrime(e2b.Cross(Omega1.Cross(e3a)) - e3a.Cross(Omega2.Cross(e2b)));
975 
976  /* Equazione di momento, nodo 1 */
977  WM.Sub(1, 1, Mat3x3(MatCrossCross, MTmp, e3a));
978  WM.Add(4, 7, Mat3x3(MatCrossCross, e3a, MTmp));
979  for (int iCnt = 1; iCnt <= 3; iCnt++) {
980  WM.PutCoef(iCnt, 13, Tmp.dGet(iCnt));
981  }
982 
983  /* Equazione di momento, nodo 2 */
984  WM.Add(7, 1, Mat3x3(MatCrossCross, MTmp, e3a));
985  WM.Sub(7, 7, Mat3x3(MatCrossCross, e3a, MTmp));
986  for (int iCnt = 1; iCnt <= 3; iCnt++) {
987  WM.DecCoef(6 + iCnt, 13, Tmp(iCnt));
988  }
989 
990  /* Derivata dell'equazione di momento, nodo 1 */
991  WM.Sub(4, 1, MDeltag1);
992  WM.Sub(4, 4, Mat3x3(MatCrossCross, MTmp, e3a));
993  WM.Add(4, 7, MDeltag2);
994  WM.Add(4, 10, Mat3x3(MatCrossCross, e3a, MTmp));
995 
996  for (int iCnt = 1; iCnt <= 3; iCnt++) {
997  WM.PutCoef(9 + iCnt, 13, TmpPrime(iCnt));
998  WM.PutCoef(9 + iCnt, 14, Tmp(iCnt));
999  }
1000 
1001  /* Derivata dell'equazione di momento, nodo 2 */
1002  WM.Add(4, 1, Mat3x3(MatCrossCross, MTmp, e3a));
1003  WM.Sub(4, 4, Mat3x3(MatCrossCross, e3a, MTmp));
1004 
1005  for (int iCnt = 1; iCnt <= 3; iCnt++) {
1006  WM.DecCoef(3 + iCnt, 13, TmpPrime(iCnt));
1007  WM.DecCoef(3 + iCnt, 14, Tmp(iCnt));
1008  }
1009 
1010  /* Equazioni di vincolo di rotazione: e2b~e3a */
1011 
1012  for (int iCnt = 1; iCnt <= 3; iCnt++) {
1013  doublereal d = Tmp(iCnt);
1014  WM.IncCoef(13, iCnt, d);
1015  WM.DecCoef(13, 6 + iCnt, d);
1016 
1017  /* Queste sono per la derivata dell'equazione, sono qui solo per
1018  * ottimizzazione */
1019  WM.IncCoef(14, 3 + iCnt, d);
1020  WM.DecCoef(14, 9 + iCnt, d);
1021  }
1022 
1023  /* Derivate delle equazioni di vincolo di rotazione: e2b~e3a */
1024  Vec3 O1mO2(Omega1 - Omega2);
1025  TmpPrime = e3a.Cross(O1mO2.Cross(e2b));
1026  Vec3 TmpPrime2 = e2b.Cross(e3a.Cross(O1mO2));
1027  for (int iCnt = 1; iCnt <= 3; iCnt++) {
1028  WM.PutCoef(14, iCnt, TmpPrime(iCnt));
1029  WM.PutCoef(14, 6 + iCnt, TmpPrime2(iCnt));
1030  }
1031 
1032  return WorkMat;
1033 }
void PutColIndex(integer iSubCol, integer iCol)
Definition: submat.h:325
Vec3 Cross(const Vec3 &v) const
Definition: matvec3.h:218
virtual const Mat3x3 & GetRRef(void) const
Definition: strnode.h:1006
#define MBDYN_EXCEPT_ARGS
Definition: except.h:63
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
void PutCoef(integer iRow, integer iCol, const doublereal &dCoef)
Definition: submat.h:672
virtual const Vec3 & GetWRef(void) const
Definition: strnode.h:1024
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
#define DEBUGCOUT(msg)
Definition: myassert.h:232
virtual integer iGetFirstPositionIndex(void) const
Definition: strnode.h:452
const StructNode * pNode2
Definition: univj.h:144
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 StructNode * pNode1
Definition: univj.h:143
void Sub(integer iRow, integer iCol, const Vec3 &v)
Definition: submat.cc:215
virtual integer iGetFirstIndex(void) const
Definition: dofown.h:127
double doublereal
Definition: colamd.c:52
doublereal dM
Definition: univj.h:150
long int integer
Definition: colamd.c:51
unsigned int GetLabel(void) const
Definition: withlab.cc:62
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: univj.h:208

Here is the call graph for this function:

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

Implements SubjectToInitialAssembly.

Definition at line 1038 of file univj.cc.

References VectorHandler::Add(), grad::Cross(), DEBUGCOUT, dM, StructNode::GetRCurr(), Mat3x3::GetVec(), StructNode::GetWCurr(), DofOwnerOwner::iGetFirstIndex(), StructDispNode::iGetFirstPositionIndex(), InitialWorkSpaceDim(), pNode1, pNode2, VectorHandler::PutCoef(), SubVectorHandler::PutRowIndex(), R1h, R2h, VectorHandler::ResizeReset(), and VectorHandler::Sub().

1040 {
1041  DEBUGCOUT("Entering UniversalRotationJoint::InitialAssRes()" << std::endl);
1042 
1043  /* Dimensiona e resetta la matrice di lavoro */
1044  integer iNumRows = 0;
1045  integer iNumCols = 0;
1046  InitialWorkSpaceDim(&iNumRows, &iNumCols);
1047  WorkVec.ResizeReset(iNumRows);
1048 
1049  /* Indici */
1050  integer iNode1FirstPosIndex = pNode1->iGetFirstPositionIndex() + 3;
1051  integer iNode1FirstVelIndex = iNode1FirstPosIndex + 6;
1052  integer iNode2FirstPosIndex = pNode2->iGetFirstPositionIndex() + 3;
1053  integer iNode2FirstVelIndex = iNode2FirstPosIndex + 6;
1054  integer iFirstReactionIndex = iGetFirstIndex();
1055  integer iReactionPrimeIndex = iFirstReactionIndex + 1;
1056 
1057  /* Setta gli indici */
1058  for (int iCnt = 1; iCnt <= 3; iCnt++) {
1059  WorkVec.PutRowIndex(iCnt, iNode1FirstPosIndex + iCnt);
1060  WorkVec.PutRowIndex(3 + iCnt, iNode1FirstVelIndex + iCnt);
1061  WorkVec.PutRowIndex(6 + iCnt, iNode2FirstPosIndex + iCnt);
1062  WorkVec.PutRowIndex(9 + iCnt, iNode2FirstVelIndex + iCnt);
1063  }
1064 
1065  for (int iCnt = 1; iCnt <= 2; iCnt++) {
1066  WorkVec.PutRowIndex(12 + iCnt, iFirstReactionIndex + iCnt);
1067  }
1068 
1069  /* Recupera i dati */
1070  const Mat3x3& R1(pNode1->GetRCurr());
1071  const Mat3x3& R2(pNode2->GetRCurr());
1072  const Vec3& Omega1(pNode1->GetWCurr());
1073  const Vec3& Omega2(pNode2->GetWCurr());
1074 
1075  /* Aggiorna F ed M, che restano anche per InitialAssJac */
1076  dM = XCurr(iFirstReactionIndex + 1);
1077  doublereal dMPrime(XCurr(iReactionPrimeIndex + 1));
1078 
1079  /* orientazione nel sistema globale */
1080  Vec3 e3a(R1*R1h.GetVec(3));
1081  Vec3 e2b(R2*R2h.GetVec(2));
1082 
1083  /* Ruota il momento e la sua derivata con le matrici della cerniera
1084  * rispetto ai nodi */
1085  Vec3 MTmp(e2b*dM);
1086  Vec3 MPrimeTmp(e3a.Cross(MTmp.Cross(Omega2)) + e2b.Cross(e3a)*dMPrime);
1087 
1088  /* Equazioni di equilibrio, nodo 1 */
1089  WorkVec.Sub(1, MTmp.Cross(e3a));
1090 
1091  /* Derivate delle equazioni di equilibrio, nodo 1 */
1092  WorkVec.Sub(4, MPrimeTmp);
1093 
1094  /* Equazioni di equilibrio, nodo 2 */
1095  WorkVec.Add(7, MTmp.Cross(e3a));
1096 
1097  /* Derivate delle equazioni di equilibrio, nodo 2 */
1098  WorkVec.Add(10, MPrimeTmp);
1099 
1100  /* Equazioni di vincolo di rotazione */
1101  WorkVec.PutCoef(13, e2b*e3a);
1102 
1103  /* Derivate delle equazioni di vincolo di rotazione: e2b~e3a */
1104  Vec3 Tmp((Omega1 - Omega2).Cross(e3a));
1105  WorkVec.PutCoef(14, e2b*Tmp);
1106 
1107  return WorkVec;
1108 }
Definition: matvec3.h:98
virtual void ResizeReset(integer)
Definition: vh.cc:55
virtual const Mat3x3 & GetRCurr(void) const
Definition: strnode.h:1012
virtual void Sub(integer iRow, const Vec3 &v)
Definition: vh.cc:78
Vec3 GetVec(unsigned short int i) const
Definition: matvec3.h:893
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
const StructNode * pNode2
Definition: univj.h:144
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
virtual void Add(integer iRow, const Vec3 &v)
Definition: vh.cc:63
const StructNode * pNode1
Definition: univj.h:143
virtual integer iGetFirstIndex(void) const
Definition: dofown.h:127
double doublereal
Definition: colamd.c:52
doublereal dM
Definition: univj.h:150
long int integer
Definition: colamd.c:51
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: univj.h:208

Here is the call graph for this function:

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

Implements SubjectToInitialAssembly.

Definition at line 208 of file univj.h.

Referenced by InitialAssJac(), and InitialAssRes().

208  {
209  *piNumRows = 14;
210  *piNumCols = 14;
211  };
void UniversalRotationJoint::Output ( OutputHandler OH) const
virtual

Reimplemented from ToBeOutput.

Definition at line 798 of file univj.cc.

References ToBeOutput::bToBeOutput(), dM, dRaDegr, EULER_123, EULER_313, EULER_321, OutputHandler::GetCurrentStep(), WithLabel::GetLabel(), StructNode::GetRCurr(), OutputHandler::JOINTS, OutputHandler::Joints(), MatR2EulerAngles123(), MatR2EulerAngles313(), MatR2EulerAngles321(), od, ORIENTATION_MATRIX, ORIENTATION_VECTOR, Joint::Output(), Vec3::pGetVec(), pNode1, pNode2, R1h, R2h, OutputHandler::UseNetCDF(), OutputHandler::UseText(), RotManip::VecRot(), and Zero3.

799 {
800  if (bToBeOutput()) {
801  Mat3x3 R1Tmp(pNode1->GetRCurr()*R1h);
802  Mat3x3 R2Tmp(pNode2->GetRCurr()*R2h);
803  Vec3 vTmp(R2Tmp.GetVec(2).Cross(R1Tmp.GetVec(3)));
804  Mat3x3 RTmp(R2Tmp.Transpose()*R1Tmp);
805  Vec3 E;
806  switch (od) {
807  case EULER_123:
808  E = MatR2EulerAngles123(RTmp)*dRaDegr;
809  break;
810 
811  case EULER_313:
812  E = MatR2EulerAngles313(RTmp)*dRaDegr;
813  break;
814 
815  case EULER_321:
816  E = MatR2EulerAngles321(RTmp)*dRaDegr;
817  break;
818 
819  case ORIENTATION_VECTOR:
820  E = RotManip::VecRot(RTmp);
821  break;
822 
823  case ORIENTATION_MATRIX:
824  break;
825 
826  default:
827  /* impossible */
828  break;
829  }
830 
831 
832 #ifdef USE_NETCDF
834  Var_F_local->put_rec(Zero3.pGetVec(), OH.GetCurrentStep());
835  Var_M_local->put_rec((Vec3(dM, 0., 0.)).pGetVec(), OH.GetCurrentStep());
836  Var_F_global->put_rec(Zero3.pGetVec(), OH.GetCurrentStep());
837  Var_M_global->put_rec((vTmp*dM).pGetVec(), OH.GetCurrentStep());
838  switch (od) {
839  case EULER_123:
840  case EULER_313:
841  case EULER_321:
842  case ORIENTATION_VECTOR:
843  Var_Phi->put_rec(E.pGetVec(), OH.GetCurrentStep());
844  break;
845 
846  case ORIENTATION_MATRIX:
847  Var_Phi->put_rec(RTmp.pGetMat(), OH.GetCurrentStep());
848  break;
849 
850  default:
851  /* impossible */
852  break;
853  }
854  }
855 #endif // USE_NETCDF
856  if (OH.UseText(OutputHandler::JOINTS)) {
857  Joint::Output(OH.Joints(), "CardanoHinge", GetLabel(),
858  Zero3, Vec3(dM, 0., 0.), Zero3, vTmp*dM)
859  << " ";
860  switch (od) {
861  case EULER_123:
862  case EULER_313:
863  case EULER_321:
864  case ORIENTATION_VECTOR:
865  OH.Joints() << E;
866  break;
867 
868  case ORIENTATION_MATRIX:
869  OH.Joints() << RTmp;
870  break;
871 
872  default:
873  /* impossible */
874  break;
875  }
876 
877  OH.Joints() << std::endl;
878  }
879  }
880 }
const Vec3 Zero3(0., 0., 0.)
virtual bool bToBeOutput(void) const
Definition: output.cc:890
Definition: matvec3.h:98
bool UseNetCDF(int out) const
Definition: output.cc:491
virtual const Mat3x3 & GetRCurr(void) const
Definition: strnode.h:1012
Vec3 VecRot(const Mat3x3 &Phi)
Definition: Rot.cc:136
Vec3 MatR2EulerAngles313(const Mat3x3 &R)
Definition: matvec3.cc:927
long GetCurrentStep(void) const
Definition: output.h:116
Vec3 MatR2EulerAngles123(const Mat3x3 &R)
Definition: matvec3.cc:893
const doublereal dRaDegr
Definition: matvec3.cc:884
std::ostream & Joints(void) const
Definition: output.h:443
const StructNode * pNode2
Definition: univj.h:144
const doublereal * pGetVec(void) const
Definition: matvec3.h:192
Vec3 MatR2EulerAngles321(const Mat3x3 &R)
Definition: matvec3.cc:941
const StructNode * pNode1
Definition: univj.h:143
OrientationDescription od
Definition: univj.h:153
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
doublereal dM
Definition: univj.h:150
unsigned int GetLabel(void) const
Definition: withlab.cc:62
bool UseText(int out) const
Definition: output.cc:446

Here is the call graph for this function:

void UniversalRotationJoint::OutputPrepare ( OutputHandler OH)
virtual

Reimplemented from ToBeOutput.

Definition at line 780 of file univj.cc.

References ToBeOutput::bToBeOutput(), OutputHandler::JOINTS, od, Joint::OutputPrepare_int(), and OutputHandler::UseNetCDF().

781 {
782  if (bToBeOutput()) {
783 #ifdef USE_NETCDF
785  std::string name;
786  OutputPrepare_int("cardano rotation", OH, name);
787 
788  Var_Phi = OH.CreateRotationVar(name, "", od, "global");
789 
790  }
791 #endif // USE_NETCDF
792  }
793 }
virtual bool bToBeOutput(void) const
Definition: output.cc:890
bool UseNetCDF(int out) const
Definition: output.cc:491
virtual void OutputPrepare_int(const std::string &type, OutputHandler &OH, std::string &name)
Definition: joint.cc:107
OrientationDescription od
Definition: univj.h:153

Here is the call graph for this function:

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

Implements Elem.

Definition at line 632 of file univj.cc.

References WithLabel::GetLabel(), Mat3x3::GetVec(), pNode1, pNode2, R1h, R2h, Joint::Restart(), and Write().

633 {
634  Joint::Restart(out) << ", universal rotation, "
635  << pNode1->GetLabel() << ", hinge, reference, node, "
636  "1, ", (R1h.GetVec(1)).Write(out, ", ") << ", "
637  "2, ", (R1h.GetVec(2)).Write(out, ", ") << ", "
638  << pNode2->GetLabel() << ", hinge, reference, node, "
639  "1, ", (R2h.GetVec(1)).Write(out, ", ") << ", "
640  "2, ", (R2h.GetVec(2)).Write(out, ", ") << ";"
641  << std::endl;
642 
643  return out;
644 }
std::ostream & Write(std::ostream &out, const FullMatrixHandler &m, const char *s, const char *s2)
Definition: fullmh.cc:376
Vec3 GetVec(unsigned short int i) const
Definition: matvec3.h:893
virtual std::ostream & Restart(std::ostream &out) const
Definition: joint.h:195
const StructNode * pNode2
Definition: univj.h:144
const StructNode * pNode1
Definition: univj.h:143
unsigned int GetLabel(void) const
Definition: withlab.cc:62

Here is the call graph for this function:

void UniversalRotationJoint::WorkSpaceDim ( integer piNumRows,
integer piNumCols 
) const
inlinevirtual

Implements Elem.

Definition at line 183 of file univj.h.

Referenced by AssJac(), and AssRes().

183  {
184  *piNumRows = 7;
185  *piNumCols = 7;
186  };

Member Data Documentation

doublereal UniversalRotationJoint::dM
private

Definition at line 150 of file univj.h.

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

OrientationDescription UniversalRotationJoint::od
protected

Definition at line 153 of file univj.h.

Referenced by Output(), and OutputPrepare().

const StructNode* UniversalRotationJoint::pNode1
private

Definition at line 143 of file univj.h.

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

const StructNode* UniversalRotationJoint::pNode2
private

Definition at line 144 of file univj.h.

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

Mat3x3 UniversalRotationJoint::R1h
private

Definition at line 148 of file univj.h.

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

Mat3x3 UniversalRotationJoint::R2h
private

Definition at line 149 of file univj.h.

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


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