Strain Limiting Baraff-Witkin Shell
References:
StiffGIPC: Advancing GPU IPC for Stiff Affine-Deformable Simulation
#819 StrainLimitingBaraffWitkinShell
Strain Limiting Baraff-Witkin Shell is a constitutive model for thin shell simulation based on triangle elements, extending the Finite Element base. It uses an anisotropic strain measure that separates stretch and shear contributions and applies asymmetric strain limiting: compression is penalized quadratically, while extension beyond the rest length incurs an additional cubic penalty controlled by a strain rate parameter.
For the sake of simplicity, we denote the three vertices of the triangle as \(\mathbf{x}_0\), \(\mathbf{x}_1\), and \(\mathbf{x}_2\). The rest shape positions are denoted as \(\bar{\mathbf{x}}_0\), \(\bar{\mathbf{x}}_1\), and \(\bar{\mathbf{x}}_2\).
Deformation Gradient
The spatial edge matrix is:
The rest shape matrix \(\mathbf{D}_m \in \mathbb{R}^{2 \times 2}\) is obtained by rotating the rest triangle so that its normal aligns with a canonical axis, then extracting the 2D in-plane edge vectors. The deformation gradient is:
Strain Measures
Given two orthogonal material directions \(\hat{\mathbf{a}} = (1, 0)^T\) and \(\hat{\mathbf{b}} = (0, 1)^T\), the following invariants are defined:
Stretch invariants:
These measure the stretch along each material direction. When \(I_{5u} = 1\) (or \(I_{5v} = 1\)), the material is at rest length in that direction.
Shear invariant:
This measures the shear between the two material directions.
Deformation Energy Density
The energy density separates stretch and shear contributions:
where:
- \(\lambda\) is the stretch stiffness (Lamé parameter)
- \(\mu\) is the shear stiffness
Stretch Energy
where \(r\) is the strain rate parameter and:
The quadratic term penalizes both compression and extension. The cubic term is only active when the material is stretched beyond its rest length (\(I_5 > 1\)), providing asymmetric strain limiting that progressively stiffens under large extension.
Shear Energy
Total Energy
Let the stored vertex thickness be the one-sided collision offset \(r_t\), so
the full material thickness is \(h=2r_t\). The effective coefficients are
The total energy for each triangle element is:
Here \(A_0\) is the rest area. Stretch uses the full shell thickness \(2r_t\). Shear remains an independently calibrated two-dimensional effective coefficient and is intentionally thickness-independent.
The directional stretch metric is floored at \(10^{-12}\) to guard the \(1/\sqrt{I_5}\) singularity at fully collapsed triangles (finite huge response instead of NaN).
Parameters
The strain rate parameter \(r\) is set via the strain_rate argument of apply_to (default 100) and controls the strength of the cubic extension penalty.
The one-sided thickness radius \(r_t\) and mass density are inherited from the
Finite Element base and set via apply_to.
Attributes
On triangles:
mu: \(k_{\mathrm{shear}}\), the effective shear stiffnesslambda: \(k_{\mathrm{stretch}}\), the full-thickness stretch stiffness