39 const dealii::Tensor<2, dim, T> &strain,
40 dealii::Tensor<2, dim, T> &stress)
42 dealii::Tensor<1, voigt_tensor_size<dim>, T> sigma;
43 dealii::Tensor<1, voigt_tensor_size<dim>, T> epsilon;
45 if constexpr (dim == 3)
54 epsilon[xx_dir] = strain[xx_dir][xx_dir];
55 epsilon[yy_dir] = strain[yy_dir][yy_dir];
56 epsilon[zz_dir] = strain[zz_dir][zz_dir];
59 epsilon[yz_dir] = strain[yy_dir][zz_dir] + strain[zz_dir][yy_dir];
60 epsilon[xz_dir] = strain[xx_dir][zz_dir] + strain[zz_dir][xx_dir];
61 epsilon[xy_dir] = strain[xx_dir][yy_dir] + strain[yy_dir][xx_dir];
64 sigma = elasticity_tensor * epsilon;
66 stress[xx_dir][xx_dir] = sigma[xx_dir];
67 stress[yy_dir][yy_dir] = sigma[yy_dir];
68 stress[zz_dir][zz_dir] = sigma[zz_dir];
70 stress[yy_dir][zz_dir] = sigma[yz_dir];
71 stress[zz_dir][yy_dir] = sigma[yz_dir];
73 stress[xx_dir][zz_dir] = sigma[xz_dir];
74 stress[zz_dir][xx_dir] = sigma[xz_dir];
76 stress[xx_dir][yy_dir] = sigma[xy_dir];
77 stress[yy_dir][xx_dir] = sigma[xy_dir];
79 else if constexpr (dim == 2)
85 epsilon[xx_dir] = strain[xx_dir][xx_dir];
86 epsilon[yy_dir] = strain[yy_dir][yy_dir];
89 epsilon[xy_dir] = strain[xx_dir][yy_dir] + strain[yy_dir][xx_dir];
92 sigma = elasticity_tensor * epsilon;
94 stress[xx_dir][xx_dir] = sigma[xx_dir];
95 stress[yy_dir][yy_dir] = sigma[yy_dir];
96 stress[xx_dir][yy_dir] = sigma[xy_dir];
97 stress[yy_dir][xx_dir] = sigma[xy_dir];
101 const int xx_dir = 0;
103 stress[xx_dir][xx_dir] =
104 elasticity_tensor[xx_dir][xx_dir] * strain[xx_dir][xx_dir];