21 t_diff_deviator(
i,
j,
k,
l) = t_diff_stress(
i,
j,
k,
l);
23 constexpr
double third = boost::math::constants::third<double>();
25 t_diff_deviator(0, 0, 0, 0) -=
third;
26 t_diff_deviator(0, 0, 1, 1) -=
third;
28 t_diff_deviator(1, 1, 0, 0) -=
third;
29 t_diff_deviator(1, 1, 1, 1) -=
third;
31 t_diff_deviator(2, 2, 0, 0) -=
third;
32 t_diff_deviator(2, 2, 1, 1) -=
third;
34 t_diff_deviator(0, 0, 2, 2) -=
third;
35 t_diff_deviator(1, 1, 2, 2) -=
third;
36 t_diff_deviator(2, 2, 2, 2) -=
third;
38 return t_diff_deviator;
41 constexpr
static auto size_symm = (3 * (3 + 1)) / 2;
78 t_diff(
i,
j,
k,
l) = 0;
79 t_diff(0, 0, 0, 0) = 1;
80 t_diff(1, 1, 1, 1) = 1;
82 t_diff(1, 0, 1, 0) = 0.5;
83 t_diff(1, 0, 0, 1) = 0.5;
85 t_diff(0, 1, 0, 1) = 0.5;
86 t_diff(0, 1, 1, 0) = 0.5;
89 t_diff(2, 2, 2, 2) = 1;
91 t_diff(2, 0, 2, 0) = 0.5;
92 t_diff(2, 0, 0, 2) = 0.5;
93 t_diff(0, 2, 0, 2) = 0.5;
94 t_diff(0, 2, 2, 0) = 0.5;
96 t_diff(2, 1, 2, 1) = 0.5;
97 t_diff(2, 1, 1, 2) = 0.5;
98 t_diff(1, 2, 1, 2) = 0.5;
99 t_diff(1, 2, 2, 1) = 0.5;
113 static inline auto check(
const double &
a,
const double &b) {
114 constexpr
double eps = std::numeric_limits<double>::epsilon();
120 inline auto is_eq(
const double &
a,
const double &b) {
125 std::array<double, DIM> tmp;
126 std::copy(ptr, &ptr[DIM], tmp.begin());
127 std::sort(tmp.begin(), tmp.end());
128 isEq::absMax = std::max(std::abs(tmp[0]), std::abs(tmp[DIM - 1]));
129 constexpr
double eps = std::numeric_limits<double>::epsilon();
131 return std::distance(tmp.begin(), std::unique(tmp.begin(), tmp.end(),
is_eq));
134 template <
typename A,
typename B>
137 constexpr
int dim = 3;
140 std::max(std::max(std::abs(eig(0)), std::abs(eig(1))), std::abs(eig(2)));
141 constexpr
double eps = std::numeric_limits<double>::epsilon();
144 int i = 0,
j = 1,
k = 2;
146 if (
is_eq(eig(0), eig(1))) {
150 }
else if (
is_eq(eig(0), eig(2))) {
154 }
else if (
is_eq(eig(1), eig(2))) {
161 eigen_vec(
i, 0), eigen_vec(
i, 1), eigen_vec(
i, 2),
163 eigen_vec(
j, 0), eigen_vec(
j, 1), eigen_vec(
j, 2),
165 eigen_vec(
k, 0), eigen_vec(
k, 1), eigen_vec(
k, 2)};
173 eigen_vec(
i,
j) = eigen_vec_c(
i,
j);