OGS
TransposeInPlace.h
Go to the documentation of this file.
1
10#pragma once
11
12#include <vector>
13
15
16namespace ProcessLib
17{
22template <int Components, typename StoreValuesFunction>
23std::vector<double> transposeInPlace(
24 StoreValuesFunction const& store_values_function)
25{
26 std::vector<double> result;
27 store_values_function(result);
29 Eigen::Matrix<double, Eigen::Dynamic, Components, Eigen::RowMajor>>(
30 result, result.size() / Components, Components) =
32 Eigen::Matrix<double, Components, Eigen::Dynamic, Eigen::RowMajor>>(
33 result, Components, result.size() / Components)
34 .transpose()
35 .eval();
36
37 return result;
38}
39
40template <int Components>
41void transposeInPlace(std::vector<double>& values)
42{
44 Eigen::Matrix<double, Eigen::Dynamic, Components, Eigen::RowMajor>>(
45 values, values.size() / Components, Components) =
47 Eigen::Matrix<double, Components, Eigen::Dynamic, Eigen::RowMajor>>(
48 values, Components, values.size() / Components)
49 .transpose()
50 .eval();
51}
52
53inline void transposeInPlace(std::vector<double>& values,
54 unsigned const num_components)
55{
57 Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>>(
58 values, values.size() / num_components, num_components) =
59 MathLib::toMatrix<Eigen::Matrix<double,
60 Eigen::Dynamic,
61 Eigen::Dynamic,
62 Eigen::RowMajor>>(
63 values, num_components, values.size() / num_components)
64 .transpose()
65 .eval();
66}
67
68} // namespace ProcessLib
Eigen::Map< const Matrix > toMatrix(std::vector< double > const &data, Eigen::MatrixXd::Index rows, Eigen::MatrixXd::Index cols)
std::vector< double > transposeInPlace(StoreValuesFunction const &store_values_function)