The mechanical response of a linear elastic material is defined by
$$ \pmb{\sigma} = \mathbb{C}{:}\pmb{\epsilon} $$where $\mathbb{C}$ is the elastic stiffness tensor made up of 21 independent components. The strain $\pmb{\epsilon}$ can be determined from the deformation gradient $\pmb{F}$ as
$$ \pmb{\epsilon} = \frac{1}{2\kappa}\left[\left(\pmb{F}^{\rm T}{\cdot}\pmb{F}\right)^{2\kappa} - \pmb{I}\right] $$where $\kappa$ is the generalized Seth-Hill strain parameter. Defined as such, several well known finite strain measures are emitted:
In matrix form, the stress train relationship is
$$ \begin{Bmatrix} {\sigma}_{11} \\ {\sigma}_{22} \\ {\sigma}_{33} \\ {\sigma}_{12} \\ {\sigma}_{23} \\ {\sigma}_{13} \\ {\sigma}_{21} \\ {\sigma}_{32} \\ {\sigma}_{31} \end{Bmatrix} = \begin{bmatrix} C_{1111} & C_{1122} & C_{1133} & C_{1112} & C_{1123} & C_{1113} & C_{1121} & C_{1132} & C_{1131} \\ C_{2211} & C_{2222} & C_{2233} & C_{2212} & C_{2223} & C_{2213} & C_{2221} & C_{2232} & C_{2231} \\ C_{3311} & C_{3322} & C_{3333} & C_{3312} & C_{3323} & C_{3313} & C_{3321} & C_{3332} & C_{3331} \\ C_{1211} & C_{1222} & C_{1233} & C_{1212} & C_{1223} & C_{1213} & C_{1221} & C_{1232} & C_{1231} \\ C_{2311} & C_{2322} & C_{2333} & C_{2312} & C_{2323} & C_{2313} & C_{2321} & C_{2332} & C_{2331} \\ C_{1311} & C_{1322} & C_{1333} & C_{1312} & C_{1323} & C_{1313} & C_{1321} & C_{1332} & C_{1331} \\ C_{2111} & C_{2122} & C_{2133} & C_{2212} & C_{2123} & C_{2213} & C_{2121} & C_{2132} & C_{2131} \\ C_{3211} & C_{3222} & C_{3233} & C_{3212} & C_{3223} & C_{3213} & C_{3221} & C_{3232} & C_{3231} \\ C_{3111} & C_{3122} & C_{3133} & C_{3312} & C_{3123} & C_{3113} & C_{3121} & C_{3132} & C_{3131} \end{bmatrix} \begin{Bmatrix} {\epsilon}_{11} \\ {\epsilon}_{22} \\ {\epsilon}_{33} \\ {\epsilon}_{12} \\ {\epsilon}_{23} \\ {\epsilon}_{13} \\ {\epsilon}_{21} \\ {\epsilon}_{32} \\ {\epsilon}_{31} \end{Bmatrix} $$Due to the symmetries of the stiffness and strain tensors ($C_{ijkl}=C_{ijlk}$, ${\epsilon}_{ij}={\epsilon}_{ji}$), the expression above can be simplified by removing the last three columns of $C_{ijkl}$:
$$ \begin{Bmatrix} {\sigma}_{11} \\ {\sigma}_{22} \\ {\sigma}_{33} \\ {\sigma}_{12} \\ {\sigma}_{23} \\ {\sigma}_{13} \\ {\sigma}_{21} \\ {\sigma}_{32} \\ {\sigma}_{31} \end{Bmatrix} = \begin{bmatrix} C_{1111} & C_{1122} & C_{1133} & C_{1112} & C_{1123} & C_{1113} \\ C_{2211} & C_{2222} & C_{2233} & C_{2212} & C_{2223} & C_{2213} \\ C_{3311} & C_{3322} & C_{3333} & C_{3312} & C_{3323} & C_{3313} \\ C_{1211} & C_{1222} & C_{1233} & C_{1212} & C_{1223} & C_{1213} \\ C_{2311} & C_{2322} & C_{2333} & C_{2312} & C_{2323} & C_{2313} \\ C_{1311} & C_{1322} & C_{1333} & C_{1312} & C_{1323} & C_{1313} \\ C_{2111} & C_{2122} & C_{2133} & C_{2212} & C_{2123} & C_{2213} \\ C_{3211} & C_{3222} & C_{3233} & C_{3212} & C_{3223} & C_{3213} \\ C_{3111} & C_{3122} & C_{3133} & C_{3112} & C_{3123} & C_{3113} \end{bmatrix} \begin{Bmatrix} {\epsilon}_{11} \\ {\epsilon}_{22} \\ {\epsilon}_{33} \\ 2{\epsilon}_{12} \\ 2{\epsilon}_{23} \\ 2{\epsilon}_{13} \end{Bmatrix} $$Considering the symmetry of the stress tensor (${\sigma}_{ij}={\sigma}_{ji}$) and the major symmetry of $C_{ijkl}$ ($C_{ijkl}=C_{klij}$), the final three rows of $C_{ijkl}$ may also be ommitted, resulting in the symmetric form
$$ \begin{Bmatrix} {\sigma}_{11} \\ {\sigma}_{22} \\ {\sigma}_{33} \\ {\sigma}_{12} \\ {\sigma}_{23} \\ {\sigma}_{13} \end{Bmatrix} = \begin{bmatrix} C_{1111} & C_{1122} & C_{1133} & C_{1112} & C_{1123} & C_{1113} \\ & C_{2222} & C_{2233} & C_{2212} & C_{2223} & C_{2213} \\ & & C_{3333} & C_{3312} & C_{3323} & C_{3313} \\ & & & C_{1212} & C_{1223} & C_{1213} \\ & & & & C_{2323} & C_{2313} \\ \text{symm}& & & & & C_{1313} \\ \end{bmatrix} \begin{Bmatrix} {\epsilon}_{11} \\ {\epsilon}_{22} \\ {\epsilon}_{33} \\ 2{\epsilon}_{12} \\ 2{\epsilon}_{23} \\ 2{\epsilon}_{13} \end{Bmatrix} $$Letting $\{{\sigma}_{1},{\sigma}_{2},{\sigma}_{3}, {\sigma}_{4}, {\sigma}_{5}, {\sigma}_{6}\}= \{{\sigma}_{11},{\sigma}_{22},{\sigma}_{33}, {\sigma}_{12},{\sigma}_{23},{\sigma}_{13}\}$ and $\{{\epsilon}_{1},{\epsilon}_{2},{\epsilon}_{3}, {\gamma}_4, {\gamma}_5, {\gamma}_6\}= \{{\epsilon}_{11},{\epsilon}_{22},{\epsilon}_{33},2{\epsilon}_{12},2{\epsilon}_{23},2{\epsilon}_{13}\}$, the above stress-strain relationship is
$$ \begin{Bmatrix} {\sigma}_{1} \\ {\sigma}_{2} \\ {\sigma}_{3} \\ {\sigma}_{4} \\ {\sigma}_{5} \\ {\sigma}_{6} \end{Bmatrix} = \begin{bmatrix} C_{11} & C_{12} & C_{13} & C_{14} & C_{15} & C_{16} \\ & C_{22} & C_{23} & C_{24} & C_{25} & C_{26} \\ & & C_{33} & C_{34} & C_{35} & C_{36} \\ & & & C_{44} & C_{45} & C_{46} \\ & & & & C_{55} & C_{56} \\ \text{symm} & & & & & C_{66} \\ \end{bmatrix} \begin{Bmatrix} {\epsilon}_{1} \\ {\epsilon}_{2} \\ {\epsilon}_{3} \\ {\gamma}_4 \\ {\gamma}_5 \\ {\gamma}_6 \end{Bmatrix} $$The strain components $\gamma_i$ are the so called engineering shear strain components. As expressed, the components of ${\epsilon}_{J}$ and ${\sigma}_{I}$ are first order tensors and $C_{IJ}$ is a second order tensor in $\mathbb{R}^{6}$, respectively.
The elastic material model is implemented in matmodlab2/materials/elastic2.py
as AnisotropicElasticMaterial
. It is a subclass of the base Material
class. The model defines the following (required) attribute and method
name
: name by which the model is referenced eval
: method the updates the material stateThe relevant input parameters from Matmodlab are:
stran
: the strain at the end of the time step. The definition of the strain depends on the user input kappa
for each stepThe model may be viewed by executing the next cell.
In [1]:
%pycat ../matmodlab2/materials/elastic2.py
In [2]:
%pylab inline
from matmodlab2 import *
Exercising the elastic model through a path of uniaxial stress using parameters corresponding to an isotropic stiffness tensor should result in the slope of axial stress vs. axial strain being equal to the input parameter E
.
Note: the input parameters to a standard material are given as a dictionary of name:value
pairs for each parameter. Parameters not specified are initialized to a value of zero.
In [3]:
# Standard elastic moduli
E, Nu = 10e6, .333
K = E / 3. / (1. - 2. * Nu)
G = E / 2. / (1. + Nu)
K3 = 3. * K
G2 = 2. * G
Lam = (K3 - G2) / 3.
p = {}
p['C11'] = p['C22'] = p['C33'] = Lam + G2
p['C12'] = p['C13'] = p['C23'] = Lam
p['C44'] = p['C55'] = p['C66'] = G
mps1 = MaterialPointSimulator('uelastic-std')
mps1.material = AnisotropicElasticMaterial(**p)
mps1.run_step('ESS', (.1, 0, 0), frames=50)
exx = mps1.df['E.XX']
sxx = mps1.df['S.XX']
i = where(exx > 0.)
E = sxx.iloc[i] / exx.iloc[i]
assert allclose(E, 10e6, atol=1e-3, rtol=1e-3)