33 #include <boost/serialization/map.hpp> 34 #include <boost/serialization/split_member.hpp> 35 #include <boost/serialization/unique_ptr.hpp> 36 #include <boost/serialization/vector.hpp> 37 #include <boost/signals2.hpp> 52 "The name 'signals' is already defined. You are most likely using the QT library \ 53 and using the 'signals' keyword. You can either #include the Qt headers (or any conflicting headers) \ 54 *after* the deal.II headers or you can define the 'QT_NO_KEYWORDS' macro and use the 'Q_SIGNALS' macro." 59 template <
int dim,
int spacedim>
75 template <
typename CellIterator>
76 struct PeriodicFacePair;
79 template <
int,
int,
int>
81 template <
int spacedim>
83 template <
int,
int,
int>
88 namespace TriangulationImplementation
102 struct Implementation;
103 struct ImplementationMixedMesh;
106 namespace TriaAccessorImplementation
108 struct Implementation;
114 template <
int dim,
int spacedim>
129 namespace TriangulationImplementation
202 template <
class Archive>
204 serialize(Archive &ar,
const unsigned int version);
260 template <
class Archive>
262 serialize(Archive &ar,
const unsigned int version);
319 template <
class Archive>
321 serialize(Archive &ar,
const unsigned int version);
1126 template <
int dim,
int spacedim = dim>
1192 limit_level_difference_at_vertices = 0x1,
1213 eliminate_unrefined_islands = 0x2,
1229 patch_level_1 = 0x4,
1253 coarsest_level_1 = 0x8,
1278 allow_anisotropic_smoothing = 0x10,
1311 eliminate_refined_inner_islands = 0x100,
1316 eliminate_refined_boundary_islands = 0x200,
1322 do_not_produce_unrefined_islands = 0x400,
1328 smoothing_on_refinement =
1329 (limit_level_difference_at_vertices | eliminate_unrefined_islands),
1334 smoothing_on_coarsening =
1335 (eliminate_refined_inner_islands | eliminate_refined_boundary_islands |
1336 do_not_produce_unrefined_islands),
1343 maximum_smoothing = 0xffff ^ allow_anisotropic_smoothing
1541 std::list<typename Triangulation<dim, spacedim>::cell_iterator>
1548 static const unsigned int dimension = dim;
1553 static const unsigned int space_dimension = spacedim;
1570 const bool check_for_distorted_cells =
false);
1629 get_mesh_smoothing()
const;
1684 reset_all_manifolds();
1747 virtual std::vector<types::boundary_id>
1748 get_boundary_ids()
const;
1762 virtual std::vector<types::manifold_id>
1763 get_manifold_ids()
const;
1859 &construction_data);
1870 create_triangulation_compatibility(
1882 flip_all_direction_flags();
1896 set_all_refine_flags();
1921 refine_global(
const unsigned int times = 1);
1936 coarsen_global(
const unsigned int times = 1);
1970 execute_coarsening_and_refinement();
2002 prepare_coarsening_and_refinement();
2047 template <
typename T>
2052 template <
typename InputIterator>
2056 return std::accumulate(first, last,
T());
2120 boost::signals2::signal<void(
2130 boost::signals2::signal<void(
2140 boost::signals2::signal<void(
2292 save_refine_flags(std::ostream &out)
const;
2298 save_refine_flags(std::vector<bool> &v)
const;
2304 load_refine_flags(std::istream &in);
2310 load_refine_flags(
const std::vector<bool> &v);
2316 save_coarsen_flags(std::ostream &out)
const;
2322 save_coarsen_flags(std::vector<bool> &v)
const;
2328 load_coarsen_flags(std::istream &out);
2334 load_coarsen_flags(
const std::vector<bool> &v);
2341 get_anisotropic_refinement_flag()
const;
2365 save_user_flags(std::ostream &out)
const;
2373 save_user_flags(std::vector<bool> &v)
const;
2380 load_user_flags(std::istream &in);
2387 load_user_flags(
const std::vector<bool> &v);
2394 clear_user_flags_line();
2401 save_user_flags_line(std::ostream &out)
const;
2409 save_user_flags_line(std::vector<bool> &v)
const;
2416 load_user_flags_line(std::istream &in);
2423 load_user_flags_line(
const std::vector<bool> &v);
2430 clear_user_flags_quad();
2437 save_user_flags_quad(std::ostream &out)
const;
2445 save_user_flags_quad(std::vector<bool> &v)
const;
2452 load_user_flags_quad(std::istream &in);
2459 load_user_flags_quad(
const std::vector<bool> &v);
2467 clear_user_flags_hex();
2474 save_user_flags_hex(std::ostream &out)
const;
2482 save_user_flags_hex(std::vector<bool> &v)
const;
2489 load_user_flags_hex(std::istream &in);
2496 load_user_flags_hex(
const std::vector<bool> &v);
2512 save_user_indices(std::vector<unsigned int> &v)
const;
2519 load_user_indices(
const std::vector<unsigned int> &v);
2527 save_user_pointers(std::vector<void *> &v)
const;
2534 load_user_pointers(
const std::vector<void *> &v);
2542 save_user_indices_line(std::vector<unsigned int> &v)
const;
2549 load_user_indices_line(
const std::vector<unsigned int> &v);
2557 save_user_indices_quad(std::vector<unsigned int> &v)
const;
2564 load_user_indices_quad(
const std::vector<unsigned int> &v);
2572 save_user_indices_hex(std::vector<unsigned int> &v)
const;
2579 load_user_indices_hex(
const std::vector<unsigned int> &v);
2586 save_user_pointers_line(std::vector<void *> &v)
const;
2593 load_user_pointers_line(
const std::vector<void *> &v);
2601 save_user_pointers_quad(std::vector<void *> &v)
const;
2608 load_user_pointers_quad(
const std::vector<void *> &v);
2616 save_user_pointers_hex(std::vector<void *> &v)
const;
2623 load_user_pointers_hex(
const std::vector<void *> &v);
2685 begin_active(
const unsigned int level = 0)
const;
2713 end(
const unsigned int level)
const;
2735 end_active(
const unsigned int level)
const;
2748 last_active()
const;
2763 create_cell_iterator(
const CellId &cell_id)
const;
2780 cell_iterators()
const;
2818 active_cell_iterators()
const;
2836 cell_iterators_on_level(
const unsigned int level)
const;
2854 active_cell_iterators_on_level(
const unsigned int level)
const;
2877 begin_active_face()
const;
2905 active_face_iterators()
const;
2923 begin_vertex()
const;
2931 begin_active_vertex()
const;
2969 n_lines(
const unsigned int level)
const;
2975 n_active_lines()
const;
2981 n_active_lines(
const unsigned int level)
const;
2993 n_quads(
const unsigned int level)
const;
2999 n_active_quads()
const;
3005 n_active_quads(
const unsigned int level)
const;
3018 n_hexs(
const unsigned int level)
const;
3024 n_active_hexs()
const;
3031 n_active_hexs(
const unsigned int level)
const;
3062 n_global_active_cells()
const;
3086 n_active_faces()
const;
3114 virtual unsigned int 3115 n_global_levels()
const;
3127 has_hanging_nodes()
const;
3147 const std::vector<Point<spacedim>> &
3148 get_vertices()
const;
3155 n_used_vertices()
const;
3161 vertex_used(
const unsigned int index)
const;
3167 const std::vector<bool> &
3168 get_used_vertices()
const;
3182 max_adjacent_cells()
const;
3191 locally_owned_subdomain()
const;
3203 get_triangulation();
3210 get_triangulation()
const;
3232 n_raw_lines()
const;
3244 n_raw_lines(
const unsigned int level)
const;
3256 n_raw_quads()
const;
3268 n_raw_quads(
const unsigned int level)
const;
3280 n_raw_hexs(
const unsigned int level)
const;
3292 n_raw_cells(
const unsigned int level)
const;
3306 n_raw_faces()
const;
3332 template <
class Archive>
3334 save(Archive &ar,
const unsigned int version)
const;
3353 template <
class Archive>
3355 load(Archive &ar,
const unsigned int version);
3381 std::pair<cell_iterator, unsigned int>,
3382 std::pair<std::pair<cell_iterator, unsigned int>, std::bitset<3>>> &
3383 get_periodic_face_map()
const;
3389 const std::vector<ReferenceCell::Type> &
3390 get_reference_cell_types()
const;
3397 all_reference_cell_types_are_hyper_cube()
const;
3405 template <
class Archive>
3407 serialize(Archive &archive,
const unsigned int version);
3411 BOOST_SERIALIZATION_SPLIT_MEMBER()
3427 <<
"You are requesting information from refinement level " 3429 <<
" of a triangulation, but this triangulation only has " 3430 << arg2 <<
" refinement levels. The given level " << arg1
3431 <<
" must be *less* than " << arg2 <<
".");
3439 ExcTriangulationNotEmpty,
3442 <<
"You are trying to perform an operation on a triangulation " 3443 <<
"that is only allowed if the triangulation is currently empty. " 3444 <<
"However, it currently stores " << arg1 <<
" vertices and has " 3445 <<
"cells on " << arg2 <<
" levels.");
3464 <<
"You tried to do something on level " << arg1
3465 <<
", but this level is empty.");
3482 <<
"The given boundary_id " << arg1
3483 <<
" is not defined in this Triangulation!");
3491 ExcInconsistentCoarseningFlags,
3492 "A cell is flagged for coarsening, but either not all of its siblings " 3493 "are active or flagged for coarsening as well. Please clean up all " 3494 "coarsen flags on your triangulation via " 3495 "Triangulation::prepare_coarsening_and_refinement() beforehand!");
3528 write_bool_vector(
const unsigned int magic_number1,
3529 const std::vector<bool> &v,
3530 const unsigned int magic_number2,
3531 std::ostream & out);
3538 read_bool_vector(
const unsigned int magic_number1,
3539 std::vector<bool> &v,
3540 const unsigned int magic_number2,
3548 update_periodic_face_map();
3554 update_reference_cell_types();
3572 std::vector<GridTools::PeriodicFacePair<cell_iterator>>
3579 std::map<std::pair<cell_iterator, unsigned int>,
3580 std::pair<std::pair<cell_iterator, unsigned int>, std::bitset<3>>>
3610 begin_raw(
const unsigned int level = 0)
const;
3617 end_raw(
const unsigned int level)
const;
3635 begin_raw_line(
const unsigned int level = 0)
const;
3655 begin_line(
const unsigned int level = 0)
const;
3675 begin_active_line(
const unsigned int level = 0)
const;
3713 begin_raw_quad(
const unsigned int level = 0)
const;
3733 begin_quad(
const unsigned int level = 0)
const;
3753 begin_active_quad(
const unsigned int level = 0)
const;
3790 begin_raw_hex(
const unsigned int level = 0)
const;
3810 begin_hex(
const unsigned int level = 0)
const;
3830 begin_active_hex(
const unsigned int level = 0)
const;
3858 clear_despite_subscriptions();
3867 reset_active_cell_indices();
3873 reset_global_cell_indices();
3889 execute_refinement();
3898 execute_coarsening();
3905 fix_coarsen_flags();
3920 virtual unsigned int 3921 coarse_cell_id_to_coarse_cell_index(
3938 coarse_cell_index_to_coarse_cell_id(
3939 const unsigned int coarse_cell_index)
const;
3946 std::unique_ptr<::internal::TriangulationImplementation::TriaLevel>>
3954 std::unique_ptr<::internal::TriangulationImplementation::TriaFaces>
3972 std::map<types::manifold_id, std::unique_ptr<const Manifold<dim, spacedim>>>
4012 std::unique_ptr<std::map<unsigned int, types::boundary_id>>
4035 std::unique_ptr<std::map<unsigned int, types::manifold_id>>
4039 template <
int,
int,
int>
4041 template <
int,
int,
int>
4047 friend struct ::internal::TriaAccessorImplementation::Implementation;
4049 friend struct ::internal::TriangulationImplementation::Implementation;
4050 friend struct ::internal::TriangulationImplementation::
4051 ImplementationMixedMesh;
4053 friend class ::internal::TriangulationImplementation::TriaObjects;
4057 #ifndef DEAL_II_MSVC 4058 static_assert(dim <= spacedim,
4059 "The dimension <dim> of a Triangulation must be less than or " 4060 "equal to the space dimension <spacedim> in which it lives.");
4071 namespace TriangulationImplementation
4073 template <
class Archive>
4075 NumberCache<1>::serialize(Archive &ar,
const unsigned int)
4078 ar &n_lines &n_lines_level;
4079 ar &n_active_lines &n_active_lines_level;
4083 template <
class Archive>
4085 NumberCache<2>::serialize(Archive &ar,
const unsigned int version)
4087 this->NumberCache<1>::serialize(ar, version);
4089 ar &n_quads &n_quads_level;
4090 ar &n_active_quads &n_active_quads_level;
4094 template <
class Archive>
4096 NumberCache<3>::serialize(Archive &ar,
const unsigned int version)
4098 this->NumberCache<2>::serialize(ar, version);
4100 ar &n_hexes &n_hexes_level;
4101 ar &n_active_hexes &n_active_hexes_level;
4108 template <
int dim,
int spacedim>
4113 return vertices_used[index];
4118 template <
int dim,
int spacedim>
4122 return number_cache.n_levels;
4125 template <
int dim,
int spacedim>
4129 return number_cache.n_levels;
4133 template <
int dim,
int spacedim>
4142 template <
int dim,
int spacedim>
4143 inline const std::vector<Point<spacedim>> &
4150 template <
int dim,
int spacedim>
4151 template <
class Archive>
4159 unsigned int n_levels = levels.size();
4161 for (
const auto &
level : levels)
4167 bool faces_is_nullptr = (faces.get() ==
nullptr);
4168 ar & faces_is_nullptr;
4169 if (!faces_is_nullptr)
4175 ar &anisotropic_refinement;
4178 ar &check_for_distorted_cells;
4182 ar &vertex_to_boundary_id_map_1d;
4183 ar &vertex_to_manifold_id_map_1d;
4189 template <
int dim,
int spacedim>
4190 template <
class Archive>
4203 levels.resize(size);
4204 for (
auto &level_ : levels)
4206 std::unique_ptr<internal::TriangulationImplementation::TriaLevel>
level;
4208 level_ = std::move(level);
4212 bool faces_is_nullptr =
true;
4213 ar & faces_is_nullptr;
4214 if (!faces_is_nullptr)
4220 ar &anisotropic_refinement;
4227 for (
auto &level : levels)
4228 level->active_cell_indices.resize(level->refine_flags.size());
4229 reset_active_cell_indices();
4233 bool my_check_for_distorted_cells;
4234 ar & my_check_for_distorted_cells;
4236 Assert(my_check_for_distorted_cells == check_for_distorted_cells,
4237 ExcMessage(
"The triangulation loaded into here must have the " 4238 "same setting with regard to reporting distorted " 4239 "cell as the one previously stored."));
4243 ar &vertex_to_boundary_id_map_1d;
4244 ar &vertex_to_manifold_id_map_1d;
4255 template <
int dim,
int spacedim>
4265 template <
int dim,
int spacedim>
4268 const unsigned int coarse_cell_index)
const 4270 return coarse_cell_index;
boost::signals2::signal< void(const Triangulation< dim, spacedim > &destination_tria)> copy
::internal::TriangulationImplementation::NumberCache< dim > number_cache
virtual unsigned int coarse_cell_id_to_coarse_cell_index(const types::coarse_cell_id coarse_cell_id) const
boost::signals2::signal< void()> post_refinement
unsigned int n_vertices() const
std::vector< unsigned int > n_quads_level
boost::signals2::signal< void(const typename Triangulation< dim, spacedim >::cell_iterator &cell)> pre_coarsening_on_cell
#define DeclException2(Exception2, type1, type2, outsequence)
boost::signals2::signal< void()> post_distributed_repartition
typename IteratorSelector::line_iterator line_iterator
T operator()(InputIterator first, InputIterator last) const
unsigned int n_active_lines
MeshSmoothing smooth_grid
typename IteratorSelector::raw_line_iterator raw_line_iterator
std::vector< Point< spacedim > > vertices
std::map< types::manifold_id, std::unique_ptr< const Manifold< dim, spacedim > > > manifold
typename IteratorSelector::hex_iterator hex_iterator
typename IteratorSelector::active_line_iterator active_line_iterator
boost::signals2::signal< void()> pre_distributed_refinement
bool anisotropic_refinement
#define AssertIndexRange(index, range)
std::unique_ptr< ::internal::TriangulationImplementation::Policy< dim, spacedim > > policy
std::vector< GridTools::PeriodicFacePair< cell_iterator > > periodic_face_pairs_level_0
static ::ExceptionBase & ExcFacesHaveNoLevel()
unsigned int n_levels() const
void create_triangulation(Triangulation< dim, dim > &tria, const AdditionalData &additional_data=AdditionalData())
unsigned int n_active_quads
static ::ExceptionBase & ExcMessage(std::string arg1)
boost::signals2::signal< void()> pre_refinement
const bool check_for_distorted_cells
#define DeclException1(Exception1, type1, outsequence)
unsigned int n_active_hexes
unsigned int n_raw_quads() const
#define Assert(cond, exc)
std::vector< std::unique_ptr<::internal::TriangulationImplementation::TriaLevel > > levels
boost::signals2::signal< void()> clear
unsigned int n_raw_hexs(const unsigned int level) const
unsigned int max_adjacent_cells() const
void load(Archive &ar, const unsigned int version)
std::list< typename Triangulation< dim, spacedim >::cell_iterator > distorted_cells
unsigned int n_quads() const
#define DeclExceptionMsg(Exception, defaulttext)
std::unique_ptr< std::map< unsigned int, types::manifold_id > > vertex_to_manifold_id_map_1d
std::vector< bool > vertices_used
#define DeclException0(Exception0)
virtual types::coarse_cell_id coarse_cell_index_to_coarse_cell_id(const unsigned int coarse_cell_index) const
boost::signals2::signal< void(const typename Triangulation< dim, spacedim >::cell_iterator &cell)> post_refinement_on_cell
typename IteratorSelector::active_quad_iterator active_quad_iterator
const std::vector< Point< spacedim > > & get_vertices() const
#define DEAL_II_NAMESPACE_CLOSE
boost::signals2::signal< void()> mesh_movement
typename IteratorSelector::raw_quad_iterator raw_quad_iterator
VectorType::value_type * end(VectorType &V)
std::unique_ptr<::internal::TriangulationImplementation::TriaFaces > faces
boost::signals2::signal< void()> pre_distributed_save
void save(Archive &ar, const unsigned int version) const
std::vector< ReferenceCell::Type > reference_cell_types
unsigned int n_active_cells(const internal::TriangulationImplementation::NumberCache< 1 > &c)
typename IteratorSelector::quad_iterator quad_iterator
TriangulationBase< dim, spacedim > Triangulation
boost::signals2::signal< void()> create
std::unique_ptr< std::map< unsigned int, types::boundary_id > > vertex_to_boundary_id_map_1d
unsigned int n_active_quads() const
unsigned int n_cells(const internal::TriangulationImplementation::NumberCache< 1 > &c)
std::vector< unsigned int > n_lines_level
boost::signals2::signal< void()> pre_partition
typename IteratorSelector::active_hex_iterator active_hex_iterator
boost::signals2::signal< void()> post_distributed_save
std::vector< unsigned int > n_active_hexes_level
std::map< std::pair< cell_iterator, unsigned int >, std::pair< std::pair< cell_iterator, unsigned int >, std::bitset< 3 > > > periodic_face_map
#define DEAL_II_NAMESPACE_OPEN
virtual unsigned int n_global_levels() const
VectorType::value_type * begin(VectorType &V)
typename IteratorSelector::raw_hex_iterator raw_hex_iterator
boost::signals2::signal< unsigned int(const cell_iterator &, const CellStatus), CellWeightSum< unsigned int > > cell_weight
boost::signals2::signal< void()> pre_distributed_load
std::vector< unsigned int > n_active_lines_level
std::vector< unsigned int > n_active_quads_level
boost::signals2::signal< void()> post_distributed_load
global_cell_index coarse_cell_id
std::vector< unsigned int > n_hexes_level
boost::signals2::signal< void()> pre_distributed_repartition
bool vertex_used(const unsigned int index) const
boost::signals2::signal< void()> any_change
std::enable_if< std::is_fundamental< T >::value, std::size_t >::type memory_consumption(const T &t)
boost::signals2::signal< void()> post_distributed_refinement