16 #ifndef dealii_distributed_tria_h 17 #define dealii_distributed_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> 57 #ifdef DEAL_II_WITH_P4EST 66 template <
int,
int,
class>
67 class ExtrapolateImplementation;
74 template <
typename CellIterator>
75 struct PeriodicFacePair;
241 template <
int dim,
int spacedim = dim>
264 typename ::Triangulation<dim, spacedim>::cell_iterator;
285 typename ::Triangulation<dim, spacedim>::active_cell_iterator;
288 typename ::Triangulation<dim, spacedim>::CellStatus;
308 mesh_reconstruction_after_repartitioning = 0x1,
320 no_automatic_repartitioning = 0x4
357 MPI_Comm mpi_communicator,
358 const typename ::Triangulation<dim, spacedim>::MeshSmoothing
380 is_multilevel_hierarchy_constructed()
const override;
393 const ::Triangulation<dim, spacedim> &other_tria)
override;
417 &construction_data)
override;
449 execute_coarsening_and_refinement()
override;
458 prepare_coarsening_and_refinement()
override;
556 communicate_locally_moved_vertices(
557 const std::vector<bool> &vertex_locally_moved);
576 has_hanging_nodes()
const override;
590 memory_consumption_p4est()
const;
600 write_mesh_vtk(
const std::string &file_basename)
const;
607 get_checksum()
const;
617 save(
const std::string &filename)
const;
638 load(
const std::string &filename,
const bool autopartition =
true);
749 register_data_attach(
752 const bool returns_variable_size_data);
803 notify_ready_to_unpack(
804 const unsigned int handle,
805 const std::function<
void(
808 const boost::iterator_range<std::vector<char>::const_iterator> &)>
817 const std::vector<types::global_dof_index> &
818 get_p4est_tree_to_coarse_cell_permutation()
const;
825 const std::vector<types::global_dof_index> &
826 get_coarse_cell_to_p4est_tree_permutation()
const;
835 const typename ::internal::p4est::types<dim>::forest *
933 typename ::internal::p4est::types<dim>::quadrant *,
957 update_quadrant_cell_relations();
984 const std::vector<quadrant_cell_relation_t> &quad_cell_relations,
985 const std::vector<typename CellAttachedData::pack_callback_t>
986 &pack_callbacks_fixed,
987 const std::vector<typename CellAttachedData::pack_callback_t>
988 &pack_callbacks_variable);
1004 const typename ::internal::p4est::types<dim>::forest
1006 const typename ::internal::p4est::types<dim>::gloidx
1007 *previous_global_first_quadrant);
1018 std::vector<quadrant_cell_relation_t> &quad_cell_relations)
const;
1034 const std::vector<quadrant_cell_relation_t> &quad_cell_relations,
1035 const unsigned int handle,
1036 const std::function<
void(
1037 const typename ::Triangulation<dim, spacedim>::cell_iterator
1039 const typename ::Triangulation<dim, spacedim>::CellStatus &,
1040 const boost::iterator_range<std::vector<char>::const_iterator> &)>
1041 &unpack_callback)
const;
1058 save(
const typename ::internal::p4est::types<dim>::forest
1060 const std::string &filename)
const;
1081 load(
const typename ::internal::p4est::types<dim>::forest
1083 const std::string &filename,
1084 const unsigned int n_attached_deserialize_fixed,
1085 const unsigned int n_attached_deserialize_variable);
1148 std::vector<types::global_dof_index>
1150 std::vector<types::global_dof_index>
1157 typename ::internal::p4est::types<dim>::tree *
1158 init_tree(
const int dealii_coarse_cell_index)
const;
1165 setup_coarse_cell_to_p4est_tree_permutation();
1174 copy_new_triangulation_to_p4est(std::integral_constant<int, 2>);
1176 copy_new_triangulation_to_p4est(std::integral_constant<int, 3>);
1183 copy_local_forest_to_triangulation();
1198 std::vector<unsigned int>
1199 get_cell_weights()
const;
1211 mark_locally_active_vertices_on_level(
const int level)
const;
1213 virtual unsigned int 1214 coarse_cell_id_to_coarse_cell_index(
1218 coarse_cell_index_to_coarse_cell_id(
1219 const unsigned int coarse_cell_index)
const override;
1221 template <
int,
int,
class>
1222 friend class ::FETools::internal::ExtrapolateImplementation;
1231 template <
int spacedim>
1242 mesh_reconstruction_after_repartitioning = 0x1,
1251 MPI_Comm mpi_communicator,
1252 const typename ::Triangulation<1, spacedim>::MeshSmoothing
1267 const std::vector<types::global_dof_index> &
1268 get_p4est_tree_to_coarse_cell_permutation()
const;
1304 communicate_locally_moved_vertices(
1305 const std::vector<bool> &vertex_locally_moved);
1312 load(
const std::string &filename,
const bool autopartition =
true);
1319 save(
const std::string &filename)
const;
1322 is_multilevel_hierarchy_constructed()
const override;
1329 register_data_attach(
1330 const std::function<std::vector<char>(
1331 const typename ::Triangulation<1, spacedim>::cell_iterator &,
1332 const typename ::Triangulation<1, spacedim>::CellStatus)>
1334 const bool returns_variable_size_data);
1341 notify_ready_to_unpack(
1342 const unsigned int handle,
1343 const std::function<
void(
1344 const typename ::Triangulation<1, spacedim>::cell_iterator &,
1345 const typename ::Triangulation<1, spacedim>::CellStatus,
1346 const boost::iterator_range<std::vector<char>::const_iterator> &)>
1353 std::vector<types::global_dof_index>
1355 std::vector<types::global_dof_index>
1362 virtual std::map<unsigned int, std::set<::types::subdomain_id>>
1363 compute_level_vertices_with_ghost_neighbors(
1364 const unsigned int level)
const;
1370 virtual std::vector<bool>
1371 mark_locally_active_vertices_on_level(
const unsigned int level)
const;
1373 virtual unsigned int 1374 coarse_cell_id_to_coarse_cell_index(
1378 coarse_cell_index_to_coarse_cell_id(
1379 const unsigned int coarse_cell_index)
const override;
1385 #else // DEAL_II_WITH_P4EST 1389 namespace distributed
1402 template <
int dim,
int spacedim = dim>
std::vector< char > dest_data_fixed
typename ::internal::p4est::types< dim >::connectivity * connectivity
std::vector< types::global_dof_index > coarse_cell_to_p4est_tree_permutation
std::vector< char > dest_data_variable
bool triangulation_has_content
typename std::tuple< typename ::internal::p4est::types< dim >::quadrant *, CellStatus, cell_iterator > quadrant_cell_relation_t
std::vector< char > src_data_variable
typename ::internal::p4est::types< dim >::ghost * parallel_ghost
std::vector< pack_callback_t > pack_callbacks_variable
typename ::internal::p4est::types< dim >::forest * parallel_forest
void create_triangulation(Triangulation< dim, dim > &tria, const AdditionalData &additional_data=AdditionalData())
std::vector< types::global_dof_index > p4est_tree_to_coarse_cell_permutation
unsigned int n_attached_data_sets
std::vector< char > src_data_fixed
#define DEAL_II_NAMESPACE_CLOSE
std::function< std::vector< char >(typename Triangulation< dim, spacedim >::cell_iterator, CellStatus)> pack_callback_t
TriangulationBase< dim, spacedim > Triangulation
std::vector< pack_callback_t > pack_callbacks_fixed
std::vector< quadrant_cell_relation_t > local_quadrant_cell_relations
DataTransfer data_transfer
unsigned int n_attached_deserialize
bool variable_size_data_stored
#define DEAL_II_NAMESPACE_OPEN
std::vector< int > src_sizes_variable
std::vector< types::global_dof_index > p4est_tree_to_coarse_cell_permutation
std::vector< unsigned int > sizes_fixed_cumulative
std::vector< int > dest_sizes_variable
typename ::Triangulation< dim, spacedim >::cell_iterator cell_iterator
global_cell_index coarse_cell_id
MPI_Comm mpi_communicator
CellAttachedData cell_attached_data
std::enable_if< std::is_fundamental< T >::value, std::size_t >::type memory_consumption(const T &t)
std::vector< types::global_dof_index > coarse_cell_to_p4est_tree_permutation