8#include <kernel/geometry/raw_refinement_templates.hpp>
9#include <kernel/geometry/refinement_types.hpp>
10#include <kernel/shape.hpp>
32 template<
typename Shape__>
62 template<
typename Shape_>
65 return std::is_same_v<Shape_, Shape::Quadrilateral> || std::is_same_v<Shape_, Shape::Hexahedron>;
78 template<
int template_dim_,
int child_dim_>
81 static_assert(template_dim_ <= 3);
82 static_assert(child_dim_ <= 3);
83 const constexpr std::array<std::array<int, 4>, 4> children = {{
89 return children[template_dim_][child_dim_];
100 if constexpr(dim_ == 1)
104 if constexpr(dim_ == 2)
108 if constexpr(dim_ == 3)
112 XABORTM(
"SchneidersData supplied no templates of dimension " +
stringify(dim_));
118 using V =
typename RawEdgeTemplate::VertexType;
128 RawEdgeTemplate().add_entity(V{0.0}, V{1.0 / 3.0}).add_entity(V{1.0 / 3.0}, V{1.0})});
132 RawEdgeTemplate().add_entity(V{0.0}, V{2.0 / 3.0}).add_entity(V{2.0 / 3.0}, V{1.0})});
137 .add_entity(V{0.0}, V{1.0 / 3.0})
138 .add_entity(V{1.0 / 3.0}, V{2.0 / 3.0})
139 .add_entity(V{2.0 / 3.0}, V{1.0})});
148 using V =
typename RawFaceTemplate::VertexType;
160 .add_entity(V{0.0, 1.0 / 3.0}, V{1.0 / 3.0, 1.0 / 3.0}, V{0.0, 1.0}, V{1.0, 1.0})
161 .add_entity(V{0.0, 0.0}, V{1.0 / 3.0, 0.0}, V{0.0, 1.0 / 3.0}, V{1.0 / 3.0, 1.0 / 3.0})
162 .add_entity(V{1.0 / 3.0, 0.0}, V{1.0, 0.0}, V{1.0 / 3.0, 1.0 / 3.0}, V{1.0, 1.0})});
167 .add_entity(V{1.0 / 3.0, 2.0 / 3.0}, V{2.0 / 3.0, 2.0 / 3.0}, V{0.0, 1.0}, V{1.0, 1.0})
168 .add_entity(V{0.0, 1.0 / 3.0}, V{1.0 / 3.0, 1.0 / 3.0}, V{0.0, 1.0}, V{1.0 / 3.0, 2.0 / 3.0})
170 V{1.0 / 3.0, 1.0 / 3.0},
171 V{2.0 / 3.0, 1.0 / 3.0},
172 V{1.0 / 3.0, 2.0 / 3.0},
173 V{2.0 / 3.0, 2.0 / 3.0})
174 .add_entity(V{2.0 / 3.0, 1.0 / 3.0}, V{1.0, 1.0 / 3.0}, V{2.0 / 3.0, 2.0 / 3.0}, V{1.0, 1.0})
175 .add_entity(V{0.0, 0.0}, V{1.0 / 3.0, 0.0}, V{0.0, 1.0 / 3.0}, V{1.0 / 3.0, 1.0 / 3.0})
176 .add_entity(V{1.0 / 3.0, 0.0}, V{2.0 / 3.0, 0.0}, V{1.0 / 3.0, 1.0 / 3.0}, V{2.0 / 3.0, 1.0 / 3.0})
177 .add_entity(V{2.0 / 3.0, 0.0}, V{1.0, 0.0}, V{2.0 / 3.0, 1.0 / 3.0}, V{1.0, 1.0 / 3.0})});
182 .add_entity(V{1.0 / 3.0, 2.0 / 3.0}, V{2.0 / 3.0, 2.0 / 3.0}, V{0.0, 1.0}, V{2.0 / 3.0, 1.0})
183 .add_entity(V{2.0 / 3.0, 2.0 / 3.0}, V{1.0, 2.0 / 3.0}, V{2.0 / 3.0, 1.0}, V{1.0, 1.0})
184 .add_entity(V{0.0, 1.0 / 3.0}, V{1.0 / 3.0, 1.0 / 3.0}, V{0.0, 1.0}, V{1.0 / 3.0, 2.0 / 3.0})
186 V{1.0 / 3.0, 1.0 / 3.0},
187 V{2.0 / 3.0, 1.0 / 3.0},
188 V{1.0 / 3.0, 2.0 / 3.0},
189 V{2.0 / 3.0, 2.0 / 3.0})
190 .add_entity(V{2.0 / 3.0, 1.0 / 3.0}, V{1.0, 0.0}, V{2.0 / 3.0, 2.0 / 3.0}, V{1.0, 2.0 / 3.0})
191 .add_entity(V{0.0, 0.0}, V{1.0 / 3.0, 0.0}, V{0.0, 1.0 / 3.0}, V{1.0 / 3.0, 1.0 / 3.0})
192 .add_entity(V{1.0 / 3.0, 0.0}, V{1.0, 0.0}, V{1.0 / 3.0, 1.0 / 3.0}, V{2.0 / 3.0, 1.0 / 3.0})});
196 .add_entity(V{1.0 / 3.0, 2.0 / 3.0}, V{2.0 / 3.0, 2.0 / 3.0}, V{0.0, 1.0}, V{2.0 / 3.0, 1.0})
197 .add_entity(V{2.0 / 3.0, 2.0 / 3.0}, V{1.0, 2.0 / 3.0}, V{2.0 / 3.0, 1.0}, V{1.0, 1.0})
198 .add_entity(V{0.0, 1.0 / 3.0}, V{1.0 / 3.0, 1.0 / 3.0}, V{0.0, 1.0}, V{1.0 / 3.0, 2.0 / 3.0})
200 V{1.0 / 3.0, 1.0 / 3.0},
201 V{2.0 / 3.0, 1.0 / 3.0},
202 V{1.0 / 3.0, 2.0 / 3.0},
203 V{2.0 / 3.0, 2.0 / 3.0})
204 .add_entity(V{2.0 / 3.0, 1.0 / 3.0}, V{1.0, 1.0 / 3.0}, V{2.0 / 3.0, 2.0 / 3.0}, V{1.0, 2.0 / 3.0})
205 .add_entity(V{0.0, 0.0}, V{1.0 / 3.0, 0.0}, V{0.0, 1.0 / 3.0}, V{1.0 / 3.0, 1.0 / 3.0})
206 .add_entity(V{1.0 / 3.0, 0.0}, V{2.0 / 3.0, 0.0}, V{1.0 / 3.0, 1.0 / 3.0}, V{2.0 / 3.0, 1.0 / 3.0})
207 .add_entity(V{2.0 / 3.0, 0.0}, V{1.0, 0.0}, V{2.0 / 3.0, 1.0 / 3.0}, V{1.0, 1.0 / 3.0})});
212 .add_entity(V{0.0, 2.0 / 3.0}, V{1.0 / 3.0, 2.0 / 3.0}, V{0.0, 1.0}, V{1.0 / 3.0, 1.0})
213 .add_entity(V{1.0 / 3.0, 2.0 / 3.0}, V{2.0 / 3.0, 2.0 / 3.0}, V{1.0 / 3.0, 1.0}, V{2.0 / 3.0, 1.0})
214 .add_entity(V{2.0 / 3.0, 2.0 / 3.0}, V{1.0, 2.0 / 3.0}, V{2.0 / 3.0, 1.0}, V{1.0, 1.0})
215 .add_entity(V{0.0, 1.0 / 3.0}, V{1.0 / 3.0, 1.0 / 3.0}, V{0.0, 2.0 / 3.0}, V{1.0 / 3.0, 2.0 / 3.0})
217 V{1.0 / 3.0, 1.0 / 3.0},
218 V{2.0 / 3.0, 1.0 / 3.0},
219 V{1.0 / 3.0, 2.0 / 3.0},
220 V{2.0 / 3.0, 2.0 / 3.0})
221 .add_entity(V{2.0 / 3.0, 1.0 / 3.0}, V{1.0, 1.0 / 3.0}, V{2.0 / 3.0, 2.0 / 3.0}, V{1.0, 2.0 / 3.0})
222 .add_entity(V{0.0, 0.0}, V{1.0 / 3.0, 0.0}, V{0.0, 1.0 / 3.0}, V{1.0 / 3.0, 1.0 / 3.0})
223 .add_entity(V{1.0 / 3.0, 0.0}, V{2.0 / 3.0, 0.0}, V{1.0 / 3.0, 1.0 / 3.0}, V{2.0 / 3.0, 1.0 / 3.0})
224 .add_entity(V{2.0 / 3.0, 0.0}, V{1.0, 0.0}, V{2.0 / 3.0, 1.0 / 3.0}, V{1.0, 1.0 / 3.0})});
248 using V =
typename RawCellTemplate::VertexType;
262 V{2.0 / 3.0, 0.0, 2.0 / 3.0},
263 V{1.0, 0.0, 2.0 / 3.0},
264 V{2.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
265 V{1.0, 1.0 / 3.0, 2.0 / 3.0},
266 V{2.0 / 3.0, 0.0, 1.0},
268 V{2.0 / 3.0, 1.0 / 3.0, 1.0},
269 V{1.0, 1.0 / 3.0, 1.0})
272 V{2.0 / 3.0, 0.0, 2.0 / 3.0},
274 V{2.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
276 V{2.0 / 3.0, 0.0, 1.0},
278 V{2.0 / 3.0, 1.0 / 3.0, 1.0})
280 V{2.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
281 V{1.0, 1.0 / 3.0, 2.0 / 3.0},
284 V{2.0 / 3.0, 1.0 / 3.0, 1.0},
285 V{1.0, 1.0 / 3.0, 1.0},
293 V{2.0 / 3.0, 0.0, 2.0 / 3.0},
294 V{1.0, 0.0, 2.0 / 3.0},
295 V{2.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
296 V{1.0, 1.0 / 3.0, 2.0 / 3.0})});
303 V{0.0, 0.0, 2.0 / 3.0},
304 V{1.0 / 3.0, 0.0, 2.0 / 3.0},
305 V{0.0, 1.0 / 3.0, 2.0 / 3.0},
306 V{1.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
308 V{1.0 / 3.0, 0.0, 1.0},
309 V{0.0, 1.0 / 3.0, 1.0},
310 V{1.0 / 3.0, 1.0 / 3.0, 1.0})
312 V{1.0 / 3.0, 0.0, 2.0 / 3.0},
313 V{2.0 / 3.0, 0.0, 2.0 / 3.0},
314 V{1.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
315 V{2.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
316 V{1.0 / 3.0, 0.0, 1.0},
317 V{2.0 / 3.0, 0.0, 1.0},
318 V{1.0 / 3.0, 1.0 / 3.0, 1.0},
319 V{2.0 / 3.0, 1.0 / 3.0, 1.0})
321 V{2.0 / 3.0, 0.0, 2.0 / 3.0},
322 V{1.0, 0.0, 2.0 / 3.0},
323 V{2.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
324 V{1.0, 1.0 / 3.0, 2.0 / 3.0},
325 V{2.0 / 3.0, 0.0, 1.0},
327 V{2.0 / 3.0, 1.0 / 3.0, 1.0},
328 V{1.0, 1.0 / 3.0, 1.0})
331 V{1.0 / 3.0, 0.0, 1.0 / 3.0},
333 V{1.0 / 3.0, 2.0 / 3.0, 1.0 / 3.0},
334 V{0.0, 0.0, 2.0 / 3.0},
335 V{1.0 / 3.0, 0.0, 2.0 / 3.0},
336 V{0.0, 1.0 / 3.0, 2.0 / 3.0},
337 V{1.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0})
339 V{1.0 / 3.0, 0.0, 1.0 / 3.0},
340 V{2.0 / 3.0, 0.0, 1.0 / 3.0},
341 V{1.0 / 3.0, 2.0 / 3.0, 1.0 / 3.0},
342 V{2.0 / 3.0, 2.0 / 3.0, 1.0 / 3.0},
343 V{1.0 / 3.0, 0.0, 2.0 / 3.0},
344 V{2.0 / 3.0, 0.0, 2.0 / 3.0},
345 V{1.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
346 V{2.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0})
348 V{2.0 / 3.0, 0.0, 1.0 / 3.0},
350 V{2.0 / 3.0, 2.0 / 3.0, 1.0 / 3.0},
352 V{2.0 / 3.0, 0.0, 2.0 / 3.0},
353 V{1.0, 0.0, 2.0 / 3.0},
354 V{2.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
355 V{1.0, 1.0 / 3.0, 2.0 / 3.0})
357 V{0.0, 1.0 / 3.0, 2.0 / 3.0},
358 V{1.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
360 V{1.0 / 3.0, 2.0 / 3.0, 1.0 / 3.0},
361 V{0.0, 1.0 / 3.0, 1.0},
362 V{1.0 / 3.0, 1.0 / 3.0, 1.0},
364 V{1.0 / 3.0, 2.0 / 3.0, 1.0})
366 V{1.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
367 V{2.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
368 V{1.0 / 3.0, 2.0 / 3.0, 1.0 / 3.0},
369 V{2.0 / 3.0, 2.0 / 3.0, 1.0 / 3.0},
370 V{1.0 / 3.0, 1.0 / 3.0, 1.0},
371 V{2.0 / 3.0, 1.0 / 3.0, 1.0},
372 V{1.0 / 3.0, 2.0 / 3.0, 1.0},
373 V{2.0 / 3.0, 2.0 / 3.0, 1.0})
375 V{2.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
376 V{1.0, 1.0 / 3.0, 2.0 / 3.0},
377 V{2.0 / 3.0, 2.0 / 3.0, 1.0 / 3.0},
379 V{2.0 / 3.0, 1.0 / 3.0, 1.0},
380 V{1.0, 1.0 / 3.0, 1.0},
381 V{2.0 / 3.0, 2.0 / 3.0, 1.0},
388 V{1.0 / 3.0, 0.0, 1.0 / 3.0},
389 V{2.0 / 3.0, 0.0, 1.0 / 3.0},
390 V{1.0 / 3.0, 2.0 / 3.0, 1.0 / 3.0},
391 V{2.0 / 3.0, 2.0 / 3.0, 1.0 / 3.0})
393 V{1.0 / 3.0, 2.0 / 3.0, 1.0 / 3.0},
394 V{2.0 / 3.0, 2.0 / 3.0, 1.0 / 3.0},
397 V{1.0 / 3.0, 2.0 / 3.0, 1.0},
398 V{2.0 / 3.0, 2.0 / 3.0, 1.0},
407 V{0.0, 0.0, 2.0 / 3.0},
408 V{1.0 / 3.0, 0.0, 2.0 / 3.0},
409 V{0.0, 1.0 / 3.0, 2.0 / 3.0},
410 V{1.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
412 V{1.0 / 3.0, 0.0, 1.0},
413 V{0.0, 1.0 / 3.0, 1.0},
414 V{1.0 / 3.0, 1.0 / 3.0, 1.0})
416 V{1.0 / 3.0, 0.0, 2.0 / 3.0},
417 V{2.0 / 3.0, 0.0, 2.0 / 3.0},
418 V{1.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
419 V{2.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
420 V{1.0 / 3.0, 0.0, 1.0},
421 V{2.0 / 3.0, 0.0, 1.0},
422 V{1.0 / 3.0, 1.0 / 3.0, 1.0},
423 V{2.0 / 3.0, 1.0 / 3.0, 1.0})
425 V{2.0 / 3.0, 0.0, 2.0 / 3.0},
426 V{1.0, 0.0, 2.0 / 3.0},
427 V{2.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
428 V{1.0, 1.0 / 3.0, 2.0 / 3.0},
429 V{2.0 / 3.0, 0.0, 1.0},
431 V{2.0 / 3.0, 1.0 / 3.0, 1.0},
432 V{1.0, 1.0 / 3.0, 1.0})
434 V{0.0, 1.0 / 3.0, 2.0 / 3.0},
435 V{1.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
436 V{0.0, 2.0 / 3.0, 2.0 / 3.0},
437 V{1.0 / 3.0, 2.0 / 3.0, 2.0 / 3.0},
438 V{0.0, 1.0 / 3.0, 1.0},
439 V{1.0 / 3.0, 1.0 / 3.0, 1.0},
440 V{0.0, 2.0 / 3.0, 1.0},
441 V{1.0 / 3.0, 2.0 / 3.0, 1.0})
443 V{1.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
444 V{2.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
445 V{1.0 / 3.0, 2.0 / 3.0, 2.0 / 3.0},
446 V{2.0 / 3.0, 2.0 / 3.0, 2.0 / 3.0},
447 V{1.0 / 3.0, 1.0 / 3.0, 1.0},
448 V{2.0 / 3.0, 1.0 / 3.0, 1.0},
449 V{1.0 / 3.0, 2.0 / 3.0, 1.0},
450 V{2.0 / 3.0, 2.0 / 3.0, 1.0})
452 V{2.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
453 V{1.0, 1.0 / 3.0, 2.0 / 3.0},
454 V{2.0 / 3.0, 2.0 / 3.0, 2.0 / 3.0},
455 V{1.0, 2.0 / 3.0, 2.0 / 3.0},
456 V{2.0 / 3.0, 1.0 / 3.0, 1.0},
457 V{1.0, 1.0 / 3.0, 1.0},
458 V{2.0 / 3.0, 2.0 / 3.0, 1.0},
459 V{1.0, 2.0 / 3.0, 1.0})
461 V{0.0, 2.0 / 3.0, 2.0 / 3.0},
462 V{1.0 / 3.0, 2.0 / 3.0, 2.0 / 3.0},
463 V{0.0, 1.0, 2.0 / 3.0},
464 V{1.0 / 3.0, 1.0, 2.0 / 3.0},
465 V{0.0, 2.0 / 3.0, 1.0},
466 V{1.0 / 3.0, 2.0 / 3.0, 1.0},
468 V{1.0 / 3.0, 1.0, 1.0})
470 V{1.0 / 3.0, 2.0 / 3.0, 2.0 / 3.0},
471 V{2.0 / 3.0, 2.0 / 3.0, 2.0 / 3.0},
472 V{1.0 / 3.0, 1.0, 2.0 / 3.0},
473 V{2.0 / 3.0, 1.0, 2.0 / 3.0},
474 V{1.0 / 3.0, 2.0 / 3.0, 1.0},
475 V{2.0 / 3.0, 2.0 / 3.0, 1.0},
476 V{1.0 / 3.0, 1.0, 1.0},
477 V{2.0 / 3.0, 1.0, 1.0})
479 V{2.0 / 3.0, 2.0 / 3.0, 2.0 / 3.0},
480 V{1.0, 2.0 / 3.0, 2.0 / 3.0},
481 V{2.0 / 3.0, 1.0, 2.0 / 3.0},
482 V{1.0, 1.0, 2.0 / 3.0},
483 V{2.0 / 3.0, 2.0 / 3.0, 1.0},
484 V{1.0, 2.0 / 3.0, 1.0},
485 V{2.0 / 3.0, 1.0, 1.0},
489 V{1.0 / 3.0, 0.0, 1.0 / 3.0},
490 V{0.0, 1.0 / 3.0, 1.0 / 3.0},
491 V{1.0 / 3.0, 1.0 / 3.0, 1.0 / 2.0},
492 V{0.0, 0.0, 2.0 / 3.0},
493 V{1.0 / 3.0, 0.0, 2.0 / 3.0},
494 V{0.0, 1.0 / 3.0, 2.0 / 3.0},
495 V{1.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0})
497 V{1.0 / 3.0, 0.0, 1.0 / 3.0},
498 V{2.0 / 3.0, 0.0, 1.0 / 3.0},
499 V{1.0 / 3.0, 1.0 / 3.0, 1.0 / 2.0},
500 V{2.0 / 3.0, 1.0 / 3.0, 1.0 / 2.0},
501 V{1.0 / 3.0, 0.0, 2.0 / 3.0},
502 V{2.0 / 3.0, 0.0, 2.0 / 3.0},
503 V{1.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
504 V{2.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0})
506 V{2.0 / 3.0, 0.0, 1.0 / 3.0},
508 V{2.0 / 3.0, 1.0 / 3.0, 1.0 / 2.0},
509 V{1.0, 1.0 / 3.0, 1.0 / 3.0},
510 V{2.0 / 3.0, 0.0, 2.0 / 3.0},
511 V{1.0, 0.0, 2.0 / 3.0},
512 V{2.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
513 V{1.0, 1.0 / 3.0, 2.0 / 3.0})
515 V{2.0 / 3.0, 1.0 / 3.0, 1.0 / 2.0},
516 V{1.0, 1.0 / 3.0, 1.0 / 3.0},
517 V{2.0 / 3.0, 2.0 / 3.0, 1.0 / 2.0},
518 V{1.0, 2.0 / 3.0, 1.0 / 3.0},
519 V{2.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
520 V{1.0, 1.0 / 3.0, 2.0 / 3.0},
521 V{2.0 / 3.0, 2.0 / 3.0, 2.0 / 3.0},
522 V{1.0, 2.0 / 3.0, 2.0 / 3.0})
524 V{2.0 / 3.0, 2.0 / 3.0, 1.0 / 2.0},
525 V{1.0, 2.0 / 3.0, 1.0 / 3.0},
526 V{2.0 / 3.0, 1.0, 1.0 / 3.0},
528 V{2.0 / 3.0, 2.0 / 3.0, 2.0 / 3.0},
529 V{1.0, 2.0 / 3.0, 2.0 / 3.0},
530 V{2.0 / 3.0, 1.0, 2.0 / 3.0},
531 V{1.0, 1.0, 2.0 / 3.0})
533 V{1.0 / 3.0, 2.0 / 3.0, 1.0 / 2.0},
534 V{2.0 / 3.0, 2.0 / 3.0, 1.0 / 2.0},
535 V{1.0 / 3.0, 1.0, 1.0 / 3.0},
536 V{2.0 / 3.0, 1.0, 1.0 / 3.0},
537 V{1.0 / 3.0, 2.0 / 3.0, 2.0 / 3.0},
538 V{2.0 / 3.0, 2.0 / 3.0, 2.0 / 3.0},
539 V{1.0 / 3.0, 1.0, 2.0 / 3.0},
540 V{2.0 / 3.0, 1.0, 2.0 / 3.0})
542 V{0.0, 2.0 / 3.0, 1.0 / 3.0},
543 V{1.0 / 3.0, 2.0 / 3.0, 1.0 / 2.0},
545 V{1.0 / 3.0, 1.0, 1.0 / 3.0},
546 V{0.0, 2.0 / 3.0, 2.0 / 3.0},
547 V{1.0 / 3.0, 2.0 / 3.0, 2.0 / 3.0},
548 V{0.0, 1.0, 2.0 / 3.0},
549 V{1.0 / 3.0, 1.0, 2.0 / 3.0})
551 V{0.0, 1.0 / 3.0, 1.0 / 3.0},
552 V{1.0 / 3.0, 1.0 / 3.0, 1.0 / 2.0},
553 V{0.0, 2.0 / 3.0, 1.0 / 3.0},
554 V{1.0 / 3.0, 2.0 / 3.0, 1.0 / 2.0},
555 V{0.0, 1.0 / 3.0, 2.0 / 3.0},
556 V{1.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0},
557 V{0.0, 2.0 / 3.0, 2.0 / 3.0},
558 V{1.0 / 3.0, 2.0 / 3.0, 2.0 / 3.0})
564 V{1.0 / 3.0, 0.0, 1.0 / 3.0},
565 V{2.0 / 3.0, 0.0, 1.0 / 3.0},
566 V{1.0 / 3.0, 1.0, 1.0 / 3.0},
567 V{2.0 / 3.0, 1.0, 1.0 / 3.0})
570 V{1.0 / 3.0, 0.0, 1.0 / 3.0},
572 V{1.0 / 3.0, 1.0, 1.0 / 3.0},
573 V{0.0, 1.0 / 3.0, 1.0 / 3.0},
574 V{1.0 / 3.0, 1.0 / 3.0, 1.0 / 2.0},
575 V{0.0, 2.0 / 3.0, 1.0 / 3.0},
576 V{1.0 / 3.0, 2.0 / 3.0, 1.0 / 2.0})
578 V{2.0 / 3.0, 0.0, 1.0 / 3.0},
580 V{2.0 / 3.0, 1.0, 1.0 / 3.0},
582 V{2.0 / 3.0, 1.0 / 3.0, 1.0 / 2.0},
583 V{1.0, 1.0 / 3.0, 1.0 / 3.0},
584 V{2.0 / 3.0, 2.0 / 3.0, 1.0 / 2.0},
585 V{1.0, 2.0 / 3.0, 1.0 / 3.0})
587 V{1.0 / 3.0, 0.0, 1.0 / 3.0},
588 V{2.0 / 3.0, 0.0, 1.0 / 3.0},
589 V{1.0 / 3.0, 1.0, 1.0 / 3.0},
590 V{2.0 / 3.0, 1.0, 1.0 / 3.0},
591 V{1.0 / 3.0, 1.0 / 3.0, 1.0 / 2.0},
592 V{2.0 / 3.0, 1.0 / 3.0, 1.0 / 2.0},
593 V{1.0 / 3.0, 2.0 / 3.0, 1.0 / 2.0},
594 V{2.0 / 3.0, 2.0 / 3.0, 1.0 / 2.0})});
#define XABORTM(msg)
Abortion macro definition with custom message.
static FaceMap & raw_faces()
Returns the raw templates for faces of this template set.
RawTemplate< Shape::Hypercube< 2 > > RawFaceTemplate
Raw face template type.
RawTemplate< Shape::Hypercube< 1 > > RawEdgeTemplate
Raw edge template type.
static constexpr bool is_shape_compatible()
Shape compatability test.
TemplateMapByDim< 2 > FaceMap
Type of map from face refinement types to raw templates.
std::unordered_map< RefinementTypeByDim< dim_ >, RawTemplate< Shape::Hypercube< dim_ > > > TemplateMapByDim
Type of map from refinement type to raw templates.
RawTemplate< Shape::Hypercube< 3 > > RawCellTemplate
Raw cell template type.
TemplateMapByDim< 3 > CellMap
Type of map from cell refinement types to raw templates.
static constexpr int max_children()
Constexpr function for retrieving maximum number of children for any template of this template set.
static CellMap & raw_cells()
Returns the raw templates for cells of this template set.
static EdgeMap & raw_edges()
Returns the raw templates for edges of this template set.
static TemplateMapByDim< dim_ > & raw_templates()
Accessor for raw template maps.
TemplateMapByDim< 1 > EdgeMap
Type of map from edge refinement types to raw templates.
static RawTemplate< Shape_ > rotate_template_yaxis(RawTemplate< Shape_ > &tmplt)
Rotates a raw template 90 degrees counterclockwise around the y-axis.
static RawTemplate< Shape_ > rotate_template_zaxis(RawTemplate< Shape_ > &tmplt)
Rotates a raw template 90 degrees counterclockwise around the z-axis.
static RawTemplate< Shape_ > rotate_template_2d(RawTemplate< Shape_ > &tmplt)
Rotates a raw template 90 degrees counterclockwise around (0.5, 0.5)
static RawTemplate< Shape_ > rotate_template_xaxis(RawTemplate< Shape_ > &tmplt)
Rotates a raw template 90 degrees counterclockwise around the x-axis.
String stringify(const T_ &item)
Converts an item into a String.
Hypercube shape tag struct template.