54 template <
int dim,
template <
int,
int>
class MeshType,
int spacedim>
59 const std::vector<
bool> &marked_vertices)
67 const std::vector<Point<spacedim>> &
vertices =
tria.get_vertices();
70 marked_vertices.
size() == 0,
72 marked_vertices.
size()));
82 marked_vertices.
size() == 0 ||
83 std::equal(marked_vertices.
begin(),
84 marked_vertices.
end(),
86 [](
bool p,
bool q) { return !p || q; }),
88 "marked_vertices should be a subset of used vertices in the triangulation "
89 "but marked_vertices contains one or more vertices that are not used vertices!"));
97 const std::vector<bool> &used = (marked_vertices.
size() == 0) ?
98 tria.get_used_vertices() :
103 std::vector<bool>::const_iterator
first =
104 std::find(used.begin(), used.end(),
true);
131 template <
int dim,
template <
int,
int>
class MeshType,
int spacedim>
137 const std::vector<
bool> &marked_vertices)
140 if (mapping.preserves_vertex_locations() ==
true)
152 marked_vertices.
size() == 0,
154 marked_vertices.
size()));
164 marked_vertices.
size() == 0 ||
165 std::equal(marked_vertices.
begin(),
166 marked_vertices.
end(),
168 [](
bool p,
bool q) { return !p || q; }),
170 "marked_vertices should be a subset of used vertices in the triangulation "
171 "but marked_vertices contains one or more vertices that are not used vertices!"));
174 if (marked_vertices.
size())
177 if (marked_vertices[
it->first] ==
false)
192 template <
class MeshType>
195 std::vector<typename MeshType::active_cell_iterator>
198 typename ::internal::ActiveCellIterator<MeshType::dimension,
199 MeshType::space_dimension,
203 const unsigned int vertex)
205 const int dim = MeshType::dimension;
206 const int spacedim = MeshType::space_dimension;
212 Assert(
mesh.get_triangulation().get_used_vertices()[vertex],
218 std::set<typename ::internal::
219 ActiveCellIterator<dim, spacedim, MeshType>::type>
222 typename ::internal::ActiveCellIterator<dim, spacedim, MeshType>::type
223 cell =
mesh.begin_active(),
259 for (; cell !=
endc; ++cell)
261 for (
const unsigned int v : cell->vertex_indices())
262 if (cell->vertex_index(v) == vertex)
274 for (
const auto face :
275 cell->reference_cell().faces_for_given_vertex(v))
276 if (!cell->at_boundary(face) &&
277 cell->neighbor(face)->is_active())
299 for (
unsigned int e = 0; e < cell->n_lines(); ++e)
300 if (cell->line(e)->has_children())
304 if (cell->line(e)->child(0)->vertex_index(1) == vertex)
327 return std::vector<typename ::internal::
328 ActiveCellIterator<dim, spacedim, MeshType>::type>(
336 template <
int dim,
template <
int,
int>
class MeshType,
int spacedim>
342 std::set<typename MeshType<dim, spacedim>::active_cell_iterator>
344 std::set<typename MeshType<dim, spacedim>::active_cell_iterator>
348 typename ::internal::
349 ActiveCellIterator<dim, spacedim,
MeshType<dim, spacedim>>::type>
353 ActiveCellIterator<dim, spacedim,
MeshType<dim, spacedim>>::type>
358 using cell_iterator =
361 using cell_iterator = typename ::internal::
362 ActiveCellIterator<dim, spacedim, MeshType<dim, spacedim>>::type;
392 cell_iterator
it =
mesh.begin_active();
405 template <
int dim,
template <
int,
int>
class MeshType,
int spacedim>
411 typename ::internal::
412 ActiveCellIterator<dim, spacedim, MeshType<dim, spacedim>>::type
416 const std::vector<bool> &marked_vertices,
417 const double tolerance)
430 template <
int dim,
template <
int,
int>
class MeshType,
int spacedim>
434 std::pair<typename MeshType<dim, spacedim>::active_cell_iterator,
Point<dim>>
436 std::pair<typename ::internal::
437 ActiveCellIterator<dim, spacedim, MeshType<dim, spacedim>>::type,
443 const std::vector<bool> &marked_vertices,
444 const double tolerance)
446 using active_cell_iterator = typename ::internal::
447 ActiveCellIterator<dim, spacedim, MeshType<dim, spacedim>>::type;
455 std::pair<active_cell_iterator, Point<dim>>
best_cell;
481 const auto n_active_cells =
mesh.get_triangulation().n_active_cells();
488 if (cell->is_artificial() ==
false)
491 if (marked_vertices.size() > 0)
494 for (
const auto &v : cell->vertex_indices())
496 if (marked_vertices[cell->vertex_index(v)])
509 mapping.transform_real_to_unit_cell(cell, p);
514 cell->reference_cell().closest_point(
p_cell).distance(
571 template <
int dim,
template <
int,
int>
class MeshType,
int spacedim>
575 std::vector<std::pair<typename MeshType<dim, spacedim>::active_cell_iterator,
578 std::vector<std::pair<
579 typename ::internal::
580 ActiveCellIterator<dim, spacedim, MeshType<dim, spacedim>>::type,
586 const double tolerance,
587 const std::vector<bool> &marked_vertices)
590 mapping,
mesh, p, marked_vertices, tolerance);
601 template <
int dim,
template <
int,
int>
class MeshType,
int spacedim>
605 std::vector<std::pair<typename MeshType<dim, spacedim>::active_cell_iterator,
608 std::vector<std::pair<
609 typename ::internal::
610 ActiveCellIterator<dim, spacedim, MeshType<dim, spacedim>>::type,
617 const double tolerance,
622 std::pair<typename MeshType<dim, spacedim>::active_cell_iterator,
637 for (
unsigned int d = 0; d < dim; ++d)
647 std::vector<typename MeshType<dim, spacedim>::active_cell_iterator>
652 unsigned int neighbor_index =
655 if (!
my_cell->at_boundary(neighbor_index))
673 for (
unsigned int d = 0; d < dim; ++d)
675 std::vector<typename MeshType<dim, spacedim>::active_cell_iterator>
678 for (
const auto &cell : cells)
694 for (
unsigned int d = 0; d < dim; ++d)
700 unit_point[d] > 0.5 ? 1 : 0;
714 for (
unsigned int d = 0; d < 2; ++d)
735 my_cell->reference_cell().closest_point(unit_point).distance(unit_point);
742 mapping.transform_real_to_unit_cell(cell, p);
743 if (cell->reference_cell().closest_point(
p_unit).distance(
757 Point<dim>> &b) { return a.first < b.first; });
764 template <
class MeshType>
769 const std::function<
bool(
const typename MeshType::active_cell_iterator &)>
774 mesh.get_triangulation().n_vertices(),
false);
779 for (
const auto &cell :
mesh.active_cell_iterators())
781 for (
const auto v : cell->vertex_indices())
787 for (
const auto &cell :
mesh.active_cell_iterators())
788 if (!predicate(cell))
789 for (
const auto v : cell->vertex_indices())
802 template <
class MeshType>
807 const std::function<
bool(
const typename MeshType::cell_iterator &)>
809 const unsigned int level)
813 mesh.get_triangulation().n_vertices(),
false);
822 for (
const unsigned int v : cell->vertex_indices())
832 if (!predicate(cell))
833 for (
const unsigned int v : cell->vertex_indices())
847 template <
class MeshType>
850 const std::vector<typename MeshType::active_cell_iterator> &cells)
852 for (
typename std::vector<
853 typename MeshType::active_cell_iterator>::const_iterator
it =
858 if ((*it)->is_locally_owned())
864 template <
class MeshType>
867 const std::vector<typename MeshType::active_cell_iterator> &cells)
869 for (
typename std::vector<
870 typename MeshType::active_cell_iterator>::const_iterator
it =
875 if ((*it)->is_artificial())
884 template <
class MeshType>
890 std::function<
bool(
const typename MeshType::active_cell_iterator &)>
893 const std::vector<typename MeshType::active_cell_iterator>
899 ExcMessage(
"Halo layer contains locally owned cells"));
901 ExcMessage(
"Halo layer contains artificial cells"));
908 template <
class MeshType>
913 const std::function<
bool(
const typename MeshType::active_cell_iterator &)>
917 std::vector<typename MeshType::active_cell_iterator>
920 mesh.get_triangulation().n_vertices(),
false);
922 const unsigned int spacedim = MeshType::space_dimension;
932 for (
const auto &cell :
mesh.active_cell_iterators())
933 if (!predicate(cell))
935 for (
const unsigned int v : cell->vertex_indices())
946 return std::vector<typename MeshType::active_cell_iterator>();
950 for (
const auto &cell :
mesh.active_cell_iterators())
953 for (
const unsigned int v : cell->vertex_indices())
966 const double DOUBLE_EPSILON = 100. * std::numeric_limits<double>::epsilon();
969 for (
unsigned int d = 0; d < spacedim; ++d)
975 std::vector<Point<spacedim>>
984 for (
typename std::vector<typename MeshType::active_cell_iterator>::
990 const std::pair<Point<spacedim>,
double>
992 (*subdomain_boundary_cell_iterator)->enclosing_ball();
1009 for (
const auto &cell :
mesh.active_cell_iterators())
1012 if (predicate(cell))
1016 cell->enclosing_ball();
1024 for (
unsigned int d = 0; d < spacedim; ++d)
1027 bounding_box.first[d]) &&
1029 bounding_box.second[d]);
1053 template <
class MeshType>
1063 std::function<
bool(
const typename MeshType::active_cell_iterator &)>
1066 const std::vector<typename MeshType::active_cell_iterator>
1078 "Ghost cells within layer_thickness contains locally owned cells."));
1083 "Ghost cells within layer_thickness contains artificial cells. "
1084 "The function compute_ghost_cell_layer_within_distance "
1085 "is probably called while using parallel::distributed::Triangulation. "
1086 "In such case please refer to the description of this function."));
1093 template <
class MeshType>
1099 const std::function<
bool(
1101 active_cell_iterator &)>
1105 mesh.get_triangulation().n_vertices(),
false);
1107 const unsigned int spacedim = MeshType::space_dimension;
1114 for (
const auto &cell :
mesh.active_cell_iterators())
1115 if (predicate(cell))
1117 minp = cell->center();
1118 maxp = cell->center();
1124 for (
const auto &cell :
mesh.active_cell_iterators())
1125 if (predicate(cell))
1126 for (
const unsigned int v : cell->vertex_indices())
1132 for (
unsigned int d = 0; d < spacedim; ++d)
1144 template <
typename MeshType>
1146 std::list<std::pair<
1147 typename MeshType::cell_iterator,
1154 ExcMessage(
"The two meshes must be represent triangulations that "
1155 "have the same coarse meshes"));
1163#ifdef DEAL_II_WITH_MPI
1165 constexpr int dim = MeshType::dimension;
1166 constexpr int spacedim = MeshType::space_dimension;
1168 *
>(&
mesh_1.get_triangulation()) !=
nullptr ||
1170 *
>(&
mesh_2.get_triangulation()) !=
nullptr)
1173 ExcMessage(
"This function can only be used with meshes "
1174 "corresponding to distributed Triangulations when "
1175 "both Triangulations are equal."));
1188 using CellList = std::list<std::pair<
typename MeshType::cell_iterator,
1189 typename MeshType::cell_iterator>>;
1210 for (
unsigned int c = 0; c <
cell_pair->first->n_children(); ++c)
1211 cell_list.emplace_back(
cell_pair->first->child(c),
1226 !
cell_pair->first->is_locally_owned()) ||
1228 !
cell_pair->second->is_locally_owned())))
1254 template <
int dim,
int spacedim>
1276 for (
const unsigned int v :
cell_1->vertex_indices())
1290 template <
typename MeshType>
1295 mesh_2.get_triangulation());
1300 template <
int dim,
int spacedim>
1301 std::pair<typename DoFHandler<dim, spacedim>::active_cell_iterator,
1307 const double tolerance)
1311 ExcMessage(
"Mapping collection needs to have either size 1 "
1312 "or size equal to the number of elements in "
1313 "the FECollection."));
1315 using cell_iterator =
1318 std::pair<cell_iterator, Point<dim>>
best_cell;
1322 if (mapping.
size() == 1)
1324 const std::vector<bool> marked_vertices = {};
1326 mapping[0],
mesh, p, marked_vertices, tolerance);
1359 const auto n_cells =
mesh.get_triangulation().n_cells();
1369 mapping[cell->active_fe_index()]
1370 .transform_real_to_unit_cell(cell, p);
1376 cell->reference_cell().closest_point(
p_cell).distance(
1429 template <
class MeshType>
1434 Assert(cell->is_locally_owned(),
1435 ExcMessage(
"This function only makes sense if the cell for "
1436 "which you are asking for a patch, is locally "
1439 std::vector<typename MeshType::active_cell_iterator>
patch;
1440 patch.push_back(cell);
1441 for (
const unsigned int face_number : cell->face_indices())
1442 if (cell->face(face_number)->at_boundary() ==
false)
1444 if (cell->neighbor(face_number)->has_children() ==
false)
1445 patch.push_back(cell->neighbor(face_number));
1450 if (MeshType::dimension > 1)
1452 for (
unsigned int subface = 0;
1453 subface < cell->face(face_number)->n_children();
1456 cell->neighbor_child_on_subface(face_number, subface));
1462 typename MeshType::cell_iterator neighbor =
1463 cell->neighbor(face_number);
1464 while (neighbor->has_children())
1465 neighbor = neighbor->child(1 - face_number);
1467 Assert(neighbor->neighbor(1 - face_number) == cell,
1469 patch.push_back(neighbor);
1477 template <
class Container>
1478 std::vector<typename Container::cell_iterator>
1480 const std::vector<typename Container::active_cell_iterator> &
patch)
1484 "Vector containing patch cells should not be an empty vector!"));
1488 int min_level =
patch[0]->level();
1490 for (
unsigned int i = 0; i <
patch.
size(); ++i)
1493 typename std::vector<
1494 typename Container::active_cell_iterator>::const_iterator
patch_cell;
1501 if ((*patch_cell)->level() == min_level)
1509 typename Container::cell_iterator parent = *
patch_cell;
1511 while (parent->level() > min_level)
1512 parent = parent->parent();
1523 template <
class Container>
1526 const std::vector<typename Container::active_cell_iterator> &
patch,
1531 Container::space_dimension>::active_cell_iterator,
1535 const std::vector<typename Container::cell_iterator>
uniform_cells =
1539 std::vector<Point<Container::space_dimension>>
vertices;
1544 typename std::vector<typename Container::cell_iterator>::const_iterator
1550 for (
const unsigned int v : (*uniform_cell)->vertex_indices())
1553 (*uniform_cell)->vertex(v);
1556 for (
unsigned int m = 0; m < i; ++m)
1561 cells[
k].vertices[v] = m;
1568 cells[
k].vertices[v] = i;
1579 unsigned int index = 0;
1582 Container::space_dimension>::cell_iterator,
1583 typename Container::cell_iterator>
1586 Container::space_dimension>::cell_iterator
1615 for (
unsigned int i = 0; i <
patch.
size(); ++i)
1625 for (
const unsigned int v :
1646 Container::dimension,
1647 Container::space_dimension>::cell_iterator cell =
1655 if (cell->has_children())
1662 for (
unsigned int c = 0; c < cell->n_children(); ++c)
1704 Container::space_dimension>::cell_iterator
1709 if (cell->user_flag_set())
1715 Assert(cell->center().distance(
1717 1e-15 * cell->diameter(),
1725 Container::space_dimension>::cell_iterator,
1726 typename Container::cell_iterator>::iterator
1738 template <
int dim,
int spacedim>
1741 std::vector<typename DoFHandler<dim, spacedim>::active_cell_iterator>>
1755 std::set<typename DoFHandler<dim, spacedim>::active_cell_iterator>>
1758 std::vector<types::global_dof_index> local_dof_indices;
1764 std::vector<bool> user_flags;
1769 std::map<typename DoFHandler<dim, spacedim>::active_line_iterator,
1775 dof_handler.get_triangulation().save_user_flags(user_flags);
1777 dof_handler.get_triangulation())
1778 .clear_user_flags();
1782 cell = dof_handler.begin_active(),
1784 for (; cell !=
endc; ++cell)
1790 if (cell->is_artificial() ==
false)
1792 for (
unsigned int l = 0; l < cell->n_lines(); ++l)
1793 if (cell->line(l)->has_children())
1794 for (
unsigned int c = 0; c < cell->line(l)->n_children();
1801 cell->line(l)->child(c)->set_user_flag();
1815 cell = dof_handler.begin_active(),
1817 for (; cell !=
endc; ++cell)
1822 if (cell->is_artificial() ==
false)
1824 const unsigned int n_dofs_per_cell =
1825 cell->
get_fe().n_dofs_per_cell();
1826 local_dof_indices.resize(n_dofs_per_cell);
1830 cell->get_dof_indices(local_dof_indices);
1831 for (
unsigned int i = 0; i < n_dofs_per_cell; ++i)
1842 for (
const unsigned int f : cell->face_indices())
1844 if (cell->face(f)->has_children())
1846 for (
unsigned int c = 0; c < cell->face(f)->n_children();
1861 Assert(cell->face(f)->child(c)->has_children() ==
false,
1864 const unsigned int n_dofs_per_face =
1865 cell->
get_fe().n_dofs_per_face(f, c);
1868 cell->face(f)->child(c)->get_dof_indices(
1870 for (
unsigned int i = 0; i < n_dofs_per_face; ++i)
1875 else if ((cell->face(f)->at_boundary() ==
false) &&
1876 (cell->neighbor_is_coarser(f)))
1893 std::pair<unsigned int, unsigned int>
1895 cell->neighbor_of_coarser_neighbor(f);
1899 const unsigned int n_dofs_per_face =
1903 cell->neighbor(f)->face(
face_no)->get_dof_indices(
1905 for (
unsigned int i = 0; i < n_dofs_per_face; ++i)
1911 for (
unsigned int c = 0;
1912 c < cell->neighbor(f)->face(
face_no)->n_children();
1918 const unsigned int n_dofs_per_face =
1925 ->has_children() ==
false,
1931 for (
unsigned int i = 0; i < n_dofs_per_face; ++i)
1949 for (
unsigned int l = 0; l < cell->n_lines(); ++l)
1951 if (cell->line(l)->has_children())
1953 for (
unsigned int c = 0;
1954 c < cell->line(l)->n_children();
1957 Assert(cell->line(l)->child(c)->has_children() ==
1963 const unsigned int n_dofs_per_line =
1964 2 * cell->
get_fe().n_dofs_per_vertex() +
1965 cell->
get_fe().n_dofs_per_line();
1968 cell->line(l)->child(c)->get_dof_indices(
1970 for (
unsigned int i = 0; i < n_dofs_per_line; ++i)
1979 else if (cell->line(l)->user_flag_set() ==
true)
1988 const unsigned int n_dofs_per_line =
1989 2 * cell->
get_fe().n_dofs_per_vertex() +
1990 cell->
get_fe().n_dofs_per_line();
1994 for (
unsigned int i = 0; i < n_dofs_per_line; ++i)
1998 for (
unsigned int c = 0; c <
parent_line->n_children();
2005 const unsigned int n_dofs_per_line =
2006 2 * cell->
get_fe().n_dofs_per_vertex() +
2007 cell->
get_fe().n_dofs_per_line();
2012 for (
unsigned int i = 0; i < n_dofs_per_line; ++i)
2029 dof_handler.get_triangulation())
2030 .load_user_flags(user_flags);
2037 std::vector<typename DoFHandler<dim, spacedim>::active_cell_iterator>>
2042 std::set<typename DoFHandler<dim, spacedim>::active_cell_iterator>>
::
2045 for (;
it != it_end; ++
it)
2055 template <
typename CellIterator>
2058 std::set<std::pair<CellIterator, unsigned int>> &
pairs1,
2061 const unsigned int direction,
2067 static const int space_dim = CellIterator::AccessorType::space_dimension;
2073 constexpr int dim = CellIterator::AccessorType::dimension;
2074 constexpr int spacedim = CellIterator::AccessorType::space_dimension;
2080 (
dynamic_cast<const parallel::fullydistributed::
2081 Triangulation<dim, spacedim> *
>(
2082 &
pairs1.
begin()->first->get_triangulation()) !=
nullptr)) ||
2086 *
>(&
pairs2.
begin()->first->get_triangulation()) !=
nullptr))))
2088 ExcMessage(
"Unmatched faces on periodic boundaries"));
2095 std::bitset<3> orientation;
2097 typename std::set<std::pair<CellIterator, unsigned int>>::const_iterator;
2102 const CellIterator
cell1 =
it1->first;
2103 const CellIterator
cell2 =
it2->first;
2132 constexpr int dim = CellIterator::AccessorType::dimension;
2133 constexpr int spacedim = CellIterator::AccessorType::space_dimension;
2135 (
dynamic_cast<const parallel::fullydistributed::
2136 Triangulation<dim, spacedim> *
>(
2137 &
pairs1.
begin()->first->get_triangulation()) !=
nullptr)) ||
2141 *
>(&
pairs2.
begin()->first->get_triangulation()) !=
nullptr))))
2143 ExcMessage(
"Unmatched faces on periodic boundaries"));
2149 template <
typename MeshType>
2154 const unsigned int direction,
2160 static const int dim = MeshType::dimension;
2161 static const int space_dim = MeshType::space_dimension;
2171 std::set<std::pair<typename MeshType::cell_iterator, unsigned int>>
pairs1;
2172 std::set<std::pair<typename MeshType::cell_iterator, unsigned int>>
pairs2;
2174 for (
typename MeshType::cell_iterator cell =
mesh.
begin(0);
2178 const typename MeshType::face_iterator
face_1 =
2179 cell->face(2 * direction);
2180 const typename MeshType::face_iterator
face_2 =
2181 cell->face(2 * direction + 1);
2185 const std::pair<typename MeshType::cell_iterator, unsigned int>
2186 pair1 = std::make_pair(cell, 2 * direction);
2192 const std::pair<typename MeshType::cell_iterator, unsigned int>
2193 pair2 = std::make_pair(cell, 2 * direction + 1);
2199 ExcMessage(
"Unmatched faces on periodic boundaries"));
2202 ExcMessage(
"No new periodic face pairs have been found. "
2203 "Are you sure that you've selected the correct boundary "
2204 "id's and that the coarsest level mesh is colorized?"));
2221 "Found a face match with non standard orientation. "
2222 "This function is only suitable for meshes with cells "
2223 "in default orientation"));
2230 template <
typename MeshType>
2236 const unsigned int direction,
2242 static const int dim = MeshType::dimension;
2243 static const int space_dim = MeshType::space_dimension;
2251 std::set<std::pair<typename MeshType::cell_iterator, unsigned int>>
pairs1;
2252 std::set<std::pair<typename MeshType::cell_iterator, unsigned int>>
pairs2;
2254 for (
typename MeshType::cell_iterator cell =
mesh.
begin(0);
2258 for (
const unsigned int i : cell->face_indices())
2260 const typename MeshType::face_iterator face = cell->face(i);
2261 if (face->at_boundary() && face->boundary_id() ==
b_id1)
2263 const std::pair<typename MeshType::cell_iterator, unsigned int>
2264 pair1 = std::make_pair(cell, i);
2268 if (face->at_boundary() && face->boundary_id() ==
b_id2)
2270 const std::pair<typename MeshType::cell_iterator, unsigned int>
2271 pair2 = std::make_pair(cell, i);
2286 *
>(&
pairs1.
begin()->first->get_triangulation()) !=
nullptr)) ||
2290 *
>(&
pairs2.
begin()->first->get_triangulation()) !=
nullptr))))
2292 ExcMessage(
"Unmatched faces on periodic boundaries"));
2298 &
mesh.
begin()->get_triangulation()) !=
nullptr)),
2299 ExcMessage(
"No new periodic face pairs have been found. "
2300 "Are you sure that you've selected the correct boundary "
2301 "id's and that the coarsest level mesh is colorized?"));
2319 template <
int spacedim>
2323 const unsigned int direction,
2333 if (matrix.m() == spacedim)
2334 for (
unsigned int i = 0; i < spacedim; ++i)
2335 for (
unsigned int j = 0;
j < spacedim; ++
j)
2336 distance(i) += matrix(i,
j) *
point1(
j);
2340 distance += offset -
point2;
2342 for (
unsigned int i = 0; i < spacedim; ++i)
2348 if (
std::abs(distance(i)) > 1.e-10)
2374 std::array<unsigned int, GeometryInfo<1>::vertices_per_face>;
2375 static inline std::bitset<3>
2387 std::array<unsigned int, GeometryInfo<2>::vertices_per_face>;
2388 static inline std::bitset<3>
2413 std::array<unsigned int, GeometryInfo<3>::vertices_per_face>;
2415 static inline std::bitset<3>
2456 template <
typename FaceIterator>
2459 std::bitset<3> & orientation,
2462 const unsigned int direction,
2466 Assert(matrix.m() == matrix.n(),
2467 ExcMessage(
"The supplied matrix must be a square matrix"));
2469 static const int dim = FaceIterator::AccessorType::dimension;
2473 std::array<unsigned int, GeometryInfo<dim>::vertices_per_face>
matching;
2478 for (
unsigned int i = 0; i <
face1->n_vertices(); ++i)
2481 for (
unsigned int i = 0; i <
face1->n_vertices(); ++i)
2509 template <
typename FaceIterator>
2514 const unsigned int direction,
2519 std::bitset<3>
dummy;
2528#include "grid_tools_dof_handlers.inst"
const FiniteElement< dim, spacedim > & get_fe(const types::fe_index index=0) const
Abstract base class for mapping classes.
unsigned int size() const
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_CXX20_REQUIRES(condition)
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
static ::ExceptionBase & ExcVertexNotUsed(unsigned int arg1)
#define AssertDimension(dim1, dim2)
#define AssertIndexRange(index, range)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)
typename ActiveSelector::line_iterator line_iterator
typename ActiveSelector::active_cell_iterator active_cell_iterator
const Mapping< dim, spacedim > & get_default_linear_mapping(const Triangulation< dim, spacedim > &triangulation)
static const unsigned int invalid_unsigned_int
typename type_identity< T >::type type_identity_t
::VectorizedArray< Number, width > min(const ::VectorizedArray< Number, width > &, const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > max(const ::VectorizedArray< Number, width > &, const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > abs(const ::VectorizedArray< Number, width > &)
unsigned int global_dof_index
const ::Triangulation< dim, spacedim > & tria