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

#include <body_vm.h>

Inheritance diagram for StaticVariableBody:
Collaboration diagram for StaticVariableBody:

Public Member Functions

 StaticVariableBody (unsigned int uL, const StaticStructNode *pNode, const DriveCaller *pDCMass, const TplDriveCaller< Vec3 > *pDCXgc, const TplDriveCaller< Mat3x3 > *pDCJgc_vm, const TplDriveCaller< Mat3x3 > *pDCJgc_vg, flag fOut)
 
virtual ~StaticVariableBody (void)
 
void WorkSpaceDim (integer *piNumRows, integer *piNumCols) const
 
virtual VariableSubMatrixHandlerAssJac (VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
void AssMats (VariableSubMatrixHandler &WorkMatA, VariableSubMatrixHandler &WorkMatB, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual SubVectorHandlerAssRes (SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual bool bInverseDynamics (void) const
 
virtual SubVectorHandlerAssRes (SubVectorHandler &WorkVec, const VectorHandler &, const VectorHandler &, const VectorHandler &, InverseDynamics::Order iOrder=InverseDynamics::INVERSE_DYNAMICS)
 
virtual void InitialWorkSpaceDim (integer *piNumRows, integer *piNumCols) const
 
virtual VariableSubMatrixHandlerInitialAssJac (VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
 
virtual SubVectorHandlerInitialAssRes (SubVectorHandler &WorkVec, const VectorHandler &XCurr)
 
virtual void SetValue (DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
 
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 unsigned int iGetNumDof (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) 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 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 Update (const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual void DerivativesUpdate (const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual void Update (const VectorHandler &XCurr, InverseDynamics::Order iOrder)
 
virtual void AfterConvergence (const VectorHandler &X, const VectorHandler &XP)
 
virtual void AfterConvergence (const VectorHandler &X, const VectorHandler &XP, const VectorHandler &XPP)
 
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
 
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 VariableBody
 VariableBody (unsigned int uL, const StructNode *pNode, const DriveCaller *pDCMass, const TplDriveCaller< Vec3 > *pDCXgc, const TplDriveCaller< Mat3x3 > *pDCJgc_vm, const TplDriveCaller< Mat3x3 > *pDCJgc_vg, flag fOut)
 
virtual ~VariableBody (void)
 
virtual std::ostream & Restart (std::ostream &out) const
 
doublereal dGetM (void) const
 
Vec3 GetS (void) const
 
Mat3x3 GetJ (void) const
 
const StructNodepGetNode (void) const
 
virtual Elem::Type GetElemType (void) const
 
virtual unsigned int iGetInitialNumDof (void) const
 
virtual void AfterPredict (VectorHandler &X, VectorHandler &XP)
 
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 ElemGravityOwner
 ElemGravityOwner (unsigned int uL, flag fOut)
 
virtual ~ElemGravityOwner (void)
 
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 InitialAssemblyElem
 InitialAssemblyElem (unsigned int uL, flag fOut)
 
virtual ~InitialAssemblyElem (void)
 
- Public Member Functions inherited from SubjectToInitialAssembly
 SubjectToInitialAssembly (void)
 
virtual ~SubjectToInitialAssembly (void)
 

Private Member Functions

bool AssMats (FullSubMatrixHandler &WorkMatA, FullSubMatrixHandler &WorkMatB, doublereal dCoef)
 

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 }
 
- Protected Member Functions inherited from VariableBody
Vec3 GetS_int (void) const
 
Mat3x3 GetJ_int (void) const
 
void AssVecRBK_int (SubVectorHandler &WorkVec)
 
void AssMatsRBK_int (FullSubMatrixHandler &WMA, FullSubMatrixHandler &WMB, const doublereal &dCoef, const Vec3 &Sc)
 
- Protected Member Functions inherited from ElemGravityOwner
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 VariableBody
const StructNodepNode
 
DriveOwner m_Mass
 
TplDriveOwner< Vec3m_Xgc
 
TplDriveOwner< Mat3x3m_Jgc_vm
 
TplDriveOwner< Mat3x3m_Jgc_vg
 
doublereal dMTmp
 
Vec3 STmp
 
Mat3x3 JTmp
 
- Protected Attributes inherited from GravityOwner
GravitypGravity
 

Detailed Description

Definition at line 211 of file body_vm.h.

Constructor & Destructor Documentation

StaticVariableBody::StaticVariableBody ( unsigned int  uL,
const StaticStructNode pNode,
const DriveCaller pDCMass,
const TplDriveCaller< Vec3 > *  pDCXgc,
const TplDriveCaller< Mat3x3 > *  pDCJgc_vm,
const TplDriveCaller< Mat3x3 > *  pDCJgc_vg,
flag  fOut 
)

Definition at line 739 of file body_vm.cc.

References NO_OP.

746 : Elem(uL, fOut),
747 VariableBody(uL, pNode, pDCMass, pDCXgc, pDCJgc_vm, pDCJgc_vg, fOut)
748 {
749  NO_OP;
750 }
#define NO_OP
Definition: myassert.h:74
VariableBody(unsigned int uL, const StructNode *pNode, const DriveCaller *pDCMass, const TplDriveCaller< Vec3 > *pDCXgc, const TplDriveCaller< Mat3x3 > *pDCJgc_vm, const TplDriveCaller< Mat3x3 > *pDCJgc_vg, flag fOut)
Definition: body_vm.cc:43
Elem(unsigned int uL, flag fOut)
Definition: elem.cc:41
StaticVariableBody::~StaticVariableBody ( void  )
virtual

Definition at line 754 of file body_vm.cc.

References NO_OP.

755 {
756  NO_OP;
757 }
#define NO_OP
Definition: myassert.h:74

Member Function Documentation

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

Implements Elem.

Definition at line 761 of file body_vm.cc.

References AssMats(), DEBUGCOUTFNAME, StructDispNode::iGetFirstMomentumIndex(), StructDispNode::iGetFirstPositionIndex(), VariableBody::pNode, FullSubMatrixHandler::PutColIndex(), FullSubMatrixHandler::PutRowIndex(), FullSubMatrixHandler::ResizeReset(), VariableSubMatrixHandler::SetFull(), and VariableSubMatrixHandler::SetNullMatrix().

765 {
766  DEBUGCOUTFNAME("StaticVariableBody::AssJac");
767 
768  /* Casting di WorkMat */
769  FullSubMatrixHandler& WM = WorkMat.SetFull();
770 
771  /* Dimensiona e resetta la matrice di lavoro */
772  WM.ResizeReset(6, 6);
773 
774  /* Setta gli indici della matrice - le incognite sono ordinate come:
775  * - posizione (3)
776  * - parametri di rotazione (3)
777  * - quantita' di moto (3)
778  * - momento della quantita' di moto
779  * e gli indici sono consecutivi. La funzione pGetFirstPositionIndex()
780  * ritorna il valore del primo indice -1, in modo che l'indice i-esimo
781  * e' dato da iGetFirstPositionIndex() + i */
782  integer iFirstPositionIndex = pNode->iGetFirstPositionIndex();
783  integer iFirstMomentumIndex = pNode->iGetFirstMomentumIndex();
784  for (integer iCnt = 1; iCnt <= 6; iCnt++) {
785  WM.PutRowIndex(iCnt, iFirstMomentumIndex + iCnt);
786  WM.PutColIndex(iCnt, iFirstPositionIndex + iCnt);
787  }
788 
789  if (AssMats(WM, WM, dCoef)) {
790  WorkMat.SetNullMatrix();
791  }
792 
793  return WorkMat;
794 }
void PutColIndex(integer iSubCol, integer iCol)
Definition: submat.h:325
#define DEBUGCOUTFNAME(fname)
Definition: myassert.h:256
FullSubMatrixHandler & SetFull(void)
Definition: submat.h:1168
bool AssMats(FullSubMatrixHandler &WorkMatA, FullSubMatrixHandler &WorkMatB, doublereal dCoef)
Definition: body_vm.cc:838
void SetNullMatrix(void)
Definition: submat.h:1159
virtual integer iGetFirstMomentumIndex(void) const =0
virtual integer iGetFirstPositionIndex(void) const
Definition: strnode.h:452
virtual void ResizeReset(integer, integer)
Definition: submat.cc:182
const StructNode * pNode
Definition: body_vm.h:48
void PutRowIndex(integer iSubRow, integer iRow)
Definition: submat.h:311
long int integer
Definition: colamd.c:51

Here is the call graph for this function:

bool StaticVariableBody::AssMats ( FullSubMatrixHandler WorkMatA,
FullSubMatrixHandler WorkMatB,
doublereal  dCoef 
)
private

Definition at line 838 of file body_vm.cc.

References FullSubMatrixHandler::Add(), VariableBody::AssMatsRBK_int(), GravityOwner::bGetGravity(), DEBUGCOUTFNAME, StructDispNode::GetXCurr(), MatCrossCross, StructDispNode::pGetRBK(), VariableBody::pNode, VariableBody::STmp, and Zero3.

Referenced by AssJac(), and AssMats().

841 {
842  DEBUGCOUTFNAME("StaticVariableBody::AssMats");
843 
844  /* Se e' definita l'accelerazione di gravita',
845  * la aggiunge (solo al residuo) */
846  Vec3 Acceleration(Zero3);
847  bool g = GravityOwner::bGetGravity(pNode->GetXCurr(), Acceleration);
848 
849  /* TODO: reference */
850  Vec3 W(Zero3);
851 
852  const RigidBodyKinematics *pRBK = pNode->pGetRBK();
853 
854  if (!g && !pRBK) {
855  /* Caller will set WMA & WMB to null matrix */
856  return true;
857  }
858 
859  Vec3 Sc(STmp*dCoef);
860 
861  if (g) {
862  WMA.Add(3 + 1, 3 + 1, Mat3x3(MatCrossCross, Acceleration, Sc));
863  }
864 
865  if (pRBK) {
866  AssMatsRBK_int(WMA, WMB, dCoef, Sc);
867  }
868 
869  return false;
870 }
const Vec3 Zero3(0., 0., 0.)
Definition: matvec3.h:98
#define DEBUGCOUTFNAME(fname)
Definition: myassert.h:256
void AssMatsRBK_int(FullSubMatrixHandler &WMA, FullSubMatrixHandler &WMB, const doublereal &dCoef, const Vec3 &Sc)
Definition: body_vm.cc:239
virtual bool bGetGravity(const Vec3 &X, Vec3 &Acc) const
Definition: gravity.cc:208
const RigidBodyKinematics * pGetRBK(void) const
Definition: strnode.cc:152
Vec3 STmp
Definition: body_vm.h:56
virtual const Vec3 & GetXCurr(void) const
Definition: strnode.h:310
const MatCrossCross_Manip MatCrossCross
Definition: matvec3.cc:640
const StructNode * pNode
Definition: body_vm.h:48

Here is the call graph for this function:

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

Reimplemented from Elem.

Definition at line 798 of file body_vm.cc.

References AssMats(), DEBUGCOUTFNAME, StructDispNode::iGetFirstMomentumIndex(), StructDispNode::iGetFirstPositionIndex(), VariableBody::pNode, FullSubMatrixHandler::PutColIndex(), FullSubMatrixHandler::PutRowIndex(), FullSubMatrixHandler::ResizeReset(), VariableSubMatrixHandler::SetFull(), and VariableSubMatrixHandler::SetNullMatrix().

802 {
803  DEBUGCOUTFNAME("StaticVariableBody::AssMats");
804 
805  /* Casting di WorkMat */
806  FullSubMatrixHandler& WMA = WorkMatA.SetFull();
807  FullSubMatrixHandler& WMB = WorkMatB.SetFull();
808 
809  /* Dimensiona e resetta la matrice di lavoro */
810  WMA.ResizeReset(6, 6);
811  WMB.ResizeReset(6, 6);
812 
813  /* Setta gli indici della matrice - le incognite sono ordinate come:
814  * - posizione (3)
815  * - parametri di rotazione (3)
816  * - quantita' di moto (3)
817  * - momento della quantita' di moto
818  * e gli indici sono consecutivi. La funzione pGetFirstPositionIndex()
819  * ritorna il valore del primo indice -1, in modo che l'indice i-esimo
820  * e' dato da iGetFirstPositionIndex() + i */
821  integer iFirstPositionIndex = pNode->iGetFirstPositionIndex();
822  integer iFirstMomentumIndex = pNode->iGetFirstMomentumIndex();
823  for (integer iCnt = 1; iCnt <= 6; iCnt++) {
824  WMA.PutRowIndex(iCnt, iFirstMomentumIndex + iCnt);
825  WMA.PutColIndex(iCnt, iFirstPositionIndex + iCnt);
826 
827  WMB.PutRowIndex(iCnt, iFirstMomentumIndex + iCnt);
828  WMB.PutColIndex(iCnt, iFirstPositionIndex + iCnt);
829  }
830 
831  if (AssMats(WMA, WMB, 1.)) {
832  WorkMatA.SetNullMatrix();
833  WorkMatB.SetNullMatrix();
834  }
835 }
void PutColIndex(integer iSubCol, integer iCol)
Definition: submat.h:325
#define DEBUGCOUTFNAME(fname)
Definition: myassert.h:256
FullSubMatrixHandler & SetFull(void)
Definition: submat.h:1168
bool AssMats(FullSubMatrixHandler &WorkMatA, FullSubMatrixHandler &WorkMatB, doublereal dCoef)
Definition: body_vm.cc:838
void SetNullMatrix(void)
Definition: submat.h:1159
virtual integer iGetFirstMomentumIndex(void) const =0
virtual integer iGetFirstPositionIndex(void) const
Definition: strnode.h:452
virtual void ResizeReset(integer, integer)
Definition: submat.cc:182
const StructNode * pNode
Definition: body_vm.h:48
void PutRowIndex(integer iSubRow, integer iRow)
Definition: submat.h:311
long int integer
Definition: colamd.c:51

Here is the call graph for this function:

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

Implements Elem.

Definition at line 874 of file body_vm.cc.

References VectorHandler::Add(), VariableBody::AssVecRBK_int(), GravityOwner::bGetGravity(), Vec3::Cross(), DEBUGCOUTFNAME, DriveOwner::dGet(), VariableBody::dMTmp, TplDriveOwner< T >::Get(), StructNode::GetRCurr(), StructDispNode::GetXCurr(), StructDispNode::iGetFirstMomentumIndex(), VariableBody::JTmp, VariableBody::m_Jgc_vg, VariableBody::m_Jgc_vm, VariableBody::m_Mass, VariableBody::m_Xgc, MatCrossCross, StructDispNode::pGetRBK(), VariableBody::pNode, SubVectorHandler::PutRowIndex(), R, VectorHandler::Resize(), VectorHandler::ResizeReset(), VariableBody::STmp, and Zero3.

878 {
879  DEBUGCOUTFNAME("StaticVariableBody::AssRes");
880 
881  const Vec3& X(pNode->GetXCurr());
882  const Mat3x3& R(pNode->GetRCurr());
883  Vec3 DXgc(R*m_Xgc.Get());
884 
885  /* Se e' definita l'accelerazione di gravita',
886  * la aggiunge (solo al residuo) */
887  Vec3 Acceleration(Zero3);
888  bool g = GravityOwner::bGetGravity(X + DXgc, Acceleration);
889 
890  /* W is uninitialized because its use is conditioned by w */
891  const RigidBodyKinematics *pRBK = pNode->pGetRBK();
892 
893  if (!g && !pRBK) {
894  WorkVec.Resize(0);
895  return WorkVec;
896  }
897 
898  WorkVec.ResizeReset(6);
899 
900  integer iFirstMomentumIndex = pNode->iGetFirstMomentumIndex();
901  for (integer iCnt = 1; iCnt <= 6; iCnt++) {
902  WorkVec.PutRowIndex(iCnt, iFirstMomentumIndex + iCnt);
903  }
904 
905  dMTmp = m_Mass.dGet();
906  STmp = DXgc*dMTmp;
907  JTmp = R*(m_Jgc_vm.Get() + m_Jgc_vg.Get() - Mat3x3(MatCrossCross, STmp, DXgc)).MulMT(R);
908 
909  if (g) {
910  WorkVec.Add(1, Acceleration*dMTmp);
911  WorkVec.Add(3 + 1, STmp.Cross(Acceleration));
912  }
913 
914  if (pRBK) {
915  AssVecRBK_int(WorkVec);
916  }
917 
918  return WorkVec;
919 }
const Vec3 Zero3(0., 0., 0.)
Vec3 Cross(const Vec3 &v) const
Definition: matvec3.h:218
Definition: matvec3.h:98
#define DEBUGCOUTFNAME(fname)
Definition: myassert.h:256
DriveOwner m_Mass
Definition: body_vm.h:50
virtual void ResizeReset(integer)
Definition: vh.cc:55
Mat3x3 JTmp
Definition: body_vm.h:57
virtual const Mat3x3 & GetRCurr(void) const
Definition: strnode.h:1012
void AssVecRBK_int(SubVectorHandler &WorkVec)
Definition: body_vm.cc:197
virtual bool bGetGravity(const Vec3 &X, Vec3 &Acc) const
Definition: gravity.cc:208
TplDriveOwner< Mat3x3 > m_Jgc_vm
Definition: body_vm.h:52
doublereal dMTmp
Definition: body_vm.h:55
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
TplDriveOwner< Mat3x3 > m_Jgc_vg
Definition: body_vm.h:53
T Get(const doublereal &dVar) const
Definition: tpldrive.h:109
virtual integer iGetFirstMomentumIndex(void) const =0
const RigidBodyKinematics * pGetRBK(void) const
Definition: strnode.cc:152
Vec3 STmp
Definition: body_vm.h:56
virtual const Vec3 & GetXCurr(void) const
Definition: strnode.h:310
virtual void Add(integer iRow, const Vec3 &v)
Definition: vh.cc:63
TplDriveOwner< Vec3 > m_Xgc
Definition: body_vm.h:51
const MatCrossCross_Manip MatCrossCross
Definition: matvec3.cc:640
const StructNode * pNode
Definition: body_vm.h:48
doublereal dGet(const doublereal &dVar) const
Definition: drive.cc:664
long int integer
Definition: colamd.c:51
virtual void Resize(integer iNewSize)=0
Mat3x3 R

Here is the call graph for this function:

SubVectorHandler & StaticVariableBody::AssRes ( SubVectorHandler WorkVec,
const VectorHandler ,
const VectorHandler ,
const VectorHandler ,
InverseDynamics::Order  iOrder = InverseDynamics::INVERSE_DYNAMICS 
)
virtual

Reimplemented from Elem.

Definition at line 931 of file body_vm.cc.

References ASSERT, GravityOwner::bGetGravity(), Vec3::Cross(), DEBUGCOUTFNAME, DriveOwner::dGet(), VariableBody::dMTmp, TplDriveOwner< T >::Get(), StructNode::GetRCurr(), StructNode::GetWCurr(), StructNode::GetWPCurr(), StructDispNode::GetXCurr(), StructDispNode::GetXPPCurr(), StructDispNode::iGetFirstPositionIndex(), InverseDynamics::INVERSE_DYNAMICS, VariableBody::JTmp, VariableBody::m_Jgc_vg, VariableBody::m_Jgc_vm, VariableBody::m_Mass, VariableBody::m_Xgc, MatCrossCross, VariableBody::pNode, SubVectorHandler::PutRowIndex(), R, VectorHandler::ResizeReset(), VariableBody::STmp, and VectorHandler::Sub().

936 {
937  DEBUGCOUTFNAME("DynamicVariableBody::AssRes");
938 
940 
941  const Vec3& X(pNode->GetXCurr());
942  const Mat3x3& R(pNode->GetRCurr());
943  Vec3 DXgc(R*m_Xgc.Get());
944 
945  /* Se e' definita l'accelerazione di gravita', la aggiunge */
946  Vec3 GravityAcceleration;
947  bool g = GravityOwner::bGetGravity(X + DXgc, GravityAcceleration);
948 
949  WorkVec.ResizeReset(6);
950 
951  integer iFirstPositionIndex = pNode->iGetFirstPositionIndex();
952  for (integer iCnt = 1; iCnt <= 6; iCnt++) {
953  WorkVec.PutRowIndex(iCnt, iFirstPositionIndex + iCnt);
954  }
955 
956  dMTmp = m_Mass.dGet();
957  STmp = DXgc*dMTmp;
958  JTmp = R*(m_Jgc_vm.Get() + m_Jgc_vg.Get() - Mat3x3(MatCrossCross, STmp, DXgc)).MulMT(R);
959 
960  Vec3 Acceleration = pNode->GetXPPCurr()
961  + pNode->GetWPCurr().Cross(DXgc)
962  + pNode->GetWCurr().Cross(pNode->GetWCurr().Cross(DXgc));
963  if (g) {
964  Acceleration -= GravityAcceleration;
965  }
966 
967  WorkVec.Sub(1, Acceleration*dMTmp);
968 
969  Vec3 M = JTmp*pNode->GetWPCurr()
970  + STmp.Cross(pNode->GetXPPCurr())
971  + STmp.Cross(pNode->GetWCurr().Cross(pNode->GetWCurr().Cross(DXgc)));
972  if (g) {
973  M -= STmp.Cross(GravityAcceleration);
974  }
975 
976  WorkVec.Sub(4, M);
977 
978  return WorkVec;
979 }
Vec3 Cross(const Vec3 &v) const
Definition: matvec3.h:218
Definition: matvec3.h:98
#define DEBUGCOUTFNAME(fname)
Definition: myassert.h:256
DriveOwner m_Mass
Definition: body_vm.h:50
virtual void ResizeReset(integer)
Definition: vh.cc:55
Mat3x3 JTmp
Definition: body_vm.h:57
virtual const Mat3x3 & GetRCurr(void) const
Definition: strnode.h:1012
virtual void Sub(integer iRow, const Vec3 &v)
Definition: vh.cc:78
virtual bool bGetGravity(const Vec3 &X, Vec3 &Acc) const
Definition: gravity.cc:208
TplDriveOwner< Mat3x3 > m_Jgc_vm
Definition: body_vm.h:52
doublereal dMTmp
Definition: body_vm.h:55
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
TplDriveOwner< Mat3x3 > m_Jgc_vg
Definition: body_vm.h:53
T Get(const doublereal &dVar) const
Definition: tpldrive.h:109
virtual integer iGetFirstPositionIndex(void) const
Definition: strnode.h:452
virtual const Vec3 & GetWCurr(void) const
Definition: strnode.h:1030
virtual const Vec3 & GetWPCurr(void) const
Definition: strnode.h:1042
#define ASSERT(expression)
Definition: colamd.c:977
Vec3 STmp
Definition: body_vm.h:56
virtual const Vec3 & GetXCurr(void) const
Definition: strnode.h:310
TplDriveOwner< Vec3 > m_Xgc
Definition: body_vm.h:51
const MatCrossCross_Manip MatCrossCross
Definition: matvec3.cc:640
const StructNode * pNode
Definition: body_vm.h:48
doublereal dGet(const doublereal &dVar) const
Definition: drive.cc:664
virtual const Vec3 & GetXPPCurr(void) const
Definition: strnode.h:334
long int integer
Definition: colamd.c:51
Mat3x3 R

Here is the call graph for this function:

bool StaticVariableBody::bInverseDynamics ( void  ) const
virtual

Reimplemented from Elem.

Definition at line 924 of file body_vm.cc.

925 {
926  return true;
927 }
virtual void StaticVariableBody::GetConnectedNodes ( std::vector< const Node * > &  connectedNodes) const
inlinevirtual

Reimplemented from Elem.

Definition at line 293 of file body_vm.h.

References VariableBody::pNode.

293  {
294  connectedNodes.resize(1);
295  connectedNodes[0] = pNode;
296  };
const StructNode * pNode
Definition: body_vm.h:48
VariableSubMatrixHandler & StaticVariableBody::InitialAssJac ( VariableSubMatrixHandler WorkMat,
const VectorHandler XCurr 
)
virtual

Implements SubjectToInitialAssembly.

Definition at line 984 of file body_vm.cc.

References DEBUGCOUTFNAME, and VariableSubMatrixHandler::SetNullMatrix().

986 {
987  DEBUGCOUTFNAME("StaticVariableBody::InitialAssJac");
988 
989  WorkMat.SetNullMatrix();
990 
991  return WorkMat;
992 }
#define DEBUGCOUTFNAME(fname)
Definition: myassert.h:256
void SetNullMatrix(void)
Definition: submat.h:1159

Here is the call graph for this function:

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

Implements SubjectToInitialAssembly.

Definition at line 997 of file body_vm.cc.

References DEBUGCOUTFNAME, and VectorHandler::ResizeReset().

999 {
1000  DEBUGCOUTFNAME("StaticVariableBody::InitialAssRes");
1001 
1002  WorkVec.ResizeReset(0);
1003 
1004  return WorkVec;
1005 }
#define DEBUGCOUTFNAME(fname)
Definition: myassert.h:256
virtual void ResizeReset(integer)
Definition: vh.cc:55

Here is the call graph for this function:

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

Implements SubjectToInitialAssembly.

Definition at line 270 of file body_vm.h.

270  {
271  *piNumRows = 6;
272  *piNumCols = 6;
273  };
void StaticVariableBody::SetValue ( DataManager pDM,
VectorHandler X,
VectorHandler XP,
SimulationEntity::Hints ph = 0 
)
virtual

Reimplemented from SimulationEntity.

Definition at line 1010 of file body_vm.cc.

References NO_OP.

1013 {
1014  NO_OP;
1015 }
#define NO_OP
Definition: myassert.h:74
void StaticVariableBody::WorkSpaceDim ( integer piNumRows,
integer piNumCols 
) const
inlinevirtual

Implements Elem.

Definition at line 231 of file body_vm.h.

231  {
232  *piNumRows = 6;
233  *piNumCols = 6;
234  };

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