TriangleBendingSprings
Springs added to a triangular mesh to prevent bending. Bending springs added between vertices of triangles sharing a common edge. The springs connect the vertices not belonging to the common edge. It compresses when the surface bends along the common edge. @author The SOFA team </www.sofa-framework.org>
The `TriangleBendingSprings` component adds bending springs between vertices of triangles sharing common edges in a triangular mesh to prevent excessive deformation, contributing to the stiffness matrix and internal force vector.
- module
- Sofa.Component.SolidMechanics.Spring
- namespace
- sofa::component::solidmechanics::spring
- include
- sofa/component/solidmechanics/spring/TriangleBendingSprings.h
- inherits
-
- SpringForceField
- templates
-
- sofa::defaulttype::Vec3Types
- description
The TriangleBendingSprings component in the SOFA framework implements bending springs to prevent excessive deformation along shared edges in a triangular mesh. This mechanism is crucial for maintaining structural integrity and simulating realistic behavior, particularly in soft tissue models.
Governing Equations and Operators:
- Mass Matrix (M): Not directly contributed by this component; inherited from the
SpringForceFieldparent class. - Stiffness Matrix (K): This component contributes to the stiffness matrix through the bending springs that are added between vertices of triangles sharing a common edge. Each spring can be modeled as a linear or nonlinear spring with a specified stiffness and damping coefficient.
- Internal Force ( extbf{f}_{int}): The internal force vector is augmented by contributions from the bending springs. If extbf{x} represents the nodal displacements, then the internal force due to the bending springs can be expressed as:
egin{align}
f_{ ext{bend},i} = -k_s (x_i - x_j) + k_d (rac{ ext{d}}{ ext{dt}}(x_i - x_j))
\end{align}
where:
- $k_s$ is the spring stiffness,
- $k_d$ is the damping coefficient,
- $(x_i, x_j)$ are the positions of two nodes connected by a bending spring.
Constitutive or Kinematic Laws Involved:
The constitutive law used for each spring can be described as follows:
egin{align}
f_s = k_s (l - l_0) + c_d rac{ ext{d}}{ ext{dt}}(l - l_0)
\end{align}
where $f_s$ is the spring force, $k_s$ is the stiffness, $c_d$ is the damping coefficient, $l$ is the current length of the spring, and $l_0$ is the rest length.
Role in the Global FEM Pipeline:
- Assembly Phase: The component adds springs between non-common vertices of triangles sharing a common edge. This effectively introduces additional internal forces to stabilize the mesh against bending deformations.
- Time Integration: The stiffness contributions from these springs are included during time integration, typically using implicit Euler or Newmark-type schemes, which ensure stability and accuracy in the simulation.
- Nonlinear Solve: If nonlinear constitutive laws (e.g., hyperelastic materials) are used for the springs, they contribute to the nonlinear system of equations solved iteratively via Newton-Raphson methods.
Numerical Methods or Discretization Choices:
- Spring Placement: Springs are added between vertices that do not belong to a common edge within a triangle or quad. This ensures that bending along the shared edges is resisted by these springs, effectively preventing excessive deformation.
- Initialization: During initialization (
init), the component searches for triangles and quads in the mesh topology provided via thel_topologylink. It then registers these topologies to add bending springs accordingly.
Integration into Variational / Lagrangian Mechanics Framework:
This component integrates seamlessly within the variational mechanics framework by contributing additional stiffness and damping terms to the weak form of the equations governing deformable systems. The addition of these bending springs ensures that the energy functional associated with the deformation is minimized, thereby preserving structural integrity and realistic simulation behavior.
egin{align}
extbf{f}{int} = \sum{e} f^{e}_{bend}(x)
\end{align}
where $f^{e}_{bend}$ represents the contribution of bending springs in element $e$. This integration ensures that the total internal force includes contributions from both traditional elastic forces and these additional bending springs.
Links
| Name | Type | Help |
|---|---|---|
l_topology |
link to the topology container |
Methods
void
init
()
void
addSpring
(unsigned int , unsigned int )
void
registerTriangle
(unsigned int , unsigned int , unsigned int , int & )
{
"name": "TriangleBendingSprings",
"namespace": "sofa::component::solidmechanics::spring",
"module": "Sofa.Component.SolidMechanics.Spring",
"include": "sofa/component/solidmechanics/spring/TriangleBendingSprings.h",
"doc": "Springs added to a triangular mesh to prevent bending.\n\nBending springs added between vertices of triangles sharing a common edge.\nThe springs connect the vertices not belonging to the common edge. It compresses when the surface bends along the common edge.\n\t@author The SOFA team </www.sofa-framework.org>",
"inherits": [
"SpringForceField"
],
"templates": [
"sofa::defaulttype::Vec3Types"
],
"data_fields": [],
"links": [
{
"name": "l_topology",
"target": "BaseMeshTopology",
"kind": "single",
"xmlname": "topology",
"help": "link to the topology container"
}
],
"methods": [
{
"name": "init",
"return_type": "void",
"params": [],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "addSpring",
"return_type": "void",
"params": [
{
"name": "",
"type": "unsigned int"
},
{
"name": "",
"type": "unsigned int"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "registerTriangle",
"return_type": "void",
"params": [
{
"name": "",
"type": "unsigned int"
},
{
"name": "",
"type": "unsigned int"
},
{
"name": "",
"type": "unsigned int"
},
{
"name": "",
"type": "int &"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
}
],
"description": "The `TriangleBendingSprings` component in the SOFA framework is designed to prevent bending in triangular meshes by adding springs between vertices that share common edges. This component extends the `SpringForceField`, inheriting its functionality and integrating with other mechanical components through the SOFA ecosystem. It interacts with a topology container, specified via the `l_topology` link, which provides the necessary mesh information for spring placement. During initialization (`init`), it searches for triangle and quad topologies to create bending springs that connect vertices not belonging to shared edges, effectively reducing surface deformation along these edges. This component is crucial for maintaining structural integrity in simulations involving soft tissues or other deformable objects represented by triangular meshes.",
"maths": "The `TriangleBendingSprings` component in the SOFA framework implements bending springs to prevent excessive deformation along shared edges in a triangular mesh. This mechanism is crucial for maintaining structural integrity and simulating realistic behavior, particularly in soft tissue models.\n\n### Governing Equations and Operators:\n\n- **Mass Matrix (M)**: Not directly contributed by this component; inherited from the `SpringForceField` parent class.\n- **Stiffness Matrix (K)**: This component contributes to the stiffness matrix through the bending springs that are added between vertices of triangles sharing a common edge. Each spring can be modeled as a linear or nonlinear spring with a specified stiffness and damping coefficient.\n- **Internal Force (\textbf{f}_{int})**: The internal force vector is augmented by contributions from the bending springs. If \textbf{x} represents the nodal displacements, then the internal force due to the bending springs can be expressed as:\n\n\begin{align*}\n f_{\text{bend},i} = -k_s (x_i - x_j) + k_d (\frac{\text{d}}{\text{dt}}(x_i - x_j))\n\\end{align*}\n\nwhere:\n- $k_s$ is the spring stiffness,\n- $k_d$ is the damping coefficient,\n- $(x_i, x_j)$ are the positions of two nodes connected by a bending spring.\n\n### Constitutive or Kinematic Laws Involved:\n\nThe constitutive law used for each spring can be described as follows:\n\n\begin{align*}\n f_s = k_s (l - l_0) + c_d \frac{\text{d}}{\text{dt}}(l - l_0)\n\\end{align*}\n\nwhere $f_s$ is the spring force, $k_s$ is the stiffness, $c_d$ is the damping coefficient, $l$ is the current length of the spring, and $l_0$ is the rest length.\n\n### Role in the Global FEM Pipeline:\n- **Assembly Phase**: The component adds springs between non-common vertices of triangles sharing a common edge. This effectively introduces additional internal forces to stabilize the mesh against bending deformations.\n- **Time Integration**: The stiffness contributions from these springs are included during time integration, typically using implicit Euler or Newmark-type schemes, which ensure stability and accuracy in the simulation.\n- **Nonlinear Solve**: If nonlinear constitutive laws (e.g., hyperelastic materials) are used for the springs, they contribute to the nonlinear system of equations solved iteratively via Newton-Raphson methods.\n\n### Numerical Methods or Discretization Choices:\n- **Spring Placement**: Springs are added between vertices that do not belong to a common edge within a triangle or quad. This ensures that bending along the shared edges is resisted by these springs, effectively preventing excessive deformation.\n- **Initialization**: During initialization (`init`), the component searches for triangles and quads in the mesh topology provided via the `l_topology` link. It then registers these topologies to add bending springs accordingly.\n\n### Integration into Variational / Lagrangian Mechanics Framework:\nThis component integrates seamlessly within the variational mechanics framework by contributing additional stiffness and damping terms to the weak form of the equations governing deformable systems. The addition of these bending springs ensures that the energy functional associated with the deformation is minimized, thereby preserving structural integrity and realistic simulation behavior.\n\n\begin{align*}\n \textbf{f}_{int} = \\sum_{e} f^{e}_{bend}(x)\n\\end{align*}\n\nwhere $f^{e}_{bend}$ represents the contribution of bending springs in element $e$. This integration ensures that the total internal force includes contributions from both traditional elastic forces and these additional bending springs.",
"abstract": "The `TriangleBendingSprings` component adds bending springs between vertices of triangles sharing common edges in a triangular mesh to prevent excessive deformation, contributing to the stiffness matrix and internal force vector.",
"sheet": "# TriangleBendingSprings\n\n**Overview:**\nThe `TriangleBendingSprings` component is designed to add bending springs between vertices of triangles that share a common edge within a triangular mesh. This prevents excessive deformation along these edges by contributing additional stiffness terms to the overall mechanical system.\n\n**Mathematical Model:*\nEach spring can be modeled as a linear or nonlinear spring with specified stiffness and damping coefficients, contributing to the internal force vector and stiffness matrix. The internal force due to bending springs is given by:\n\n\begin{align*}\n f_{\\text{bend},i} = -k_s (x_i - x_j) + k_d \\frac{d}{dt}(x_i - x_j)\n\tag{1}\\label{eq:bending_force}\n\tag{2}\\label{eq:spring_constitutive_law}\n\\end{align*}\n\nwhere $k_s$ is the spring stiffness, $k_d$ is the damping coefficient, and $(x_i, x_j)$ are the positions of two nodes connected by a bending spring.\n\n**Dependencies and Connections:**\nThe component requires a topology container (`BaseMeshTopology`) to provide mesh information for placing springs. It integrates with other mechanical components through SOFA's scene graph architecture."
}