Materials¶
Material models describe how the stress in a material depends on its deformation. In a general sense, we can formulate this for an isothermal material abstractly as
with a function \(\mathcal{F}\) that maps a deformation gradient \(\mathbf{F}\) and material state vector \(\pmb{\alpha}\) to a stress.
In general, this relation is non-linear and often path-dependent. To solve the global equilibrium equations, the material model must be implemented incrementally. Instead of a total mapping, we evaluate the material response over a discrete load step from time \(t_n\) to \(t_{n+1}\).
The material model is responsible for advancing the material state. Given the state at the beginning of the step (\(\mathbf{F}_n,\mathbf{P}_n, \pmb{\alpha}_n\)) and an increment of deformation \(\Delta \mathbf{H}\), the model must determine the new stress and updated internal variables (\(\mathbf{P}_{n+1}, \pmb{\alpha}_{n+1}\)). In addition, it must provide an algorithmic tangent stiffness
$$
\mathbb{C}_{n+1} = \frac{\partial \Delta \pmb{\sigma}}{\partial \Delta \mathbf{H}}
$$
for convergence speed of the underlying incremental Newton-Raphson solver.
In torch-fem, this logic is encapsulated in the step() method of each material. Material holds what every material has -- vectorize(), rotate(), the density, the state width and the spatial dimension -- and one of two bases adds the balance law.
Which material for which model¶
A model takes only a material of its own physics and spatial dimension, and rejects
anything else when it is constructed. PS is plane stress and PE plane strain.
| Material | Truss | Planar | Solid | Shell | Laminate | TrussHeat | PlanarHeat | SolidHeat | ShellHeat |
|---|---|---|---|---|---|---|---|---|---|
| Isotropic elasticity | 1D | PS · PE | 3D | PS · PE | PS · PE | — | — | — | — |
| Orthotropic elasticity | — | PS · PE | 3D | PS · PE | PS · PE | — | — | — | — |
| Transverse isotropic elasticity | — | PS · PE | 3D | PS · PE | PS · PE | — | — | — | — |
| Isotropic plasticity | 1D | PS · PE | 3D | PS · PE | PS · PE | — | — | — | — |
| Hyperelasticity | — | PS · PE | 3D | — | — | — | — | — | — |
| Isotropic damage | 1D | PS · PE | 3D | PS · PE | PS · PE | — | — | — | — |
| Isotropic conductivity | — | — | — | — | — | 1D | 2D | 3D | 2D |
| Orthotropic conductivity | — | — | — | — | — | — | 2D | 3D | 2D |
A hyperelastic material needs geometric nonlinearity, which Shell and Truss do not
support, so those cells stay empty whatever material is added.
The step¶
A Mechanics model takes a MechanicsMaterial, whose step maps a displacement gradient increment to a stress:
torchfem.materials.MechanicsMaterial.step(H_inc, F, stress, state, de0, cl, iter)
abstractmethod
¶
Performs an incremental step of the material model.
This function has to update the stress, internal state, and algorithmic tangent stiffness.
Parameters:
-
H_inc(Tensor) –Incremental displacement gradient \(\Delta \mathbf{H}\). Shape:
(..., d, d). -
F(Tensor) –Current deformation gradient \(\mathbf{F}_n\). Shape:
(..., d, d). -
stress(Tensor) –Current stress tensor \(\pmb{\sigma}_n\) or \(\mathbf{P}_n\). Shape:
(..., d, d). -
state(Tensor) –Internal state variables \(\pmb{\alpha}_n\). Shape:
(..., <number of state variables>). -
de0(Tensor) –External strain increment (e.g., thermal). Shape:
(..., d, d). -
cl(Tensor) –Characteristic lengths for regularization. Shape:
(..., 1). -
iter(int) –Current iteration number.
Returns:
-
stress_new(Tensor) –Updated stress tensor \(\pmb{\sigma}_{n+1}\) or \(\mathbf{P}_{n+1}\). Shape:
(..., d, d). -
state_new(Tensor) –Updated internal state \(\pmb{\alpha}_{n+1}\). Shape:
(..., n_state). -
ddsdde(Tensor) –Algorithmic tangent stiffness tensor \(\frac{\partial \Delta \pmb{\sigma}}{\partial \Delta \mathbf{H}}\). Shape:
(..., d, d, d, d).
A Heat model takes a HeatMaterial, whose step maps a temperature gradient increment to a heat flux:
torchfem.materials.HeatMaterial.step(grad_inc, grad, flux, state, cl, iter)
abstractmethod
¶
Performs an incremental step of the material model.
This function has to update the heat flux, internal state, and algorithmic tangent conductivity.
Parameters:
-
grad_inc(Tensor) –Incremental temperature gradient \(\Delta \nabla T\). Shape:
(..., 1, d). -
grad(Tensor) –Current temperature gradient \(\nabla T_n\). Shape:
(..., 1, d). -
flux(Tensor) –Current heat flux \(\mathbf{q}_n\). Shape:
(..., 1, d). -
state(Tensor) –Internal state variables \(\pmb{\alpha}_n\). Shape:
(..., <number of state variables>). -
cl(Tensor) –Characteristic lengths for regularization. Shape:
(..., 1). -
iter(int) –Current iteration number.
Returns:
-
flux_new(Tensor) –Updated heat flux \(\mathbf{q}_{n+1}\). Shape:
(..., 1, d). -
state_new(Tensor) –Updated internal state \(\pmb{\alpha}_{n+1}\). Shape:
(..., n_state). -
dqdg(Tensor) –Algorithmic tangent conductivity \(\frac{\partial \Delta \mathbf{q}}{\partial \Delta \nabla T}\). Shape:
(..., d, d).