White box / Physical formulations / Material and section laws

Isotropic linear elasticity

Physical formulation · assumptions, essential equations, full derivation, algorithm, code and verification references.

Browse another sheet Physical formulations / Material and section laws
Physical formulationsMaterial and section lawsSheet 1 / 6
Physical formulationQUALIFIED_BOUNDED · recorded element/analysis combinations only

Small-strain 3D law in engineering-Voigt order [xx, yy, zz, xy, yz, xz].

01 Model and scope

This is a local, memoryless 3D constitutive law for infinitesimal strain. It maps the symmetric displacement gradient to Cauchy stress and assumes the same response in every direction. The six-component engineering-Voigt convention is part of the model: shear strains are doubled while shear stresses are not.

Route assumptions and calculation checks

  1. The last three strain components are engineering shears γij=2εij; the corresponding D diagonal entries are μ.
  2. The v0.2.11 constructor validates E>0 and −1<ν<0.5; near ν=0.5, bulk stiffness grows and displacement elements may lock.
  3. The 0.2.8 registry remains the cited qualification baseline. Consult its exact element/analysis row; a current package release does not automatically extend that evidence.

02 Essential equations and symbols

ε=sym⁡(∇u),σ=λtr⁡(ε)I+2με\boldsymbol{\varepsilon}=\operatorname{sym}(\nabla\mathbf u),\quad\boldsymbol{\sigma}=\lambda\operatorname{tr}(\boldsymbol{\varepsilon})\mathbf I+2\mu\boldsymbol{\varepsilon}μ=E2(1+ν),K=E3(1−2ν),λ=K−23μ\mu=\frac{E}{2(1+\nu)},\quad K=\frac{E}{3(1-2\nu)},\quad\lambda=K-\frac23\muσv=Dεv,Ke=∫ΩeBTDB dΩ\boldsymbol{\sigma}_v=\mathbf D\boldsymbol{\varepsilon}_v,\quad\mathbf K_e=\int_{\Omega_e}\mathbf B^T\mathbf D\mathbf B\,\mathrm d\Omega

Definitions and conventions

ε=sym⁡(∇u)\varepsilon{} = \operatorname{sym}(\nabla{}u)
Infinitesimal strain tensor; rotations are assumed small enough for the linearized strain measure.
E,νE, \nu{}
Young modulus and Poisson ratio; accepted by the v0.2.11 constructor when E>0 and −1<ν<0.5.
λ,μ,K\lambda{}, \mu{}, K
First Lamé modulus, shear modulus, and bulk modulus.
DD
6×6 constitutive matrix in [xx, yy, zz, xy, yz, xz] order.
γij=2εij\gamma{}ij = 2\varepsilon{}ij
Engineering shear strain; stress entries τij remain tensor shear stresses.
εxxσE₁ = E₂ = E₃ · ν₁₂ = ν₂₃ = ν₃₁Linear isotropic elasticityε = sym(∇u)σ = λ tr(ε) I + 2μεσᵥ = D εᵥ
One elastic response in every directionThe material law is local and linear. The element interpolation, integration rule, boundary conditions, and evidence row remain separate parts of a complete solver route.
5 detailed steps

03 Step by step derivation

Follow the assumptions, equations and discrete operations in order. The full explanation stays visible.

The derivation separates kinematics from constitutive response: displacement gives strain, E and ν determine the Lamé moduli, D maps the declared strain vector to stress, and virtual work turns that pointwise law into element forces and stiffness. It does not select an element, integration rule, nonlinear solver, or qualification row.

1 · Kinematics: from displacement to infinitesimal strain

The material law receives strain, not nodal displacement directly. In the small-displacement-gradient model, the symmetric part of ∇u measures extension and shear while its skew part represents infinitesimal rigid rotation. The approximation discards products of displacement gradients; it is not an exact finite-rotation or finite-strain measure.

ε=sym⁡(∇u)=12(∇u+∇uT)\boldsymbol{\varepsilon}=\operatorname{sym}(\nabla\mathbf u)=\frac12\left(\nabla\mathbf u+\nabla\mathbf u^T\right)σ=C:ε\boldsymbol{\sigma}=\mathbb C: \boldsymbol{\varepsilon}∥∇u∥≪1is the kinematic smallness assumption\|\nabla\mathbf u\|\ll 1\quad\text{is the kinematic smallness assumption}

Rigid translation gives ε=0. In the linearized model, an arbitrarily large rigid rotation is not represented objectively; use a documented finite-kinematic route when that matters.

2 · Isotropy and the volumetric/deviatoric split

An isotropic elastic solid has only two independent moduli. The shear modulus μ controls shape change; the bulk modulus K controls volume change. The Lamé modulus λ couples normal strains in the 3D constitutive matrix. This split exposes why the response becomes numerically difficult near the incompressible limit.

μ=E2(1+ν),K=E3(1−2ν),λ=K−23μ=Eν(1+ν)(1−2ν)\mu=\frac{E}{2(1+\nu)},\qquad K=\frac{E}{3(1-2\nu)},\qquad \lambda=K-\frac23\mu=\frac{E\nu}{(1+\nu)(1-2\nu)}εdev=ε−13tr⁡(ε)I\boldsymbol{\varepsilon}_{dev}=\boldsymbol{\varepsilon}-\frac13\operatorname{tr}(\boldsymbol{\varepsilon})\mathbf Iσ=Ktr⁡(ε)I+2μεdev\boldsymbol{\sigma}=K\operatorname{tr}(\boldsymbol{\varepsilon})\mathbf I+2\mu\boldsymbol{\varepsilon}_{dev}W=12K[tr⁡(ε)]2+μεdev:εdevW=\frac12K\left[\operatorname{tr}(\boldsymbol{\varepsilon})\right]^2+\mu\boldsymbol{\varepsilon}_{dev}:\boldsymbol{\varepsilon}_{dev}

W is strain-energy density per reference/current volume in this infinitesimal linear model. E and ν alone do not describe plasticity, damage, rate effects, or temperature dependence.

3 · Convert the tensor law to the code's Voigt convention

QF Solver orders strain as [εxx, εyy, εzz, γxy, γyz, γxz] and stress as [σxx, σyy, σzz, τxy, τyz, τxz]. The off-diagonal strain entries are engineering shears γij=2εij. Consequently the shear diagonal in D is μ, not 2μ; mixing tensor and engineering shear conventions creates a factor-of-two error.

εv=[εxx,εyy,εzz,γxy,γyz,γxz]T\boldsymbol{\varepsilon}_v=[\varepsilon_{xx},\varepsilon_{yy},\varepsilon_{zz},\gamma_{xy},\gamma_{yz},\gamma_{xz}]^Tσv=[σxx,σyy,σzz,τxy,τyz,τxz]T\boldsymbol{\sigma}_v=[\sigma_{xx},\sigma_{yy},\sigma_{zz},\tau_{xy},\tau_{yz},\tau_{xz}]^TD=[λ+2μλλ000λλ+2μλ000λλλ+2μ000000μ000000μ000000μ],σv=Dεv\mathbf D=\begin{bmatrix}\lambda+2\mu&\lambda&\lambda&0&0&0\\\lambda&\lambda+2\mu&\lambda&0&0&0\\\lambda&\lambda&\lambda+2\mu&0&0&0\\0&0&0&\mu&0&0\\0&0&0&0&\mu&0\\0&0&0&0&0&\mu\end{bmatrix},\qquad \boldsymbol{\sigma}_v=\mathbf D\boldsymbol{\varepsilon}_v

A uniaxial stress test with free lateral faces should recover εyy=εzz=−νεxx and σxx=Eεxx. That is a useful convention check, not a benchmark for every element route.

4 · Insert the material law into finite-element virtual work

The element interpolation turns nodal coordinates qₑ into strain through ε=Bqₑ. The same constitutive matrix then supplies the internal force and the linear material stiffness. B, geometry mapping, quadrature, and the element family still determine how accurately the element integral is evaluated.

εh=Bqe\boldsymbol{\varepsilon}_h=\mathbf B\mathbf q_eδWint=δqeT∫ΩeBTDB dΩ qe\delta W_{int}=\delta\mathbf q_e^T\int_{\Omega_e}\mathbf B^T\mathbf D\mathbf B\,d\Omega\,\mathbf q_efint,e=∫ΩeBTσv dΩ,Ke=∫ΩeBTDB dΩ\mathbf f_{int,e}=\int_{\Omega_e}\mathbf B^T\boldsymbol{\sigma}_v\,d\Omega,\qquad \mathbf K_e=\int_{\Omega_e}\mathbf B^T\mathbf D\mathbf B\,d\Omega

For a homogeneous straight TET4, B and D are constant and Kₑ=VBᵀDB. Higher-order and distorted elements require their own mapped gradients and integration rules.

5 · Material checks, conditioning, and limits

The v0.2.11 material constructor rejects non-positive E and Poisson ratios outside (−1, 0.5). As ν approaches 0.5, K grows without bound in the idealized equations. Standard displacement elements can then lock volumetrically: the computed displacement may be too small even though the constitutive equation is algebraically correct.

E>0,−1<ν<12E>0,\qquad -1<\nu<\frac12ν→12−⟹K=E3(1−2ν)→∞\nu\to\frac12^-\quad\Longrightarrow\quad K=\frac{E}{3(1-2\nu)}\to\inftyρ>0is needed for a non-singular inertial mass in modal/dynamic use\rho>0\quad\text{is needed for a non-singular inertial mass in modal/dynamic use}

These constructor bounds do not qualify a particular element, mesh, analysis, solver, or material/geometry composition. The linked registry controls that claim; near-incompressible behavior needs a formulation and benchmark intended for that regime.

04 Algorithm and implementation

Source excerpt · v0.2.11

The v0.2.11 material constructor checks the admissible constants, then builds the 6×6 stiffness in the documented engineering-shear order.

Functions shown: elasticity_matrix

Code
@cached_property
    def elasticity_matrix(self) -> np.ndarray:
        factor = self.E / ((1.0 + self.nu) * (1.0 - 2.0 * self.nu))
        lam = self.nu * factor
        mu = self.E / (2.0 * (1.0 + self.nu))
        matrix = np.zeros((6, 6), dtype=float)
        matrix[:3, :3] = lam
        np.fill_diagonal(matrix[:3, :3], lam + 2.0 * mu)
        matrix[3, 3] = matrix[4, 4] = matrix[5, 5] = mu
        return matrix
Read the complete versioned implementation →

05 Verification and limitations

QUALIFIED_BOUNDED · recorded element/analysis combinations only

Each reference supports its own model, observable and analysis route. Read the original contract and limitations before transferring a conclusion.

Recorded repository calculations

See this method in a calculation.

Each case keeps its mesh, measured quantities, source record and limitations attached to the result.

Browse every calculation case →

06 Sources and related sheets

Continue the reasoning

Back to sheet contents ↑