deal.II version 9.8.0
\(\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
tria.h
Go to the documentation of this file.
1// -----------------------------------------------------------------------------
2//
3// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception OR LGPL-2.1-or-later
4// Copyright (C) 1998 - 2026 by the deal.II authors
5//
6// This file is part of the deal.II library.
7//
8// Detailed license information governing the source code and contributions
9// can be found in LICENSE.md and CONTRIBUTING.md at the top level directory.
10//
11// -----------------------------------------------------------------------------
12
13#ifndef dealii_tria_h
14#define dealii_tria_h
15
16
17#include <deal.II/base/config.h>
18
24#include <deal.II/base/point.h>
25#include <deal.II/base/table.h>
26
32
33#include <boost/range/iterator_range_core.hpp>
34#include <boost/serialization/map.hpp>
35#include <boost/serialization/split_member.hpp>
36#include <boost/serialization/unique_ptr.hpp>
37#include <boost/serialization/vector.hpp>
38#include <boost/signals2.hpp>
39
40#include <bitset>
41#include <functional>
42#include <list>
43#include <map>
44#include <memory>
45#include <numeric>
46#include <set>
47#include <vector>
48
49
51
52#ifdef signals
53# error \
54 "The name 'signals' is already defined. You are most likely using the QT library \
55and using the 'signals' keyword. You can either #include the Qt headers (or any conflicting headers) \
56*after* the deal.II headers or you can define the 'QT_NO_KEYWORDS' macro and use the 'Q_SIGNALS' macro."
57#endif
58
59// Forward declarations
60#ifndef DOXYGEN
61// We need to forward-declare Manifold here since Manifold depends on
62// Triangulation (e.g., it has functions which take face iterators as inputs).
63template <int dim, int spacedim>
64class Manifold;
65
66template <int dim>
67struct CellData;
68
69struct SubCellData;
70
72{
73 template <int, int>
74 struct Description;
75}
76
77namespace GridTools
78{
79 template <typename CellIterator>
80 struct PeriodicFacePair;
81}
82
83template <int, int, int>
84class TriaAccessor;
85template <int spacedim>
86class TriaAccessor<0, 1, spacedim>;
87template <int, int, int>
89
90namespace internal
91{
93 {
94 template <int dim>
95 class TriaFaces;
96
97 class TriaObjects;
98
99 template <int, int>
100 class Policy;
101
107 struct Implementation;
109 } // namespace TriangulationImplementation
110
112 {
113 struct Implementation;
114 }
115} // namespace internal
116#endif
117
118
119/*------------------------------------------------------------------------*/
120
121
122namespace internal
123{
129 {
141 template <int dim>
143 {};
144
156 template <>
157 struct NumberCache<1>
158 {
162 unsigned int n_levels;
163
167 unsigned int n_lines;
168
172 std::vector<unsigned int> n_lines_level;
173
177 unsigned int n_active_lines;
178
182 std::vector<unsigned int> n_active_lines_level;
183
187 std::shared_ptr<const Utilities::MPI::Partitioner>
189
193 std::vector<std::shared_ptr<const Utilities::MPI::Partitioner>>
195
199 NumberCache();
200
205 std::size_t
206 memory_consumption() const;
207
213 template <class Archive>
214 void
215 serialize(Archive &ar, const unsigned int version);
216 };
217
218
231 template <>
232 struct NumberCache<2> : public NumberCache<1>
233 {
237 unsigned int n_quads;
238
242 std::vector<unsigned int> n_quads_level;
243
247 unsigned int n_active_quads;
248
252 std::vector<unsigned int> n_active_quads_level;
253
257 NumberCache();
258
263 std::size_t
264 memory_consumption() const;
265
271 template <class Archive>
272 void
273 serialize(Archive &ar, const unsigned int version);
274 };
275
276
290 template <>
291 struct NumberCache<3> : public NumberCache<2>
292 {
296 unsigned int n_hexes;
297
301 std::vector<unsigned int> n_hexes_level;
302
306 unsigned int n_active_hexes;
307
311 std::vector<unsigned int> n_active_hexes_level;
312
316 NumberCache();
317
322 std::size_t
323 memory_consumption() const;
324
330 template <class Archive>
331 void
332 serialize(Archive &ar, const unsigned int version);
333 };
334
354 template <int dim>
355 struct Strides
356 {
360 Strides();
361
366 Strides(const std::vector<ReferenceCell<dim>> &reference_cells);
367
372
376 unsigned int max_faces_per_cell;
377
381 unsigned int max_lines_per_cell;
382
387
392
396 unsigned int max_lines_per_face;
397 };
398 } // namespace TriangulationImplementation
399
400
404 template <int dim, int spacedim = dim>
407 {
409
415
421
423 std::function<std::vector<char>(cell_iterator, CellStatus)>;
424
429 std::vector<pack_callback_t> pack_callbacks_fixed;
430 std::vector<pack_callback_t> pack_callbacks_variable;
431 };
432
443 template <int dim, int spacedim = dim>
446 {
447 public:
449
454 static inline constexpr unsigned int version_number = 5;
455
461 using cell_relation_t = typename std::pair<cell_iterator, CellStatus>;
462
464
473 void
474 pack_data(
475 const std::vector<cell_relation_t> &cell_relations,
476 const std::vector<
478 &pack_callbacks_fixed,
479 const std::vector<
481 &pack_callbacks_variable,
482 const MPI_Comm &mpi_communicator);
483
491 void
492 unpack_cell_status(std::vector<cell_relation_t> &cell_relations) const;
493
506 void
508 const std::vector<cell_relation_t> &cell_relations,
509 const unsigned int handle,
510 const std::function<
511 void(const cell_iterator &,
512 const CellStatus &,
513 const boost::iterator_range<std::vector<char>::const_iterator> &)>
514 &unpack_callback) const;
515
530 void
531 save(const unsigned int global_first_cell,
532 const unsigned int global_num_cells,
533 const std::string &file_basename,
534 const MPI_Comm &mpi_communicator) const;
535
554 void
555 load(const unsigned int global_first_cell,
556 const unsigned int global_num_cells,
557 const unsigned int local_num_cells,
558 const std::string &file_basename,
559 const unsigned int n_attached_deserialize_fixed,
560 const unsigned int n_attached_deserialize_variable,
561 const MPI_Comm &mpi_communicator);
562
569 void
570 clear();
571
576
587 std::vector<unsigned int> sizes_fixed_cumulative;
588
593 std::vector<char> src_data_fixed;
594 std::vector<char> dest_data_fixed;
595
600 std::vector<int> src_sizes_variable;
601 std::vector<int> dest_sizes_variable;
602 std::vector<char> src_data_variable;
603 std::vector<char> dest_data_variable;
604 };
605} // namespace internal
606
607
608/*------------------------------------------------------------------------*/
609
610
1388template <int dim, int spacedim = dim>
1391{
1392private:
1399
1400public:
1608
1625
1631
1649
1663 using face_iterator = TriaIterator<TriaAccessor<dim - 1, dim, spacedim>>;
1664
1677 TriaActiveIterator<TriaAccessor<dim - 1, dim, spacedim>>;
1678
1688
1703
1711 using line_iterator = typename IteratorSelector::line_iterator;
1712
1726 using active_line_iterator = typename IteratorSelector::active_line_iterator;
1727
1735 using quad_iterator = typename IteratorSelector::quad_iterator;
1736
1750 using active_quad_iterator = typename IteratorSelector::active_quad_iterator;
1751
1759 using hex_iterator = typename IteratorSelector::hex_iterator;
1760
1770 using active_hex_iterator = typename IteratorSelector::active_hex_iterator;
1771
1791 {
1798 virtual ~DistortedCellList() noexcept override;
1799
1804 std::list<typename Triangulation<dim, spacedim>::cell_iterator>
1806 };
1807
1811 static constexpr unsigned int dimension = dim;
1812
1816 static constexpr unsigned int space_dimension = spacedim;
1817
1833 const bool check_for_distorted_cells = false);
1834
1850 Triangulation(const Triangulation<dim, spacedim> &) = delete;
1851
1858 Triangulation(Triangulation<dim, spacedim> &&tria) noexcept;
1859
1864 operator=(Triangulation<dim, spacedim> &&tria) noexcept;
1865
1869 virtual ~Triangulation() override;
1870
1877 virtual void
1879
1884 virtual MPI_Comm
1886
1894 "Access the MPI communicator with get_mpi_communicator() instead.")
1895 MPI_Comm
1897
1903 virtual std::weak_ptr<const Utilities::MPI::Partitioner>
1905
1911 virtual std::weak_ptr<const Utilities::MPI::Partitioner>
1912 global_level_cell_index_partitioner(const unsigned int level) const;
1913
1918 virtual void
1919 set_mesh_smoothing(const MeshSmoothing mesh_smoothing);
1920
1924 virtual const MeshSmoothing &
1926
1949 void
1950 set_manifold(const types::manifold_id number,
1951 const Manifold<dim, spacedim> &manifold_object);
1952
1969 void
1970 reset_manifold(const types::manifold_id manifold_number);
1971
1988 void
1990
1999 void
2000 set_all_manifold_ids(const types::manifold_id number);
2001
2010 void
2011 set_all_manifold_ids_on_boundary(const types::manifold_id number);
2012
2022 void
2024 const types::manifold_id number);
2025
2039 const Manifold<dim, spacedim> &
2040 get_manifold(const types::manifold_id number) const;
2041
2052 virtual std::vector<types::boundary_id>
2054
2067 virtual std::vector<types::manifold_id>
2069
2091 virtual void
2092 copy_triangulation(const Triangulation<dim, spacedim> &other_tria);
2093
2142 virtual void
2143 create_triangulation(const std::vector<Point<spacedim>> &vertices,
2144 const std::vector<CellData<dim>> &cells,
2145 const SubCellData &subcelldata);
2146
2159 virtual void
2161 const TriangulationDescription::Description<dim, spacedim>
2162 &construction_data);
2163
2172 void
2174
2180 void
2182
2187
2194 void
2196
2219 void
2220 refine_global(const unsigned int times = 1);
2221
2234 void
2235 coarsen_global(const unsigned int times = 1);
2236
2268 virtual void
2270
2300 virtual bool
2302
2304
2318
2323 static constexpr auto CELL_PERSIST DEAL_II_DEPRECATED =
2325
2330 static constexpr auto CELL_REFINE DEAL_II_DEPRECATED =
2332
2337 static constexpr auto CELL_COARSEN DEAL_II_DEPRECATED =
2339
2344 static constexpr auto CELL_INVALID DEAL_II_DEPRECATED =
2346
2347
2353 template <typename T>
2355 {
2356 using result_type = T;
2357
2358 template <typename InputIterator>
2359 T
2360 operator()(InputIterator first, InputIterator last) const
2361 {
2362 return std::accumulate(first, last, T());
2363 }
2364 };
2365
2375 struct Signals
2376 {
2384 boost::signals2::signal<void()> create;
2385
2393 boost::signals2::signal<void()> pre_refinement;
2394
2400 boost::signals2::signal<void()> post_refinement;
2401
2408 boost::signals2::signal<void()> pre_partition;
2409
2417 boost::signals2::signal<void()> mesh_movement;
2418
2426 boost::signals2::signal<void(
2427 const typename Triangulation<dim, spacedim>::cell_iterator &cell)>
2429
2436 boost::signals2::signal<void(
2437 const typename Triangulation<dim, spacedim>::cell_iterator &cell)>
2439
2446 boost::signals2::signal<void(
2447 const Triangulation<dim, spacedim> &destination_tria)>
2449
2463 boost::signals2::signal<void()> clear;
2464
2474 boost::signals2::signal<void()> any_change;
2475
2512 boost::signals2::signal<unsigned int(const cell_iterator &,
2513 const ::CellStatus),
2516
2528 boost::signals2::signal<void()> pre_distributed_refinement;
2529
2537 boost::signals2::signal<void()> post_p4est_refinement;
2538
2547 boost::signals2::signal<void()> post_distributed_refinement;
2548
2554 boost::signals2::signal<void()> pre_distributed_repartition;
2555
2561 boost::signals2::signal<void()> post_distributed_repartition;
2562
2569 boost::signals2::signal<void()> pre_distributed_save;
2570
2576 boost::signals2::signal<void()> post_distributed_save;
2577
2584 boost::signals2::signal<void()> pre_distributed_load;
2585
2591 boost::signals2::signal<void()> post_distributed_load;
2592 };
2593
2598
2602 mutable Signals signals;
2603
2605
2610
2615 void
2616 save_refine_flags(std::ostream &out) const;
2617
2621 void
2622 save_refine_flags(std::vector<bool> &v) const;
2623
2627 void
2628 load_refine_flags(std::istream &in);
2629
2633 void
2634 load_refine_flags(const std::vector<bool> &v);
2635
2639 void
2640 save_coarsen_flags(std::ostream &out) const;
2641
2645 void
2646 save_coarsen_flags(std::vector<bool> &v) const;
2647
2651 void
2652 load_coarsen_flags(std::istream &out);
2653
2657 void
2658 load_coarsen_flags(const std::vector<bool> &v);
2659
2664 bool
2666
2668
2673
2678 void
2680
2686 void
2687 save_user_flags(std::ostream &out) const;
2688
2694 void
2695 save_user_flags(std::vector<bool> &v) const;
2696
2701 void
2702 load_user_flags(std::istream &in);
2703
2708 void
2709 load_user_flags(const std::vector<bool> &v);
2710
2715 void
2717
2722 void
2723 save_user_flags_line(std::ostream &out) const;
2724
2730 void
2731 save_user_flags_line(std::vector<bool> &v) const;
2732
2737 void
2738 load_user_flags_line(std::istream &in);
2739
2744 void
2745 load_user_flags_line(const std::vector<bool> &v);
2746
2751 void
2753
2758 void
2759 save_user_flags_quad(std::ostream &out) const;
2760
2766 void
2767 save_user_flags_quad(std::vector<bool> &v) const;
2768
2773 void
2774 load_user_flags_quad(std::istream &in);
2775
2780 void
2781 load_user_flags_quad(const std::vector<bool> &v);
2782
2783
2788 void
2790
2795 void
2796 save_user_flags_hex(std::ostream &out) const;
2797
2803 void
2804 save_user_flags_hex(std::vector<bool> &v) const;
2805
2810 void
2811 load_user_flags_hex(std::istream &in);
2812
2817 void
2818 load_user_flags_hex(const std::vector<bool> &v);
2819
2825 void
2827
2833 void
2834 save_user_indices(std::vector<unsigned int> &v) const;
2835
2840 void
2841 load_user_indices(const std::vector<unsigned int> &v);
2842
2848 void
2849 save_user_pointers(std::vector<void *> &v) const;
2850
2855 void
2856 load_user_pointers(const std::vector<void *> &v);
2857
2863 void
2864 save_user_indices_line(std::vector<unsigned int> &v) const;
2865
2870 void
2871 load_user_indices_line(const std::vector<unsigned int> &v);
2872
2878 void
2879 save_user_indices_quad(std::vector<unsigned int> &v) const;
2880
2885 void
2886 load_user_indices_quad(const std::vector<unsigned int> &v);
2887
2893 void
2894 save_user_indices_hex(std::vector<unsigned int> &v) const;
2895
2900 void
2901 load_user_indices_hex(const std::vector<unsigned int> &v);
2907 void
2908 save_user_pointers_line(std::vector<void *> &v) const;
2909
2914 void
2915 load_user_pointers_line(const std::vector<void *> &v);
2916
2922 void
2923 save_user_pointers_quad(std::vector<void *> &v) const;
2924
2929 void
2930 load_user_pointers_quad(const std::vector<void *> &v);
2931
2937 void
2938 save_user_pointers_hex(std::vector<void *> &v) const;
2939
2944 void
2945 load_user_pointers_hex(const std::vector<void *> &v);
2946
2948
2953
2972 begin(const unsigned int level = 0) const;
2973
3005 begin_active(const unsigned int level = 0) const;
3006
3012 end() const;
3013
3033 end(const unsigned int level) const;
3034
3055 end_active(const unsigned int level) const;
3056
3057
3062 last() const;
3063
3069
3078 create_cell_iterator(const CellId &cell_id) const;
3079
3090 bool
3091 contains_cell(const CellId &cell_id) const;
3093
3098
3111
3149
3166 cell_iterators_on_level(const unsigned int level) const;
3167
3184 active_cell_iterators_on_level(const unsigned int level) const;
3185
3187
3188 /*-------------------------------------------------------------------------*/
3189
3194
3199 begin_face() const;
3200
3206
3212 end_face() const;
3213
3234
3236
3237 /*-------------------------------------------------------------------------*/
3238
3243
3250
3258
3265 end_vertex() const;
3266
3268
3273
3282
3286 unsigned int
3287 n_lines() const;
3288
3292 unsigned int
3293 n_lines(const unsigned int level) const;
3294
3298 unsigned int
3300
3304 unsigned int
3305 n_active_lines(const unsigned int level) const;
3306
3310 unsigned int
3311 n_quads() const;
3312
3316 unsigned int
3317 n_quads(const unsigned int level) const;
3318
3322 unsigned int
3324
3328 unsigned int
3329 n_active_quads(const unsigned int level) const;
3330
3334 unsigned int
3335 n_hexs() const;
3336
3341 unsigned int
3342 n_hexs(const unsigned int level) const;
3343
3347 unsigned int
3349
3354 unsigned int
3355 n_active_hexs(const unsigned int level) const;
3356
3361 unsigned int
3362 n_cells() const;
3363
3368 unsigned int
3369 n_cells(const unsigned int level) const;
3370
3375 unsigned int
3377
3405
3406
3411 unsigned int
3412 n_active_cells(const unsigned int level) const;
3413
3418 virtual types::coarse_cell_id
3420
3426 unsigned int
3427 n_faces() const;
3428
3434 unsigned int
3436
3454 unsigned int
3455 n_levels() const;
3456
3463 virtual unsigned int
3465
3475 virtual bool
3477
3492 unsigned int
3493 n_vertices() const;
3494
3503 const std::vector<Point<spacedim>> &
3505
3512 unsigned int
3514
3521 bool
3522 vertex_used(const unsigned int index) const;
3523
3530 const std::vector<bool> &
3532
3544 unsigned int
3546
3553 virtual types::subdomain_id
3555
3567
3574
3575
3577
3582
3592 unsigned int
3594
3604 unsigned int
3605 n_raw_lines(const unsigned int level) const;
3606
3616 unsigned int
3618
3628 unsigned int
3629 n_raw_quads(const unsigned int level) const;
3630
3640 unsigned int
3641 n_raw_hexs(const unsigned int level) const;
3642
3652 unsigned int
3653 n_raw_cells(const unsigned int level) const;
3654
3666 unsigned int
3668
3670
3679 virtual std::size_t
3681
3691 template <class Archive>
3692 void
3693 save(Archive &ar, const unsigned int version) const;
3694
3712 template <class Archive>
3713 void
3714 load(Archive &ar, const unsigned int version);
3715
3716
3725 virtual void
3726 save(const std::string &file_basename) const;
3727
3731 virtual void
3732 load(const std::string &file_basename);
3733
3734
3750 virtual void
3752 const std::vector<GridTools::PeriodicFacePair<cell_iterator>> &);
3753
3757 const std::map<std::pair<cell_iterator, unsigned int>,
3758 std::pair<std::pair<cell_iterator, unsigned int>,
3761
3766 const std::vector<ReferenceCell<dim>> &
3768
3773 bool
3775
3780 bool
3782
3788 bool
3790
3791#ifdef DOXYGEN
3799 template <class Archive>
3800 void
3801 serialize(Archive &archive, const unsigned int version);
3802#else
3803 // This macro defines the serialize() method that is compatible with
3804 // the templated save() and load() method that have been implemented.
3805 BOOST_SERIALIZATION_SPLIT_MEMBER()
3806#endif
3807
3812public:
3920 unsigned int
3922 const std::function<std::vector<char>(const cell_iterator &,
3923 const ::CellStatus)>
3924 &pack_callback,
3925 const bool returns_variable_size_data);
3926
3976 void
3978 const unsigned int handle,
3979 const std::function<
3980 void(const cell_iterator &,
3981 const ::CellStatus,
3982 const boost::iterator_range<std::vector<char>::const_iterator> &)>
3983 &unpack_callback);
3984
3986
3987protected:
3995 void
3996 save_attached_data(const unsigned int global_first_cell,
3997 const unsigned int global_num_cells,
3998 const std::string &file_basename) const;
3999
4008 void
4009 load_attached_data(const unsigned int global_first_cell,
4010 const unsigned int global_num_cells,
4011 const unsigned int local_num_cells,
4012 const std::string &file_basename,
4013 const unsigned int n_attached_deserialize_fixed,
4014 const unsigned int n_attached_deserialize_variable);
4015
4025 void
4027
4033 void
4035
4036
4041 void
4043
4049 std::vector<typename internal::CellAttachedDataSerializer<dim, spacedim>::
4050 cell_relation_t>
4052
4057
4058public:
4063
4070 "The provided refinement pattern requires creating a level "
4071 "in the Triangulation. However, the maximum number of "
4072 "levels has already been reached, so that is not allowed.");
4073
4075 int,
4076 int,
4077 << "You are requesting information from refinement level "
4078 << arg1
4079 << " of a triangulation, but this triangulation only has "
4080 << arg2 << " refinement levels. The given level " << arg1
4081 << " must be *less* than " << arg2 << '.');
4090 int,
4091 int,
4092 << "You are trying to perform an operation on a triangulation "
4093 << "that is only allowed if the triangulation is currently empty. "
4094 << "However, it currently stores " << arg1 << " vertices and has "
4095 << "cells on " << arg2 << " levels.");
4113 int,
4114 << "You tried to do something on level " << arg1
4115 << ", but this level is empty.");
4116
4126 << "The given boundary_id " << arg1
4127 << " is not defined in this Triangulation!");
4129
4130protected:
4136
4141 std::vector<ReferenceCell<dim>> reference_cells;
4142
4147
4157 std::optional<Table<2, std::set<active_cell_iterator>>>
4159
4173 static void
4174 write_bool_vector(const unsigned int magic_number1,
4175 const std::vector<bool> &v,
4176 const unsigned int magic_number2,
4177 std::ostream &out);
4178
4183 static void
4184 read_bool_vector(const unsigned int magic_number1,
4185 std::vector<bool> &v,
4186 const unsigned int magic_number2,
4187 std::istream &in);
4188
4193 void
4195
4196
4197private:
4202 std::unique_ptr<
4205
4212 std::vector<GridTools::PeriodicFacePair<cell_iterator>>
4214
4219 std::map<std::pair<cell_iterator, unsigned int>,
4220 std::pair<std::pair<cell_iterator, unsigned int>,
4223
4234 TriaRawIterator<TriaAccessor<dim - 1, dim, spacedim>>;
4237 using raw_line_iterator = typename IteratorSelector::raw_line_iterator;
4238 using raw_quad_iterator = typename IteratorSelector::raw_quad_iterator;
4239 using raw_hex_iterator = typename IteratorSelector::raw_hex_iterator;
4240
4245
4251 begin_raw(const unsigned int level = 0) const;
4252
4258 end_raw(const unsigned int level) const;
4259
4261
4266
4274 begin_raw_line(const unsigned int level = 0) const;
4275
4294 begin_line(const unsigned int level = 0) const;
4295
4314 begin_active_line(const unsigned int level = 0) const;
4315
4321 end_line() const;
4322
4324
4329
4350 begin_raw_quad(const unsigned int level = 0) const;
4351
4370 begin_quad(const unsigned int level = 0) const;
4371
4390 begin_active_quad(const unsigned int level = 0) const;
4391
4397 end_quad() const;
4398
4400
4405
4425 begin_raw_hex(const unsigned int level = 0) const;
4426
4445 begin_hex(const unsigned int level = 0) const;
4446
4465 begin_active_hex(const unsigned int level = 0) const;
4466
4472 end_hex() const;
4473
4475
4476
4490 void
4492
4496 void
4498
4505 void
4507
4511 void
4513
4517 void
4519
4533 DistortedCellList
4535
4542 void
4544
4549 void
4551
4567 virtual unsigned int
4569 const types::coarse_cell_id coarse_cell_id) const;
4570
4571
4584 virtual types::coarse_cell_id
4586 const unsigned int coarse_cell_index) const;
4587
4592 std::vector<std::unique_ptr<
4595
4601 std::unique_ptr<::internal::TriangulationImplementation::TriaFaces<dim>>
4603
4604
4608 std::vector<Point<spacedim>> vertices;
4609
4613 std::vector<bool> vertices_used;
4614
4618 std::map<types::manifold_id, std::unique_ptr<const Manifold<dim, spacedim>>>
4620
4627 const std::unique_ptr<const Manifold<dim, spacedim>> default_flat_manifold;
4628
4633
4634
4640
4651
4666 std::unique_ptr<std::map<unsigned int, types::boundary_id>>
4668
4669
4689 std::unique_ptr<std::map<unsigned int, types::manifold_id>>
4691
4692 // make a couple of classes friends
4693 template <int, int, int>
4694 friend class TriaAccessorBase;
4695 template <int, int, int>
4696 friend class TriaAccessor;
4697 friend class TriaAccessor<0, 1, spacedim>;
4698
4699 friend class CellAccessor<dim, spacedim>;
4700
4701 friend struct ::internal::TriaAccessorImplementation::Implementation;
4702
4703 friend struct ::internal::TriangulationImplementation::Implementation;
4704 friend struct ::internal::TriangulationImplementation::
4705 ImplementationMixedMesh;
4706
4707 friend class ::internal::TriangulationImplementation::TriaObjects;
4708
4709 // explicitly check for sensible template arguments, but not on windows
4710 // because MSVC creates bogus warnings during normal compilation
4711#ifndef DEAL_II_MSVC
4712 static_assert(dim <= spacedim,
4713 "The dimension <dim> of a Triangulation must be less than or "
4714 "equal to the space dimension <spacedim> in which it lives.");
4715#endif
4716};
4717
4718
4719#ifndef DOXYGEN
4720
4721
4722
4723namespace internal
4724{
4725 namespace TriangulationImplementation
4726 {
4727 template <class Archive>
4728 void
4729 NumberCache<1>::serialize(Archive &ar, const unsigned int)
4730 {
4731 ar &n_levels;
4732 ar &n_lines &n_lines_level;
4733 ar &n_active_lines &n_active_lines_level;
4734 }
4735
4736
4737 template <class Archive>
4738 void
4739 NumberCache<2>::serialize(Archive &ar, const unsigned int version)
4740 {
4741 this->NumberCache<1>::serialize(ar, version);
4742
4743 ar &n_quads &n_quads_level;
4744 ar &n_active_quads &n_active_quads_level;
4745 }
4746
4747
4748 template <class Archive>
4749 void
4750 NumberCache<3>::serialize(Archive &ar, const unsigned int version)
4751 {
4752 this->NumberCache<2>::serialize(ar, version);
4753
4754 ar &n_hexes &n_hexes_level;
4755 ar &n_active_hexes &n_active_hexes_level;
4756 }
4757 } // namespace TriangulationImplementation
4758} // namespace internal
4759
4760
4761template <int dim, int spacedim>
4764 const unsigned int index) const
4765{
4766 AssertIndexRange(index, vertices_used.size());
4767 return vertices_used[index];
4768}
4769
4770
4771
4772template <int dim, int spacedim>
4774inline unsigned int Triangulation<dim, spacedim>::n_levels() const
4775{
4776 return number_cache.n_levels;
4777}
4778
4779template <int dim, int spacedim>
4781inline unsigned int Triangulation<dim, spacedim>::n_global_levels() const
4782{
4783 return number_cache.n_levels;
4784}
4785
4786
4787template <int dim, int spacedim>
4789inline unsigned int Triangulation<dim, spacedim>::n_vertices() const
4790{
4791 return vertices.size();
4792}
4793
4794
4795
4796template <int dim, int spacedim>
4798inline const std::vector<Point<spacedim>>
4800{
4801 return vertices;
4802}
4803
4804
4805template <int dim, int spacedim>
4807template <class Archive>
4808void Triangulation<dim, spacedim>::save(Archive &ar, const unsigned int) const
4809{
4810 // as discussed in the documentation, do not store the signals as
4811 // well as boundary and manifold description but everything else
4812 ar &smooth_grid;
4813
4814 ar &reference_cells;
4815
4816 unsigned int n_levels = levels.size();
4817 ar &n_levels;
4819 for (const auto &level : levels)
4820 ar &level;
4821
4822 // boost dereferences a nullptr when serializing a nullptr
4823 // at least up to 1.65.1. This causes problems with clang-5.
4824 // Therefore, work around it.
4825 bool faces_is_nullptr = (faces.get() == nullptr);
4826 ar &faces_is_nullptr;
4827 if (!faces_is_nullptr)
4828 ar &faces;
4829
4830 ar &vertices;
4831 ar &vertices_used;
4832
4833 ar &anisotropic_refinement;
4834 ar &number_cache;
4835
4836 ar &check_for_distorted_cells;
4837
4838 if (dim == 1)
4839 {
4840 ar &vertex_to_boundary_id_map_1d;
4841 ar &vertex_to_manifold_id_map_1d;
4842 }
4843}
4844
4845
4846
4847template <int dim, int spacedim>
4849template <class Archive>
4850void Triangulation<dim, spacedim>::load(Archive &ar, const unsigned int)
4851{
4852 // clear previous content. this also calls the respective signal
4853 clear();
4854
4855 // as discussed in the documentation, do not store the signals as
4856 // well as boundary and manifold description but everything else
4857 ar &smooth_grid;
4858
4859 ar &reference_cells;
4860 strides =
4862
4863 unsigned int n_levels;
4864 ar &n_levels;
4866 levels.resize(n_levels);
4867 for (auto &level_ : levels)
4868 {
4869 std::unique_ptr<
4871 level;
4872 ar &level;
4873 level_ = std::move(level);
4874 }
4875
4876 // Workaround for nullptr, see in save().
4877 bool faces_is_nullptr = true;
4878 ar &faces_is_nullptr;
4879 if (!faces_is_nullptr)
4880 ar &faces;
4881
4882 ar &vertices;
4883 ar &vertices_used;
4884
4885 ar &anisotropic_refinement;
4886 ar &number_cache;
4887
4888 // the levels do not serialize the active_cell_indices or cached cell vertices
4889 // because they are easy enough to rebuild upon re-loading data. do this here.
4890 reset_cell_vertex_indices_cache();
4891 reset_active_cell_indices();
4892 reset_global_cell_indices();
4893
4894 reset_policy();
4895
4896 bool my_check_for_distorted_cells;
4897 ar &my_check_for_distorted_cells;
4898
4899 Assert(my_check_for_distorted_cells == check_for_distorted_cells,
4900 ExcMessage("The triangulation loaded into here must have the "
4901 "same setting with regard to reporting distorted "
4902 "cell as the one previously stored."));
4903
4904 if (dim == 1)
4905 {
4906 ar &vertex_to_boundary_id_map_1d;
4907 ar &vertex_to_manifold_id_map_1d;
4908 }
4909
4910 // trigger the create signal to indicate
4911 // that new content has been imported into
4912 // the triangulation
4913 signals.create();
4914}
4915
4916
4917
4918template <int dim, int spacedim>
4920inline unsigned int Triangulation<dim, spacedim>::
4922 const types::coarse_cell_id coarse_cell_id) const
4923{
4924 return coarse_cell_id;
4925}
4926
4927
4928
4929template <int dim, int spacedim>
4933 const unsigned int coarse_cell_index) const
4934{
4935 return coarse_cell_index;
4936}
4937
4938
4939
4940/* -------------- declaration of explicit specializations ------------- */
4941
4942template <>
4943unsigned int
4945template <>
4946unsigned int
4948template <>
4949unsigned int
4951
4952template <>
4953bool
4955template <>
4956bool
4958template <>
4959bool
4961
4962
4963// Declare the existence of explicit instantiations of the class
4964// above. This is not strictly necessary, but tells the compiler to
4965// avoid instantiating templates that we know are instantiated in
4966// .cc files and so can be referenced without implicit
4967// instantiations.
4968//
4969// Unfortunately, this does not seem to work when building modules
4970// with clang++ versions before 22 because they then just don't
4971// instantiate these classes at all, even though their members are
4972// defined and explicitly instantiated in a .cc file.
4973//
4974// See https://github.com/llvm/llvm-project/issues/153225 for the
4975// corresponding bug report.
4976# if !(defined(DEAL_II_BUILDING_CXX20_MODULE) && defined(__clang__) && \
4977 (__clang_major__ < 22))
4978extern template class Triangulation<1, 1>;
4979extern template class Triangulation<1, 2>;
4980extern template class Triangulation<1, 3>;
4981extern template class Triangulation<2, 2>;
4982extern template class Triangulation<2, 3>;
4983extern template class Triangulation<3, 3>;
4984# endif
4985
4986#endif // DOXYGEN
4987
4989
4990#endif
CellStatus
Definition cell_status.h:29
@ cell_will_be_refined
Definition cell_status.h:38
@ children_will_be_coarsened
Definition cell_status.h:42
@ cell_will_persist
Definition cell_status.h:34
Definition point.h:111
unsigned int n_hexs(const unsigned int level) const
virtual void add_periodicity(const std::vector< GridTools::PeriodicFacePair< cell_iterator > > &)
void save_user_flags_line(std::vector< bool > &v) const
virtual types::global_cell_index n_global_active_cells() const
static constexpr unsigned int dimension
Definition tria.h:1811
quad_iterator begin_quad(const unsigned int level=0) const
MPI_Comm get_communicator() const
typename IteratorSelector::raw_line_iterator raw_line_iterator
Definition tria.h:4237
active_vertex_iterator begin_active_vertex() const
void load_user_indices_quad(const std::vector< unsigned int > &v)
unsigned int n_quads() const
void load_user_indices(const std::vector< unsigned int > &v)
std::vector< bool > vertices_used
Definition tria.h:4613
TriaRawIterator<::TriaAccessor< 0, dim, spacedim > > raw_vertex_iterator
Definition tria.h:4235
active_quad_iterator begin_active_quad(const unsigned int level=0) const
bool get_anisotropic_refinement_flag() const
virtual const MeshSmoothing & get_mesh_smoothing() const
virtual void copy_triangulation(const Triangulation< dim, spacedim > &other_tria)
virtual types::coarse_cell_id n_global_coarse_cells() const
std::unique_ptr< std::map< unsigned int, types::manifold_id > > vertex_to_manifold_id_map_1d
Definition tria.h:4690
void save_user_pointers_quad(std::vector< void * > &v) const
void save_user_flags_hex(std::ostream &out) const
void clear_user_flags_quad()
unsigned int n_faces() const
active_hex_iterator begin_active_hex(const unsigned int level=0) const
static void read_bool_vector(const unsigned int magic_number1, std::vector< bool > &v, const unsigned int magic_number2, std::istream &in)
virtual std::weak_ptr< const Utilities::MPI::Partitioner > global_active_cell_index_partitioner() const
unsigned int n_active_lines(const unsigned int level) const
bool all_reference_cells_are_hyper_cube() const
void load_user_flags_line(std::istream &in)
void clear_user_data()
raw_hex_iterator begin_raw_hex(const unsigned int level=0) const
const std::unique_ptr< const Manifold< dim, spacedim > > default_flat_manifold
Definition tria.h:4627
void save_user_flags_line(std::ostream &out) const
active_cell_iterator last_active() const
void save(Archive &ar, const unsigned int version) const
std::vector< typename internal::CellAttachedDataSerializer< dim, spacedim >::cell_relation_t > local_cell_relations
Definition tria.h:4051
const Triangulation< dim, spacedim > & get_triangulation() const
void reset_global_cell_indices()
virtual void save(const std::string &file_basename) const
std::unique_ptr<::internal::TriangulationImplementation::TriaFaces< dim > > faces
Definition tria.h:4602
face_iterator end_face() const
void reset_active_cell_indices()
cell_iterator create_cell_iterator(const CellId &cell_id) const
cell_iterator begin(const unsigned int level=0) const
TriaRawIterator< CellAccessor< dim, spacedim > > raw_cell_iterator
Definition tria.h:4232
void fix_coarsen_flags()
TriaRawIterator< TriaAccessor< dim - 1, dim, spacedim > > raw_face_iterator
Definition tria.h:4233
virtual void load(const std::string &file_basename)
unsigned int n_active_cells(const unsigned int level) const
std::optional< Table< 2, std::set< active_cell_iterator > > > line_to_adjacent_cells_map
Definition tria.h:4158
unsigned int n_cells(const unsigned int level) const
virtual MPI_Comm get_mpi_communicator() const
void save_user_pointers_line(std::vector< void * > &v) const
void save_user_flags_quad(std::vector< bool > &v) const
friend class TriaAccessor
Definition tria.h:4696
void load_refine_flags(std::istream &in)
void save_user_indices_line(std::vector< unsigned int > &v) const
raw_cell_iterator begin_raw(const unsigned int level=0) const
unsigned int n_lines() const
void load_coarsen_flags(const std::vector< bool > &v)
virtual void set_mesh_smoothing(const MeshSmoothing mesh_smoothing)
unsigned int n_raw_lines() const
virtual std::size_t memory_consumption() const
static constexpr auto CELL_REFINE
Definition tria.h:2330
std::vector< Point< spacedim > > vertices
Definition tria.h:4608
raw_quad_iterator begin_raw_quad(const unsigned int level=0) const
virtual types::subdomain_id locally_owned_subdomain() const
unsigned int n_raw_faces() const
unsigned int n_active_faces() const
virtual void create_triangulation(const std::vector< Point< spacedim > > &vertices, const std::vector< CellData< dim > > &cells, const SubCellData &subcelldata)
const bool check_for_distorted_cells
Definition tria.h:4639
raw_cell_iterator end_raw(const unsigned int level) const
line_iterator end_line() const
std::unique_ptr< std::map< unsigned int, types::boundary_id > > vertex_to_boundary_id_map_1d
Definition tria.h:4667
void load_user_flags_quad(std::istream &in)
unsigned int n_active_cells() const
void update_periodic_face_map()
unsigned int n_raw_lines(const unsigned int level) const
void clear_despite_subscriptions()
void coarsen_global(const unsigned int times=1)
Triangulation(const MeshSmoothing smooth_grid=none, const bool check_for_distorted_cells=false)
std::vector< ReferenceCell< dim > > reference_cells
Definition tria.h:4141
void save_user_flags(std::ostream &out) const
void refine_global(const unsigned int times=1)
std::vector< std::unique_ptr< ::internal::TriangulationImplementation::TriaLevel< dim, spacedim > > > levels
Definition tria.h:4594
virtual std::weak_ptr< const Utilities::MPI::Partitioner > global_level_cell_index_partitioner(const unsigned int level) const
void load_user_flags_hex(std::istream &in)
const std::vector< Point< spacedim > > & get_vertices() const
void load_user_pointers_quad(const std::vector< void * > &v)
static constexpr auto CELL_INVALID
Definition tria.h:2344
::CellStatus CellStatus
Definition tria.h:2317
unsigned int n_used_vertices() const
void reset_cell_vertex_indices_cache()
unsigned int n_active_lines() const
unsigned int n_levels() const
void load_user_flags_hex(const std::vector< bool > &v)
friend class TriaAccessorBase
Definition tria.h:4694
void load_user_indices_line(const std::vector< unsigned int > &v)
void clear_user_flags_hex()
void save_user_pointers_hex(std::vector< void * > &v) const
::internal::TriangulationImplementation::Iterators< dim, spacedim > IteratorSelector
Definition tria.h:1397
typename IteratorSelector::raw_quad_iterator raw_quad_iterator
Definition tria.h:4238
void load_user_pointers(const std::vector< void * > &v)
static constexpr auto CELL_COARSEN
Definition tria.h:2337
unsigned int register_data_attach(const std::function< std::vector< char >(const cell_iterator &, const ::CellStatus)> &pack_callback, const bool returns_variable_size_data)
::internal::TriangulationImplementation::NumberCache< dim > number_cache
Definition tria.h:4650
void load_user_flags_quad(const std::vector< bool > &v)
void save_attached_data(const unsigned int global_first_cell, const unsigned int global_num_cells, const std::string &file_basename) const
void load_user_flags_line(const std::vector< bool > &v)
void save_user_indices_hex(std::vector< unsigned int > &v) const
DistortedCellList execute_refinement()
void update_cell_relations()
active_line_iterator begin_active_line(const unsigned int level=0) const
void save_user_indices_quad(std::vector< unsigned int > &v) const
void load_user_pointers_hex(const std::vector< void * > &v)
void pack_data_serial()
cell_iterator end() const
virtual bool has_hanging_nodes() const
static constexpr unsigned int space_dimension
Definition tria.h:1816
std::vector< GridTools::PeriodicFacePair< cell_iterator > > periodic_face_pairs_level_0
Definition tria.h:4213
unsigned int n_raw_cells(const unsigned int level) const
cell_iterator end(const unsigned int level) const
bool contains_cell(const CellId &cell_id) const
void load_attached_data(const unsigned int global_first_cell, const unsigned int global_num_cells, const unsigned int local_num_cells, const std::string &file_basename, const unsigned int n_attached_deserialize_fixed, const unsigned int n_attached_deserialize_variable)
virtual types::coarse_cell_id coarse_cell_index_to_coarse_cell_id(const unsigned int coarse_cell_index) const
unsigned int n_raw_quads(const unsigned int level) const
internal::CellAttachedData< dim, spacedim > cell_attached_data
Definition tria.h:3985
void load_coarsen_flags(std::istream &out)
quad_iterator end_quad() const
line_iterator begin_line(const unsigned int level=0) const
unsigned int max_adjacent_cells() const
vertex_iterator begin_vertex() const
void clear_user_flags()
unsigned int n_hexs() const
vertex_iterator end_vertex() const
bool vertex_used(const unsigned int index) const
void load_user_pointers_line(const std::vector< void * > &v)
void save_user_flags(std::vector< bool > &v) const
hex_iterator end_hex() const
hex_iterator begin_hex(const unsigned int level=0) const
virtual void execute_coarsening_and_refinement()
virtual unsigned int n_global_levels() const
active_cell_iterator end_active(const unsigned int level) const
bool is_mixed_mesh() const
cell_iterator last() const
unsigned int n_active_quads() const
void save_coarsen_flags(std::vector< bool > &v) const
void load_user_indices_hex(const std::vector< unsigned int > &v)
unsigned int n_raw_quads() const
void save_user_pointers(std::vector< void * > &v) const
face_iterator begin_face() const
unsigned int n_cells() const
virtual bool prepare_coarsening_and_refinement()
unsigned int n_active_quads(const unsigned int level) const
void unpack_data_serial()
const std::vector< bool > & get_used_vertices() const
void load_user_flags(const std::vector< bool > &v)
typename IteratorSelector::raw_hex_iterator raw_hex_iterator
Definition tria.h:4239
std::map< types::manifold_id, std::unique_ptr< const Manifold< dim, spacedim > > > manifolds
Definition tria.h:4619
void serialize(Archive &archive, const unsigned int version)
void load_refine_flags(const std::vector< bool > &v)
MeshSmoothing smooth_grid
Definition tria.h:4135
void save_refine_flags(std::ostream &out) const
std::unique_ptr< ::internal::TriangulationImplementation::Policy< dim, spacedim > > policy
Definition tria.h:4204
Triangulation< dim, spacedim > & get_triangulation()
void save_user_flags_quad(std::ostream &out) const
cell_iterator level_cell_iterator
Definition tria.h:1630
internal::CellAttachedDataSerializer< dim, spacedim > data_serializer
Definition tria.h:4053
std::map< std::pair< cell_iterator, unsigned int >, std::pair< std::pair< cell_iterator, unsigned int >, types::geometric_orientation > > periodic_face_map
Definition tria.h:4222
unsigned int n_active_hexs(const unsigned int level) const
internal::TriangulationImplementation::Strides< dim > strides
Definition tria.h:4146
unsigned int n_vertices() const
void load(Archive &ar, const unsigned int version)
void save_user_indices(std::vector< unsigned int > &v) const
void notify_ready_to_unpack(const unsigned int handle, const std::function< void(const cell_iterator &, const ::CellStatus, const boost::iterator_range< std::vector< char >::const_iterator > &)> &unpack_callback)
void save_user_flags_hex(std::vector< bool > &v) const
bool all_reference_cells_are_simplex() const
unsigned int n_raw_hexs(const unsigned int level) const
const std::map< std::pair< cell_iterator, unsigned int >, std::pair< std::pair< cell_iterator, unsigned int >, types::geometric_orientation > > & get_periodic_face_map() const
unsigned int n_lines(const unsigned int level) const
unsigned int n_active_hexs() const
virtual std::vector< types::boundary_id > get_boundary_ids() const
virtual unsigned int coarse_cell_id_to_coarse_cell_index(const types::coarse_cell_id coarse_cell_id) const
unsigned int n_quads(const unsigned int level) const
const std::vector< ReferenceCell< dim > > & get_reference_cells() const
void load_user_flags(std::istream &in)
void reset_policy()
void save_coarsen_flags(std::ostream &out) const
active_face_iterator begin_active_face() const
void clear_user_flags_line()
raw_line_iterator begin_raw_line(const unsigned int level=0) const
static void write_bool_vector(const unsigned int magic_number1, const std::vector< bool > &v, const unsigned int magic_number2, std::ostream &out)
static constexpr auto CELL_PERSIST
Definition tria.h:2323
active_cell_iterator begin_active(const unsigned int level=0) const
void execute_coarsening()
void save_refine_flags(std::vector< bool > &v) const
void unpack_data(const std::vector< cell_relation_t > &cell_relations, const unsigned int handle, const std::function< void(const cell_iterator &, const CellStatus &, const boost::iterator_range< std::vector< char >::const_iterator > &)> &unpack_callback) const
Definition tria.cc:556
std::vector< char > dest_data_variable
Definition tria.h:603
std::vector< char > src_data_fixed
Definition tria.h:593
std::vector< char > dest_data_fixed
Definition tria.h:594
TriaIterator< CellAccessor< dim, spacedim > > cell_iterator
Definition tria.h:448
static constexpr unsigned int version_number
Definition tria.h:454
void pack_data(const std::vector< cell_relation_t > &cell_relations, const std::vector< typename internal::CellAttachedData< dim, spacedim >::pack_callback_t > &pack_callbacks_fixed, const std::vector< typename internal::CellAttachedData< dim, spacedim >::pack_callback_t > &pack_callbacks_variable, const MPI_Comm &mpi_communicator)
Definition tria.cc:194
void load(const unsigned int global_first_cell, const unsigned int global_num_cells, const unsigned int local_num_cells, const std::string &file_basename, const unsigned int n_attached_deserialize_fixed, const unsigned int n_attached_deserialize_variable, const MPI_Comm &mpi_communicator)
Definition tria.cc:954
std::vector< int > src_sizes_variable
Definition tria.h:600
std::vector< unsigned int > sizes_fixed_cumulative
Definition tria.h:587
typename std::pair< cell_iterator, CellStatus > cell_relation_t
Definition tria.h:461
std::vector< int > dest_sizes_variable
Definition tria.h:601
std::vector< char > src_data_variable
Definition tria.h:602
void unpack_cell_status(std::vector< cell_relation_t > &cell_relations) const
Definition tria.cc:520
void save(const unsigned int global_first_cell, const unsigned int global_num_cells, const std::string &file_basename, const MPI_Comm &mpi_communicator) const
Definition tria.cc:723
typename IteratorSelector::raw_line_iterator raw_line_iterator
Definition tria.h:4237
TriaRawIterator< CellAccessor< dim, spacedim > > raw_cell_iterator
Definition tria.h:4232
Triangulation(const MeshSmoothing smooth_grid=none, const bool check_for_distorted_cells=false)
typename IteratorSelector::raw_quad_iterator raw_quad_iterator
Definition tria.h:4238
typename IteratorSelector::raw_hex_iterator raw_hex_iterator
Definition tria.h:4239
#define DEAL_II_DEPRECATED
Definition config.h:286
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_DEPRECATED_WITH_COMMENT(comment)
Definition config.h:287
#define DEAL_II_CXX20_REQUIRES(condition)
Definition config.h:246
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39
IteratorRange< active_cell_iterator > active_cell_iterators_on_level(const unsigned int level) const
IteratorRange< active_face_iterator > active_face_iterators() const
IteratorRange< active_cell_iterator > active_cell_iterators() const
IteratorRange< cell_iterator > cell_iterators_on_level(const unsigned int level) const
IteratorRange< cell_iterator > cell_iterators() const
static ::ExceptionBase & ExcBoundaryIdNotFound(types::boundary_id arg1)
#define DeclException0(Exception0)
static ::ExceptionBase & ExcTriangulationNotEmpty(int arg1, int arg2)
static ::ExceptionBase & ExcFacesHaveNoLevel()
static ::ExceptionBase & ExcInvalidLevel(int arg1, int arg2)
static ::ExceptionBase & ExcGridReadError()
static ::ExceptionBase & ExcTooManyLevels()
#define Assert(cond, exc)
#define DeclException2(Exception2, type1, type2, outsequence)
#define AssertIndexRange(index, range)
#define DeclExceptionMsg(Exception, defaulttext)
static ::ExceptionBase & ExcInternalError()
#define DeclException1(Exception1, type1, outsequence)
static ::ExceptionBase & ExcEmptyLevel(int arg1)
static ::ExceptionBase & ExcMessage(std::string arg1)
typename IteratorSelector::hex_iterator hex_iterator
Definition tria.h:1759
TriaIterator<::TriaAccessor< 0, dim, spacedim > > vertex_iterator
Definition tria.h:1687
typename IteratorSelector::active_quad_iterator active_quad_iterator
Definition tria.h:1750
TriaActiveIterator< TriaAccessor< dim - 1, dim, spacedim > > active_face_iterator
Definition tria.h:1676
TriaActiveIterator< CellAccessor< dim, spacedim > > active_cell_iterator
Definition tria.h:1648
typename IteratorSelector::active_hex_iterator active_hex_iterator
Definition tria.h:1770
typename IteratorSelector::quad_iterator quad_iterator
Definition tria.h:1735
typename IteratorSelector::line_iterator line_iterator
Definition tria.h:1711
typename IteratorSelector::active_line_iterator active_line_iterator
Definition tria.h:1726
TriaIterator< TriaAccessor< dim - 1, dim, spacedim > > face_iterator
Definition tria.h:1663
TriaActiveIterator<::TriaAccessor< 0, dim, spacedim > > active_vertex_iterator
Definition tria.h:1701
TriaIterator< CellAccessor< dim, spacedim > > cell_iterator
Definition tria.h:1624
void set_all_manifold_ids_on_boundary(const types::manifold_id number)
const Manifold< dim, spacedim > & get_manifold(const types::manifold_id number) const
virtual std::vector< types::manifold_id > get_manifold_ids() const
void reset_manifold(const types::manifold_id manifold_number)
void set_manifold(const types::manifold_id number, const Manifold< dim, spacedim > &manifold_object)
void set_all_manifold_ids(const types::manifold_id number)
constexpr std::uint8_t max_n_levels
Definition types.h:423
STL namespace.
Definition types.h:30
unsigned int boundary_id
Definition types.h:159
unsigned int subdomain_id
Definition types.h:50
global_cell_index coarse_cell_id
Definition types.h:145
std::uint8_t geometric_orientation
Definition types.h:38
unsigned int global_cell_index
Definition types.h:136
T operator()(InputIterator first, InputIterator last) const
Definition tria.h:2360
virtual ~DistortedCellList() noexcept override
std::list< typename Triangulation< dim, spacedim >::cell_iterator > distorted_cells
Definition tria.h:1805
boost::signals2::signal< void()> mesh_movement
Definition tria.h:2417
boost::signals2::signal< void()> post_distributed_load
Definition tria.h:2591
boost::signals2::signal< void()> pre_distributed_save
Definition tria.h:2569
boost::signals2::signal< unsigned int(const cell_iterator &, const ::CellStatus), CellWeightSum< unsigned int > > weight
Definition tria.h:2515
boost::signals2::signal< void(const Triangulation< dim, spacedim > &destination_tria)> copy
Definition tria.h:2448
boost::signals2::signal< void()> pre_distributed_refinement
Definition tria.h:2528
boost::signals2::signal< void()> post_distributed_refinement
Definition tria.h:2547
boost::signals2::signal< void()> pre_refinement
Definition tria.h:2393
boost::signals2::signal< void()> any_change
Definition tria.h:2474
boost::signals2::signal< void()> create
Definition tria.h:2384
boost::signals2::signal< void()> clear
Definition tria.h:2463
boost::signals2::signal< void(const typename Triangulation< dim, spacedim >::cell_iterator &cell)> post_refinement_on_cell
Definition tria.h:2438
boost::signals2::signal< void(const typename Triangulation< dim, spacedim >::cell_iterator &cell)> pre_coarsening_on_cell
Definition tria.h:2428
boost::signals2::signal< void()> post_refinement
Definition tria.h:2400
boost::signals2::signal< void()> pre_partition
Definition tria.h:2408
boost::signals2::signal< void()> pre_distributed_repartition
Definition tria.h:2554
boost::signals2::signal< void()> pre_distributed_load
Definition tria.h:2584
boost::signals2::signal< void()> post_p4est_refinement
Definition tria.h:2537
boost::signals2::signal< void()> post_distributed_repartition
Definition tria.h:2561
boost::signals2::signal< void()> post_distributed_save
Definition tria.h:2576
std::vector< pack_callback_t > pack_callbacks_variable
Definition tria.h:430
unsigned int n_attached_deserialize
Definition tria.h:420
std::vector< pack_callback_t > pack_callbacks_fixed
Definition tria.h:429
unsigned int n_attached_data_sets
Definition tria.h:414
TriaIterator< CellAccessor< dim, spacedim > > cell_iterator
Definition tria.h:408
std::function< std::vector< char >(cell_iterator, CellStatus)> pack_callback_t
Definition tria.h:422
std::shared_ptr< const Utilities::MPI::Partitioner > active_cell_index_partitioner
Definition tria.h:188
void serialize(Archive &ar, const unsigned int version)
std::vector< unsigned int > n_active_lines_level
Definition tria.h:182
std::vector< std::shared_ptr< const Utilities::MPI::Partitioner > > level_cell_index_partitioners
Definition tria.h:194
std::vector< unsigned int > n_active_quads_level
Definition tria.h:252
void serialize(Archive &ar, const unsigned int version)
void serialize(Archive &ar, const unsigned int version)
std::vector< unsigned int > n_active_hexes_level
Definition tria.h:311
Strides of various arrays in a Triangulation.
Definition tria.h:356