Hyperelastic Materials Modeling
To model the mechanical behavior of soft materials, such as liquid crystal elastomers (LCEs) and biological tissues, we utilize non-linear solid mechanics theories. Hyperelasticity is defined by a strain energy density function, $W$, which accounts for the material’s changing stiffness and near-total incompressibility during finite deformation.
Legend:
- A–C: Kinematics
- D–E: Constitutive modeling
- F–H: Governing equations
- I–J: Application to specific loadings and performance metrics
1. Kinematic Description
The kinematic description maps material points from their reference configuration $\mathbf{X}$ to their current configuration $\mathbf{x}$.
1.1. Deformation Mapping and Gradient
Let the reference position be $\mathbf{X} = (X_1, X_2, X_3)$ and the current position be $\mathbf{x} = (x_1, x_2, x_3)$. The deformation mapping is expressed as:
\begin{equation} \mathbf{x} = \boldsymbol{\chi}(\mathbf{X}, t) \end{equation}
The deformation gradient $\mathbf{F}$ is the spatial gradient of the mapping:
\begin{equation} \mathbf{F} = \frac{\partial \boldsymbol{\chi}}{\partial \mathbf{X}} \end{equation}
1.2. Invariants and Strain Measures
To construct frame-indifferent constitutive equations, we introduce the symmetric Right Cauchy–Green deformation tensor $\mathbf{C}$:
\[\mathbf{C} = \mathbf{F}^\mathrm{T} \mathbf{F}\]For isotropic materials, the strain energy density is formulated using the three principal invariants of $\mathbf{C}$:
\begin{equation} I_1 = \text{tr}\,\mathbf{C}, \quad I_2 = \frac{1}{2}\left[ (\text{tr}\,\mathbf{C})^2 - \text{tr}(\mathbf{C}^2) \right], \quad I_3 = \det \mathbf{C}. \end{equation}
- Frame Indifference: $\mathbf{C}$ is objective under rigid-body rotations since $(\mathbf{Q}\mathbf{F})^\mathrm{T}(\mathbf{Q}\mathbf{F}) = \mathbf{F}^\mathrm{T}\mathbf{Q}^\mathrm{T}\mathbf{Q}\mathbf{F} = \mathbf{F}^\mathrm{T}\mathbf{F} = \mathbf{C}$.
- Incompressibility: Enforced by setting the volume ratio $J = \det \mathbf{F} = 1$, which simplifies the third invariant to $I_3 = \det \mathbf{C} = 1$.
2. Kinetics Relations
2.1. Constitutive Model (Strain-Energy Function)
A hyperelastic material is characterized by a strain-energy function $W = W(I_1, I_2)$ per unit reference volume. We compare three widely used models:
Neo-Hookean Model:
\begin{equation} W = \frac{\mu}{2} (I_1 - 3). \end{equation}
Explanation: Derived from the statistical mechanics of Gaussian polymer chains. It works well for small to moderate strains but fails to capture large strain stiffening.
Mooney–Rivlin Model:
\begin{equation} W = C_1 (I_1 - 3) + C_2 (I_2 - 3). \end{equation}
Explanation: Incorporates the second invariant $I_2$, providing a phenomenological description that significantly improves accuracy for rubber-like materials in shear and biaxial states.
Yeoh Model:
\begin{equation} W = \sum_{i=1}^{3} C_i (I_1 - 3)^i. \end{equation}
Explanation: A highly robust, first-invariant-based model. It effectively captures the characteristic “S-shaped” stress-strain curves and abrupt strain-hardening at large stretches.
Key Modeling Recommendation: For complex loading states, using a multi-invariant strain-energy function $W(I_1, I_2)$ is highly recommended.
2.2. Derive Stress from the Strain-Energy Function
Assuming incompressibility with a Lagrange multiplier $p$ (representing hydrostatic pressure), the Second Piola–Kirchhoff stress tensor $\mathbf{S}$ is:
\begin{equation} \mathbf{S} = 2 \frac{\partial W}{\partial \mathbf{C}} - p \mathbf{C}^{-1} \end{equation}
The Cauchy stress tensor $\boldsymbol{\sigma}$ is obtained by push-forward transformation:
\begin{equation} \boldsymbol{\sigma} = \mathbf{F} \mathbf{S} \mathbf{F}^\mathrm{T} = -p\mathbf{I} + 2\frac{\partial W}{\partial I_1}\mathbf{B} - 2\frac{\partial W}{\partial I_2}\mathbf{B}^{-1} \end{equation}
where $\mathbf{B} = \mathbf{F}\mathbf{F}^\mathrm{T}$ is the Left Cauchy–Green deformation tensor. Using the chain rule, we can express $\mathbf{S}$ analytically in terms of the invariants:
\begin{equation} \mathbf{S} = 2 \left( \frac{\partial W}{\partial I_1} \frac{\partial I_1}{\partial \mathbf{C}} + \frac{\partial W}{\partial I_2} \frac{\partial I_2}{\partial \mathbf{C}} \right) - p \mathbf{C}^{-1} \end{equation}
where:
\begin{equation} \frac{\partial I_1}{\partial \mathbf{C}} = \mathbf{I}, \quad \frac{\partial I_2}{\partial \mathbf{C}} = I_1 \mathbf{I} - \mathbf{C}. \end{equation}
These stress expressions allow us to calculate axial force, torque, and membrane stresses, which are critical for characterizing soft actuators and balloons.
| Stress measure | Symbol | Configuration / area used | Definition | Relation to Cauchy stress (\boldsymbol{\sigma}) |
|---|---|---|---|---|
| Cauchy (true) stress | $(\boldsymbol{\sigma})$ | Current (deformed) configuration | $(\displaystyle \boldsymbol{\sigma}=\frac{\mathrm{d}\mathbf{f}}{\mathrm{d}a})$ | — |
| First Piola–Kirchhoff stress | $(\mathbf{P})$ | Force in current configuration / area in reference configuration | $(\displaystyle \mathbf{P}=J\boldsymbol{\sigma}\mathbf{F}^{-T})$ | $(\displaystyle \mathbf{P}=J\boldsymbol{\sigma}\mathbf{F}^{-T})$ |
| Second Piola–Kirchhoff stress | $(\mathbf{S})$ | Entirely referred to reference configuration | $(\displaystyle \mathbf{S}=\mathbf{F}^{-1}\mathbf{P})$ | (\displaystyle \mathbf{S}=J\mathbf{F}^{-1}\boldsymbol{\sigma}\mathbf{F}^{-T}) |
| Kirchhoff stress | $(\boldsymbol{\tau})$ | Current configuration, volume-scaled | $(\displaystyle \boldsymbol{\tau}=J\boldsymbol{\sigma})$ | $(\displaystyle \boldsymbol{\tau}=J\boldsymbol{\sigma})$ |
| Mandel stress | $(\mathbf{M})$ | Mixed/material configuration | $(\displaystyle \mathbf{M}=\mathbf{C}\mathbf{S}=\mathbf{F}^{T}\mathbf{P})$ | $(\displaystyle \mathbf{M}=J\mathbf{F}^{T}\boldsymbol{\sigma}\mathbf{F}^{-T})$ |
| Biot stress | $(\mathbf{T}_B)$ | Reference configuration | Defined through work conjugacy with Biot strain | Depends on the constitutive formulation |
| Engineering (nominal) stress | $(\boldsymbol{\sigma}_{\text{eng}})$ | Original cross-sectional area | $(\displaystyle \sigma_{\text{eng}}=\frac{F}{A_0})$ in uniaxial loading | In uniaxial loading: $(\displaystyle P_{11}=\sigma_{\text{eng}})$ |
3. Governing Equations
\begin{equation} \nabla\cdot\boldsymbol{\sigma}+\rho\mathbf{b} = \rho\mathbf{a}, \end{equation}
where $(\boldsymbol{\sigma})$ is the Cauchy stress tensor, $(\rho)$ is density, $(\mathbf{b})$ is body force per unit mass, and $(\mathbf{a})$ is acceleration.
-
- Cartesian coordinates $((x,y,z))$
\begin{equation} \mathbf{x}=x\,\mathbf{e}_x+y\,\mathbf{e}_y+z\,\mathbf{e}_z \end{equation}
\begin{equation} \frac{\partial \sigma_{xx}}{\partial x} +\frac{\partial \sigma_{xy}}{\partial y} +\frac{\partial \sigma_{xz}}{\partial z} +\rho b_x &=\rho a_x,\
\frac{\partial \sigma_{yx}}{\partial x} +\frac{\partial \sigma_{yy}}{\partial y} +\frac{\partial \sigma_{yz}}{\partial z} +\rho b_y &=\rho a_y,\
\frac{\partial \sigma_{zx}}{\partial x} +\frac{\partial \sigma_{zy}}{\partial y} +\frac{\partial \sigma_{zz}}{\partial z} +\rho b_z &=\rho a_z. \end{equation}
For a classical continuum without body couples,
\begin{equation} \sigma_{ij}=\sigma_{ji}. \end{equation}
-
- Cylindrical coordinates $((r,\theta,z))$
\begin{equation} \mathbf{x}=r\,\mathbf{e}_r+z\,\mathbf{e}_z. \end{equation}
\begin{equation} \begin{aligned} \frac{\partial \sigma_{rr}}{\partial r} +\frac{1}{r}\frac{\partial \sigma_{r\theta}}{\partial \theta} +\frac{\partial \sigma_{rz}}{\partial z} +\frac{\sigma_{rr}-\sigma_{\theta\theta}}{r} +\rho b_r &=\rho a_r,\
\frac{\partial \sigma_{r\theta}}{\partial r} +\frac{1}{r}\frac{\partial \sigma_{\theta\theta}}{\partial \theta} +\frac{\partial \sigma_{\theta z}}{\partial z} +\frac{2\sigma_{r\theta}}{r} +\rho b_\theta &=\rho a_\theta,\
\frac{\partial \sigma_{rz}}{\partial r} +\frac{1}{r}\frac{\partial \sigma_{\theta z}}{\partial \theta} +\frac{\partial \sigma_{zz}}{\partial z} +\frac{\sigma_{rz}}{r} +\rho b_z &=\rho a_z. \end{aligned} \end{equation}
-
- Spherical coordinates ((r,\theta,\phi))
Here, $(\theta)$ is the polar angle measured from the positive $(z$)-axis, and $(\phi)$ is the azimuthal angle in the $(x)-(y)$ plane.
\begin{equation} \mathbf{x}=r\,\mathbf{e}_r. \end{equation}
Radial direction
\begin{equation} \begin{aligned} \frac{\partial \sigma_{rr}}{\partial r} +\frac{1}{r}\frac{\partial \sigma_{r\theta}}{\partial \theta} +\frac{1}{r\sin\theta}\frac{\partial \sigma_{r\phi}}{\partial \phi} +\frac{2\sigma_{rr}-\sigma_{\theta\theta}-\sigma_{\phi\phi}}{r} +\frac{\sigma_{r\theta}\cot\theta}{r} +\rho b_r = \rho a_r. \end{aligned} \end{equation}
Polar ($(\theta)$) direction
\begin{equation} \begin{aligned} \frac{\partial \sigma_{r\theta}}{\partial r} +\frac{1}{r}\frac{\partial \sigma_{\theta\theta}}{\partial \theta} +\frac{1}{r\sin\theta}\frac{\partial \sigma_{\theta\phi}}{\partial \phi} +\frac{3\sigma_{r\theta}}{r} +\frac{(\sigma_{\theta\theta}-\sigma_{\phi\phi})\cot\theta}{r} +\rho b_\theta = \rho a_\theta. \end{aligned} \end{equation}
Azimuthal $(\phi)$ direction
\begin{equation} \begin{aligned} \frac{\partial \sigma_{r\phi}}{\partial r} +\frac{1}{r}\frac{\partial \sigma_{\theta\phi}}{\partial \theta} +\frac{1}{r\sin\theta}\frac{\partial \sigma_{\phi\phi}}{\partial \phi} +\frac{3\sigma_{r\phi}}{r} +\frac{2\sigma_{\theta\phi}\cot\theta}{r} +\rho b_\phi = \rho a_\phi. \end{aligned} \end{equation}
so far, mechanical part of the problem is modeled. to include other physics in the problem you can use one of the following options:
| Coupling | Governing balance | Constitutive relations | Flux/field relations |
|---|---|---|---|
| Electro-mechanical loading | Gauss’s law: $\operatorname{Div}\mathbf{D}0=\rho{f0}$ | $[\mathbf{P}=\frac{\partial H(\mathbf{F},\mathbf{E}_0)}{\partial \mathbf{F}}]$ $[\mathbf{D}_0=-\frac{\partial H(\mathbf{F},\mathbf{E}_0)}{\partial \mathbf{E}_0}]$ | $[\mathbf{E}_0=-\nabla_X\phi]$ |
| Chemo-mechanical loading | Species balance: $[\dot{c}+\operatorname{Div}\mathbf{J}=s]$ | $[\mathbf{P}=\frac{\partial \Psi(\mathbf{F},c)}{\partial \mathbf{F}}]$ $[\mu=\frac{\partial \Psi(\mathbf{F},c)}{\partial c}]$ | Diffusive flux: $[\mathbf{J}=-M\nabla_X\mu]$ |
| Thermo-mechanical loading | Energy balance: $[\rho_0c\,\dot{T}=-\operatorname{Div}\mathbf{Q}+R+Q_{\mathrm{mech}}+Q_{\mathrm{coupling}}]$ | $[\mathbf{P}=\frac{\partial \Psi(\mathbf{F},T)}{\partial \mathbf{F}}]$ $[\eta=-\frac{\partial \Psi(\mathbf{F},T)}{\partial T}]$ | Heat flux: $[\mathbf{Q}=-K\nabla_XT]$ |
Here, $(\mathbf{P})$ is the first Piola–Kirchhoff stress, $(\mathbf{F})$ is the deformation gradient, $(\mathbf{D}_0)$ and $(\mathbf{E}_0)$ are referential electric displacement and electric field, $(c)$ is concentration, $(\mu)$ is chemical potential, $(\mathbf{J})$ is mass/species flux, $(\eta)$ is entropy, and $(\mathbf{Q})$ is heat flux.
By coupling kinematics, constitutive laws, and momentum balance, a semi-analytical framework is established. This allows one to express invariants and stresses analytically, reducing the complex non-linear boundary-value problem to a set of algebraic or ordinary differential equations. These equations are then solved numerically via Finite Element Analysis for specific loading commditions.
Example: SymPy
Below is a complete, educational Python script using SymPy to automate the symbolic derivation of Cauchy stress under uniaxial tension for an incompressible Neo-Hookean material.
import sympy as sp
# 1. Define Kinematics and Deformation Gradient (F)
# Using principal stretches for an incompressible material
lam1, lam2, lam3 = sp.symbols('lambda1 lambda2 lambda3', real=True, positive=True)
p = sp.symbols('p', real=True) # Lagrange multiplier (hydrostatic pressure)
# Diagonal deformation gradient tensor F
F = sp.Matrix([[lam1, 0, 0],
[0, lam2, 0],
[0, 0, lam3]])
# 2. Right Cauchy-Green Deformation Tensor (C = F.T * F)
C = F.T * F
# 3. Principal Invariants
I1 = sp.trace(C)
I2 = 0.5 * (sp.trace(C)**2 - sp.trace(C**2))
I3 = C.det() # Must be 1 for incompressibility
# 4. Define Strain Energy Density Function (psi)
# Example: Neo-Hookean Model psi = (mu/2) * (I1 - 3)
mu = sp.symbols('mu', real=True, positive=True)
psi = (mu / 2) * (I1 - 3)
# 5. Second Piola-Kirchhoff Stress (S = 2 * d(psi)/dC)
# For diagonal tensors, we differentiate with respect to components C_ii
S = sp.diag(2 * sp.diff(psi, C[0,0]),
2 * sp.diff(psi, C[1,1]),
2 * sp.diff(psi, C[2,2]))
# 6. Cauchy Stress Tensor (sigma = -p*I + F * S * F.T)
I = sp.eye(3)
sigma = -p * I + F * S * F.T
# Simplified Principal Stress Components
sigma_11 = sp.simplify(sigma[0,0])
print(f"Cauchy Stress sigma_11: {sigma_11}")
# Example for Uniaxial Tension: lam1 = lam, lam2 = lam3 = 1/sqrt(lam)
lam = sp.symbols('lambda', real=True, positive=True)
sigma_uniaxial = sigma_11.subs({lam1: lam, lam2: 1/sp.sqrt(lam), lam3: 1/sp.sqrt(lam)})
# Solve for p using the boundary condition sigma_22 = 0
sigma_22 = sigma[1,1].subs({lam1: lam, lam2: 1/sp.sqrt(lam), lam3: 1/sp.sqrt(lam)})
p_sol = sp.solve(sigma_22, p)[0]
final_sigma = sp.simplify(sigma_uniaxial.subs(p, p_sol))
print(f"Uniaxial Cauchy Stress (sigma): {final_sigma}")