114 const unsigned int dim = dim_x + dim_v;
115 const unsigned int points = degree + 1;
117 this->dofs_per_cell = dealii::Utilities::pow(points, dim);
118 this->dofs_per_face = dealii::Utilities::pow(points, dim - 1);
120 const unsigned int dofs_per_component_on_face =
121 dealii::Utilities::pow(points, dim - 1);
123 face_to_cell_index_nodal.resize(
124 dealii::GeometryInfo<dim>::faces_per_cell);
126 dealii::Table<2, unsigned int> face_to_cell_index_nodal_x;
127 dealii::Table<2, unsigned int> face_to_cell_index_nodal_v;
129 fill_face_to_cell_index_nodal<dim_x>(points,
130 face_to_cell_index_nodal_x);
131 fill_face_to_cell_index_nodal<dim_v>(points,
132 face_to_cell_index_nodal_v);
134 for (
unsigned int surface = 0;
135 surface < dealii::GeometryInfo<dim>::faces_per_cell;
138 face_to_cell_index_nodal[surface].resize(
139 dofs_per_component_on_face);
141 if (surface < dim_x * 2)
142 for (
unsigned int i = 0, k = 0;
143 i < dealii::Utilities::pow(points, dim_v);
145 for (
unsigned int j = 0;
146 j < dealii::Utilities::pow(points, dim_x - 1);
148 face_to_cell_index_nodal[surface][k++] =
149 face_to_cell_index_nodal_x(surface, j) +
150 dealii::Utilities::pow(points, dim_x) * i;
152 for (
unsigned int i = 0, k = 0;
153 i < dealii::Utilities::pow(points, dim_v - 1);
155 for (
unsigned int j = 0;
156 j < dealii::Utilities::pow(points, dim_x);
158 face_to_cell_index_nodal[surface][k++] =
159 j + dealii::Utilities::pow(points, dim_x) *
160 face_to_cell_index_nodal_v(surface - 2 * dim_x, i);
164 if (dim_x == 3 || dim_v == 3)
166 const unsigned int n = degree + 1;
168 face_orientations.resize( 16, std::vector<unsigned int>(this->dofs_per_face));
172 for (
unsigned int i = 0, c = 0; i < dealii::Utilities::pow(points, dim_v); ++i)
173 for (
unsigned int j = 0; j < n; ++j)
174 for (
unsigned int k = 0; k < n; ++k, ++c)
177 face_orientations[0][c] = c;
179 face_orientations[1][c] = j + k * n + i * dealii::Utilities::pow(points, 2);
181 face_orientations[2][c] = (n - 1 - k) + (n - 1 - j) * n + i * dealii::Utilities::pow(points, 2);
183 face_orientations[3][c] = (n - 1 - j) + (n - 1 - k) * n + i * dealii::Utilities::pow(points, 2);
185 face_orientations[4][c] = j + (n - 1 - k) * n + i * dealii::Utilities::pow(points, 2);
187 face_orientations[5][c] = k + (n - 1 - j) * n + i * dealii::Utilities::pow(points, 2);
189 face_orientations[6][c] = (n - 1 - j) + k * n + i * dealii::Utilities::pow(points, 2);
191 face_orientations[7][c] = (n - 1 - k) + j * n + i * dealii::Utilities::pow(points, 2);
194 for (
unsigned int c = 0; c < dealii::Utilities::pow(points, dim - 1); ++c)
195 for (
unsigned int i = 0; i < 8; ++i)
196 face_orientations[i][c] = c;
200 for (
unsigned int j = 0, c = 0; j < n; ++j)
201 for (
unsigned int k = 0; k < n; ++k)
202 for (
unsigned int i = 0; i < dealii::Utilities::pow(points, dim_x); ++i, ++c)
205 face_orientations[8][c] = c;
207 face_orientations[9][c] = (j + k * n) * dealii::Utilities::pow(points, dim_x) + i;
209 face_orientations[10][c] = ((n - 1 - k) + (n - 1 - j) * n) * dealii::Utilities::pow(points, dim_x) + i;
211 face_orientations[11][c] = ((n - 1 - j) + (n - 1 - k) * n) * dealii::Utilities::pow(points, dim_x) + i;
213 face_orientations[12][c] = (j + (n - 1 - k) * n) * dealii::Utilities::pow(points, dim_x) + i;
215 face_orientations[13][c] = (k + (n - 1 - j) * n) * dealii::Utilities::pow(points, dim_x) + i;
217 face_orientations[14][c] = ((n - 1 - j) + k * n) * dealii::Utilities::pow(points, dim_x) + i;
219 face_orientations[15][c] = ((n - 1 - k) + j * n) * dealii::Utilities::pow(points, dim_x) + i;
222 for (
unsigned int c = 0; c < dealii::Utilities::pow(points, dim - 1); ++c)
223 for (
unsigned int i = 8; i < 16; ++i)
224 face_orientations[i][c] = c;
228 face_to_cell_index_nodal.resize(16, std::vector<unsigned int>(1));