![]() |
1D FemElement based on a beam volume discretization with a fixed cross section More...
#include <SurgSim/Physics/Fem1DElementBeam.h>
Public Member Functions | |
Fem1DElementBeam () | |
Constructor. More... | |
Fem1DElementBeam (std::array< size_t, 2 > nodeIds) | |
Constructor. More... | |
Fem1DElementBeam (std::shared_ptr< FemElementStructs::FemElementParameter > elementData) | |
Constructor for FemElement object factory. More... | |
void | setRadius (double radius) |
Sets the beam's circular cross-section radius. More... | |
double | getRadius () const |
Gets the beam's circular cross-section radius. More... | |
void | initialize (const SurgSim::Math::OdeState &state) override |
Initialize the FemElement once everything has been set. More... | |
double | getVolume (const SurgSim::Math::OdeState &state) const override |
Gets the element volume based on the input state (in m-3) More... | |
bool | getShearingEnabled () const |
Gets whether shearing is enabled for the element. More... | |
void | setShearingEnabled (bool enabled) |
Enables or disables shearing for the element. More... | |
SurgSim::Math::Vector | computeCartesianCoordinate (const SurgSim::Math::OdeState &state, const SurgSim::Math::Vector &naturalCoordinate) const override |
Computes a given natural coordinate in cartesian coordinates. More... | |
SurgSim::Math::Vector | computeNaturalCoordinate (const SurgSim::Math::OdeState &state, const SurgSim::Math::Vector &cartesianCoordinate) const override |
Computes a natural coordinate given a global coordinate. More... | |
SurgSim::Math::Matrix33d | getInitialRotation () const |
![]() | |
FemElement () | |
Constructor. More... | |
virtual | ~FemElement () |
Virtual destructor. More... | |
size_t | getNumDofPerNode () const |
Gets the number of degree of freedom per node. More... | |
size_t | getNumNodes () const |
Gets the number of nodes connected by this element. More... | |
size_t | getNodeId (size_t elementNodeId) const |
Gets the elementNodeId-th node id. More... | |
const std::vector< size_t > & | getNodeIds () const |
Gets the node ids for this element. More... | |
void | setYoungModulus (double E) |
Sets the Young modulus (in N.m-2) More... | |
double | getYoungModulus () const |
Gets the Young modulus (in N.m-2) More... | |
void | setPoissonRatio (double nu) |
Sets the Poisson ratio (unitless) More... | |
double | getPoissonRatio () const |
Gets the Poisson ratio (unitless) More... | |
void | setMassDensity (double rho) |
Sets the mass density (in Kg.m-3) More... | |
double | getMassDensity () const |
Gets the mass density (in Kg.m-3) More... | |
double | getMass (const SurgSim::Math::OdeState &state) const |
Gets the element mass based on the input state (in Kg) More... | |
virtual void | addForce (SurgSim::Math::Vector *F, double scale=1.0) const |
Adds the element force (computed for a given state) to a complete system force vector F (assembly) More... | |
virtual void | addMass (SurgSim::Math::SparseMatrix *M, double scale=1.0) const |
Adds the element mass matrix M (computed for a given state) to a complete system mass matrix M (assembly) More... | |
virtual void | addDamping (SurgSim::Math::SparseMatrix *D, double scale=1.0) const |
Adds the element damping matrix D (= -df/dv) (comuted for a given state) to a complete system damping matrix D (assembly) More... | |
virtual void | addStiffness (SurgSim::Math::SparseMatrix *K, double scale=1.0) const |
Adds the element stiffness matrix K (= -df/dx) (computed for a given state) to a complete system stiffness matrix K (assembly) More... | |
virtual void | addFMDK (SurgSim::Math::Vector *F, SurgSim::Math::SparseMatrix *M, SurgSim::Math::SparseMatrix *D, SurgSim::Math::SparseMatrix *K) const |
Adds the element force vector, mass, stiffness and damping matrices (computed for a given state) into a complete system data structure F, M, D, K (assembly) More... | |
virtual void | addMatVec (double alphaM, double alphaD, double alphaK, const SurgSim::Math::Vector &x, SurgSim::Math::Vector *F) const |
Adds the element matrix-vector contribution F += (alphaM.M + alphaD.D + alphaK.K).x (computed for a given state) into a complete system data structure F (assembly) More... | |
bool | isValidCoordinate (const SurgSim::Math::Vector &naturalCoordinate) const |
Determines whether a given natural coordinate is valid. More... | |
template<typename DerivedSub , typename T , int Opt, typename Index > | |
void | assembleMatrixBlocks (const DerivedSub &subMatrix, const std::vector< size_t > blockIds, size_t blockSize, Eigen::SparseMatrix< T, Opt, Index > *matrix, bool initialize=true) const |
Helper method to add a sub-matrix made of squared-blocks into a matrix, for the sake of clarity. More... | |
void | updateFMDK (const Math::OdeState &state, int options) |
Update the FemElement based on the given state. More... | |
Protected Member Functions | |
void | initializeMembers () |
Initializes variables needed before Initialize() is called. More... | |
void | computeInitialRotation (const SurgSim::Math::OdeState &state) |
Computes the beam element's initial rotation. More... | |
void | computeStiffness (const SurgSim::Math::OdeState &state) |
Computes the beam's stiffness matrix. More... | |
void | computeMass (const SurgSim::Math::OdeState &state) |
Computes the beam's mass matrix. More... | |
void | doUpdateFMDK (const Math::OdeState &state, int options) override |
Update the FemElement based on the given state. More... | |
![]() | |
void | setNumDofPerNode (size_t numDofPerNode) |
Sets the number of degrees of freedom per node. More... | |
void | initializeFMDK () |
Initialize f, M, D, K variables. More... | |
virtual void | doInitializeFMDK () |
Function to be overridden by the derived classes to initialize the f, M, D, K variables. More... | |
Protected Attributes | |
Eigen::Matrix< double, 12, 1 > | m_x0 |
The element's rest state. More... | |
Eigen::Matrix< double, 12, 12 > | m_R0 |
Initial rotation matrix for the element. More... | |
Eigen::Matrix< double, 12, 12 > | m_MLocal |
Stiffness matrix (in local coordinate frame) More... | |
Eigen::Matrix< double, 12, 12 > | m_KLocal |
Stiffness matrix (in local coordinate frame) More... | |
double | m_G |
Physical shear modulus G = E/( 2(1+mu) ) More... | |
double | m_restLength |
Rest length. More... | |
double | m_radius |
radius for a circular Beam More... | |
double | m_A |
Cross sectional area = PI.radius.radius if circular. More... | |
bool | m_haveShear |
Does this beam element have shear. More... | |
double | m_shearFactor |
Shear factor (usually 5/8) More... | |
double | m_Asy |
The shear area in the y and z directions (=0 => no shear) http://en.wikipedia.org/wiki/Timoshenko_beam_theory. More... | |
double | m_Asz |
double | m_Phi_y |
Shear deformation parameters Phi_y=12.E.Iz/(G.Asy.L^2) or 0 if As?=0 Phi_z=12.E.Iy/(G.Asz.L^2) or 0 if As?=0. More... | |
double | m_Phi_z |
double | m_Iy |
Cross sectional moment of inertia. More... | |
double | m_Iz |
double | m_J |
Polar moment of inertia. More... | |
![]() | |
size_t | m_numDofPerNode |
Number of degree of freedom per node for this element. More... | |
std::vector< size_t > | m_nodeIds |
Node ids connected by this element. More... | |
double | m_rho |
Mass density (in Kg.m-3) More... | |
double | m_E |
Young modulus (in N.m-2) More... | |
double | m_nu |
Poisson ratio (unitless) More... | |
SurgSim::Math::Vector | m_f |
The force vector. More... | |
SurgSim::Math::Matrix | m_M |
The mass matrix. More... | |
SurgSim::Math::Matrix | m_D |
The damping matrix. More... | |
bool | m_useDamping |
Flag to specify of the damping is used. More... | |
SurgSim::Math::Matrix | m_K |
The stiffness matrix. More... | |
Additional Inherited Members | |
![]() | |
typedef SurgSim::Framework::ObjectFactory1< FemElement, std::shared_ptr< FemElementStructs::FemElementParameter > > | FactoryType |
![]() | |
static FactoryType & | getFactory () |
1D FemElement based on a beam volume discretization with a fixed cross section
The inertia property (mass) and the stiffness matrices are derived from "Theory of Matrix Structural Analysis" from J.S. Przemieniecki. The deformation is based on linear elasticity theory and not on visco-elasticity theory; therefore, the element does not have any damping components.
SurgSim::Physics::Fem1DElementBeam::Fem1DElementBeam | ( | ) |
Constructor.
|
explicit |
Constructor.
nodeIds | An array of 2 node ids defining this beam element with respect to a DeformableRepresentationState which is passed to the initialize method. |
|
explicit |
Constructor for FemElement object factory.
elementData | A FemElement struct defining this beam element with respect to a DeformableRepresentationState which is passed to the initialize method. |
SurgSim::Framework::AssertionFailure | if nodeIds has a size different than 2 |
|
overridevirtual |
Computes a given natural coordinate in cartesian coordinates.
state | The state at which to transform coordinates |
naturalCoordinate | The coordinates to transform |
Implements SurgSim::Physics::FemElement.
|
protected |
Computes the beam element's initial rotation.
state | The state to compute the rotation from |
|
protected |
Computes the beam's mass matrix.
state | The state to compute the stiffness matrix from |
|
overridevirtual |
Computes a natural coordinate given a global coordinate.
state | The state at which to transform coordinates |
cartesianCoordinate | The coordinates to transform |
Implements SurgSim::Physics::FemElement.
|
protected |
Computes the beam's stiffness matrix.
state | The state to compute the stiffness matrix from |
|
overrideprotectedvirtual |
Update the FemElement based on the given state.
state | \((x, v)\) the current position and velocity to evaluate the various terms with |
options | Flag to specify which of the F, M, D, K needs to be updated |
Implements SurgSim::Physics::FemElement.
SurgSim::Math::Matrix33d SurgSim::Physics::Fem1DElementBeam::getInitialRotation | ( | ) | const |
double SurgSim::Physics::Fem1DElementBeam::getRadius | ( | ) | const |
Gets the beam's circular cross-section radius.
bool SurgSim::Physics::Fem1DElementBeam::getShearingEnabled | ( | ) | const |
Gets whether shearing is enabled for the element.
|
overridevirtual |
Gets the element volume based on the input state (in m-3)
state | The state to compute the volume with |
Implements SurgSim::Physics::FemElement.
|
overridevirtual |
Initialize the FemElement once everything has been set.
state | The state to initialize the FemElement with |
Reimplemented from SurgSim::Physics::FemElement.
|
protected |
Initializes variables needed before Initialize() is called.
void SurgSim::Physics::Fem1DElementBeam::setRadius | ( | double | radius | ) |
Sets the beam's circular cross-section radius.
radius | The radius of the beam |
void SurgSim::Physics::Fem1DElementBeam::setShearingEnabled | ( | bool | enabled | ) |
Enables or disables shearing for the element.
Shearing can only be meaningfully enabled or disabled before the element has had initialize called.
enabled | Boolean determining whether shearing is enabled |
|
protected |
Cross sectional area = PI.radius.radius if circular.
|
protected |
The shear area in the y and z directions (=0 => no shear) http://en.wikipedia.org/wiki/Timoshenko_beam_theory.
|
protected |
|
protected |
Physical shear modulus G = E/( 2(1+mu) )
|
protected |
Does this beam element have shear.
|
protected |
Cross sectional moment of inertia.
|
protected |
|
protected |
Polar moment of inertia.
|
protected |
Stiffness matrix (in local coordinate frame)
|
protected |
Stiffness matrix (in local coordinate frame)
|
protected |
Shear deformation parameters Phi_y=12.E.Iz/(G.Asy.L^2) or 0 if As?=0 Phi_z=12.E.Iy/(G.Asz.L^2) or 0 if As?=0.
|
protected |
|
protected |
Initial rotation matrix for the element.
|
protected |
radius for a circular Beam
|
protected |
Rest length.
|
protected |
Shear factor (usually 5/8)
|
protected |
The element's rest state.