Rodin::Elasticity namespace

Module which provides models for solid mechanics and elasticity.

This module implements the linearized elasticity bilinear form for small deformations. The primary class is LinearElasticityIntegral, which assembles:

\[ a(\mathbf{u}, \mathbf{v}) = \int_\Omega \bigl[\lambda (\nabla \cdot \mathbf{u})(\nabla \cdot \mathbf{v}) + 2\mu \, \boldsymbol{\varepsilon}(\mathbf{u}) : \boldsymbol{\varepsilon}(\mathbf{v})\bigr] \, dx \]

where $ \boldsymbol{\varepsilon}(\mathbf{u}) = \tfrac{1}{2}(\nabla \mathbf{u} + (\nabla \mathbf{u})^T) $ is the symmetric strain tensor, and $ \lambda, \mu $ are the Lamé parameters.

Typical Usage

P1 Vh(mesh, mesh.getSpaceDimension()); // vector P1 space
TrialFunction u(Vh);
TestFunction  v(Vh);

Real lambda = 0.5769, mu = 0.3846;
VectorFunction f{0, -1};

Problem elasticity(u, v);
elasticity = LinearElasticityIntegral(u, v)(lambda, mu)
           - BoundaryIntegral(f, v).over(GammaN)
           + DirichletBC(u, VectorFunction{0, 0}).on(GammaD);

Solver::CG(elasticity).solve();