deal.II version GIT relicensing-6816-g8d70a4508a 2026-09-28 16:30:01+00:00
\(\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: Apache-2.0 WITH LLVM-exception OR LGPL-2.1-or-later
4// Copyright (C) 2023 - 2026 by the deal.II authors
5//
6// This file is part of the deal.II library.
7//
8// Detailed license information governing the source code and contributions
9// can be found in LICENSE.md and CONTRIBUTING.md at the top level directory.
10//
11// -----------------------------------------------------------------------------
12
13#ifndef dealii_grid_tools_topology_h
14#define dealii_grid_tools_topology_h
15
16#include <deal.II/base/config.h>
17
18#include <deal.II/base/point.h>
20
21#include <deal.II/grid/tria.h>
23
25
26#include <list>
27#include <map>
28#include <set>
29#include <tuple>
30#include <utility>
31#include <vector>
32
34
35namespace GridTools
36{
57 template <int dim, int spacedim>
58 std::
59 tuple<std::vector<Point<spacedim>>, std::vector<CellData<dim>>, SubCellData>
61
78 template <int dim, int spacedim>
79 void
80 delete_unused_vertices(std::vector<Point<spacedim>> &vertices,
81 std::vector<CellData<dim>> &cells,
82 SubCellData &subcelldata);
83
102 template <int dim, int spacedim>
103 void
104 delete_duplicated_vertices(std::vector<Point<spacedim>> &all_vertices,
105 std::vector<CellData<dim>> &cells,
106 SubCellData &subcelldata,
107 std::vector<unsigned int> &considered_vertices,
108 const double tol = 1e-12);
109
117 template <int dim>
118 void
119 delete_duplicated_vertices(std::vector<Point<dim>> &vertices,
120 const double tol = 1e-12);
121
140 template <int dim, int spacedim>
141 void
143 const std::vector<Point<spacedim>> &all_vertices,
144 std::vector<CellData<dim>> &cells);
145
155 template <int dim, int spacedim>
156 std::size_t
158 const std::vector<Point<spacedim>> &all_vertices,
159 std::vector<CellData<dim>> &cells);
160
172 template <int dim>
173 void
174 consistently_order_cells(std::vector<CellData<dim>> &cells);
175
181 template <int dim, int spacedim>
182 std::map<unsigned int, Point<spacedim>>
184
202 template <int dim, int spacedim>
203 std::vector<std::vector<std::pair<unsigned int, Point<spacedim>>>>
206 const Mapping<dim, spacedim> &mapping =
207 (ReferenceCells::get_hypercube<dim>()
208#ifndef _MSC_VER
209 .template get_default_linear_mapping<spacedim>()
210#else
212#endif
213 ));
214
248 template <int dim, int spacedim>
249 void
251 const bool isotropic = false,
252 const unsigned int max_iterations = 100);
253
278 template <int dim, int spacedim>
279 void
281 const double max_ratio = 1.6180339887,
282 const unsigned int max_iterations = 5);
283
320 template <int dim, int spacedim>
321 std::map<unsigned int, Point<spacedim>>
323 const Mapping<dim, spacedim> &mapping =
324 (ReferenceCells::get_hypercube<dim>()
325#ifndef _MSC_VER
326 .template get_default_linear_mapping<spacedim>()
327#else
329 spacedim>()
330#endif
331 ));
332
341 template <int dim, int spacedim>
342 std::vector<
343 std::set<typename Triangulation<dim, spacedim>::active_cell_iterator>>
345
354 template <int dim, int spacedim>
355 void
357 const Triangulation<dim, spacedim> &triangulation,
358 DynamicSparsityPattern &connectivity);
359
368 template <int dim, int spacedim>
369 void
371 const Triangulation<dim, spacedim> &triangulation,
372 DynamicSparsityPattern &connectivity);
373
382 template <int dim, int spacedim>
383 void
385 const Triangulation<dim, spacedim> &triangulation,
386 const unsigned int level,
387 DynamicSparsityPattern &connectivity);
388
431 template <typename MeshType>
433 std::list<std::pair<
434 typename MeshType::cell_iterator,
435 typename MeshType::cell_iterator>> get_finest_common_cells(const MeshType
436 &mesh_1,
437 const MeshType
438 &mesh_2);
439
449 template <int dim, int spacedim>
450 bool
452 const Triangulation<dim, spacedim> &mesh_2);
453
465 template <typename MeshType>
467 bool have_same_coarse_mesh(const MeshType &mesh_1, const MeshType &mesh_2);
468
469 namespace internal
470 {
481 template <int dim, int spacedim>
482 void
486 } // namespace internal
487
502 "The edges of the mesh are not consistently orientable.");
503
505} // namespace GridTools
506
508
509#endif
Abstract base class for mapping classes.
Definition mapping.h:318
Definition point.h:111
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_CXX20_REQUIRES(condition)
Definition config.h:249
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39
unsigned int level
Definition grid_out.cc:4642
unsigned int vertex_indices[2]
static ::ExceptionBase & ExcMeshNotOrientable()
#define DeclExceptionMsg(Exception, defaulttext)
void consistently_order_cells(std::vector< CellData< dim > > &cells)
void extract_vertices_without_cache(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const ArrayView< unsigned int > &vertex_indices)
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::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< 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)
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)
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< spacedim >()))