Reference documentation for deal.II version Git e3a3ec7800 2020-08-07 14:08:19 +0200
\(\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\}}\)
Classes | Namespaces | Macros | Functions
grid_tools.cc File Reference
#include <deal.II/base/mpi.h>
#include <deal.II/base/mpi.templates.h>
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/base/thread_management.h>
#include <deal.II/distributed/shared_tria.h>
#include <deal.II/distributed/tria.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_nothing.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/fe/mapping_q1.h>
#include <deal.II/fe/mapping_q_generic.h>
#include <deal.II/grid/filtered_iterator.h>
#include <deal.II/grid/grid_reordering.h>
#include <deal.II/grid/grid_tools.h>
#include <deal.II/grid/grid_tools_cache.h>
#include <deal.II/grid/manifold.h>
#include <deal.II/grid/tria.h>
#include <deal.II/grid/tria_accessor.h>
#include <deal.II/grid/tria_iterator.h>
#include <deal.II/lac/constrained_linear_operator.h>
#include <deal.II/lac/dynamic_sparsity_pattern.h>
#include <deal.II/lac/precondition.h>
#include <deal.II/lac/solver_cg.h>
#include <deal.II/lac/sparse_matrix.h>
#include <deal.II/lac/sparsity_pattern.h>
#include <deal.II/lac/sparsity_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/vector_memory.h>
#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/vector_tools_integrate_difference.h>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/uniform_real_distribution.hpp>
#include <array>
#include <cmath>
#include <iostream>
#include <list>
#include <numeric>
#include <set>
#include <tuple>
#include <unordered_map>
#include "grid_tools.inst"

Go to the source code of this file.

Classes

struct  GridTools::internal::CellDataComparator< structdim >
 
class  GridTools::internal::FaceDataHelper< dim >
 
class  GridTools::internal::FaceDataHelper< 1 >
 
class  GridTools::internal::Shift< spacedim >
 
class  GridTools::internal::Rotate3d
 
class  GridTools::internal::Scale< spacedim >
 
struct  GridTools::internal::DistributedComputePointLocations::cell_hash< dim, spacedim >
 

Namespaces

 GridTools
 
 GridTools::internal
 
 GridTools::internal::BoundingBoxPredicate
 
 GridTools::internal::FixUpDistortedChildCells
 
 GridTools::internal::DistributedComputePointLocations
 

Macros

#define SPLIT_INSTANTIATIONS_COUNT   2
 
#define SPLIT_INSTANTIATIONS_INDEX   0
 

Functions

void GridTools::internal::append_face_data (const CellData< 1 > &face_data, SubCellData &subcell_data)
 
void GridTools::internal::append_face_data (const CellData< 2 > &face_data, SubCellData &subcell_data)
 
void GridTools::internal::laplace_solve (const SparseMatrix< double > &S, const AffineConstraints< double > &constraints, Vector< double > &u)
 
template<int dim>
void GridTools::laplace_transform (const std::map< unsigned int, Point< dim >> &new_points, Triangulation< dim > &triangulation, const Function< dim > *coefficient, const bool solve_for_absolute_positions)
 
template<int spacedim>
bool GridTools::internal::compare_point_association (const unsigned int a, const unsigned int b, const Tensor< 1, spacedim > &point_direction, const std::vector< Tensor< 1, spacedim >> &center_directions)
 
template<class MeshType >
std::tuple< BoundingBox< MeshType::space_dimension >, boolGridTools::internal::BoundingBoxPredicate::compute_cell_predicate_bounding_box (const typename MeshType::cell_iterator &parent_cell, const std::function< bool(const typename MeshType::active_cell_iterator &)> &predicate)
 
template<class IT >
void GridTools::internal::set_subdomain_id_in_zorder_recursively (IT cell, unsigned int &current_proc_idx, unsigned int &current_cell_idx, const unsigned int n_active_cells, const unsigned int n_partitions)
 
template<int dim, int spacedim>
double GridTools::internal::diameter (const typename Triangulation< dim, spacedim >::cell_iterator &cell, const Mapping< dim, spacedim > &mapping)
 
template<typename Iterator , int spacedim>
double GridTools::internal::FixUpDistortedChildCells::objective_function (const Iterator &object, const Point< spacedim > &object_mid_point)
 
template<typename Iterator >
Point< Iterator::AccessorType::space_dimension > GridTools::internal::FixUpDistortedChildCells::get_face_midpoint (const Iterator &object, const unsigned int f, std::integral_constant< int, 1 >)
 
template<typename Iterator >
Point< Iterator::AccessorType::space_dimension > GridTools::internal::FixUpDistortedChildCells::get_face_midpoint (const Iterator &object, const unsigned int f, std::integral_constant< int, 2 >)
 
template<typename Iterator >
Point< Iterator::AccessorType::space_dimension > GridTools::internal::FixUpDistortedChildCells::get_face_midpoint (const Iterator &object, const unsigned int f, std::integral_constant< int, 3 >)
 
template<typename Iterator >
double GridTools::internal::FixUpDistortedChildCells::minimal_diameter (const Iterator &object)
 
template<typename Iterator >
bool GridTools::internal::FixUpDistortedChildCells::fix_up_object (const Iterator &object)
 
template<int dim, int spacedim>
void GridTools::internal::FixUpDistortedChildCells::fix_up_faces (const typename ::Triangulation< dim, spacedim >::cell_iterator &cell, std::integral_constant< int, dim >, std::integral_constant< int, spacedim >)
 
template<int dim, int spacedim>
std::unordered_map< typename Triangulation< dim, spacedim >::active_cell_iterator, std::pair< std::vector< Point< dim > >, std::vector< unsigned int > >, cell_hash< dim, spacedim > > GridTools::internal::DistributedComputePointLocations::compute_point_locations (const GridTools::Cache< dim, spacedim > &cache, const std::vector< Point< spacedim >> &points)
 
template<int dim, int spacedim>
void GridTools::internal::DistributedComputePointLocations::merge_into_point_locations (const std::vector< typename Triangulation< dim, spacedim >::active_cell_iterator > &cells, const std::vector< std::vector< Point< dim >>> &qpoints, const std::vector< std::vector< unsigned int >> &maps, const std::vector< std::vector< Point< spacedim >>> &points, const unsigned int rank, std::unordered_map< typename Triangulation< dim, spacedim >::active_cell_iterator, std::tuple< std::vector< Point< dim >>, std::vector< unsigned int >, std::vector< Point< spacedim >>, std::vector< unsigned int >>, cell_hash< dim, spacedim >> &point_locations)
 
template<int dim, int spacedim>
void GridTools::internal::DistributedComputePointLocations::compute_and_classify_points (const GridTools::Cache< dim, spacedim > &cache, const std::vector< Point< spacedim >> &local_points, const std::vector< unsigned int > &local_points_idx, std::unordered_map< typename Triangulation< dim, spacedim >::active_cell_iterator, std::tuple< std::vector< Point< dim >>, std::vector< unsigned int >, std::vector< Point< spacedim >>, std::vector< unsigned int >>, cell_hash< dim, spacedim >> &locally_owned_locations, std::map< unsigned int, std::tuple< std::vector< CellId >, std::vector< std::vector< Point< dim >>>, std::vector< std::vector< unsigned int >>, std::vector< std::vector< Point< spacedim >>>>> &ghost_cell_locations, std::vector< unsigned int > &found_location_indices)
 
template<int dim, int spacedim>
void GridTools::internal::DistributedComputePointLocations::merge_received_point_locations (const GridTools::Cache< dim, spacedim > &cache, const std::map< unsigned int, std::pair< std::vector< Point< spacedim >>, std::vector< unsigned int >>> &received_point_locations, std::unordered_map< typename Triangulation< dim, spacedim >::active_cell_iterator, std::tuple< std::vector< Point< dim >>, std::vector< unsigned int >, std::vector< Point< spacedim >>, std::vector< unsigned int >>, cell_hash< dim, spacedim >> &point_locations, const bool check_owned)
 
template<int spacedim>
std::vector< std::vector< BoundingBox< spacedim > > > GridTools::exchange_local_bounding_boxes (const std::vector< BoundingBox< spacedim >> &local_bboxes, MPI_Comm mpi_communicator)
 
template<int spacedim>
RTree< std::pair< BoundingBox< spacedim >, unsigned int > > GridTools::build_global_description_tree (const std::vector< BoundingBox< spacedim >> &local_description, MPI_Comm mpi_communicator)
 
template<int dim, int spacedim>
void GridTools::collect_coinciding_vertices (const Triangulation< dim, spacedim > &tria, std::map< unsigned int, std::vector< unsigned int >> &coinciding_vertex_groups, std::map< unsigned int, unsigned int > &vertex_to_coinciding_vertex_group)
 
template<int dim, int spacedim>
std::map< unsigned int, std::set<::types::subdomain_id > > GridTools::compute_vertices_with_ghost_neighbors (const Triangulation< dim, spacedim > &tria)
 
Information about meshes and cells
template<int dim, int spacedim>
double GridTools::diameter (const Triangulation< dim, spacedim > &tria)
 
template<int dim, int spacedim>
double GridTools::volume (const Triangulation< dim, spacedim > &tria, const Mapping< dim, spacedim > &mapping=(StaticMappingQ1< dim, spacedim >::mapping))
 
template<int dim>
Vector< doubleGridTools::compute_aspect_ratio_of_cells (const Mapping< dim > &mapping, const Triangulation< dim > &triangulation, const Quadrature< dim > &quadrature)
 
template<int dim>
double GridTools::compute_maximum_aspect_ratio (const Mapping< dim > &mapping, const Triangulation< dim > &triangulation, const Quadrature< dim > &quadrature)
 
template<int dim, int spacedim>
BoundingBox< spacedim > GridTools::compute_bounding_box (const Triangulation< dim, spacedim > &triangulation)
 
template<int dim, int spacedim>
std::tuple< std::vector< Point< spacedim > >, std::vector< CellData< dim > >, SubCellDataGridTools::get_coarse_mesh_description (const Triangulation< dim, spacedim > &tria)
 
template<int dim, int spacedim>
double GridTools::minimal_cell_diameter (const Triangulation< dim, spacedim > &triangulation, const Mapping< dim, spacedim > &mapping=(StaticMappingQ1< dim, spacedim >::mapping))
 
template<int dim, int spacedim>
double GridTools::maximal_cell_diameter (const Triangulation< dim, spacedim > &triangulation, const Mapping< dim, spacedim > &mapping=(StaticMappingQ1< dim, spacedim >::mapping))
 
Functions supporting the creation of meshes
template<int dim, int spacedim>
void GridTools::delete_unused_vertices (std::vector< Point< spacedim >> &vertices, std::vector< CellData< dim >> &cells, SubCellData &subcelldata)
 
template<int dim, int spacedim>
void GridTools::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)
 
Rotating, stretching and otherwise transforming meshes
template<int dim, int spacedim>
void GridTools::shift (const Tensor< 1, spacedim > &shift_vector, Triangulation< dim, spacedim > &triangulation)
 
template<int dim>
void GridTools::rotate (const double angle, const unsigned int axis, Triangulation< dim, 3 > &triangulation)
 
template<int dim, int spacedim>
void GridTools::scale (const double scaling_factor, Triangulation< dim, spacedim > &triangulation)
 
template<int dim, int spacedim>
std::map< unsigned int, Point< spacedim > > GridTools::get_all_vertices_at_boundary (const Triangulation< dim, spacedim > &tria)
 
template<int dim, int spacedim>
void GridTools::distort_random (const double factor, Triangulation< dim, spacedim > &triangulation, const bool keep_boundary=true)
 
template<int dim, int spacedim>
void GridTools::remove_hanging_nodes (Triangulation< dim, spacedim > &tria, const bool isotropic=false, const unsigned int max_iterations=100)
 
template<int dim, int spacedim>
void GridTools::remove_anisotropy (Triangulation< dim, spacedim > &tria, const double max_ratio=1.6180339887, const unsigned int max_iterations=5)
 
template<int dim, int spacedim>
void GridTools::regularize_corner_cells (Triangulation< dim, spacedim > &tria, const double limit_angle_fraction=.75)
 
Finding cells and vertices of a triangulation
template<int dim, template< int, int > class MeshType, int spacedim>
unsigned int GridTools::find_closest_vertex (const MeshType< dim, spacedim > &mesh, const Point< spacedim > &p, const std::vector< bool > &marked_vertices={})
 
template<int dim, template< int, int > class MeshType, int spacedim>
unsigned int GridTools::find_closest_vertex (const Mapping< dim, spacedim > &mapping, const MeshType< dim, spacedim > &mesh, const Point< spacedim > &p, const std::vector< bool > &marked_vertices={})
 
template<int dim, template< int, int > class MeshType, int spacedim>
std::vector< typename MeshType< dim, spacedim >::active_cell_iterator > GridTools::find_cells_adjacent_to_vertex (const MeshType< dim, spacedim > &container, const unsigned int vertex_index)
 
template<int dim, int spacedim>
std::vector< std::vector< Tensor< 1, spacedim > > > GridTools::vertex_to_cell_centers_directions (const Triangulation< dim, spacedim > &mesh, const std::vector< std::set< typename Triangulation< dim, spacedim >::active_cell_iterator >> &vertex_to_cells)
 
template<int dim, template< int, int > class MeshType, int spacedim>
std::pair< typename MeshType< dim, spacedim >::active_cell_iterator, Point< dim > > GridTools::find_active_cell_around_point (const Mapping< dim, spacedim > &mapping, const MeshType< dim, spacedim > &mesh, const Point< spacedim > &p, const std::vector< std::set< typename MeshType< dim, spacedim >::active_cell_iterator >> &vertex_to_cell_map, const std::vector< std::vector< Tensor< 1, spacedim >>> &vertex_to_cell_centers, const typename MeshType< dim, spacedim >::active_cell_iterator &cell_hint=typename MeshType< dim, spacedim >::active_cell_iterator(), const std::vector< bool > &marked_vertices={}, const RTree< std::pair< Point< spacedim >, unsigned int >> &used_vertices_rtree=RTree< std::pair< Point< spacedim >, unsigned int >>{}, const double tolerance=1.e-10)
 
template<int dim, int spacedim>
unsigned int GridTools::find_closest_vertex_of_cell (const typename Triangulation< dim, spacedim >::active_cell_iterator &cell, const Point< spacedim > &position, const Mapping< dim, spacedim > &mapping=StaticMappingQ1< dim, spacedim >::mapping)
 
template<class MeshType >
std::vector< BoundingBox< MeshType::space_dimension > > GridTools::compute_mesh_predicate_bounding_box (const MeshType &mesh, const std::function< bool(const typename MeshType::active_cell_iterator &)> &predicate, const unsigned int refinement_level=0, const bool allow_merge=false, const unsigned int max_boxes=numbers::invalid_unsigned_int)
 
template<int spacedim>
return_type GridTools::guess_point_owner (const std::vector< std::vector< BoundingBox< spacedim >>> &global_bboxes, const std::vector< Point< spacedim >> &points)
 
template<int spacedim>
return_type GridTools::guess_point_owner (const RTree< std::pair< BoundingBox< spacedim >, unsigned int >> &covering_rtree, const std::vector< Point< spacedim >> &points)
 
template<int dim, int spacedim>
std::vector< std::set< typename Triangulation< dim, spacedim >::active_cell_iterator > > GridTools::vertex_to_cell_map (const Triangulation< dim, spacedim > &triangulation)
 
template<int dim, int spacedim>
std::map< unsigned int, types::global_vertex_indexGridTools::compute_local_to_global_vertex_index_map (const parallel::distributed::Triangulation< dim, spacedim > &triangulation)
 
template<int dim, int spacedim>
std::pair< unsigned int, doubleGridTools::get_longest_direction (typename Triangulation< dim, spacedim >::active_cell_iterator cell)
 
template<int dim, int spacedim>
return_type GridTools::compute_point_locations (const Cache< dim, spacedim > &cache, const std::vector< Point< spacedim >> &points, const typename Triangulation< dim, spacedim >::active_cell_iterator &cell_hint=typename Triangulation< dim, spacedim >::active_cell_iterator())
 
template<int dim, int spacedim>
return_type GridTools::compute_point_locations_try_all (const Cache< dim, spacedim > &cache, const std::vector< Point< spacedim >> &points, const typename Triangulation< dim, spacedim >::active_cell_iterator &cell_hint=typename Triangulation< dim, spacedim >::active_cell_iterator())
 
template<int dim, int spacedim>
return_type GridTools::distributed_compute_point_locations (const GridTools::Cache< dim, spacedim > &cache, const std::vector< Point< spacedim >> &local_points, const std::vector< std::vector< BoundingBox< spacedim >>> &global_bboxes)
 
template<int dim, int spacedim>
std::map< unsigned int, Point< spacedim > > GridTools::extract_used_vertices (const Triangulation< dim, spacedim > &container, const Mapping< dim, spacedim > &mapping=StaticMappingQ1< dim, spacedim >::mapping)
 
template<int spacedim>
unsigned int GridTools::find_closest_vertex (const std::map< unsigned int, Point< spacedim >> &vertices, const Point< spacedim > &p)
 
template<int dim, int spacedim>
std::pair< typename Triangulation< dim, spacedim >::active_cell_iterator, Point< dim > > GridTools::find_active_cell_around_point (const Cache< dim, spacedim > &cache, const Point< spacedim > &p, const typename Triangulation< dim, spacedim >::active_cell_iterator &cell_hint=typename Triangulation< dim, spacedim >::active_cell_iterator(), const std::vector< bool > &marked_vertices={}, const double tolerance=1.e-10)
 
Partitions and subdomains of triangulations
template<int dim, int spacedim>
void GridTools::get_face_connectivity_of_cells (const Triangulation< dim, spacedim > &triangulation, DynamicSparsityPattern &connectivity)
 
template<int dim, int spacedim>
void GridTools::get_vertex_connectivity_of_cells (const Triangulation< dim, spacedim > &triangulation, DynamicSparsityPattern &connectivity)
 
template<int dim, int spacedim>
void GridTools::get_vertex_connectivity_of_cells_on_level (const Triangulation< dim, spacedim > &triangulation, const unsigned int level, DynamicSparsityPattern &connectivity)
 
template<int dim, int spacedim>
void GridTools::partition_triangulation (const unsigned int n_partitions, Triangulation< dim, spacedim > &triangulation, const SparsityTools::Partitioner partitioner=SparsityTools::Partitioner::metis)
 
template<int dim, int spacedim>
void GridTools::partition_triangulation (const unsigned int n_partitions, const std::vector< unsigned int > &cell_weights, Triangulation< dim, spacedim > &triangulation, const SparsityTools::Partitioner partitioner=SparsityTools::Partitioner::metis)
 
template<int dim, int spacedim>
void GridTools::partition_triangulation (const unsigned int n_partitions, const SparsityPattern &cell_connection_graph, Triangulation< dim, spacedim > &triangulation, const SparsityTools::Partitioner partitioner=SparsityTools::Partitioner::metis)
 
template<int dim, int spacedim>
void GridTools::partition_triangulation (const unsigned int n_partitions, const std::vector< unsigned int > &cell_weights, const SparsityPattern &cell_connection_graph, Triangulation< dim, spacedim > &triangulation, const SparsityTools::Partitioner partitioner=SparsityTools::Partitioner::metis)
 
template<int dim, int spacedim>
void GridTools::partition_triangulation_zorder (const unsigned int n_partitions, Triangulation< dim, spacedim > &triangulation, const bool group_siblings=true)
 
template<int dim, int spacedim>
void GridTools::partition_multigrid_levels (Triangulation< dim, spacedim > &triangulation)
 
template<int dim, int spacedim>
void GridTools::get_subdomain_association (const Triangulation< dim, spacedim > &triangulation, std::vector< types::subdomain_id > &subdomain)
 
template<int dim, int spacedim>
unsigned int GridTools::count_cells_with_subdomain_association (const Triangulation< dim, spacedim > &triangulation, const types::subdomain_id subdomain)
 
template<int dim, int spacedim>
std::vector< boolGridTools::get_locally_owned_vertices (const Triangulation< dim, spacedim > &triangulation)
 
Dealing with distorted cells
template<int dim, int spacedim>
Triangulation< dim, spacedim >::DistortedCellList GridTools::fix_up_distorted_child_cells (const typename Triangulation< dim, spacedim >::DistortedCellList &distorted_cells, Triangulation< dim, spacedim > &triangulation)
 
Dealing with boundary and manifold ids
template<int dim, int spacedim>
void GridTools::copy_boundary_to_manifold_id (Triangulation< dim, spacedim > &tria, const bool reset_boundary_ids=false)
 
template<int dim, int spacedim>
void GridTools::map_boundary_to_manifold_ids (const std::vector< types::boundary_id > &src_boundary_ids, const std::vector< types::manifold_id > &dst_manifold_ids, Triangulation< dim, spacedim > &tria, const std::vector< types::boundary_id > &reset_boundary_ids={})
 
template<int dim, int spacedim>
void GridTools::copy_material_to_manifold_id (Triangulation< dim, spacedim > &tria, const bool compute_face_ids=false)
 
template<int dim, int spacedim>
void GridTools::assign_co_dimensional_manifold_indicators (Triangulation< dim, spacedim > &tria, const std::function< types::manifold_id(const std::set< types::manifold_id > &)> &disambiguation_function=[](const std::set< types::manifold_id > &manifold_ids) { if(manifold_ids.size()==1) return *manifold_ids.begin();else return numbers::flat_manifold_id;}, bool overwrite_only_flat_manifold_ids=true)
 

Macro Definition Documentation

◆ SPLIT_INSTANTIATIONS_COUNT

#define SPLIT_INSTANTIATIONS_COUNT   2

Definition at line 5599 of file grid_tools.cc.

◆ SPLIT_INSTANTIATIONS_INDEX

#define SPLIT_INSTANTIATIONS_INDEX   0

Definition at line 5601 of file grid_tools.cc.