47 int manifold_size = 2 * angular_momentum + 1;
48 std::vector<Real> rotation_matrix(
static_cast<size_t>(manifold_size) * manifold_size, 0.0);
53 for (
const auto& point : angular_grid) {
54 Vector3D direction{point.
x, point.y, point.z};
56 for (
int row = 0; row < 3; row++)
57 for (
int column = 0; column < 3; column++)
58 rotated[row] += cartesian_rotation[row][column] * direction[column];
60 for (
int m = 0; m < manifold_size; m++) {
61 Real rotated_harmonic =
63 for (
int m_prime = 0; m_prime < manifold_size; m_prime++) {
66 rotation_matrix[
static_cast<size_t>(m) * manifold_size + m_prime] +=
67 point.weight * rotated_harmonic * harmonic;
71 return rotation_matrix;
89 for (
int row = 0; row < 3; row++) {
90 for (
int column = 0; column < 3; column++) {
91 Real accumulated = 0.0;
92 for (
int first = 0; first < 3; first++)
93 for (
int second = 0; second < 3; second++)
94 accumulated += direct[first][row] *
96 reciprocal[second][column];
97 cartesian[row][column] = accumulated;