15 return v(0) *
v(1) *
v(2) +
v(3) *
v(4) *
v(5) / std::sqrt(2.) -
16 v(3) *
v(3) *
v(2) / 2. -
v(4) *
v(4) *
v(0) / 2. -
17 v(5) *
v(5) *
v(1) / 2.;
23 return v(2) * (
v(0) *
v(1) -
v(3) *
v(3) / 2.);
27Eigen::Matrix<double, 4, 1, Eigen::ColMajor, 4, 1>
inverse(
28 Eigen::Matrix<double, 4, 1, Eigen::ColMajor, 4, 1>
const&
v)
32 Eigen::Matrix<double, 4, 1, Eigen::ColMajor, 4, 1> inv;
35 inv(2) =
v(0) *
v(1) -
v(3) *
v(3) / 2.;
36 inv(3) = -
v(3) *
v(2);
41Eigen::Matrix<double, 6, 1, Eigen::ColMajor, 6, 1>
inverse(
42 Eigen::Matrix<double, 6, 1, Eigen::ColMajor, 6, 1>
const&
v)
46 Eigen::Matrix<double, 6, 1, Eigen::ColMajor, 6, 1> inv;
47 inv(0) =
v(1) *
v(2) -
v(4) *
v(4) / 2.;
48 inv(1) =
v(0) *
v(2) -
v(5) *
v(5) / 2.;
49 inv(2) =
v(0) *
v(1) -
v(3) *
v(3) / 2.;
50 inv(3) =
v(4) *
v(5) / std::sqrt(2.) -
v(3) *
v(2);
51 inv(4) =
v(3) *
v(5) / std::sqrt(2.) -
v(4) *
v(0);
52 inv(5) =
v(4) *
v(3) / std::sqrt(2.) -
v(1) *
v(5);
58 Eigen::Matrix<double, 4, 1, Eigen::ColMajor, 4, 1>
const&
v)
60 Eigen::Matrix<double, 3, 3> m;
61 m <<
v[0],
v[3] / std::sqrt(2.), 0,
v[3] / std::sqrt(2.),
v[1], 0, 0, 0,
68 Eigen::Matrix<double, 6, 1, Eigen::ColMajor, 6, 1>
const&
v)
70 Eigen::Matrix<double, 3, 3> m;
71 m <<
v[0],
v[3] / std::sqrt(2.),
v[5] / std::sqrt(2.),
v[3] / std::sqrt(2.),
72 v[1],
v[4] / std::sqrt(2.),
v[5] / std::sqrt(2.),
v[4] / std::sqrt(2.),
87 Eigen::Matrix<double, 4, 1, Eigen::ColMajor, 4, 1> v4;
88 v4 <<
v[0],
v[1],
v[2],
v[3];
93 Eigen::Matrix<double, 6, 1, Eigen::ColMajor, 6, 1> v6;
94 v6 <<
v[0],
v[1],
v[2],
v[3],
v[4],
v[5];
98 "Conversion of dynamic Kelvin vector of size {:d} to a tensor is not "
99 "possible. Kelvin vector must be of size 4 or 6.",
106 assert(std::abs(m(0, 1) - m(1, 0)) <
107 std::numeric_limits<double>::epsilon());
108 assert(m(0, 2) == 0);
109 assert(m(1, 2) == 0);
110 assert(m(2, 0) == 0);
111 assert(m(2, 1) == 0);
114 v << m(0, 0), m(1, 1), m(2, 2), m(0, 1) * std::sqrt(2.);
121 assert(std::abs(m(0, 1) - m(1, 0)) <
122 std::numeric_limits<double>::epsilon());
123 assert(std::abs(m(1, 2) - m(2, 1)) <
124 std::numeric_limits<double>::epsilon());
125 assert(std::abs(m(0, 2) - m(2, 0)) <
126 std::numeric_limits<double>::epsilon());
129 v << m(0, 0), m(1, 1), m(2, 2), m(0, 1) * std::sqrt(2.),
130 m(1, 2) * std::sqrt(2.), m(0, 2) * std::sqrt(2.);
136 Eigen::Matrix<double, 4, 1, Eigen::ColMajor, 4, 1>
const&
v)
138 Eigen::Matrix<double, 4, 1> m;
139 m <<
v[0],
v[1],
v[2],
v[3] / std::sqrt(2.);
145 Eigen::Matrix<double, 6, 1, Eigen::ColMajor, 6, 1>
const&
v)
147 Eigen::Matrix<double, 6, 1> m;
148 m <<
v[0],
v[1],
v[2],
v[3] / std::sqrt(2.),
v[4] / std::sqrt(2.),
149 v[5] / std::sqrt(2.);
154Eigen::Matrix<double, Eigen::Dynamic, 1, Eigen::ColMajor, Eigen::Dynamic, 1>
171 "Kelvin vector to tensor conversion expected an input vector of size 4 "
172 "or 6, but a vector of size {:d} was given.",
178 Eigen::Matrix<double, 2, 1>
const&
v)
180 Eigen::Matrix<double, 2, 4> m;
181 m <<
v[0], 0, 0,
v[1] / std::sqrt(2.), 0,
v[1], 0,
v[0] / std::sqrt(2.);
187 Eigen::Matrix<double, 3, 1>
const&
v)
189 Eigen::Matrix<double, 3, 6> m;
190 m <<
v[0], 0, 0,
v[1] / std::sqrt(2.), 0,
v[2] / std::sqrt(2.), 0,
v[1], 0,
191 v[0] / std::sqrt(2.),
v[2] / std::sqrt(2.), 0, 0, 0,
v[2], 0,
192 v[1] / std::sqrt(2.),
v[0] / std::sqrt(2.);
198 Eigen::Matrix<double, 2, 4>
const& m)
200 assert(m(0, 1) == 0);
201 assert(m(0, 2) == 0);
202 assert(m(1, 0) == 0);
203 assert(m(1, 2) == 0);
204 Eigen::Matrix<double, 2, 1>
v;
205 v << m(0, 0), m(1, 1);
211 Eigen::Matrix<double, 3, 6>
const& m)
213 assert(m(0, 1) == 0);
214 assert(m(0, 2) == 0);
215 assert(m(0, 4) == 0);
216 assert(m(1, 0) == 0);
217 assert(m(1, 2) == 0);
218 assert(m(1, 5) == 0);
219 assert(m(2, 0) == 0);
220 assert(m(2, 1) == 0);
221 assert(m(2, 3) == 0);
222 assert(std::abs(m(0, 3) - m(2, 4)) <
223 std::numeric_limits<double>::epsilon());
224 assert(std::abs(m(0, 5) - m(1, 4)) <
225 std::numeric_limits<double>::epsilon());
226 assert(std::abs(m(1, 3) - m(2, 5)) <
227 std::numeric_limits<double>::epsilon());
228 Eigen::Matrix<double, 3, 1>
v;
229 v << m(0, 0), m(1, 1), m(2, 2);
235 Eigen::Matrix<double, 2, 2, Eigen::ColMajor, 2, 2>
const& transformation)
238 auto Q = [&](
int const i,
int const j)
239 {
return transformation(i - 1, j - 1); };
242 R << Q(1, 1) * Q(1, 1), Q(1, 2) * Q(1, 2), 0,
243 std::sqrt(2) * Q(1, 1) * Q(1, 2), Q(2, 1) * Q(2, 1), Q(2, 2) * Q(2, 2),
244 0, std::sqrt(2) * Q(2, 1) * Q(2, 2), 0, 0, 1, 0,
245 std::sqrt(2) * Q(1, 1) * Q(2, 1), std::sqrt(2) * Q(1, 2) * Q(2, 2), 0,
246 Q(1, 1) * Q(2, 2) + Q(1, 2) * Q(2, 1);
252 Eigen::Matrix<double, 3, 3, Eigen::ColMajor, 3, 3>
const& transformation)
255 auto Q = [&](
int const i,
int const j)
256 {
return transformation(i - 1, j - 1); };
259 R << Q(1, 1) * Q(1, 1), Q(1, 2) * Q(1, 2), Q(1, 3) * Q(1, 3),
260 std::sqrt(2) * Q(1, 1) * Q(1, 2), std::sqrt(2) * Q(1, 2) * Q(1, 3),
261 std::sqrt(2) * Q(1, 1) * Q(1, 3), Q(2, 1) * Q(2, 1), Q(2, 2) * Q(2, 2),
262 Q(2, 3) * Q(2, 3), std::sqrt(2) * Q(2, 1) * Q(2, 2),
263 std::sqrt(2) * Q(2, 2) * Q(2, 3), std::sqrt(2) * Q(2, 1) * Q(2, 3),
264 Q(3, 1) * Q(3, 1), Q(3, 2) * Q(3, 2), Q(3, 3) * Q(3, 3),
265 std::sqrt(2) * Q(3, 1) * Q(3, 2), std::sqrt(2) * Q(3, 2) * Q(3, 3),
266 std::sqrt(2) * Q(3, 1) * Q(3, 3), std::sqrt(2) * Q(1, 1) * Q(2, 1),
267 std::sqrt(2) * Q(1, 2) * Q(2, 2), std::sqrt(2) * Q(1, 3) * Q(2, 3),
268 Q(1, 1) * Q(2, 2) + Q(1, 2) * Q(2, 1),
269 Q(1, 2) * Q(2, 3) + Q(1, 3) * Q(2, 2),
270 Q(1, 1) * Q(2, 3) + Q(1, 3) * Q(2, 1), std::sqrt(2) * Q(2, 1) * Q(3, 1),
271 std::sqrt(2) * Q(2, 2) * Q(3, 2), std::sqrt(2) * Q(2, 3) * Q(3, 3),
272 Q(2, 1) * Q(3, 2) + Q(2, 2) * Q(3, 1),
273 Q(2, 2) * Q(3, 3) + Q(2, 3) * Q(3, 2),
274 Q(2, 1) * Q(3, 3) + Q(2, 3) * Q(3, 1), std::sqrt(2) * Q(1, 1) * Q(3, 1),
275 std::sqrt(2) * Q(1, 2) * Q(3, 2), std::sqrt(2) * Q(1, 3) * Q(3, 3),
276 Q(1, 1) * Q(3, 2) + Q(1, 2) * Q(3, 1),
277 Q(1, 2) * Q(3, 3) + Q(1, 3) * Q(3, 2),
278 Q(1, 1) * Q(3, 3) + Q(1, 3) * Q(3, 1);
KelvinMatrixType< 3 > fourthOrderRotationMatrix< 3 >(Eigen::Matrix< double, 3, 3, Eigen::ColMajor, 3, 3 > const &transformation)
Eigen::Matrix< double, 4, 1 > kelvinVectorToSymmetricTensor(Eigen::Matrix< double, 4, 1, Eigen::ColMajor, 4, 1 > const &v)
KelvinVectorType< 2 > tensorToKelvin< 2 >(Eigen::Matrix< double, 3, 3 > const &m)
Eigen::Matrix< double, kelvin_vector_dimensions(DisplacementDim), 1, Eigen::ColMajor > KelvinVectorType
Eigen::Matrix< double, 2, 4 > liftVectorToKelvin< 2 >(Eigen::Matrix< double, 2, 1 > const &v)
Eigen::Matrix< double, 2, 1 > reduceKelvinToVector< 2 >(Eigen::Matrix< double, 2, 4 > const &m)
Eigen::Matrix< double, 3, 3 > kelvinVectorToTensor(Eigen::Matrix< double, 4, 1, Eigen::ColMajor, 4, 1 > const &v)
Eigen::Matrix< double, 3, 6 > liftVectorToKelvin< 3 >(Eigen::Matrix< double, 3, 1 > const &v)
KelvinMatrixType< 2 > fourthOrderRotationMatrix< 2 >(Eigen::Matrix< double, 2, 2, Eigen::ColMajor, 2, 2 > const &transformation)
Eigen::Matrix< double, kelvin_vector_dimensions(DisplacementDim), kelvin_vector_dimensions(DisplacementDim), Eigen::RowMajor > KelvinMatrixType
KelvinVectorType< 3 > tensorToKelvin< 3 >(Eigen::Matrix< double, 3, 3 > const &m)
Eigen::Matrix< double, 4, 1, Eigen::ColMajor, 4, 1 > inverse(Eigen::Matrix< double, 4, 1, Eigen::ColMajor, 4, 1 > const &v)
Eigen::Matrix< double, 3, 1 > reduceKelvinToVector< 3 >(Eigen::Matrix< double, 3, 6 > const &m)
static double determinant(Eigen::Matrix< double, KelvinVectorSize, 1 > const &v)
Determinant of a matrix in Kelvin vector representation.