86 const std::vector<unsigned int> &renumber =
94 this->n_dofs_per_cell());
101 const unsigned int n_pols = polynomials.
n() / dim;
102 for (
unsigned int k = 0; k < (dim > 2 ?
degree + 2 : 1); ++k)
103 for (
unsigned int j = 0; j < (dim > 1 ?
degree + 2 : 1); ++j)
104 for (
unsigned int i = 0; i <
degree + 1; ++i)
107 [renumber[(k * (
degree + 2) + j) * (
degree + 1) + i]][0] =
108 (
degree == 0 ? gauss.point(i)[0] : gl.point(i)[0]);
111 [renumber[(k * (
degree + 2) + j) * (
degree + 1) + i]][1] =
115 [renumber[(k * (
degree + 2) + j) * (
degree + 1) + i]][2] =
119 for (
unsigned int k = 0; k < (dim > 2 ?
degree + 2 : 1); ++k)
120 for (
unsigned int j = 0; j <
degree + 1; ++j)
121 for (
unsigned int i = 0; i <
degree + 2; ++i)
124 [renumber[n_pols + (k * (
degree + 1) + j) * (
degree + 2) + i]]
125 [0] = gl.point(i)[0];
127 [renumber[n_pols + (k * (
degree + 1) + j) * (
degree + 2) + i]]
128 [1] = (
degree == 0 ? gauss.point(j)[0] : gl.point(j)[0]);
131 [renumber[n_pols + (k * (
degree + 1) + j) * (
degree + 2) + i]]
132 [2] = gl.point(k)[0];
135 for (
unsigned int k = 0; k <
degree + 1; ++k)
136 for (
unsigned int j = 0; j <
degree + 2; ++j)
137 for (
unsigned int i = 0; i <
degree + 2; ++i)
140 [renumber[2 * n_pols + (k * (
degree + 2) + j) * (
degree + 2) + i]]
141 [0] = gl.point(i)[0];
143 [renumber[2 * n_pols + (k * (
degree + 2) + j) * (
degree + 2) + i]]
144 [1] = gl.point(j)[0];
146 [renumber[2 * n_pols + (k * (
degree + 2) + j) * (
degree + 2) + i]]
147 [2] = (
degree == 0 ? gauss.point(k)[0] : gl.point(k)[0]);
179 std::vector<double> &nodal_values)
const
181 Assert(support_point_values.size() == this->generalized_support_points.size(),
183 this->generalized_support_points.size()));
184 Assert(nodal_values.size() == this->n_dofs_per_cell(),
192 unsigned int base = 0;
193 for (
unsigned int l = 0; l < GeometryInfo<dim>::lines_per_cell;
198 nodal_values[base + i] =
199 support_point_values[base + i](l < 8 ? ((l % 4) / 2) ^ 1 : 2);
205 std::vector<unsigned int> componentFreq(dim,
207 unsigned int index = -1;
208 for (
unsigned int f = 0; f < GeometryInfo<dim>::faces_per_cell; ++f)
211 componentFreq[index] = 0;
212 for (
unsigned int compInd = 0; compInd < dim; ++compInd)
214 for (
unsigned int compQuant = 0;
215 compQuant < componentFreq[compInd];
218 nodal_values[base + compQuant] =
219 support_point_values[base + compQuant](compInd);
221 base += componentFreq[compInd];
233 for (
unsigned int i = 0; i < istep; ++i)
235 nodal_values[base + i] = support_point_values[base + i](f);
248 const unsigned int degree)
const
250 const unsigned int n_dofs_edges =
252 const unsigned int n_dofs_faces_3D = 2 * 6 * (
degree * (
degree + 1));
253 const unsigned n_dofs_per_component_face =
degree * (
degree + 1);
254 const unsigned int n_dofs_D_1 =
255 (dim == 2) ? n_dofs_edges : n_dofs_edges + n_dofs_faces_3D;
256 std::vector<unsigned int> lexicographic_renumbering(
259 unsigned int ind_lex_numbering = 0;
262 for (
unsigned int i = 2 * (
degree + 1); i < 3 * (
degree + 1); ++i)
263 lexicographic_renumbering[ind_lex_numbering++] = i;
264 const unsigned int n_dofs_before =
265 n_dofs_edges + ((dim == 3) ? 8 * n_dofs_per_component_face : 0);
266 for (
unsigned int i = n_dofs_before;
267 i < n_dofs_before + n_dofs_per_component_face;
269 lexicographic_renumbering[ind_lex_numbering++] = i;
270 for (
unsigned int i = 3 * (
degree + 1); i < 4 * (
degree + 1); ++i)
271 lexicographic_renumbering[ind_lex_numbering++] = i;
274 for (
unsigned int i = 0; i <
degree; ++i)
276 for (
unsigned int j = 0; j <
degree + 1; ++j)
277 lexicographic_renumbering[ind_lex_numbering++] =
278 n_dofs_edges + 4 * n_dofs_per_component_face + i * (
degree + 1) +
280 for (
unsigned int j = 0; j < n_dofs_per_component_face; ++j)
281 lexicographic_renumbering[ind_lex_numbering++] =
282 n_dofs_D_1 + i * n_dofs_per_component_face + j;
283 for (
unsigned int j = 0; j <
degree + 1; ++j)
284 lexicographic_renumbering[ind_lex_numbering++] =
285 n_dofs_edges + 6 * n_dofs_per_component_face + i * (
degree + 1) +
288 for (
unsigned int i = 6 * (
degree + 1); i < 7 * (
degree + 1); ++i)
289 lexicographic_renumbering[ind_lex_numbering++] = i;
290 for (
unsigned int i = n_dofs_edges + 10 * n_dofs_per_component_face;
291 i < n_dofs_edges + 11 * n_dofs_per_component_face;
293 lexicographic_renumbering[ind_lex_numbering++] = i;
294 for (
unsigned int i = 7 * (
degree + 1); i < 8 * (
degree + 1); ++i)
295 lexicographic_renumbering[ind_lex_numbering++] = i;
299 unsigned int n_dofs_faces_before =
300 n_dofs_edges + ((dim == 3) ? 9 : 1) * n_dofs_per_component_face;
301 for (
unsigned int i = 0; i <
degree + 1; ++i)
303 lexicographic_renumbering[ind_lex_numbering++] = i;
304 for (
unsigned int j = n_dofs_faces_before + i *
degree;
305 j < n_dofs_faces_before + (i + 1) *
degree;
308 lexicographic_renumbering[ind_lex_numbering++] = j;
310 lexicographic_renumbering[ind_lex_numbering++] = (
degree + 1) + i;
315 for (
unsigned int i = 0; i < n_dofs_per_component_face; ++i)
317 lexicographic_renumbering[ind_lex_numbering++] = n_dofs_edges + i;
318 for (
unsigned int j = 0; j <
degree; j++)
320 lexicographic_renumbering[ind_lex_numbering++] =
321 n_dofs_D_1 + n_dofs_per_component_face *
degree + i *
degree +
324 lexicographic_renumbering[ind_lex_numbering++] =
325 n_dofs_edges + 2 * n_dofs_per_component_face + i;
327 unsigned int n_dofs_before = n_dofs_edges + 11 *
degree * (
degree + 1);
328 for (
unsigned int i = 0; i <
degree + 1; i++)
330 lexicographic_renumbering[ind_lex_numbering++] = 4 * (
degree + 1) + i;
331 for (
unsigned int j = 0; j <
degree; j++)
333 lexicographic_renumbering[ind_lex_numbering++] =
334 n_dofs_before + i *
degree + j;
336 lexicographic_renumbering[ind_lex_numbering++] = 5 * (
degree + 1) + i;
342 for (
unsigned int i = 0; i <
degree + 1; i++)
344 lexicographic_renumbering[ind_lex_numbering++] = 8 * (
degree + 1) + i;
345 unsigned int n_dofs_before =
346 n_dofs_edges + 5 * n_dofs_per_component_face;
347 for (
unsigned int j = 0; j <
degree; j++)
349 lexicographic_renumbering[ind_lex_numbering++] =
350 n_dofs_before + i *
degree + j;
352 lexicographic_renumbering[ind_lex_numbering++] = 9 * (
degree + 1) + i;
353 for (
unsigned int j = 0; j <
degree; ++j)
355 lexicographic_renumbering[ind_lex_numbering++] =
356 n_dofs_edges + n_dofs_per_component_face + i *
degree + j;
357 n_dofs_before = n_dofs_D_1 +
358 2 *
degree * n_dofs_per_component_face +
360 for (
unsigned int k = 0; k <
degree; k++)
362 lexicographic_renumbering[ind_lex_numbering++] =
365 lexicographic_renumbering[ind_lex_numbering++] =
366 n_dofs_edges + 3 * n_dofs_per_component_face + i *
degree + j;
368 lexicographic_renumbering[ind_lex_numbering++] =
370 for (
unsigned int j = 0; j <
degree; j++)
372 lexicographic_renumbering[ind_lex_numbering++] =
373 n_dofs_edges + 7 * n_dofs_per_component_face + i *
degree + j;
375 lexicographic_renumbering[ind_lex_numbering++] =
379 return lexicographic_renumbering;