16 #ifndef dealii_tria_connectivity_h 17 #define dealii_tria_connectivity_h 32 namespace TriangulationImplementation
60 virtual ::ArrayView<const unsigned int>
100 const unsigned int face)
const 112 virtual const std::array<unsigned int, 2> &
114 const unsigned int face)
const 120 const static std::array<unsigned int, 2> table = {};
135 const unsigned int e)
const override 141 static const std::array<unsigned int, 2> table = {{0, 1}};
169 static std::array<unsigned int, 2> table = {{2, 1}};
183 const unsigned int e)
const override 187 static const std::array<unsigned int, 3> table = {{0, 1, 2}};
196 static const std::array<std::array<unsigned int, 2>, 3> table = {
197 {{{0, 1}}, {{1, 2}}, {{2, 0}}}};
226 static std::array<unsigned int, 3> table = {{3, 3, 1}};
240 const unsigned int e)
const override 244 static const std::array<unsigned int, 4> table = {{0, 1, 2, 3}};
253 static const std::array<std::array<unsigned int, 2>, 4> table = {
254 {{{0, 2}}, {{1, 3}}, {{0, 1}}, {{2, 3}}}};
283 static std::array<unsigned int, 3> table = {{4, 4, 1}};
297 const unsigned int e)
const override 301 static const std::array<unsigned int, 4> table = {{0, 1, 2, 3}};
310 static const std::array<std::array<unsigned int, 3>, 4> table = {
311 {{{0, 1, 2}}, {{1, 0, 3}}, {{0, 2, 3}}, {{2, 1, 3}}}};
318 static const std::array<std::array<unsigned int, 2>, 6> table = {
319 {{{0, 1}}, {{1, 2}}, {{2, 0}}, {{0, 3}}, {{1, 3}}, {{2, 3}}}};
351 static std::array<unsigned int, 4> table = {{4, 6, 4, 1}};
364 const unsigned int face)
const override 366 const static std::array<std::array<unsigned int, 3>, 4> table = {
367 {{{0, 1, 2}}, {{0, 3, 4}}, {{2, 5, 3}}, {{1, 4, 5}}}};
369 return table[face][line];
372 const std::array<unsigned int, 2> &
374 const unsigned int face)
const override 376 const static std::array<std::array<std::array<unsigned int, 2>, 3>, 4>
377 table = {{{{{{0, 1}}, {{1, 2}}, {{2, 0}}}},
378 {{{{1, 0}}, {{0, 3}}, {{3, 1}}}},
379 {{{{0, 2}}, {{2, 3}}, {{3, 0}}}},
380 {{{{2, 1}}, {{1, 3}}, {{3, 2}}}}}};
382 return table[face][line];
395 const unsigned int e)
const override 399 static const std::array<unsigned int, 5> table = {{0, 1, 2, 3, 4}};
410 static const std::array<unsigned int, 4> table = {{0, 1, 2, 3}};
414 static const std::array<std::array<unsigned int, 3>, 4> table = {
415 {{{0, 2, 4}}, {{3, 1, 4}}, {{1, 0, 4}}, {{2, 3, 4}}}};
417 return {table[e - 1]};
422 static const std::array<std::array<unsigned int, 2>, 8> table = {
448 if (d == 2 && e == 0)
464 static std::array<unsigned int, 4> table = {{5, 8, 5, 1}};
479 const unsigned int face)
const override 481 const static std::array<std::array<unsigned int, 4>, 5> table = {
488 return table[face][line];
491 const std::array<unsigned int, 2> &
493 const unsigned int face)
const override 495 static const unsigned int X =
static_cast<unsigned int>(-1);
497 const static std::array<std::array<std::array<unsigned int, 2>, 4>, 5>
498 table = {{{{{{0, 2}}, {{1, 3}}, {{0, 1}}, {{2, 3}}}},
499 {{{{0, 2}}, {{2, 4}}, {{4, 0}}, {{X, X}}}},
500 {{{{3, 1}}, {{1, 4}}, {{4, 3}}, {{X, X}}}},
501 {{{{1, 0}}, {{0, 4}}, {{4, 1}}, {{X, X}}}},
502 {{{{2, 3}}, {{3, 4}}, {{4, 2}}, {{X, X}}}}}};
504 return table[face][line];
517 const unsigned int e)
const override 521 static const std::array<unsigned int, 6> table = {
531 if (e == 0 || e == 1)
533 static const std::array<std::array<unsigned int, 3>, 2> table =
534 {{{{1, 0, 2}}, {{3, 4, 5}}}};
539 static const std::array<std::array<unsigned int, 4>, 3> table = {
540 {{{0, 1, 3, 4}}, {{1, 2, 4, 5}}, {{2, 0, 5, 3}}}};
542 return {table[e - 2]};
547 static const std::array<std::array<unsigned int, 2>, 9> table = {
590 static std::array<unsigned int, 4> table = {{6, 9, 5, 1}};
605 const unsigned int face)
const override 607 static const unsigned int X =
static_cast<unsigned int>(-1);
609 const static std::array<std::array<unsigned int, 4>, 5> table = {
616 return table[face][line];
619 const std::array<unsigned int, 2> &
621 const unsigned int face)
const override 623 static const unsigned int X =
static_cast<unsigned int>(-1);
625 const static std::array<std::array<std::array<unsigned int, 2>, 4>, 5>
626 table = {{{{{{1, 0}}, {{0, 2}}, {{2, 1}}, {{X, X}}}},
627 {{{{3, 4}}, {{4, 5}}, {{5, 3}}, {{X, X}}}},
628 {{{{0, 3}}, {{1, 4}}, {{0, 1}}, {{3, 4}}}},
629 {{{{1, 4}}, {{2, 5}}, {{1, 2}}, {{4, 5}}}},
630 {{{{2, 5}}, {{0, 3}}, {{2, 0}}, {{5, 3}}}}}};
632 return table[face][line];
645 const unsigned int e)
const override 649 static const std::array<unsigned int, 8> table = {
650 {0, 1, 2, 3, 4, 5, 6, 7}};
659 static const std::array<std::array<unsigned int, 4>, 6> table = {
672 static const std::array<std::array<unsigned int, 2>, 12> table = {
716 static std::array<unsigned int, 4> table = {{8, 12, 6, 1}};
729 const unsigned int face)
const override 731 const static std::array<std::array<unsigned int, 4>, 6> table = {
739 return table[face][line];
742 const std::array<unsigned int, 2> &
744 const unsigned int face)
const override 746 const static std::array<std::array<std::array<unsigned int, 2>, 4>, 6>
747 table = {{{{{{0, 4}}, {{2, 6}}, {{0, 2}}, {{4, 6}}}},
748 {{{{1, 5}}, {{3, 7}}, {{1, 3}}, {{5, 7}}}},
749 {{{{0, 1}}, {{4, 5}}, {{0, 4}}, {{1, 5}}}},
750 {{{{2, 3}}, {{6, 7}}, {{2, 6}}, {{3, 7}}}},
751 {{{{0, 2}}, {{1, 3}}, {{0, 1}}, {{2, 3}}}},
752 {{{{4, 6}}, {{5, 7}}, {{4, 5}}, {{6, 7}}}}}};
754 return table[face][line];
766 template <
typename T =
unsigned int>
778 CRS(
const std::vector<std::size_t> &ptr,
const std::vector<T> &col)
784 std::vector<std::size_t>
ptr;
820 template <
typename T =
unsigned int>
824 const std::vector<ReferenceCell::Type> &cell_types)
826 , cell_types(cell_types)
829 inline std::vector<unsigned char> &
833 return line_orientation;
837 return quad_orientation;
840 inline const std::vector<unsigned char> &
844 return line_orientation;
848 return quad_orientation;
851 inline std::vector<ReferenceCell::Type> &
854 if (structdim == dim)
864 inline const std::vector<ReferenceCell::Type> &
867 if (structdim == dim)
880 if (from == dim && to == dim)
882 else if (from == dim && to == dim - 1)
883 return cell_entities;
884 else if (dim == 3 && from == 2 && to == 0)
885 return quad_vertices;
886 else if (dim == 3 && from == 2 && to == 1)
888 else if (from == 1 && to == 0)
889 return line_vertices;
893 return cell_entities;
899 if (from == dim && to == dim)
901 else if (from == dim && to == dim - 1)
902 return cell_entities;
903 else if (dim == 3 && from == 2 && to == 0)
904 return quad_vertices;
905 else if (dim == 3 && from == 2 && to == 1)
907 else if (from == 1 && to == 0)
908 return line_vertices;
912 return cell_entities;
943 template <
typename T>
947 const auto &col_cf = con_cf.
col;
948 const auto &ptr_cf = con_cf.
ptr;
950 auto &col_cc = con_cc.
col;
951 auto &ptr_cc = con_cc.
ptr;
953 const unsigned int n_faces =
954 *std::max_element(col_cf.begin(), col_cf.end()) + 1;
958 col_cc = std::vector<T>(col_cf.size(), -1);
961 std::vector<std::pair<T, unsigned int>> neighbors(n_faces, {-1, -1});
964 for (
unsigned int i_0 = 0; i_0 < ptr_cf.size() - 1; i_0++)
967 for (std::size_t j_0 = ptr_cf[i_0]; j_0 < ptr_cf[i_0 + 1]; j_0++)
969 if (neighbors[col_cf[j_0]].
first == static_cast<unsigned int>(-1))
973 neighbors[col_cf[j_0]] = std::pair<T, unsigned int>(i_0, j_0);
980 col_cc[j_0] = neighbors[col_cf[j_0]].first;
981 col_cc[neighbors[col_cf[j_0]].second] = i_0;
996 template <
int key_length,
typename FU>
999 const unsigned int d,
1000 const std::vector<std::shared_ptr<CellTypeBase>> &cell_types,
1001 const std::vector<ReferenceCell::Type> & cell_types_index,
1005 std::vector<unsigned char> & orientations,
1006 const FU & second_key_function)
1008 const bool compatibility_mode =
true;
1010 const std::vector<std::size_t> & cell_ptr = crs.
ptr;
1011 const std::vector<unsigned int> &cell_vertices = crs.
col;
1012 std::vector<std::size_t> & ptr_d = crs_d.
ptr;
1013 std::vector<unsigned int> & col_d = crs_d.
col;
1017 std::vector<std::size_t> & ptr_0 = crs_0.
ptr;
1018 std::vector<unsigned int> &col_0 = crs_0.
col;
1026 for (
const auto &c : cell_types_index)
1037 std::tuple<std::array<unsigned int, key_length>,
unsigned int>>
1040 std::vector<std::array<unsigned int, key_length>> ad_entity_vertices;
1041 std::vector<ReferenceCell::Type> ad_entity_types;
1042 std::vector<std::array<unsigned int, key_length>> ad_compatibility;
1044 keys.reserve(n_entities);
1045 ad_entity_vertices.reserve(n_entities);
1046 ad_entity_types.reserve(n_entities);
1047 ad_compatibility.reserve(n_entities);
1049 ptr_d.resize(cell_types_index.size() + 1);
1052 static const unsigned int offset = 1;
1055 for (
unsigned int c = 0, counter = 0; c < cell_types_index.size(); c++)
1057 const auto &cell_type =
1059 cell_types_index[c])];
1060 ptr_d[c + 1] = ptr_d[c] + cell_type->n_entities(d);
1063 const ::ArrayView<const unsigned int> cell_vertice(
1064 cell_vertices.data() + cell_ptr[c], cell_ptr[c + 1] - cell_ptr[c]);
1067 for (
unsigned int e = 0;
e < cell_type->n_entities(d);
e++)
1070 const auto &local_entity_vertices =
1071 cell_type->vertices_of_entity(d,
e);
1073 std::array<unsigned int, key_length> entity_vertices;
1074 std::fill(entity_vertices.begin(), entity_vertices.end(), 0);
1076 for (
unsigned int i = 0; i < local_entity_vertices.size(); i++)
1077 entity_vertices[i] =
1078 cell_vertice[local_entity_vertices[i]] + offset;
1081 std::array<unsigned int, key_length> key = entity_vertices;
1082 std::sort(key.begin(), key.end());
1083 keys.emplace_back(key, counter++);
1085 ad_entity_vertices.emplace_back(entity_vertices);
1087 ad_entity_types.emplace_back(cell_type->type_of_entity(d,
e));
1089 if (compatibility_mode)
1090 ad_compatibility.emplace_back(
1091 second_key_function(entity_vertices, cell_type, c,
e));
1095 col_d.resize(keys.size());
1096 orientations.resize(keys.size());
1100 std::sort(keys.begin(), keys.end());
1103 if (compatibility_mode)
1105 unsigned int n_unique_entities = 0;
1106 unsigned int n_unique_entity_vertices = 0;
1108 std::array<unsigned int, key_length> ref_key, new_key;
1109 std::fill(ref_key.begin(), ref_key.end(), 0);
1110 for (
unsigned int i = 0; i < keys.size(); ++i)
1112 const auto offset_i = std::get<1>(keys[i]);
1114 if (ref_key != std::get<0>(keys[i]))
1116 ref_key = std::get<0>(keys[i]);
1118 n_unique_entities++;
1119 n_unique_entity_vertices +=
1121 ad_entity_types[offset_i])]
1124 new_key = ad_compatibility[offset_i];
1127 std::get<0>(keys[i]) = new_key;
1130 std::sort(keys.begin(), keys.end());
1132 ptr_0.reserve(n_unique_entities);
1133 col_0.reserve(n_unique_entity_vertices);
1137 std::array<unsigned int, key_length> ref_key;
1138 std::array<unsigned int, key_length> ref_indices;
1139 std::fill(ref_key.begin(), ref_key.end(), 0);
1145 const auto offset_i = std::get<1>(keys[i]);
1147 if (ref_key != std::get<0>(keys[i]))
1151 ref_key = std::get<0>(keys[i]);
1152 ref_indices = ad_entity_vertices[offset_i];
1154 ptr_0.push_back(col_0.size());
1155 for (
const auto j : ad_entity_vertices[offset_i])
1157 col_0.push_back(j - offset);
1160 col_d[offset_i] = counter;
1161 orientations[offset_i] = 1;
1165 col_d[offset_i] = counter;
1166 orientations[offset_i] =
1167 ad_entity_types[offset_i].compute_orientation(
1168 ad_entity_vertices[offset_i], ref_indices);
1171 ptr_0.push_back(col_0.size());
1180 template <
typename FU>
1183 const std::vector<std::shared_ptr<CellTypeBase>> &cell_types,
1184 const std::vector<ReferenceCell::Type> &cell_types_index,
1188 std::vector<unsigned char> & orientations,
1189 const FU & second_key_function)
1191 std::size_t key_length = 0;
1193 for (
const auto &c : cell_types_index)
1195 const auto &cell_type =
1197 for (
unsigned int e = 0;
e < cell_type->n_entities(d);
e++)
1199 std::max(key_length, cell_type->vertices_of_entity(d,
e).size());
1202 if (key_length == 2)
1203 build_entity_templated<2>(
d,
1210 second_key_function);
1211 else if (key_length == 3)
1212 build_entity_templated<3>(
d,
1219 second_key_function);
1220 else if (key_length == 4)
1221 build_entity_templated<4>(
d,
1228 second_key_function);
1244 const std::vector<std::shared_ptr<CellTypeBase>> &cell_types,
1245 const std::vector<ReferenceCell::Type> & cell_types_index,
1251 const std::vector<unsigned char> & ori_cq,
1253 std::vector<unsigned char> & ori_ql,
1254 std::vector<ReferenceCell::Type> & quad_t_id
1262 con_ql.
ptr.resize(con_qv.
ptr.size());
1265 quad_t_id.resize(con_qv.
ptr.size() - 1);
1268 for (
unsigned int c = 0; c < con_cq.
ptr.size() - 1; ++c)
1270 const auto &cell_type =
1272 cell_types_index[c])];
1275 for (
unsigned int f_ = con_cq.
ptr[c], f_index = 0;
1276 f_ < con_cq.
ptr[c + 1];
1279 const unsigned int f = con_cq.
col[f_];
1281 con_ql.
ptr[f + 1] = cell_type->n_lines_of_surface(f_index);
1286 for (
unsigned int i = 0; i < con_ql.
ptr.size() - 1; ++i)
1287 con_ql.
ptr[i + 1] += con_ql.
ptr[i];
1290 con_ql.
col.resize(con_ql.
ptr.back());
1291 ori_ql.resize(con_ql.
ptr.back());
1294 for (
unsigned int c = 0; c < con_cq.
ptr.size() - 1; ++c)
1296 const auto &cell_type =
1298 cell_types_index[c])];
1301 for (
unsigned int f_ = con_cq.
ptr[c], f_index = 0;
1302 f_ < con_cq.
ptr[c + 1];
1305 const unsigned int f = con_cq.
col[f_];
1308 if (ori_cq[f_] != 1)
1312 quad_t_id[f] = cell_type->type_of_entity(2, f_index);
1315 for (
unsigned int l = 0;
1316 l < cell_type->n_lines_of_surface(f_index);
1320 const unsigned int local_line_index =
1321 cell_type->nth_line_of_surface(
l, f_index);
1322 const unsigned int global_line_index =
1323 con_cl.
col[con_cl.
ptr[c] + local_line_index];
1324 con_ql.
col[con_ql.
ptr[f] +
l] = global_line_index;
1327 const auto line_vertices_1_ref =
1328 cell_type->vertices_of_nth_line_of_surface(
l, f_index);
1331 for (
unsigned int v = 0; v < line_vertices_1_ref.size(); ++v)
1332 if (con_cv.
col[con_cv.
ptr[c] + line_vertices_1_ref[v]] !=
1333 con_lv.
col[con_lv.
ptr[global_line_index] + v])
1340 ori_ql[con_ql.
ptr[f] +
l] = (same ? 1 : 0);
1356 template <
typename T>
1359 const std::vector<std::shared_ptr<CellTypeBase>> &cell_t,
1360 const std::vector<ReferenceCell::Type> &cell_t_id,
1370 if (dim == 2 || dim == 3)
1372 std::vector<unsigned char> dummy;
1381 [](
auto key,
const auto &,
const auto &,
const auto &) {
1397 [&](
auto key,
const auto &cell_type,
const auto &c,
const auto &f) {
1404 for (; l < cell_type->n_lines_of_surface(f); ++
l)
1407 .col[temp1.
ptr[c] + cell_type->nth_line_of_surface(l, f)] +
1410 for (; l < key.size(); ++
l)
1434 return connectivity;
1442 template <
typename T,
int dim>
1449 std::vector<std::shared_ptr<CellTypeBase>> cell_types_impl(8);
1474 std::vector<T> cell_vertices;
1475 cell_vertices.reserve(
1476 std::accumulate(cells.begin(),
1479 [](
const auto &result,
const auto &cell) {
1480 return result + cell.vertices.size();
1483 std::vector<std::size_t> cell_vertices_ptr;
1484 cell_vertices_ptr.reserve(cells.size() + 1);
1485 cell_vertices_ptr.push_back(0);
1487 std::vector<ReferenceCell::Type> cell_types_indices;
1488 cell_types_indices.reserve(cells.size());
1491 for (
const auto &cell : cells)
1499 cell_types_impl.size());
1500 Assert(cell_types_impl[static_cast<types::geometric_entity_type>(
1505 cell_types_indices.push_back(cell_type);
1508 for (
const auto &vertex : cell.vertices)
1509 cell_vertices.push_back(vertex);
1511 cell_vertices_ptr.push_back(cell_vertices.size());
1515 return build_connectivity<T>(dim,
1518 {cell_vertices_ptr, cell_vertices});
virtual unsigned int n_entities(const unsigned int d) const
unsigned int nth_line_of_surface(const unsigned int line, const unsigned int face) const override
virtual const std::array< unsigned int, 2 > & vertices_of_nth_line_of_surface(const unsigned int line, const unsigned int face) const
virtual ReferenceCell::Type type_of_entity(const unsigned int d, const unsigned int e) const override
static const Type Invalid
static const unsigned int invalid_unsigned_int
#define AssertDimension(dim1, dim2)
virtual unsigned int n_lines_of_surface(const unsigned int face) const
CRS(const std::vector< std::size_t > &ptr, const std::vector< T > &col)
unsigned int n_lines_of_surface(const unsigned int surface) const override
const std::vector< ReferenceCell::Type > & entity_types(const unsigned int structdim) const
unsigned int n_entities(const unsigned int d) const override
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
unsigned int n_lines_of_surface(const unsigned int surface) const override
virtual ReferenceCell::Type type_of_entity(const unsigned int d, const unsigned int e) const override
const std::array< unsigned int, 2 > & vertices_of_nth_line_of_surface(const unsigned int line, const unsigned int face) const override
std::uint8_t geometric_entity_type
virtual ::ArrayView< const unsigned int > vertices_of_entity(const unsigned int d, const unsigned int e) const
::ArrayView< const unsigned int > vertices_of_entity(const unsigned int d, const unsigned int e) const override
const std::array< unsigned int, 2 > & vertices_of_nth_line_of_surface(const unsigned int line, const unsigned int face) const override
std::vector< unsigned char > line_orientation
#define AssertIndexRange(index, range)
unsigned int n_entities(const unsigned int d) const override
unsigned int n_entities(const unsigned int d) const override
void build_entity(const unsigned int d, const std::vector< std::shared_ptr< CellTypeBase >> &cell_types, const std::vector< ReferenceCell::Type > &cell_types_index, const CRS< unsigned int > &crs, CRS< unsigned int > &crs_d, CRS< unsigned int > &crs_0, std::vector< unsigned char > &orientations, const FU &second_key_function)
#define AssertThrow(cond, exc)
::ArrayView< const unsigned int > vertices_of_entity(const unsigned int d, const unsigned int e) const override
::ArrayView< const unsigned int > vertices_of_entity(const unsigned int d, const unsigned int e) const override
const std::array< unsigned int, 2 > & vertices_of_nth_line_of_surface(const unsigned int line, const unsigned int face) const override
virtual ReferenceCell::Type type_of_entity(const unsigned int d, const unsigned int e) const override
::ArrayView< const unsigned int > vertices_of_entity(const unsigned int d, const unsigned int e) const override
std::vector< unsigned char > & entity_orientations(const unsigned int structdim)
std::vector< ReferenceCell::Type > cell_types
virtual ReferenceCell::Type type_of_entity(const unsigned int d, const unsigned int e) const
Connectivity< T > build_connectivity(const unsigned int dim, const std::vector< std::shared_ptr< CellTypeBase >> &cell_t, const std::vector< ReferenceCell::Type > &cell_t_id, const CRS< T > &con_cv)
const std::vector< unsigned char > & entity_orientations(const unsigned int structdim) const
void build_entity_templated(const unsigned int d, const std::vector< std::shared_ptr< CellTypeBase >> &cell_types, const std::vector< ReferenceCell::Type > &cell_types_index, const CRS< unsigned int > &crs, CRS< unsigned int > &crs_d, CRS< unsigned int > &crs_0, std::vector< unsigned char > &orientations, const FU &second_key_function)
static const Type Pyramid
static ::ExceptionBase & ExcMessage(std::string arg1)
void determine_neighbors(const CRS< T > &con_cf, CRS< T > &con_cc)
virtual unsigned int nth_line_of_surface(const unsigned int line, const unsigned int face) const
std::vector< std::size_t > ptr
virtual ReferenceCell::Type type_of_entity(const unsigned int d, const unsigned int e) const override
unsigned int nth_line_of_surface(const unsigned int line, const unsigned int face) const override
unsigned int n_entities(const unsigned int d) const override
#define Assert(cond, exc)
std::vector< unsigned char > quad_orientation
::ArrayView< const unsigned int > vertices_of_entity(const unsigned int d, const unsigned int e) const override
#define DEAL_II_NAMESPACE_CLOSE
virtual ~CellTypeBase()=default
unsigned int n_entities(const unsigned int d) const override
::ArrayView< const unsigned int > vertices_of_entity(const unsigned int d, const unsigned int e) const override
unsigned int n_lines_of_surface(const unsigned int line) const override
CRS< T > & entity_to_entities(const unsigned int from, const unsigned int to)
SymmetricTensor< 2, dim, Number > d(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
const CRS< T > & entity_to_entities(const unsigned int from, const unsigned int to) const
virtual ReferenceCell::Type type_of_entity(const unsigned int d, const unsigned int e) const override
unsigned int n_lines_of_surface(const unsigned int surface) const override
ReferenceCell::Type type_of_entity(const unsigned int d, const unsigned int e) const override
#define DEAL_II_NAMESPACE_OPEN
unsigned int n_entities(const unsigned int d) const override
const std::array< unsigned int, 2 > & vertices_of_nth_line_of_surface(const unsigned int line, const unsigned int face) const override
Type n_vertices_to_type(const int dim, const unsigned int n_vertices)
std::vector< ReferenceCell::Type > quad_types
static ::ExceptionBase & ExcNotImplemented()
virtual ReferenceCell::Type type_of_entity(const unsigned int d, const unsigned int e) const override
::ArrayView< const unsigned int > vertices_of_entity(const unsigned int d, const unsigned int e) const override
void build_intersection(const std::vector< std::shared_ptr< CellTypeBase >> &cell_types, const std::vector< ReferenceCell::Type > &cell_types_index, const CRS< unsigned int > &con_cv, const CRS< unsigned int > &con_cl, const CRS< unsigned int > &con_lv, const CRS< unsigned int > &con_cq, const CRS< unsigned int > &con_qv, const std::vector< unsigned char > &ori_cq, CRS< unsigned int > &con_ql, std::vector< unsigned char > &ori_ql, std::vector< ReferenceCell::Type > &quad_t_id)
unsigned int nth_line_of_surface(const unsigned int line, const unsigned int face) const override
unsigned int n_entities(const unsigned int d) const override
std::vector< ReferenceCell::Type > & entity_types(const unsigned int structdim)
T max(const T &t, const MPI_Comm &mpi_communicator)
Connectivity(const unsigned int dim, const std::vector< ReferenceCell::Type > &cell_types)
unsigned int nth_line_of_surface(const unsigned int line, const unsigned int face) const override
Tensor< 2, dim, Number > l(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)