16 #ifndef dealii_distributed_tria_h 17 #define dealii_distributed_tria_h 20 #include <deal.II/base/config.h> 22 #include <deal.II/base/smartpointer.h> 23 #include <deal.II/base/subscriptor.h> 24 #include <deal.II/base/template_constraints.h> 26 #include <deal.II/distributed/p4est_wrappers.h> 27 #include <deal.II/distributed/tria_base.h> 29 #include <deal.II/grid/tria.h> 31 #include <boost/range/iterator_range.hpp> 37 #include <type_traits> 41 #ifdef DEAL_II_WITH_MPI 45 #ifdef DEAL_II_WITH_P4EST 47 # include <p4est_connectivity.h> 48 # include <p4est_ghost.h> 50 # include <p8est_connectivity.h> 51 # include <p8est_ghost.h> 55 DEAL_II_NAMESPACE_OPEN
57 #ifdef DEAL_II_WITH_P4EST 61 namespace DoFHandlerImplementation
75 template <
int,
int,
class>
76 class ExtrapolateImplementation;
83 template <
typename CellIterator>
247 template <
int dim,
int spacedim = dim>
268 using cell_iterator =
269 typename ::Triangulation<dim, spacedim>::cell_iterator;
290 typename ::Triangulation<dim, spacedim>::active_cell_iterator;
293 typename ::Triangulation<dim, spacedim>::CellStatus;
304 default_setting = 0x0,
313 mesh_reconstruction_after_repartitioning = 0x1,
320 construct_multigrid_hierarchy = 0x2,
326 no_automatic_repartitioning = 0x4
363 MPI_Comm mpi_communicator,
364 const typename ::Triangulation<dim, spacedim>::MeshSmoothing
366 const Settings settings = default_setting);
393 const ::Triangulation<dim, spacedim> &other_tria)
override;
439 execute_coarsening_and_refinement()
override;
448 prepare_coarsening_and_refinement()
override;
546 communicate_locally_moved_vertices(
547 const std::vector<bool> &vertex_locally_moved);
566 has_hanging_nodes()
const override;
572 memory_consumption()
const override;
580 memory_consumption_p4est()
const;
590 write_mesh_vtk(
const char *file_basename)
const;
597 get_checksum()
const;
607 save(
const char *filename)
const;
628 load(
const char *filename,
const bool autopartition =
true);
739 register_data_attach(
742 const bool returns_variable_size_data);
793 notify_ready_to_unpack(
794 const unsigned int handle,
795 const std::function<
void(
798 const boost::iterator_range<std::vector<char>::const_iterator> &)>
807 const std::vector<types::global_dof_index> &
808 get_p4est_tree_to_coarse_cell_permutation()
const;
815 const std::vector<types::global_dof_index> &
816 get_coarse_cell_to_p4est_tree_permutation()
const;
849 update_number_cache()
override;
899 using pack_callback_t = std::function<std::vector<char>(
908 std::vector<pack_callback_t> pack_callbacks_variable;
920 typename ::internal::p4est::types<dim>::quadrant *,
944 update_quadrant_cell_relations();
971 const std::vector<quadrant_cell_relation_t> &quad_cell_relations,
972 const std::vector<typename CellAttachedData::pack_callback_t>
973 &pack_callbacks_fixed,
974 const std::vector<typename CellAttachedData::pack_callback_t>
975 &pack_callbacks_variable);
991 const typename ::internal::p4est::types<dim>::forest
993 const typename ::internal::p4est::types<dim>::gloidx
994 *previous_global_first_quadrant);
1005 std::vector<quadrant_cell_relation_t> &quad_cell_relations)
const;
1021 const std::vector<quadrant_cell_relation_t> &quad_cell_relations,
1022 const unsigned int handle,
1023 const std::function<
void(
1024 const typename ::Triangulation<dim, spacedim>::cell_iterator
1026 const typename ::Triangulation<dim, spacedim>::CellStatus &,
1027 const boost::iterator_range<std::vector<char>::const_iterator> &)>
1028 &unpack_callback)
const;
1045 save(
const typename ::internal::p4est::types<dim>::forest
1047 const char *filename)
const;
1068 load(
const typename ::internal::p4est::types<dim>::forest
1070 const char * filename,
1071 const unsigned int n_attached_deserialize_fixed,
1072 const unsigned int n_attached_deserialize_variable);
1084 MPI_Comm mpi_communicator;
1108 std::vector<char> dest_data_fixed;
1115 std::vector<int> dest_sizes_variable;
1116 std::vector<char> src_data_variable;
1117 std::vector<char> dest_data_variable;
1135 std::vector<types::global_dof_index>
1137 std::vector<types::global_dof_index>
1138 p4est_tree_to_coarse_cell_permutation;
1144 typename ::internal::p4est::types<dim>::tree *
1145 init_tree(
const int dealii_coarse_cell_index)
const;
1152 setup_coarse_cell_to_p4est_tree_permutation();
1161 copy_new_triangulation_to_p4est(std::integral_constant<int, 2>);
1163 copy_new_triangulation_to_p4est(std::integral_constant<int, 3>);
1170 copy_local_forest_to_triangulation();
1185 std::vector<unsigned int>
1186 get_cell_weights()
const;
1195 virtual std::map<unsigned int, std::set<::types::subdomain_id>>
1196 compute_vertices_with_ghost_neighbors()
const override;
1208 mark_locally_active_vertices_on_level(
const int level)
const;
1211 friend class ::internal::DoFHandlerImplementation::Policy::
1212 ParallelDistributed;
1214 template <
int,
int,
class>
1215 friend class ::FETools::internal::ExtrapolateImplementation;
1224 template <
int spacedim>
1234 default_setting = 0x0,
1235 mesh_reconstruction_after_repartitioning = 0x1,
1236 construct_multigrid_hierarchy = 0x2
1244 MPI_Comm mpi_communicator,
1245 const typename ::Triangulation<1, spacedim>::MeshSmoothing
1247 const Settings settings = default_setting);
1260 const std::vector<types::global_dof_index> &
1261 get_p4est_tree_to_coarse_cell_permutation()
const;
1297 communicate_locally_moved_vertices(
1298 const std::vector<bool> &vertex_locally_moved);
1305 load(
const char *filename,
const bool autopartition =
true);
1312 save(
const char *filename)
const;
1319 register_data_attach(
1320 const std::function<std::vector<char>(
1321 const typename ::Triangulation<1, spacedim>::cell_iterator &,
1322 const typename ::Triangulation<1, spacedim>::CellStatus)>
1324 const bool returns_variable_size_data);
1331 notify_ready_to_unpack(
1332 const unsigned int handle,
1333 const std::function<
void(
1334 const typename ::Triangulation<1, spacedim>::cell_iterator &,
1335 const typename ::Triangulation<1, spacedim>::CellStatus,
1336 const boost::iterator_range<std::vector<char>::const_iterator> &)>
1343 std::vector<types::global_dof_index>
1345 std::vector<types::global_dof_index>
1346 p4est_tree_to_coarse_cell_permutation;
1360 virtual std::map<unsigned int, std::set<::types::subdomain_id>>
1361 compute_vertices_with_ghost_neighbors()
const override;
1367 virtual std::map<unsigned int, std::set<::types::subdomain_id>>
1368 compute_level_vertices_with_ghost_neighbors(
1369 const unsigned int level)
const;
1375 virtual std::vector<bool>
1376 mark_locally_active_vertices_on_level(
const unsigned int level)
const;
1382 #else // DEAL_II_WITH_P4EST 1386 namespace distributed
1399 template <
int dim,
int spacedim = dim>
1416 DEAL_II_NAMESPACE_CLOSE
typename::internal::p4est::types< dim >::connectivity * connectivity
std::vector< types::global_dof_index > coarse_cell_to_p4est_tree_permutation
bool triangulation_has_content
typename std::tuple< typename::internal::p4est::types< dim >::quadrant *, CellStatus, cell_iterator > quadrant_cell_relation_t
typename::internal::p4est::types< dim >::ghost * parallel_ghost
typename::internal::p4est::types< dim >::forest * parallel_forest
unsigned int n_attached_data_sets
std::vector< char > src_data_fixed
std::vector< pack_callback_t > pack_callbacks_fixed
std::vector< quadrant_cell_relation_t > local_quadrant_cell_relations
unsigned int n_attached_deserialize
bool variable_size_data_stored
std::vector< int > src_sizes_variable
std::vector< unsigned int > sizes_fixed_cumulative
typename::Triangulation< dim, spacedim >::cell_iterator cell_iterator
std::vector< types::global_dof_index > coarse_cell_to_p4est_tree_permutation