42 const dealii::Tensor<2, dim, T> &strain,
43 dealii::Tensor<2, dim, T> &stress)
45 dealii::Tensor<1, voigt_tensor_size<dim>, T> sigma;
46 dealii::Tensor<1, voigt_tensor_size<dim>, T> epsilon;
48 if constexpr (dim == 3)
57 epsilon[xx_dir] = strain[xx_dir][xx_dir];
58 epsilon[yy_dir] = strain[yy_dir][yy_dir];
59 epsilon[zz_dir] = strain[zz_dir][zz_dir];
62 epsilon[yz_dir] = strain[yy_dir][zz_dir] + strain[zz_dir][yy_dir];
63 epsilon[xz_dir] = strain[xx_dir][zz_dir] + strain[zz_dir][xx_dir];
64 epsilon[xy_dir] = strain[xx_dir][yy_dir] + strain[yy_dir][xx_dir];
67 sigma = elasticity_tensor * epsilon;
69 stress[xx_dir][xx_dir] = sigma[xx_dir];
70 stress[yy_dir][yy_dir] = sigma[yy_dir];
71 stress[zz_dir][zz_dir] = sigma[zz_dir];
73 stress[yy_dir][zz_dir] = sigma[yz_dir];
74 stress[zz_dir][yy_dir] = sigma[yz_dir];
76 stress[xx_dir][zz_dir] = sigma[xz_dir];
77 stress[zz_dir][xx_dir] = sigma[xz_dir];
79 stress[xx_dir][yy_dir] = sigma[xy_dir];
80 stress[yy_dir][xx_dir] = sigma[xy_dir];
82 else if constexpr (dim == 2)
88 epsilon[xx_dir] = strain[xx_dir][xx_dir];
89 epsilon[yy_dir] = strain[yy_dir][yy_dir];
92 epsilon[xy_dir] = strain[xx_dir][yy_dir] + strain[yy_dir][xx_dir];
95 sigma = elasticity_tensor * epsilon;
97 stress[xx_dir][xx_dir] = sigma[xx_dir];
98 stress[yy_dir][yy_dir] = sigma[yy_dir];
99 stress[xx_dir][yy_dir] = sigma[xy_dir];
100 stress[yy_dir][xx_dir] = sigma[xy_dir];
104 const int xx_dir = 0;
106 stress[xx_dir][xx_dir] =
107 elasticity_tensor[xx_dir][xx_dir] * strain[xx_dir][xx_dir];