40 Eigen::MatrixXd& eigenvectors)
43 scalarField eigenValues(eigenvalues.size());
45 for (label i = 0; i < eigenvalues.size(); i++)
47 eigenValues[i] = eigenvalues(i);
50 sortedOrder(eigenValues, order);
51 scalarField eigenValues2(eigenValues);
53 for (label i = 0; i < order.size(); i++)
55 eigenvalues(i) = eigenValues[order[order.size() - i - 1]];
58 Eigen::MatrixXd eigenvectors2 = eigenvectors;
60 for (label i = 0; i < eigenvalues.size(); i++)
62 for (label k = 0; k < eigenvalues.size(); k++)
64 eigenvectors2(i, k) = eigenvectors(k, order[order.size() - i - 1]);
68 eigenvectors = eigenvectors2;
72Eigen::VectorXd
ExpSpaced(
double first,
double last,
int n)
74 Eigen::VectorXd vector(n);
75 double m = (double) 1 / (n * 1.0 - 1);
76 double quotient = std::pow(last / first, m);
79 for (
int i = 1; i < n; i++)
81 vector(i) = vector(i - 1) * quotient;
88Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>
91 const Eigen::Tensor<T, 3 >& c,
92 const Eigen::Matrix<T, Eigen::Dynamic, 1>& a)
94 int prodDim = c.dimension(0);
95 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> prod;
96 prod.resize(prodDim, 1);
98 for (
int i = 0; i < prodDim; i++)
100 prod(i, 0) = g.transpose() *
101 SliceFromTensor(c, 0, i) * a;
107template Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>
109 const Eigen::Matrix<double, Eigen::Dynamic, 1>& g,
110 const Eigen::Tensor<double, 3 >& c,
111 const Eigen::Matrix<double, Eigen::Dynamic, 1>& a);
113template Eigen::Matrix<int, Eigen::Dynamic, Eigen::Dynamic>
115 const Eigen::Matrix<int, Eigen::Dynamic, 1>& g,
116 const Eigen::Tensor<int, 3 >& c,
117 const Eigen::Matrix<int, Eigen::Dynamic, 1>& a);
119template Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic>
121 const Eigen::Matrix<float, Eigen::Dynamic, 1>& g,
122 const Eigen::Tensor<float, 3 >& c,
123 const Eigen::Matrix<float, Eigen::Dynamic, 1>& a);
129 Info <<
"The integer for the EigenFunctions::repeat method must be positive. Aborting" << endl;
134 Eigen::VectorXd output(input.size() * n);
135 for (
int i = 0; i < input.size(); i++)
137 for (
int r = 0; r < n; r++)
139 output(i * n + r) = input(i);
148 if ((input.size() % dim) != 0)
150 Info <<
"EigenFunctions::reorderVectorFromDim has incompatible vector size " <<
151 "and reordering dimension. Aborting" << endl;
156 Eigen::VectorXd output(input.size());
157 int n = int(input.size() / dim);
158 for (
int i = 0; i < n; i++)
160 for (
int d = 0; d < dim; d++)
162 output(i * dim + d) = input(i + d * dim);
Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > vectorTensorProduct(const Eigen::Matrix< T, Eigen::Dynamic, 1 > &g, const Eigen::Tensor< T, 3 > &c, const Eigen::Matrix< T, Eigen::Dynamic, 1 > &a)
A function that computes the product of g.T c a, where c is a third dim tensor.