# Generic Linear Elastic Material¶

The generic linear elastic material is implemented in the classes MaterialLinearElasticGeneric1 and MaterialLinearElasticGeneric2, and is defined solely by the elastic stiffness tensor $$\mathbb{C}$$, which has to be specified in Voigt notation. In the case of MaterialLinearElasticGeneric2, additionally, a per-pixel eigenstrain $$\bar{\boldsymbol{\varepsilon}}$$ can be supplied. The constitutive relation between the Cauchy stress $$\boldsymbol{\sigma}$$ and the small strain tensor $$\boldsymbol{\varepsilon}$$ is given by

\begin{align} \boldsymbol{\sigma} &= \mathbb{C}:\boldsymbol{\varepsilon}\\ \sigma_{ij} &= C_{ijkl}\,\varepsilon_{kl}, \quad\mbox{for the simple version, and}\\ \boldsymbol{\sigma} &= \mathbb{C}:\left(\boldsymbol{\varepsilon}-\bar{\boldsymbol{\varepsilon}}\right)\\ \sigma_{ij} &= C_{ijkl}\,\left(\varepsilon_{kl} - \bar\varepsilon_{kl}\right) \quad\mbox{ for the version with eigenstrain} \end{align}

This implementation is convenient, as it covers all possible linear elastic behaviours, but it is by far not as efficient as MaterialLinearElastic1 for isotropic linear elasticity.

This law can be used in both small strain and finite strain calculations.

The following snippet shows how to use this law in python to implement isotropic linear elasticity:

## Python Usage Example¶

C = np.array([[2 * mu + lam,          lam,          lam,  0,  0,  0],
[         lam, 2 * mu + lam,          lam,  0,  0,  0],
[         lam,          lam, 2 * mu + lam,  0,  0,  0],
[           0,            0,            0, mu,  0,  0],
[           0,            0,            0,  0, mu,  0],
[           0,            0,            0,  0,  0, mu]])

eigenstrain = np.array([[  0, .01],
[.01,   0]])

mat1 = muSpectre.material.MaterialLinearElasticGeneric1_3d.make(
cell, "material", C)