deal.II version 9.7.0
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Loading...
Searching...
No Matches
grid_tools_topology.h
Go to the documentation of this file.
1// ------------------------------------------------------------------------
2//
3// SPDX-License-Identifier: LGPL-2.1-or-later
4// Copyright (C) 2023 - 2024 by the deal.II authors
5//
6// This file is part of the deal.II library.
7//
8// Part of the source code is dual licensed under Apache-2.0 WITH
9// LLVM-exception OR LGPL-2.1-or-later. Detailed license information
10// governing the source code and code contributions can be found in
11// LICENSE.md and CONTRIBUTING.md at the top level directory of deal.II.
12//
13// ------------------------------------------------------------------------
14
15#ifndef dealii_grid_tools_topology_h
16#define dealii_grid_tools_topology_h
17
18#include <deal.II/base/config.h>
19
20#include <deal.II/base/point.h>
22
23#include <deal.II/grid/tria.h>
25
27
28#include <list>
29#include <map>
30#include <set>
31#include <tuple>
32#include <utility>
33#include <vector>
34
36
37namespace GridTools
38{
59 template <int dim, int spacedim>
60 std::
61 tuple<std::vector<Point<spacedim>>, std::vector<CellData<dim>>, SubCellData>
62 get_coarse_mesh_description(const Triangulation<dim, spacedim> &tria);
63
80 template <int dim, int spacedim>
81 void
82 delete_unused_vertices(std::vector<Point<spacedim>> &vertices,
83 std::vector<CellData<dim>> &cells,
84 SubCellData &subcelldata);
85
104 template <int dim, int spacedim>
105 void
106 delete_duplicated_vertices(std::vector<Point<spacedim>> &all_vertices,
107 std::vector<CellData<dim>> &cells,
108 SubCellData &subcelldata,
109 std::vector<unsigned int> &considered_vertices,
110 const double tol = 1e-12);
111
119 template <int dim>
120 void
121 delete_duplicated_vertices(std::vector<Point<dim>> &vertices,
122 const double tol = 1e-12);
123
142 template <int dim, int spacedim>
143 void
145 const std::vector<Point<spacedim>> &all_vertices,
146 std::vector<CellData<dim>> &cells);
147
157 template <int dim, int spacedim>
158 std::size_t
160 const std::vector<Point<spacedim>> &all_vertices,
161 std::vector<CellData<dim>> &cells);
162
174 template <int dim>
175 void
176 consistently_order_cells(std::vector<CellData<dim>> &cells);
177
183 template <int dim, int spacedim>
184 std::map<unsigned int, Point<spacedim>>
185 get_all_vertices_at_boundary(const Triangulation<dim, spacedim> &tria);
186
204 template <int dim, int spacedim>
205 std::vector<std::vector<std::pair<unsigned int, Point<spacedim>>>>
207 const Triangulation<dim, spacedim> &tria,
208 const Mapping<dim, spacedim> &mapping =
210#ifndef _MSC_VER
212#else
214#endif
215 ));
216
250 template <int dim, int spacedim>
251 void
252 remove_hanging_nodes(Triangulation<dim, spacedim> &tria,
253 const bool isotropic = false,
254 const unsigned int max_iterations = 100);
255
280 template <int dim, int spacedim>
281 void
282 remove_anisotropy(Triangulation<dim, spacedim> &tria,
283 const double max_ratio = 1.6180339887,
284 const unsigned int max_iterations = 5);
285
322 template <int dim, int spacedim>
323 std::map<unsigned int, Point<spacedim>>
325 const Triangulation<dim, spacedim> &container,
326 const Mapping<dim, spacedim> &mapping =
328#ifndef _MSC_VER
330#else
332#endif
333 ));
334
343 template <int dim, int spacedim>
344 std::vector<
345 std::set<typename Triangulation<dim, spacedim>::active_cell_iterator>>
346 vertex_to_cell_map(const Triangulation<dim, spacedim> &triangulation);
347
356 template <int dim, int spacedim>
357 void
359 const Triangulation<dim, spacedim> &triangulation,
360 DynamicSparsityPattern &connectivity);
361
370 template <int dim, int spacedim>
371 void
373 const Triangulation<dim, spacedim> &triangulation,
374 DynamicSparsityPattern &connectivity);
375
384 template <int dim, int spacedim>
385 void
387 const Triangulation<dim, spacedim> &triangulation,
388 const unsigned int level,
389 DynamicSparsityPattern &connectivity);
390
392
397
433 template <typename MeshType>
434 DEAL_II_CXX20_REQUIRES(concepts::is_triangulation_or_dof_handler<MeshType>)
435 std::list<std::pair<
436 typename MeshType::cell_iterator,
437 typename MeshType::cell_iterator>> get_finest_common_cells(const MeshType
438 &mesh_1,
439 const MeshType
440 &mesh_2);
441
451 template <int dim, int spacedim>
452 bool
453 have_same_coarse_mesh(const Triangulation<dim, spacedim> &mesh_1,
454 const Triangulation<dim, spacedim> &mesh_2);
455
467 template <typename MeshType>
468 DEAL_II_CXX20_REQUIRES(concepts::is_triangulation_or_dof_handler<MeshType>)
469 bool have_same_coarse_mesh(const MeshType &mesh_1, const MeshType &mesh_2);
470
472
477
485 "The edges of the mesh are not consistently orientable.");
486
488} // namespace GridTools
489
491
492#endif
const Mapping< dim, spacedim > & get_default_linear_mapping() const
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:40
#define DEAL_II_CXX20_REQUIRES(condition)
Definition config.h:248
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:41
static ::ExceptionBase & ExcMeshNotOrientable()
#define DeclExceptionMsg(Exception, defaulttext)
void consistently_order_cells(std::vector< CellData< dim > > &cells)
const Mapping< dim, spacedim > & get_default_linear_mapping(const Triangulation< dim, spacedim > &triangulation)
Definition mapping.cc:316
MappingQ< dim, spacedim > StaticMappingQ1< dim, spacedim >::mapping
Definition mapping_q1.h:104
void get_face_connectivity_of_cells(const Triangulation< dim, spacedim > &triangulation, DynamicSparsityPattern &connectivity)
void delete_unused_vertices(std::vector< Point< spacedim > > &vertices, std::vector< CellData< dim > > &cells, SubCellData &subcelldata)
std::map< unsigned int, Point< spacedim > > get_all_vertices_at_boundary(const Triangulation< dim, spacedim > &tria)
std::map< unsigned int, Point< spacedim > > extract_used_vertices(const Triangulation< dim, spacedim > &container, const Mapping< dim, spacedim > &mapping=(ReferenceCells::get_hypercube< dim >() .template get_default_linear_mapping< dim, spacedim >()))
std::list< std::pair< typename MeshType::cell_iterator, typename MeshType::cell_iterator > > get_finest_common_cells(const MeshType &mesh_1, const MeshType &mesh_2)
void remove_anisotropy(Triangulation< dim, spacedim > &tria, const double max_ratio=1.6180339887, const unsigned int max_iterations=5)
std::vector< std::vector< std::pair< unsigned int, Point< spacedim > > > > extract_ordered_boundary_vertices(const Triangulation< dim, spacedim > &tria, const Mapping< dim, spacedim > &mapping=(ReferenceCells::get_hypercube< dim >() .template get_default_linear_mapping< dim, spacedim >()))
void remove_hanging_nodes(Triangulation< dim, spacedim > &tria, const bool isotropic=false, const unsigned int max_iterations=100)
std::size_t invert_cells_with_negative_measure(const std::vector< Point< spacedim > > &all_vertices, std::vector< CellData< dim > > &cells)
void delete_duplicated_vertices(std::vector< Point< spacedim > > &all_vertices, std::vector< CellData< dim > > &cells, SubCellData &subcelldata, std::vector< unsigned int > &considered_vertices, const double tol=1e-12)
std::vector< std::set< typename Triangulation< dim, spacedim >::active_cell_iterator > > vertex_to_cell_map(const Triangulation< dim, spacedim > &triangulation)
bool have_same_coarse_mesh(const Triangulation< dim, spacedim > &mesh_1, const Triangulation< dim, spacedim > &mesh_2)
void get_vertex_connectivity_of_cells(const Triangulation< dim, spacedim > &triangulation, DynamicSparsityPattern &connectivity)
void get_vertex_connectivity_of_cells_on_level(const Triangulation< dim, spacedim > &triangulation, const unsigned int level, DynamicSparsityPattern &connectivity)
void invert_all_negative_measure_cells(const std::vector< Point< spacedim > > &all_vertices, std::vector< CellData< dim > > &cells)
std::tuple< std::vector< Point< spacedim > >, std::vector< CellData< dim > >, SubCellData > get_coarse_mesh_description(const Triangulation< dim, spacedim > &tria)
constexpr const ReferenceCell & get_hypercube()