Back

MechanicalComputeGeometricStiffness

sofa::simulation::mechanicalvisitor::MechanicalComputeGeometricStiffness
MechanicalVisitor
Doc (from source)

Compute the mapping geometric stiffness matrices. This action must be call before BaseMapping::getK()

Abstract (AI generated)

Computes geometric stiffness matrices for mappings in mechanical systems, essential before calling `BaseMapping::getK()`. It updates the matrix capturing changes in internal forces due to deformation.

Metadata
module
Sofa.framework.Simulation.Core
namespace
sofa::simulation::mechanicalvisitor
include
sofa/simulation/mechanicalvisitor/MechanicalComputeGeometricStiffness.h
inherits
  • MechanicalVisitor
description

The MechanicalComputeGeometricStiffness component in the SOFA framework is designed to compute geometric stiffness matrices for mappings within mechanical systems. The geometric stiffness matrix, denoted as $K_G$, captures the changes in internal forces due to deformation and is crucial for accurately modeling nonlinear deformations.

Governing Equations or Operators

The primary contribution of this component is the computation of the geometric stiffness matrix $K_G$. This matrix is derived from the first-order derivatives of the internal force vector with respect to the nodal displacements:

egin{equation}
K_G = \frac{\partial f_{int}}{\partial u},
ag{1}

defined such that $f_{int}$ is the internal force vector and $u$ are the nodal displacements.

Constitutive or Kinematic Laws Involved

The geometric stiffness matrix involves kinematic measures of deformation. In nonlinear elasticity, it often arises from the first variation of the strain energy density function with respect to the Green-Lagrange strains or similar deformation measures. For a hyperelastic material, if $W$ is the strain energy density and $E$ are the Green-Lagrange strains:

egin{equation}
\sigma = \frac{\partial W}{\partial E},
ag{2}

denotes the second Piola-Kirchhoff stress tensor, then the geometric stiffness matrix can be expressed in terms of $E$ and its derivatives.

Role in the Global FEM Pipeline

The MechanicalComputeGeometricStiffness component plays a critical role during the nonlinear resolution phase. Specifically, it must be called before invoking BaseMapping::getK() to ensure that the geometric stiffness contributions are correctly updated and included in the overall stiffness matrix $K$:

egin{equation}
K = K_e + K_G,
ag{3}

where $K_e$ is the elastic stiffness matrix derived from the constitutive law.

Numerical Methods or Discretization Choices

The geometric stiffness matrix computation involves a first-order differentiation of internal forces. This component updates the geometric stiffness matrices using finite differences or analytical derivatives, depending on the implementation and the specific material model used.

Integration into Variational / Lagrangian Mechanics Framework

In the variational framework, the geometric stiffness matrix arises from the second variation of the potential energy functional with respect to the nodal displacements. It represents the change in internal forces due to changes in geometry as a result of deformation.

egin{equation}
\delta^2 \Pi = K_G u,
ag{4}

where $\delta^2 \Pi$ is the second variation of the potential energy functional and $u$ are the nodal displacements. This ensures that the geometric stiffness contributions are properly accounted for in the nonlinear solve, providing a more accurate representation of the mechanical behavior.

Methods
Result fwdMechanicalMapping (simulation::Node * , sofa::core::BaseMapping * map) virtual
int getInfos ()
bool isThreadSafe () virtual
{
  "name": "MechanicalComputeGeometricStiffness",
  "namespace": "sofa::simulation::mechanicalvisitor",
  "module": "Sofa.framework.Simulation.Core",
  "include": "sofa/simulation/mechanicalvisitor/MechanicalComputeGeometricStiffness.h",
  "doc": "Compute the mapping geometric stiffness matrices.\nThis action must be call before BaseMapping::getK()",
  "inherits": [
    "MechanicalVisitor"
  ],
  "templates": [],
  "data_fields": [],
  "links": [],
  "methods": [
    {
      "name": "fwdMechanicalMapping",
      "return_type": "Result",
      "params": [
        {
          "name": "",
          "type": "simulation::Node *"
        },
        {
          "name": "map",
          "type": "sofa::core::BaseMapping *"
        }
      ],
      "is_virtual": true,
      "is_pure_virtual": false,
      "is_static": false,
      "access": "public"
    },
    {
      "name": "getInfos",
      "return_type": "int",
      "params": [],
      "is_virtual": false,
      "is_pure_virtual": false,
      "is_static": false,
      "access": "public"
    },
    {
      "name": "isThreadSafe",
      "return_type": "bool",
      "params": [],
      "is_virtual": true,
      "is_pure_virtual": false,
      "is_static": false,
      "access": "public"
    }
  ],
  "description": "The `MechanicalComputeGeometricStiffness` is a component in the SOFA framework that computes geometric stiffness matrices for mappings, which are used to represent relationships between different parts of a mechanical system. It must be invoked before calling `BaseMapping::getK()`. The component inherits from `MechanicalVisitor`, indicating it operates within the context of mechanical simulation and interacts with other components by visiting specific nodes in the scene graph.\n\nIt provides an implementation for the `fwdMechanicalMapping` method, which updates the geometric stiffness matrix using given parameters. Additionally, it returns whether it is thread-safe via `isThreadSafe`, enabling parallel processing if needed. The component has a data field `childForce` that holds force information relevant to its computations.\n\nIn practical usage, this component helps in accurately computing and updating the geometric stiffness matrices for mapping operations within mechanical simulations. It should be used in conjunction with other components like `BaseMapping` to ensure accurate simulation results.",
  "maths": "<maths_md_description>\n\nThe `MechanicalComputeGeometricStiffness` component in the SOFA framework is designed to compute geometric stiffness matrices for mappings within mechanical systems. The geometric stiffness matrix, denoted as $K_G$, captures the changes in internal forces due to deformation and is crucial for accurately modeling nonlinear deformations.\n\n### Governing Equations or Operators\n\nThe primary contribution of this component is the computation of the geometric stiffness matrix $K_G$. This matrix is derived from the first-order derivatives of the internal force vector with respect to the nodal displacements:\n\n\begin{equation}\nK_G = \\frac{\\partial f_{int}}{\\partial u},\n\tag{1}\n\ndefined such that $f_{int}$ is the internal force vector and $u$ are the nodal displacements.\n\n### Constitutive or Kinematic Laws Involved\n\nThe geometric stiffness matrix involves kinematic measures of deformation. In nonlinear elasticity, it often arises from the first variation of the strain energy density function with respect to the Green-Lagrange strains or similar deformation measures. For a hyperelastic material, if $W$ is the strain energy density and $E$ are the Green-Lagrange strains:\n\n\begin{equation}\n\\sigma = \\frac{\\partial W}{\\partial E},\n\tag{2}\n\ndenotes the second Piola-Kirchhoff stress tensor, then the geometric stiffness matrix can be expressed in terms of $E$ and its derivatives.\n\n### Role in the Global FEM Pipeline\n\nThe `MechanicalComputeGeometricStiffness` component plays a critical role during the nonlinear resolution phase. Specifically, it must be called before invoking `BaseMapping::getK()` to ensure that the geometric stiffness contributions are correctly updated and included in the overall stiffness matrix $K$:\n\n\begin{equation}\nK = K_e + K_G,\n\tag{3}\n\nwhere $K_e$ is the elastic stiffness matrix derived from the constitutive law.\n\n### Numerical Methods or Discretization Choices\n\nThe geometric stiffness matrix computation involves a first-order differentiation of internal forces. This component updates the geometric stiffness matrices using finite differences or analytical derivatives, depending on the implementation and the specific material model used.\n\n### Integration into Variational / Lagrangian Mechanics Framework\n\nIn the variational framework, the geometric stiffness matrix arises from the second variation of the potential energy functional with respect to the nodal displacements. It represents the change in internal forces due to changes in geometry as a result of deformation.\n\n\begin{equation}\n\\delta^2 \\Pi = K_G u,\n\tag{4}\n\nwhere $\\delta^2 \\Pi$ is the second variation of the potential energy functional and $u$ are the nodal displacements. This ensures that the geometric stiffness contributions are properly accounted for in the nonlinear solve, providing a more accurate representation of the mechanical behavior.\n</maths_md_description>",
  "abstract": "Computes geometric stiffness matrices for mappings in mechanical systems, essential before calling `BaseMapping::getK()`. It updates the matrix capturing changes in internal forces due to deformation.",
  "sheet": "# MechanicalComputeGeometricStiffness\n\n## Overview\nThe `MechanicalComputeGeometricStiffness` component computes geometric stiffness matrices for mappings within mechanical systems. This action must be invoked before calling `BaseMapping::getK()` to ensure accurate inclusion of geometric stiffness contributions in the overall stiffness matrix.\n\n## Mathematical Model\nThe geometric stiffness matrix, denoted as $K_G$, captures changes in internal forces due to deformation and is crucial for accurately modeling nonlinear deformations. It is derived from the first-order derivatives of the internal force vector with respect to nodal displacements:\n\\[ K_G = \\frac{\\partial f_{int}}{\\partial u}, \\]\nwhere $f_{int}$ is the internal force vector and $u$ are the nodal displacements. The geometric stiffness matrix plays a critical role during the nonlinear resolution phase, updating the overall stiffness matrix as:\n\\[ K = K_e + K_G, \\]\nwith $K_e$ being the elastic stiffness matrix derived from the constitutive law.\n\n## Practical Notes\nThis component must be used in conjunction with other components like `BaseMapping` to ensure accurate simulation results. It is essential to call this action before invoking `BaseMapping::getK()` to correctly update and include geometric stiffness contributions."
}