9#include <kernel/shape.hpp>
30 class FaceIndexMapping;
32 class FaceIndexMapping
35 static int map(
int cell,
int face);
40 class FaceIndexMapping<Shape::Simplex<2>, 1, 0>
43 static int map(
int cell,
int face)
45 ASSERTM((0 <= cell) && (cell < 3),
"invalid cell index");
46 ASSERTM((0 <= face) && (face < 2),
"invalid face index");
47 static const int indices[3][2] =
53 return indices[cell][face];
58 class FaceIndexMapping<Shape::Simplex<3>, 1, 0>
61 static int map(
int cell,
int face)
63 ASSERTM((0 <= cell) && (cell < 6),
"invalid cell index");
64 ASSERTM((0 <= face) && (face < 2),
"invalid face index");
65 static const int indices[6][2] =
74 return indices[cell][face];
79 class FaceIndexMapping<Shape::Simplex<3>, 2, 0>
82 static int map(
int cell,
int face)
84 ASSERTM((0 <= cell) && (cell < 4),
"invalid cell index");
85 ASSERTM((0 <= face) && (face < 3),
"invalid face index");
86 static const int indices[4][3] =
93 return indices[cell][face];
98 class FaceIndexMapping<Shape::Simplex<3>, 2, 1>
101 static int map(
int cell,
int face)
103 ASSERTM((0 <= cell) && (cell < 4),
"invalid cell index");
104 ASSERTM((0 <= face) && (face < 3),
"invalid face index");
105 static const int indices[4][3] =
112 return indices[cell][face];
117 class FaceIndexMapping<Shape::Hypercube<2>, 1, 0>
120 static int map(
int cell,
int face)
122 ASSERTM((0 <= cell) && (cell < 4),
"invalid cell index");
123 ASSERTM((0 <= face) && (face < 2),
"invalid face index");
124 static const int indices[4][2] =
131 return indices[cell][face];
136 class FaceIndexMapping<Shape::Hypercube<3>, 1, 0>
139 static int map(
int cell,
int face)
141 ASSERTM((0 <= cell) && (cell < 12),
"invalid cell index");
142 ASSERTM((0 <= face) && (face < 2),
"invalid face index");
143 static const int indices[12][2] =
158 return indices[cell][face];
163 class FaceIndexMapping<Shape::Hypercube<3>, 2, 0>
166 static int map(
int cell,
int face)
168 ASSERTM((0 <= cell) && (cell < 6),
"invalid cell index");
169 ASSERTM((0 <= face) && (face < 4),
"invalid face index");
170 static const int indices[6][4] =
179 return indices[cell][face];
184 class FaceIndexMapping<Shape::Hypercube<3>, 2, 1>
187 static int map(
int cell,
int face)
189 ASSERTM((0 <= cell) && (cell < 6),
"invalid cell index");
190 ASSERTM((0 <= face) && (face < 4),
"invalid face index");
191 static const int indices[6][4] =
200 return indices[cell][face];
#define ASSERTM(expr, msg)
Debug-Assertion macro definition with custom message.