|
| Fem2DElementTriangle () |
| Constructor.
|
|
| Fem2DElementTriangle (std::array< size_t, 3 > nodeIds) |
| Constructor. More...
|
|
| Fem2DElementTriangle (std::shared_ptr< FemElementStructs::FemElementParameter > elementData) |
| Constructor for FemElement object factory. More...
|
|
void | setThickness (double thickness) |
| Sets the triangle's thickness. More...
|
|
double | getThickness () const |
| Gets the triangle's thickness. 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...
|
|
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...
|
|
| FemElement () |
| Constructor.
|
|
virtual | ~FemElement () |
| Virtual destructor.
|
|
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) const |
| Adds the element force (computed for a given state) to a complete system force vector F (assembly) More...
|
|
virtual void | addForce (SurgSim::Math::Vector *F) const |
|
virtual void | addMass (SurgSim::Math::SparseMatrix *M, double scale) const |
| Adds the element mass matrix M (computed for a given state) to a complete system mass matrix M (assembly) More...
|
|
virtual void | addMass (SurgSim::Math::SparseMatrix *M) const |
|
virtual void | addDamping (SurgSim::Math::SparseMatrix *D, double scale) 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 | addDamping (SurgSim::Math::SparseMatrix *D) const |
|
virtual void | addStiffness (SurgSim::Math::SparseMatrix *K, double scale) 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 | addStiffness (SurgSim::Math::SparseMatrix *K) const |
|
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, SurgSim::Math::Vector *extractedX, SurgSim::Math::Vector *acumulator) 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 T , int Opt, typename StorageIndex > |
void | assembleMatrixBlocks (const Eigen::Ref< const Math::Matrix > &subMatrix, const std::vector< size_t > &blockIds, size_t blockSize, Eigen::SparseMatrix< T, Opt, StorageIndex > *matrix) const |
| Add a sub-matrix made of squared-blocks into a matrix that could be un-initialized. More...
|
|
template<typename T , int Opt, typename StorageIndex > |
void | assembleMatrixBlocksNoInitialize (const Eigen::Ref< const Math::Matrix > &subMatrix, const std::vector< size_t > &blockIds, size_t blockSize, Eigen::SparseMatrix< T, Opt, StorageIndex > *matrix) const |
| Add a sub-matrix made of squared-blocks into a matrix that is already initialized. More...
|
|
void | updateFMDK (const Math::OdeState &state, int options) |
| Update the FemElement based on the given state. More...
|
|
|
void | initializeMembers () |
| Initializes variables needed before Initialize() is called.
|
|
SurgSim::Math::Matrix33d | computeRotation (const SurgSim::Math::OdeState &state) |
| Computes the triangle element's rotation given a state. More...
|
|
virtual void | computeLocalStiffness (const SurgSim::Math::OdeState &state, Eigen::Matrix< double, 18, 18 > *localStiffnessMatrix) |
| Computes the triangle's local stiffness matrix. More...
|
|
void | computeStiffness (const SurgSim::Math::OdeState &state, SurgSim::Math::Matrix *stiffnessMatrix) |
| Computes the triangle's stiffness matrix. More...
|
|
virtual void | computeLocalMass (const SurgSim::Math::OdeState &state, Eigen::Matrix< double, 18, 18 > *localMassMatrix) |
| Computes the triangle's local mass matrix. More...
|
|
void | computeMass (const SurgSim::Math::OdeState &state, SurgSim::Math::Matrix *massMatrix) |
| Computes the triangle's mass matrix. More...
|
|
void | doUpdateFMDK (const Math::OdeState &state, int options) override |
| Update the FemElement based on the given state. More...
|
|
void | computeShapeFunctionsParameters (const SurgSim::Math::OdeState &restState) |
| Compute the various shape functions (membrane and plate deformations) parameters. More...
|
|
std::array< double, 9 > | batozDhxDxi (double xi, double eta) const |
| Batoz derivative dHx/dxi. More...
|
|
std::array< double, 9 > | batozDhxDeta (double xi, double eta) const |
| Batoz derivative dHx/deta. More...
|
|
std::array< double, 9 > | batozDhyDxi (double xi, double eta) const |
| Batoz derivative dHy/dxi. More...
|
|
std::array< double, 9 > | batozDhyDeta (double xi, double eta) const |
| Batoz derivative dHy/deta. More...
|
|
Matrix39Type | batozStrainDisplacement (double xi, double eta) const |
| Batoz strain displacement matrix evaluated at a given point. More...
|
|
void | setNumDofPerNode (size_t numDofPerNode) |
| Sets the number of degrees of freedom per node. More...
|
|
void | initializeFMDK () |
| Initialize f, M, D, K variables.
|
|
virtual void | doInitializeFMDK () |
| Function to be overridden by the derived classes to initialize the f, M, D, K variables.
|
|
2D FemElement based on a triangle with a constant thickness
The triangle is modeled as a shell (6DOF) which is decomposed into a membrane (in-plane 2DOF \((x, y)\)) and a plate (bending/twisting 3DOF \((z, \theta_x, \theta_y)\)). The thin-plate assumption does not consider the drilling dof \(\theta_z\). The system includes the drilling DOF for completeness but does not assign any mass or stiffness to it.
The membrane (in-plane) equations (mass and stiffness) are following "Theory of Matrix Structural Analysis" from J.S. Przemieniecki.
The thin-plate (bending) equations (mass and stiffness) are following "A Study Of Three-Node Triangular Plate Bending Elements", Jean-Louis Batoz Numerical Methods in Engineering, vol 15, 1771-1812 (1980).
The plate mass matrix is not detailed in the above paper, but the analytical equations have been derived from it. Moreover, to account for contribution of the displacement along z to the plate mass matrix, we used a cubic expression of this displacement given in: "Shell elements: modelizations DKT, DST, DKTG and Q4g", Code_Aster, 2013, Thomas De Soza.
- Note
- The element is considered to have a constant thickness.
-
The element uses linear elasticity (not visco-elasticity), so it does not have any damping.