Reference documentation for deal.II version GIT relicensing-426-g7976cfd195 2024-04-18 21:10: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
Classes | Namespaces | Functions | Variables
grid_tools.cc File Reference
#include <deal.II/base/floating_point_comparator.h>
#include <deal.II/base/mpi.h>
#include <deal.II/base/mpi.templates.h>
#include <deal.II/base/mpi_consensus_algorithms.h>
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/base/thread_management.h>
#include <deal.II/arborx/access_traits.h>
#include <deal.II/arborx/distributed_tree.h>
#include <deal.II/cgal/intersections.h>
#include <deal.II/cgal/utilities.h>
#include <deal.II/distributed/fully_distributed_tria.h>
#include <deal.II/distributed/p4est_wrappers.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_fe.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/grid/filtered_iterator.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/lapack_full_matrix.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 <deal.II/physics/transformations.h>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/uniform_real_distribution.hpp>
#include <array>
#include <cmath>
#include <iostream>
#include <limits>
#include <list>
#include <numeric>
#include <set>
#include <tuple>
#include <unordered_map>
#include "grid_tools.inst"

Go to the source code of this file.

Classes

class  GridTools::internal::Shift< spacedim >
 
class  GridTools::internal::Rotate2d
 
class  GridTools::internal::Rotate3d
 
class  GridTools::internal::Scale< spacedim >
 

Namespaces

namespace  GridTools
 
namespace  GridTools::internal
 
namespace  GridTools::internal::BoundingBoxPredicate
 
namespace  GridTools::internal::FixUpDistortedChildCells
 

Functions

template<>
void GridTools::rotate (const double angle, Triangulation< 1, 2 > &triangulation)
 
template<>
void GridTools::rotate (const double angle, Triangulation< 2, 2 > &triangulation)
 
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)
 
 GridTools::Assert (tria.get_vertices().size()==marked_vertices.size()||marked_vertices.empty(), ExcDimensionMismatch(tria.get_vertices().size(), marked_vertices.size()))
 
 GridTools::Assert (marked_vertices.empty()||std::equal(marked_vertices.begin(), marked_vertices.end(), tria.get_used_vertices().begin(), [](bool p, bool q) { return !p||q;}), ExcMessage("marked_vertices should be a subset of used vertices in the triangulation " "but marked_vertices contains one or more vertices that are not used vertices!"))
 
 GridTools::Assert (first !=vertices_to_use.end(), ExcInternalError())
 
 GridTools::for (unsigned int j=best_vertex+1;j< vertices.size();++j) if(vertices_to_use[j])
 
 GridTools::if (marked_vertices.size() !=0) for(auto it
 
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<typename MeshType >
 GridTools::internal::BoundingBoxPredicate::DEAL_II_CXX20_REQUIRES (concepts::is_triangulation_or_dof_handler< MeshType >) std
 
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<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 spacedim, typename T >
std::tuple< std::vector< unsigned int >, std::vector< unsigned int >, std::vector< unsigned int > > GridTools::internal::guess_owners_of_entities (const MPI_Comm comm, const std::vector< std::vector< BoundingBox< spacedim > > > &global_bboxes, const std::vector< T > &entities, const double tolerance)
 
template<int dim, int spacedim>
std::vector< std::pair< typename Triangulation< dim, spacedim >::active_cell_iterator, Point< dim > > > GridTools::internal::find_all_locally_owned_active_cells_around_point (const Cache< dim, spacedim > &cache, const Point< spacedim > &point, typename Triangulation< dim, spacedim >::active_cell_iterator &cell_hint, const std::vector< bool > &marked_vertices, const double tolerance, const bool enforce_unique_mapping)
 
template<int dim, int spacedim>
DistributedComputePointLocationsInternal< dim, spacedim > GridTools::internal::distributed_compute_point_locations (const GridTools::Cache< dim, spacedim > &cache, const std::vector< Point< spacedim > > &points, const std::vector< std::vector< BoundingBox< spacedim > > > &global_bboxes, const std::vector< bool > &marked_vertices, const double tolerance, const bool perform_handshake, const bool enforce_unique_mapping=false)
 
template<int structdim, int dim, int spacedim>
DistributedComputeIntersectionLocationsInternal< structdim, spacedim > GridTools::internal::distributed_compute_intersection_locations (const Cache< dim, spacedim > &cache, const std::vector< std::vector< Point< spacedim > > > &intersection_requests, const std::vector< std::vector< BoundingBox< spacedim > > > &global_bboxes, const std::vector< bool > &marked_vertices, const double tolerance)
 
template<int spacedim>
std::vector< std::vector< BoundingBox< spacedim > > > GridTools::exchange_local_bounding_boxes (const std::vector< BoundingBox< spacedim > > &local_bboxes, const 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, const 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)
 
template<int dim, unsigned int n_vertices, unsigned int n_sub_vertices, unsigned int n_configurations, unsigned int n_lines, unsigned int n_cols, typename value_type >
void GridTools::internal::process_sub_cell (const std::array< unsigned int, n_configurations > &cut_line_table, const ndarray< unsigned int, n_configurations, n_cols > &new_line_table, const ndarray< unsigned int, n_lines, 2 > &line_to_vertex_table, const std::vector< value_type > &ls_values, const std::vector< Point< dim > > &points, const std::vector< unsigned int > &mask, const double iso_level, const double tolerance, std::vector< Point< dim > > &vertices, std::vector< CellData< dim==1 ? 1 :dim - 1 > > &cells, const bool write_back_cell_data)
 
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, int spacedim>
void GridTools::rotate (const double angle, Triangulation< dim, spacedim > &triangulation)
 
template<int dim>
void GridTools::rotate (const Tensor< 1, 3, double > &axis, const double angle, Triangulation< dim, 3 > &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>
void GridTools::distort_random (const double factor, Triangulation< dim, spacedim > &triangulation, const bool keep_boundary=true, const unsigned int seed=boost::random::mt19937::default_seed)
 
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>
 GridTools::DEAL_II_CXX20_REQUIRES ((concepts::is_triangulation_or_dof_handler< MeshType< dim, spacedim > >)) unsigned int find_closest_vertex(const MeshType< dim
 
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, 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=(ReferenceCells::get_hypercube< dim >() .template get_default_linear_mapping< dim, spacedim >()))
 
template<typename 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::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>
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, const double tolerance=1e-10, const std::vector< bool > &marked_vertices={}, const bool enforce_unique_mapping=true)
 
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::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>
std::vector< types::subdomain_idGridTools::get_subdomain_association (const Triangulation< dim, spacedim > &triangulation, const std::vector< CellId > &cell_ids)
 
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)
 

Variables

const std::vector< Point< spacedim > > & GridTools::vertices = tria.get_vertices()
 
const std::vector< bool > & GridTools::vertices_to_use
 
std::vector< bool >::const_iterator GridTools::first
 
unsigned int GridTools::best_vertex = std::distance(vertices_to_use.begin(), first)
 
double GridTools::best_dist = (p - vertices[best_vertex]).norm_square()
 
const Triangulation< dim, spacedim > & GridTools::tria = mesh.get_triangulation()
 
 GridTools::it = vertices.end()