Back

TriangularAnisotropicFEMForceField

sofa::component::solidmechanics::fem::elastic::TriangularAnisotropicFEMForceField
TriangularFEMForceField
Doc (from source)

Triangular finite element model using anisotropic material.

Abstract (AI generated)

The `TriangularAnisotropicFEMForceField` models triangular finite elements with anisotropic material properties, capturing directional variations in stiffness through specific Young's moduli and fiber angles.

Metadata
module
Sofa.Component.SolidMechanics.FEM.Elastic
namespace
sofa::component::solidmechanics::fem::elastic
include
sofa/component/solidmechanics/fem/elastic/TriangularAnisotropicFEMForceField.h
inherits
  • TriangularFEMForceField
templates
  • sofa::defaulttype::Vec3Types
description

Mathematical and Physical Description of TriangularAnisotropicFEMForceField Component

Governing Equations and Operators

The TriangularAnisotropicFEMForceField is a component in the SOFA framework designed to simulate triangular finite elements with anisotropic material properties. This means that the mechanical behavior (such as stiffness) varies depending on the direction within each element.

Internal Force Field

In terms of FEM formulation, this component contributes to the internal force field $f_{int}$ and the material stiffness matrix $K_e$ for each triangular element in the mesh. The anisotropic nature of the material is captured through different Young's moduli along principal directions.

Constitutive Law

The constitutive law implemented in TriangularAnisotropicFEMForceField is based on the linear elasticity model with anisotropy. For each triangular element, the material stiffness matrix $K_e$ is calculated as follows:

  1. Material Parameters
  2. Young's modulus along principal directions: $E_1$, $E_2$
  3. Poisson ratio along principal directions: $
    u_{12}$, $
    u_{21}$
  4. Shear modulus: $G_{12} = \frac{E_1}{2(1+\nu_{12})}$

  5. Stiffness Matrix Calculation
    The stiffness matrix $K_e$ is computed using the following steps:

  6. Define fiber directions in both local and global frames.
  7. Calculate directional cosines based on fiber angles.
  8. Use these parameters to formulate the stiffness matrix elements as follows (for each triangular element):

    \$$ K = \begin{bmatrix} K_{11} & K_{12} & K_{16} \\ K_{12} & K_{22} & K_{26} \\ K_{16} & K_{26} & K_{66} \end{bmatrix} \\$$

Where:
- $K_{11} = c^4 Q_{11} + 2c^2s^2(Q_{12}+2Q_{66}) + s^4 Q_{22}$
- $K_{12} = c^2s^2(Q_{11}+Q_{22}-4Q_{66}) + (c^4+s^4) Q_{12}$
- $K_{22} = s^4 Q_{11} + 2c^2s^2(Q_{12}+2Q_{66}) + c^4 Q_{22}$
- $K_{16} = s c^3 (Q_{11}-Q_{12}-2Q_{66}) + s^3c (Q_{12}-Q_{22}+2Q_{66})$
- $K_{26} = s^3c (Q_{11}-Q_{12}-2Q_{66}) + sc^3 (Q_{12}-Q_{22}+2Q_{66})$
- $K_{66} = c^2s^2(Q_{11}+Q_{22}-2Q_{12}-2Q_{66}) + (c^4+s^4) Q_{66}$

Here, $c$ and $s$ are the directional cosines of the fiber direction in the local orthonormal frame.

Integration into Global FEM Pipeline
  • Mesh Generation: The component operates on a triangular mesh topology defined by vertices and connectivity information.
  • Weak Formulation: The weak formulation is derived from the constitutive law, which results in the computation of internal forces $f_{int}$ using the stiffness matrix $K_e$.
  • Element Operators: For each element, the material stiffness matrix $K_e$ is computed based on the local fiber directions and material properties. This matrix contributes to the global stiffness matrix $K$ during assembly.
Time Integration

The component supports both static and dynamic simulations through implicit time integration schemes such as Backward Euler or Newmark methods. The internal forces and stiffness matrices are updated at each time step to solve the nonlinear equations of motion.

Nonlinear Solution

Newton-Raphson iteration is used to solve the nonlinear residual equation $R(x_{n+1}) = 0$, where the Jacobian $J$ includes contributions from the stiffness matrix computed by computeMaterialStiffness.

Role in SOFA Ecosystem

The TriangularAnisotropicFEMForceField extends the functionality of the base TriangularFEMForceField to handle anisotropic materials. It is particularly useful for simulations involving biological tissues or composite materials where fiber orientations play a critical role in mechanical behavior.

Data Fields and Parameters
  • fiberAngle (d_theta): Fiber angle in the global reference frame, specified in degrees.
  • fiberCenter (d_fiberCenter): Concentric fiber center coordinates for defining orientation if used.
  • showFiber (d_showFiber): Boolean flag to enable rendering of fiber directions within each triangle.

The component provides methods like init, reinit, and draw to initialize, update the model, and visualize fibers, respectively. The method computeMaterialStiffness calculates stiffness based on anisotropic properties for each element.

Data Fields
NameTypeDefaultHelp
d_theta Real Fiber angle in global reference frame (in degrees)
d_fiberCenter VecCoord Concentric fiber center in global reference frame
d_showFiber bool Flag activating rendering of fiber directions within each triangle
Methods
void init ()
void reinit ()
void draw (const core::visual::VisualParams * vparams)
void computeMaterialStiffness (int i, Index & a, Index & b, Index & c)
void getFiberDir (int element, Deriv & dir)
void createTriangleInfo (Index triangleIndex, TriangleFiberDirection & , const core::topology::BaseMeshTopology::Triangle & t, const int & , const int & )
{
  "name": "TriangularAnisotropicFEMForceField",
  "namespace": "sofa::component::solidmechanics::fem::elastic",
  "module": "Sofa.Component.SolidMechanics.FEM.Elastic",
  "include": "sofa/component/solidmechanics/fem/elastic/TriangularAnisotropicFEMForceField.h",
  "doc": "Triangular finite element model using anisotropic material.",
  "inherits": [
    "TriangularFEMForceField"
  ],
  "templates": [
    "sofa::defaulttype::Vec3Types"
  ],
  "data_fields": [
    {
      "name": "d_theta",
      "type": "Real",
      "xmlname": "fiberAngle",
      "help": "Fiber angle in global reference frame (in degrees)"
    },
    {
      "name": "d_fiberCenter",
      "type": "VecCoord",
      "xmlname": "fiberCenter",
      "help": "Concentric fiber center in global reference frame"
    },
    {
      "name": "d_showFiber",
      "type": "bool",
      "xmlname": "showFiber",
      "help": "Flag activating rendering of fiber directions within each triangle"
    }
  ],
  "links": [],
  "methods": [
    {
      "name": "init",
      "return_type": "void",
      "params": [],
      "is_virtual": false,
      "is_pure_virtual": false,
      "is_static": false,
      "access": "public"
    },
    {
      "name": "reinit",
      "return_type": "void",
      "params": [],
      "is_virtual": false,
      "is_pure_virtual": false,
      "is_static": false,
      "access": "public"
    },
    {
      "name": "draw",
      "return_type": "void",
      "params": [
        {
          "name": "vparams",
          "type": "const core::visual::VisualParams *"
        }
      ],
      "is_virtual": false,
      "is_pure_virtual": false,
      "is_static": false,
      "access": "public"
    },
    {
      "name": "computeMaterialStiffness",
      "return_type": "void",
      "params": [
        {
          "name": "i",
          "type": "int"
        },
        {
          "name": "a",
          "type": "Index &"
        },
        {
          "name": "b",
          "type": "Index &"
        },
        {
          "name": "c",
          "type": "Index &"
        }
      ],
      "is_virtual": false,
      "is_pure_virtual": false,
      "is_static": false,
      "access": "public"
    },
    {
      "name": "getFiberDir",
      "return_type": "void",
      "params": [
        {
          "name": "element",
          "type": "int"
        },
        {
          "name": "dir",
          "type": "Deriv &"
        }
      ],
      "is_virtual": false,
      "is_pure_virtual": false,
      "is_static": false,
      "access": "public"
    },
    {
      "name": "createTriangleInfo",
      "return_type": "void",
      "params": [
        {
          "name": "triangleIndex",
          "type": "Index"
        },
        {
          "name": "",
          "type": "TriangleFiberDirection &"
        },
        {
          "name": "t",
          "type": "const core::topology::BaseMeshTopology::Triangle &"
        },
        {
          "name": "",
          "type": "const int &"
        },
        {
          "name": "",
          "type": "const int &"
        }
      ],
      "is_virtual": false,
      "is_pure_virtual": false,
      "is_static": false,
      "access": "public"
    }
  ],
  "description": "The `TriangularAnisotropicFEMForceField` is a SOFA component that models triangular finite elements with anisotropic material properties. It inherits from the `TriangularFEMForceField` and extends it to handle materials where mechanical properties vary in different directions, such as fiber-reinforced tissues or composites.\n\n### Role in SOFA Ecosystem:\nThe component is designed for solid mechanics simulations where anisotropy plays a critical role. It supports computations involving different Young's moduli along principal directions and allows the specification of fiber angles within each element, making it suitable for modeling biological tissues with aligned fibers.\n\n### Interactions with Other Components:\nThe `TriangularAnisotropicFEMForceField` interacts primarily with topology containers to access mesh information. It requires a valid topology (triangles) to define material properties and compute stiffness matrices. The component also uses mappings or interactions for updating mechanical states based on topological changes.\n\n### Practical Usage Guidance and Data Fields:\nThe key data fields include:\n- **fiberAngle (`d_theta`)**: Fiber angle in the global reference frame, specified in degrees.\n- **fiberCenter (`d_fiberCenter`)**: Concentric fiber center coordinates for defining orientation if used.\n- **showFiber (`d_showFiber`)**: Boolean flag to enable rendering of fiber directions within each triangle.\n\nThe component provides methods like `init`, `reinit`, and `draw` to initialize and update the model, as well as `computeMaterialStiffness` for calculating stiffness based on anisotropic properties. It supports visualization of fibers if enabled.",
  "maths": "### Mathematical and Physical Description of `TriangularAnisotropicFEMForceField` Component\n\n#### Governing Equations and Operators\n\nThe `TriangularAnisotropicFEMForceField` is a component in the SOFA framework designed to simulate triangular finite elements with anisotropic material properties. This means that the mechanical behavior (such as stiffness) varies depending on the direction within each element.\n\n##### Internal Force Field\n\nIn terms of FEM formulation, this component contributes to the internal force field $f_{int}$ and the material stiffness matrix $K_e$ for each triangular element in the mesh. The anisotropic nature of the material is captured through different Young's moduli along principal directions.\n\n##### Constitutive Law\n\nThe constitutive law implemented in `TriangularAnisotropicFEMForceField` is based on the linear elasticity model with anisotropy. For each triangular element, the material stiffness matrix $K_e$ is calculated as follows:\n\n1. **Material Parameters**\n   - Young's modulus along principal directions: $E_1$, $E_2$\n   - Poisson ratio along principal directions: $\nu_{12}$, $\nu_{21}$\n   - Shear modulus: $G_{12} = \\frac{E_1}{2(1+\\nu_{12})}$\n\n2. **Stiffness Matrix Calculation**\n   The stiffness matrix $K_e$ is computed using the following steps:\n   - Define fiber directions in both local and global frames.\n   - Calculate directional cosines based on fiber angles.\n   - Use these parameters to formulate the stiffness matrix elements as follows (for each triangular element):\n\n     \\\\[ K = \\begin{bmatrix}\n         K_{11} & K_{12} & K_{16} \\\\\n         K_{12} & K_{22} & K_{26} \\\\\n         K_{16} & K_{26} & K_{66}\n     \\end{bmatrix} \\\\\\]\n\n   Where:\n   - $K_{11} = c^4 Q_{11} + 2c^2s^2(Q_{12}+2Q_{66}) + s^4 Q_{22}$\n   - $K_{12} = c^2s^2(Q_{11}+Q_{22}-4Q_{66}) + (c^4+s^4) Q_{12}$\n   - $K_{22} = s^4 Q_{11} + 2c^2s^2(Q_{12}+2Q_{66}) + c^4 Q_{22}$\n   - $K_{16} = s c^3 (Q_{11}-Q_{12}-2Q_{66}) + s^3c (Q_{12}-Q_{22}+2Q_{66})$\n   - $K_{26} = s^3c (Q_{11}-Q_{12}-2Q_{66}) + sc^3 (Q_{12}-Q_{22}+2Q_{66})$\n   - $K_{66} = c^2s^2(Q_{11}+Q_{22}-2Q_{12}-2Q_{66}) + (c^4+s^4) Q_{66}$\n\n   Here, $c$ and $s$ are the directional cosines of the fiber direction in the local orthonormal frame.\n\n##### Integration into Global FEM Pipeline\n\n- **Mesh Generation**: The component operates on a triangular mesh topology defined by vertices and connectivity information.\n- **Weak Formulation**: The weak formulation is derived from the constitutive law, which results in the computation of internal forces $f_{int}$ using the stiffness matrix $K_e$.\n- **Element Operators**: For each element, the material stiffness matrix $K_e$ is computed based on the local fiber directions and material properties. This matrix contributes to the global stiffness matrix $K$ during assembly.\n\n##### Time Integration\n\nThe component supports both static and dynamic simulations through implicit time integration schemes such as Backward Euler or Newmark methods. The internal forces and stiffness matrices are updated at each time step to solve the nonlinear equations of motion.\n\n##### Nonlinear Solution\n\nNewton-Raphson iteration is used to solve the nonlinear residual equation $R(x_{n+1}) = 0$, where the Jacobian $J$ includes contributions from the stiffness matrix computed by `computeMaterialStiffness`.\n\n#### Role in SOFA Ecosystem\n\nThe `TriangularAnisotropicFEMForceField` extends the functionality of the base `TriangularFEMForceField` to handle anisotropic materials. It is particularly useful for simulations involving biological tissues or composite materials where fiber orientations play a critical role in mechanical behavior.\n\n##### Data Fields and Parameters\n- **fiberAngle (`d_theta`)**: Fiber angle in the global reference frame, specified in degrees.\n- **fiberCenter (`d_fiberCenter`)**: Concentric fiber center coordinates for defining orientation if used.\n- **showFiber (`d_showFiber`)**: Boolean flag to enable rendering of fiber directions within each triangle.\n\nThe component provides methods like `init`, `reinit`, and `draw` to initialize, update the model, and visualize fibers, respectively. The method `computeMaterialStiffness` calculates stiffness based on anisotropic properties for each element.",
  "abstract": "The `TriangularAnisotropicFEMForceField` models triangular finite elements with anisotropic material properties, capturing directional variations in stiffness through specific Young's moduli and fiber angles.",
  "sheet": "# TriangularAnisotropicFEMForceField\n\n**Overview:**\nThe `TriangularAnisotropicFEMForceField` extends the base `TriangularFEMForceField` to handle anisotropic materials, where mechanical properties vary by direction. It is particularly useful for modeling biological tissues or composite materials with aligned fibers.\n\n**Mathematical Model:**\nThe component models triangular finite elements using linear elasticity with anisotropy. The material stiffness matrix $K_e$ for each element is computed based on directional cosines and Young's moduli along principal directions:\n\\[ K = \\begin{bmatrix}\n    K_{11} & K_{12} & K_{16} \\\\\n    K_{12} & K_{22} & K_{26} \\\\\n    K_{16} & K_{26} & K_{66}\n\\end{bmatrix}, \\]\nwhere the elements are defined as:\n- $K_{11} = c^4 Q_{11} + 2c^2s^2(Q_{12}+2Q_{66}) + s^4 Q_{22}$\n- $K_{12} = c^2s^2(Q_{11}+Q_{22}-4Q_{66}) + (c^4+s^4) Q_{12}$\n- $K_{22} = s^4 Q_{11} + 2c^2s^2(Q_{12}+2Q_{66}) + c^4 Q_{22}$\n- $K_{16} = s c^3 (Q_{11}-Q_{12}-2Q_{66}) + s^3c (Q_{12}-Q_{22}+2Q_{66})$\n- $K_{26} = s^3c (Q_{11}-Q_{12}-2Q_{66}) + sc^3 (Q_{12}-Q_{22}+2Q_{66})$\n- $K_{66} = c^2s^2(Q_{11}+Q_{22}-2Q_{12}-2Q_{66}) + (c^4+s^4) Q_{66}$\n\nHere, $c$ and $s$ are the directional cosines of the fiber direction in the local orthonormal frame.\n\n**Parameters and Data:**\nThe component exposes several significant data fields:\n- **fiberAngle (`d_theta`)**: Fiber angle in the global reference frame (in degrees).\n- **fiberCenter (`d_fiberCenter`)**: Concentric fiber center coordinates for defining orientation if used.\n- **showFiber (`d_showFiber`)**: Boolean flag to enable rendering of fiber directions within each triangle."
}