deal.II version GIT relicensing-7040-g409d9ea789 2026-11-06 04:40: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
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{
92 namespace TriangulationImplementation
93 {
94 template <int dim>
95 class TriaFaces;
96
97 class TriaObjects;
98
104 struct Implementation;
105 struct ImplementationMixedMesh;
106 } // namespace TriangulationImplementation
107
108 namespace TriaAccessorImplementation
109 {
110 struct Implementation;
111 }
112} // namespace internal
113#endif
114
115
116/*------------------------------------------------------------------------*/
117
118
119namespace internal
120{
125 namespace TriangulationImplementation
126 {
138 template <int dim>
140 {};
141
153 template <>
154 struct NumberCache<1>
155 {
159 unsigned int n_levels;
160
164 unsigned int n_lines;
165
169 std::vector<unsigned int> n_lines_level;
170
174 unsigned int n_active_lines;
175
179 std::vector<unsigned int> n_active_lines_level;
180
184 std::shared_ptr<const Utilities::MPI::Partitioner>
186
190 std::vector<std::shared_ptr<const Utilities::MPI::Partitioner>>
192
196 NumberCache();
197
202 std::size_t
203 memory_consumption() const;
204
210 template <class Archive>
211 void
212 serialize(Archive &ar, const unsigned int version);
213 };
214
215
228 template <>
229 struct NumberCache<2> : public NumberCache<1>
230 {
234 unsigned int n_quads;
235
239 std::vector<unsigned int> n_quads_level;
240
244 unsigned int n_active_quads;
245
249 std::vector<unsigned int> n_active_quads_level;
250
254 NumberCache();
255
260 std::size_t
261 memory_consumption() const;
262
268 template <class Archive>
269 void
270 serialize(Archive &ar, const unsigned int version);
271 };
272
273
287 template <>
288 struct NumberCache<3> : public NumberCache<2>
289 {
293 unsigned int n_hexes;
294
298 std::vector<unsigned int> n_hexes_level;
299
303 unsigned int n_active_hexes;
304
308 std::vector<unsigned int> n_active_hexes_level;
309
313 NumberCache();
314
319 std::size_t
320 memory_consumption() const;
321
327 template <class Archive>
328 void
329 serialize(Archive &ar, const unsigned int version);
330 };
331
351 template <int dim>
352 struct Strides
353 {
357 Strides();
358
363 Strides(const std::vector<ReferenceCell<dim>> &reference_cells);
364
369
373 unsigned int max_faces_per_cell;
374
378 unsigned int max_lines_per_cell;
379
384
389
393 unsigned int max_lines_per_face;
394 };
395 } // namespace TriangulationImplementation
396
397
401 template <int dim, int spacedim = dim>
404 {
406
412
418
420 std::function<std::vector<char>(cell_iterator, CellStatus)>;
421
426 std::vector<pack_callback_t> pack_callbacks_fixed;
427 std::vector<pack_callback_t> pack_callbacks_variable;
428 };
429
440 template <int dim, int spacedim = dim>
443 {
444 public:
446
451 static inline constexpr unsigned int version_number = 5;
452
458 using cell_relation_t = typename std::pair<cell_iterator, CellStatus>;
459
461
470 void
471 pack_data(
472 const std::vector<cell_relation_t> &cell_relations,
473 const std::vector<
475 &pack_callbacks_fixed,
476 const std::vector<
478 &pack_callbacks_variable,
479 const MPI_Comm &mpi_communicator);
480
488 void
489 unpack_cell_status(std::vector<cell_relation_t> &cell_relations) const;
490
503 void
504 unpack_data(
505 const std::vector<cell_relation_t> &cell_relations,
506 const unsigned int handle,
507 const std::function<
508 void(const cell_iterator &,
509 const CellStatus &,
510 const boost::iterator_range<std::vector<char>::const_iterator> &)>
511 &unpack_callback) const;
512
527 void
528 save(const unsigned int global_first_cell,
529 const unsigned int global_num_cells,
530 const std::string &file_basename,
531 const MPI_Comm &mpi_communicator) const;
532
551 void
552 load(const unsigned int global_first_cell,
553 const unsigned int global_num_cells,
554 const unsigned int local_num_cells,
555 const std::string &file_basename,
556 const unsigned int n_attached_deserialize_fixed,
557 const unsigned int n_attached_deserialize_variable,
558 const MPI_Comm &mpi_communicator);
559
566 void
567 clear();
568
573
584 std::vector<unsigned int> sizes_fixed_cumulative;
585
590 std::vector<char> src_data_fixed;
591 std::vector<char> dest_data_fixed;
592
597 std::vector<int> src_sizes_variable;
598 std::vector<int> dest_sizes_variable;
599 std::vector<char> src_data_variable;
600 std::vector<char> dest_data_variable;
601 };
602} // namespace internal
603
604
605/*------------------------------------------------------------------------*/
606
607
1393template <int dim, int spacedim = dim>
1396{
1397private:
1404
1405public:
1411 {
1416 none = 0x0,
1460 limit_level_difference_at_vertices = 0x1,
1481 eliminate_unrefined_islands = 0x2,
1497 patch_level_1 = 0x4,
1521 coarsest_level_1 = 0x8,
1546 allow_anisotropic_smoothing = 0x10,
1579 eliminate_refined_inner_islands = 0x100,
1584 eliminate_refined_boundary_islands = 0x200,
1590 do_not_produce_unrefined_islands = 0x400,
1591
1597 match_refinement_across_periodic_boundaries = 0x800,
1598
1603 smoothing_on_refinement =
1604 (limit_level_difference_at_vertices | eliminate_unrefined_islands),
1609 smoothing_on_coarsening =
1610 (eliminate_refined_inner_islands | eliminate_refined_boundary_islands |
1611 do_not_produce_unrefined_islands),
1612
1618 maximum_smoothing = 0xffff ^ allow_anisotropic_smoothing
1620
1637
1643
1661
1675 using face_iterator = TriaIterator<TriaAccessor<dim - 1, dim, spacedim>>;
1676
1689 TriaActiveIterator<TriaAccessor<dim - 1, dim, spacedim>>;
1690
1700
1715
1723 using line_iterator = typename IteratorSelector::line_iterator;
1724
1738 using active_line_iterator = typename IteratorSelector::active_line_iterator;
1739
1747 using quad_iterator = typename IteratorSelector::quad_iterator;
1748
1762 using active_quad_iterator = typename IteratorSelector::active_quad_iterator;
1763
1771 using hex_iterator = typename IteratorSelector::hex_iterator;
1772
1782 using active_hex_iterator = typename IteratorSelector::active_hex_iterator;
1783
1803 {
1810 virtual ~DistortedCellList() noexcept override;
1811
1816 std::list<typename Triangulation<dim, spacedim>::cell_iterator>
1817 distorted_cells;
1818 };
1819
1823 static constexpr unsigned int dimension = dim;
1824
1828 static constexpr unsigned int space_dimension = spacedim;
1829
1844 Triangulation(const MeshSmoothing smooth_grid = none,
1845 const bool check_for_distorted_cells = false);
1846
1862 Triangulation(const Triangulation<dim, spacedim> &) = delete;
1863
1870 Triangulation(Triangulation<dim, spacedim> &&tria) noexcept;
1871
1876 operator=(Triangulation<dim, spacedim> &&tria) noexcept;
1877
1881 virtual ~Triangulation() override;
1882
1889 virtual void
1890 clear();
1891
1896 virtual MPI_Comm
1897 get_mpi_communicator() const;
1898
1904 virtual std::weak_ptr<const Utilities::MPI::Partitioner>
1905 global_active_cell_index_partitioner() const;
1906
1912 virtual std::weak_ptr<const Utilities::MPI::Partitioner>
1913 global_level_cell_index_partitioner(const unsigned int level) const;
1914
1919 virtual void
1920 set_mesh_smoothing(const MeshSmoothing mesh_smoothing);
1921
1925 virtual const MeshSmoothing &
1926 get_mesh_smoothing() const;
1927
1950 void
1951 set_manifold(const types::manifold_id number,
1952 const Manifold<dim, spacedim> &manifold_object);
1953
1970 void
1971 reset_manifold(const types::manifold_id manifold_number);
1972
1989 void
1990 reset_all_manifolds();
1991
2000 void
2001 set_all_manifold_ids(const types::manifold_id number);
2002
2011 void
2012 set_all_manifold_ids_on_boundary(const types::manifold_id number);
2013
2023 void
2024 set_all_manifold_ids_on_boundary(const types::boundary_id b_id,
2025 const types::manifold_id number);
2026
2040 const Manifold<dim, spacedim> &
2041 get_manifold(const types::manifold_id number) const;
2042
2053 virtual std::vector<types::boundary_id>
2054 get_boundary_ids() const;
2055
2068 virtual std::vector<types::manifold_id>
2069 get_manifold_ids() const;
2070
2092 virtual void
2093 copy_triangulation(const Triangulation<dim, spacedim> &other_tria);
2094
2143 virtual void
2144 create_triangulation(const std::vector<Point<spacedim>> &vertices,
2145 const std::vector<CellData<dim>> &cells,
2146 const SubCellData &subcelldata);
2147
2160 virtual void
2161 create_triangulation(
2162 const TriangulationDescription::Description<dim, spacedim>
2163 &construction_data);
2164
2173 void
2174 flip_all_direction_flags();
2175
2181 void
2182 compute_line_to_adjacent_cells_map();
2183
2195 void
2196 set_all_refine_flags();
2197
2220 void
2221 refine_global(const unsigned int times = 1);
2222
2235 void
2236 coarsen_global(const unsigned int times = 1);
2237
2269 virtual void
2270 execute_coarsening_and_refinement();
2271
2301 virtual bool
2302 prepare_coarsening_and_refinement();
2303
2319
2324 static constexpr auto CELL_PERSIST DEAL_II_DEPRECATED =
2326
2331 static constexpr auto CELL_REFINE DEAL_II_DEPRECATED =
2333
2338 static constexpr auto CELL_COARSEN DEAL_II_DEPRECATED =
2340
2345 static constexpr auto CELL_INVALID DEAL_II_DEPRECATED =
2347
2348
2354 template <typename T>
2356 {
2357 using result_type = T;
2358
2359 template <typename InputIterator>
2360 T
2361 operator()(InputIterator first, InputIterator last) const
2362 {
2363 return std::accumulate(first, last, T());
2364 }
2365 };
2366
2376 struct Signals
2377 {
2385 boost::signals2::signal<void()> create;
2386
2394 boost::signals2::signal<void()> pre_refinement;
2395
2401 boost::signals2::signal<void()> post_refinement;
2402
2409 boost::signals2::signal<void()> pre_partition;
2410
2418 boost::signals2::signal<void()> mesh_movement;
2419
2427 boost::signals2::signal<void(
2428 const typename Triangulation<dim, spacedim>::cell_iterator &cell)>
2430
2437 boost::signals2::signal<void(
2438 const typename Triangulation<dim, spacedim>::cell_iterator &cell)>
2440
2447 boost::signals2::signal<void(
2448 const Triangulation<dim, spacedim> &destination_tria)>
2450
2464 boost::signals2::signal<void()> clear;
2465
2475 boost::signals2::signal<void()> any_change;
2476
2513 boost::signals2::signal<unsigned int(const cell_iterator &,
2514 const ::CellStatus),
2517
2529 boost::signals2::signal<void()> pre_distributed_refinement;
2530
2538 boost::signals2::signal<void()> post_p4est_refinement;
2539
2548 boost::signals2::signal<void()> post_distributed_refinement;
2549
2555 boost::signals2::signal<void()> pre_distributed_repartition;
2556
2562 boost::signals2::signal<void()> post_distributed_repartition;
2563
2570 boost::signals2::signal<void()> pre_distributed_save;
2571
2577 boost::signals2::signal<void()> post_distributed_save;
2578
2585 boost::signals2::signal<void()> pre_distributed_load;
2586
2592 boost::signals2::signal<void()> post_distributed_load;
2593 };
2594
2604
2616 void
2617 save_refine_flags(std::ostream &out) const;
2618
2622 void
2623 save_refine_flags(std::vector<bool> &v) const;
2624
2628 void
2629 load_refine_flags(std::istream &in);
2630
2634 void
2635 load_refine_flags(const std::vector<bool> &v);
2636
2640 void
2641 save_coarsen_flags(std::ostream &out) const;
2642
2646 void
2647 save_coarsen_flags(std::vector<bool> &v) const;
2648
2652 void
2653 load_coarsen_flags(std::istream &out);
2654
2658 void
2659 load_coarsen_flags(const std::vector<bool> &v);
2660
2665 bool
2667
2679 void
2681
2687 void
2688 save_user_flags(std::ostream &out) const;
2689
2695 void
2696 save_user_flags(std::vector<bool> &v) const;
2697
2702 void
2703 load_user_flags(std::istream &in);
2704
2709 void
2710 load_user_flags(const std::vector<bool> &v);
2711
2716 void
2718
2723 void
2724 save_user_flags_line(std::ostream &out) const;
2725
2731 void
2732 save_user_flags_line(std::vector<bool> &v) const;
2733
2738 void
2739 load_user_flags_line(std::istream &in);
2740
2745 void
2746 load_user_flags_line(const std::vector<bool> &v);
2747
2752 void
2754
2759 void
2760 save_user_flags_quad(std::ostream &out) const;
2761
2767 void
2768 save_user_flags_quad(std::vector<bool> &v) const;
2769
2774 void
2775 load_user_flags_quad(std::istream &in);
2776
2781 void
2782 load_user_flags_quad(const std::vector<bool> &v);
2783
2784
2789 void
2791
2796 void
2797 save_user_flags_hex(std::ostream &out) const;
2798
2804 void
2805 save_user_flags_hex(std::vector<bool> &v) const;
2806
2811 void
2812 load_user_flags_hex(std::istream &in);
2813
2818 void
2819 load_user_flags_hex(const std::vector<bool> &v);
2820
2826 void
2828
2834 void
2835 save_user_indices(std::vector<unsigned int> &v) const;
2836
2841 void
2842 load_user_indices(const std::vector<unsigned int> &v);
2843
2849 void
2850 save_user_pointers(std::vector<void *> &v) const;
2851
2856 void
2857 load_user_pointers(const std::vector<void *> &v);
2858
2864 void
2865 save_user_indices_line(std::vector<unsigned int> &v) const;
2866
2871 void
2872 load_user_indices_line(const std::vector<unsigned int> &v);
2873
2879 void
2880 save_user_indices_quad(std::vector<unsigned int> &v) const;
2881
2886 void
2887 load_user_indices_quad(const std::vector<unsigned int> &v);
2888
2894 void
2895 save_user_indices_hex(std::vector<unsigned int> &v) const;
2896
2901 void
2902 load_user_indices_hex(const std::vector<unsigned int> &v);
2908 void
2909 save_user_pointers_line(std::vector<void *> &v) const;
2910
2915 void
2916 load_user_pointers_line(const std::vector<void *> &v);
2917
2923 void
2924 save_user_pointers_quad(std::vector<void *> &v) const;
2925
2930 void
2931 load_user_pointers_quad(const std::vector<void *> &v);
2932
2938 void
2939 save_user_pointers_hex(std::vector<void *> &v) const;
2940
2945 void
2946 load_user_pointers_hex(const std::vector<void *> &v);
2947
2973 begin(const unsigned int level = 0) const;
2974
3006 begin_active(const unsigned int level = 0) const;
3007
3013 end() const;
3014
3034 end(const unsigned int level) const;
3035
3056 end_active(const unsigned int level) const;
3057
3058
3063 last() const;
3064
3070
3079 create_cell_iterator(const CellId &cell_id) const;
3080
3091 bool
3092 contains_cell(const CellId &cell_id) const;
3112
3150
3167 cell_iterators_on_level(const unsigned int level) const;
3168
3185 active_cell_iterators_on_level(const unsigned int level) const;
3186
3189 /*-------------------------------------------------------------------------*/
3190
3200 begin_face() const;
3201
3207
3213 end_face() const;
3214
3235
3238 /*-------------------------------------------------------------------------*/
3239
3251
3259
3266 end_vertex() const;
3267
3287 unsigned int
3288 n_lines() const;
3289
3293 unsigned int
3294 n_lines(const unsigned int level) const;
3295
3299 unsigned int
3301
3305 unsigned int
3306 n_active_lines(const unsigned int level) const;
3307
3311 unsigned int
3312 n_quads() const;
3313
3317 unsigned int
3318 n_quads(const unsigned int level) const;
3319
3323 unsigned int
3325
3329 unsigned int
3330 n_active_quads(const unsigned int level) const;
3331
3335 unsigned int
3336 n_hexs() const;
3337
3342 unsigned int
3343 n_hexs(const unsigned int level) const;
3344
3348 unsigned int
3350
3355 unsigned int
3356 n_active_hexs(const unsigned int level) const;
3357
3362 unsigned int
3363 n_cells() const;
3364
3369 unsigned int
3370 n_cells(const unsigned int level) const;
3371
3376 unsigned int
3378
3406
3407
3412 unsigned int
3413 n_active_cells(const unsigned int level) const;
3414
3419 virtual types::coarse_cell_id
3421
3427 unsigned int
3428 n_faces() const;
3429
3435 unsigned int
3437
3455 unsigned int
3456 n_levels() const;
3457
3464 virtual unsigned int
3466
3476 virtual bool
3478
3493 unsigned int
3494 n_vertices() const;
3495
3504 const std::vector<Point<spacedim>> &
3506
3513 unsigned int
3515
3522 bool
3523 vertex_used(const unsigned int index) const;
3524
3531 const std::vector<bool> &
3533
3545 unsigned int
3547
3554 virtual types::subdomain_id
3556
3568
3575
3576
3593 unsigned int
3595
3605 unsigned int
3606 n_raw_lines(const unsigned int level) const;
3607
3617 unsigned int
3619
3629 unsigned int
3630 n_raw_quads(const unsigned int level) const;
3631
3641 unsigned int
3642 n_raw_hexs(const unsigned int level) const;
3643
3653 unsigned int
3654 n_raw_cells(const unsigned int level) const;
3655
3667 unsigned int
3669
3680 virtual std::size_t
3682
3692 template <class Archive>
3693 void
3694 save(Archive &ar, const unsigned int version) const;
3695
3713 template <class Archive>
3714 void
3715 load(Archive &ar, const unsigned int version);
3716
3717
3726 virtual void
3727 save(const std::string &file_basename) const;
3728
3732 virtual void
3733 load(const std::string &file_basename);
3734
3735
3751 virtual void
3753 const std::vector<GridTools::PeriodicFacePair<cell_iterator>> &);
3754
3758 const std::map<std::pair<cell_iterator, unsigned int>,
3759 std::pair<std::pair<cell_iterator, unsigned int>,
3762
3767 const std::vector<ReferenceCell<dim>> &
3769
3774 bool
3776
3781 bool
3783
3789 bool
3791
3792#ifdef DOXYGEN
3800 template <class Archive>
3801 void
3802 serialize(Archive &archive, const unsigned int version);
3803#else
3804 // This macro defines the serialize() method that is compatible with
3805 // the templated save() and load() method that have been implemented.
3806 BOOST_SERIALIZATION_SPLIT_MEMBER()
3807#endif
3808
3813public:
3921 unsigned int
3923 const std::function<std::vector<char>(const cell_iterator &,
3924 const ::CellStatus)>
3925 &pack_callback,
3926 const bool returns_variable_size_data);
3927
3977 void
3979 const unsigned int handle,
3980 const std::function<
3981 void(const cell_iterator &,
3982 const ::CellStatus,
3983 const boost::iterator_range<std::vector<char>::const_iterator> &)>
3984 &unpack_callback);
3985
3987
3988protected:
3996 void
3997 save_attached_data(const unsigned int global_first_cell,
3998 const unsigned int global_num_cells,
3999 const std::string &file_basename) const;
4000
4009 void
4010 load_attached_data(const unsigned int global_first_cell,
4011 const unsigned int global_num_cells,
4012 const unsigned int local_num_cells,
4013 const std::string &file_basename,
4014 const unsigned int n_attached_deserialize_fixed,
4015 const unsigned int n_attached_deserialize_variable);
4016
4026 void
4028
4034 void
4036
4037
4042 void
4044
4050 std::vector<typename internal::CellAttachedDataSerializer<dim, spacedim>::
4051 cell_relation_t>
4053
4059public:
4070 DeclExceptionMsg(ExcTooManyLevels,
4071 "The provided refinement pattern requires creating a level "
4072 "in the Triangulation. However, the maximum number of "
4073 "levels has already been reached, so that is not allowed.");
4074
4075 DeclException2(ExcInvalidLevel,
4076 int,
4077 int,
4078 << "You are requesting information from refinement level "
4079 << arg1
4080 << " of a triangulation, but this triangulation only has "
4081 << arg2 << " refinement levels. The given level " << arg1
4082 << " must be *less* than " << arg2 << '.');
4090 ExcTriangulationNotEmpty,
4091 int,
4092 int,
4093 << "You are trying to perform an operation on a triangulation "
4094 << "that is only allowed if the triangulation is currently empty. "
4095 << "However, it currently stores " << arg1 << " vertices and has "
4096 << "cells on " << arg2 << " levels.");
4102 DeclException0(ExcGridReadError);
4107 DeclException0(ExcFacesHaveNoLevel);
4113 DeclException1(ExcEmptyLevel,
4114 int,
4115 << "You tried to do something on level " << arg1
4116 << ", but this level is empty.");
4117
4125 DeclException1(ExcBoundaryIdNotFound,
4127 << "The given boundary_id " << arg1
4128 << " is not defined in this Triangulation!");
4147 class Policy;
4148
4149protected:
4155
4160 std::vector<ReferenceCell<dim>> reference_cells;
4161
4166
4176 std::optional<Table<2, std::set<active_cell_iterator>>>
4178
4192 static void
4193 write_bool_vector(const unsigned int magic_number1,
4194 const std::vector<bool> &v,
4195 const unsigned int magic_number2,
4196 std::ostream &out);
4197
4202 static void
4203 read_bool_vector(const unsigned int magic_number1,
4204 std::vector<bool> &v,
4205 const unsigned int magic_number2,
4206 std::istream &in);
4207
4212 void
4214
4215private:
4220 std::unique_ptr<Policy> policy;
4221
4228 std::vector<GridTools::PeriodicFacePair<cell_iterator>>
4230
4235 std::map<std::pair<cell_iterator, unsigned int>,
4236 std::pair<std::pair<cell_iterator, unsigned int>,
4239
4250 TriaRawIterator<TriaAccessor<dim - 1, dim, spacedim>>;
4253 using raw_line_iterator = typename IteratorSelector::raw_line_iterator;
4254 using raw_quad_iterator = typename IteratorSelector::raw_quad_iterator;
4255 using raw_hex_iterator = typename IteratorSelector::raw_hex_iterator;
4256
4267 begin_raw(const unsigned int level = 0) const;
4268
4274 end_raw(const unsigned int level) const;
4275
4290 begin_raw_line(const unsigned int level = 0) const;
4291
4310 begin_line(const unsigned int level = 0) const;
4311
4330 begin_active_line(const unsigned int level = 0) const;
4331
4337 end_line() const;
4338
4366 begin_raw_quad(const unsigned int level = 0) const;
4367
4386 begin_quad(const unsigned int level = 0) const;
4387
4406 begin_active_quad(const unsigned int level = 0) const;
4407
4413 end_quad() const;
4414
4441 begin_raw_hex(const unsigned int level = 0) const;
4442
4461 begin_hex(const unsigned int level = 0) const;
4462
4481 begin_active_hex(const unsigned int level = 0) const;
4482
4488 end_hex() const;
4489
4506 void
4508
4512 void
4514
4521 void
4523
4527 void
4529
4533 void
4535
4551
4558 void
4560
4565 void
4567
4583 virtual unsigned int
4585 const types::coarse_cell_id coarse_cell_id) const;
4586
4587
4600 virtual types::coarse_cell_id
4602 const unsigned int coarse_cell_index) const;
4603
4608 std::vector<std::unique_ptr<
4611
4617 std::unique_ptr<::internal::TriangulationImplementation::TriaFaces<dim>>
4619
4620
4624 std::vector<Point<spacedim>> vertices;
4625
4629 std::vector<bool> vertices_used;
4630
4634 std::map<types::manifold_id, std::unique_ptr<const Manifold<dim, spacedim>>>
4636
4643 const std::unique_ptr<const Manifold<dim, spacedim>> default_flat_manifold;
4644
4649
4650
4656
4667
4682 std::unique_ptr<std::map<unsigned int, types::boundary_id>>
4684
4685
4705 std::unique_ptr<std::map<unsigned int, types::manifold_id>>
4707
4708 // make a couple of classes friends
4709 template <int, int, int>
4710 friend class TriaAccessorBase;
4711 template <int, int, int>
4712 friend class TriaAccessor;
4713 friend class TriaAccessor<0, 1, spacedim>;
4714
4715 friend class CellAccessor<dim, spacedim>;
4716
4717 friend struct ::internal::TriaAccessorImplementation::Implementation;
4718
4719 friend struct ::internal::TriangulationImplementation::Implementation;
4720 friend struct ::internal::TriangulationImplementation::
4721 ImplementationMixedMesh;
4722
4723 friend class ::internal::TriangulationImplementation::TriaObjects;
4724
4725 // explicitly check for sensible template arguments, but not on windows
4726 // because MSVC creates bogus warnings during normal compilation
4727#ifndef DEAL_II_MSVC
4728 static_assert(dim <= spacedim,
4729 "The dimension <dim> of a Triangulation must be less than or "
4730 "equal to the space dimension <spacedim> in which it lives.");
4731#endif
4732};
4733
4734
4735#ifndef DOXYGEN
4736
4737
4738
4739namespace internal
4740{
4741 namespace TriangulationImplementation
4742 {
4743 template <class Archive>
4744 void
4745 NumberCache<1>::serialize(Archive &ar, const unsigned int)
4746 {
4747 ar &n_levels;
4748 ar &n_lines &n_lines_level;
4749 ar &n_active_lines &n_active_lines_level;
4750 }
4751
4752
4753 template <class Archive>
4754 void
4755 NumberCache<2>::serialize(Archive &ar, const unsigned int version)
4756 {
4757 this->NumberCache<1>::serialize(ar, version);
4758
4759 ar &n_quads &n_quads_level;
4760 ar &n_active_quads &n_active_quads_level;
4761 }
4762
4763
4764 template <class Archive>
4765 void
4766 NumberCache<3>::serialize(Archive &ar, const unsigned int version)
4767 {
4768 this->NumberCache<2>::serialize(ar, version);
4769
4770 ar &n_hexes &n_hexes_level;
4771 ar &n_active_hexes &n_active_hexes_level;
4772 }
4773 } // namespace TriangulationImplementation
4774} // namespace internal
4775
4776
4777template <int dim, int spacedim>
4780 const unsigned int index) const
4781{
4782 AssertIndexRange(index, vertices_used.size());
4783 return vertices_used[index];
4784}
4785
4786
4787
4788template <int dim, int spacedim>
4790inline unsigned int Triangulation<dim, spacedim>::n_levels() const
4791{
4792 return number_cache.n_levels;
4793}
4794
4795template <int dim, int spacedim>
4797inline unsigned int Triangulation<dim, spacedim>::n_global_levels() const
4798{
4799 return number_cache.n_levels;
4800}
4801
4802
4803template <int dim, int spacedim>
4805inline unsigned int Triangulation<dim, spacedim>::n_vertices() const
4806{
4807 return vertices.size();
4808}
4809
4810
4811
4812template <int dim, int spacedim>
4814inline const std::vector<Point<spacedim>>
4816{
4817 return vertices;
4818}
4819
4820
4821template <int dim, int spacedim>
4823template <class Archive>
4824void Triangulation<dim, spacedim>::save(Archive &ar, const unsigned int) const
4825{
4826 // as discussed in the documentation, do not store the signals as
4827 // well as boundary and manifold description but everything else
4828 ar &smooth_grid;
4829
4830 ar &reference_cells;
4831
4832 unsigned int n_levels = levels.size();
4833 ar &n_levels;
4835 for (const auto &level : levels)
4836 ar &level;
4837
4838 // boost dereferences a nullptr when serializing a nullptr
4839 // at least up to 1.65.1. This causes problems with clang-5.
4840 // Therefore, work around it.
4841 bool faces_is_nullptr = (faces.get() == nullptr);
4842 ar &faces_is_nullptr;
4843 if (!faces_is_nullptr)
4844 ar &faces;
4845
4846 ar &vertices;
4847 ar &vertices_used;
4848
4849 ar &anisotropic_refinement;
4850 ar &number_cache;
4851
4852 ar &check_for_distorted_cells;
4853
4854 if (dim == 1)
4855 {
4856 ar &vertex_to_boundary_id_map_1d;
4857 ar &vertex_to_manifold_id_map_1d;
4858 }
4859}
4860
4861
4862
4863template <int dim, int spacedim>
4865template <class Archive>
4866void Triangulation<dim, spacedim>::load(Archive &ar, const unsigned int)
4867{
4868 // clear previous content. this also calls the respective signal
4869 clear();
4870
4871 // as discussed in the documentation, do not store the signals as
4872 // well as boundary and manifold description but everything else
4873 ar &smooth_grid;
4874
4875 ar &reference_cells;
4876 strides =
4878
4879 unsigned int n_levels;
4880 ar &n_levels;
4882 levels.resize(n_levels);
4883 for (auto &level_ : levels)
4884 {
4885 std::unique_ptr<
4887 level;
4888 ar &level;
4889 level_ = std::move(level);
4890 }
4891
4892 // Workaround for nullptr, see in save().
4893 bool faces_is_nullptr = true;
4894 ar &faces_is_nullptr;
4895 if (!faces_is_nullptr)
4896 ar &faces;
4897
4898 ar &vertices;
4899 ar &vertices_used;
4900
4901 ar &anisotropic_refinement;
4902 ar &number_cache;
4903
4904 // the levels do not serialize the active_cell_indices or cached cell vertices
4905 // because they are easy enough to rebuild upon re-loading data. do this here.
4906 reset_cell_vertex_indices_cache();
4907 reset_active_cell_indices();
4908 reset_global_cell_indices();
4909
4910 reset_policy();
4911
4912 bool my_check_for_distorted_cells;
4913 ar &my_check_for_distorted_cells;
4914
4915 Assert(my_check_for_distorted_cells == check_for_distorted_cells,
4916 ExcMessage("The triangulation loaded into here must have the "
4917 "same setting with regard to reporting distorted "
4918 "cell as the one previously stored."));
4919
4920 if (dim == 1)
4921 {
4922 ar &vertex_to_boundary_id_map_1d;
4923 ar &vertex_to_manifold_id_map_1d;
4924 }
4925
4926 // trigger the create signal to indicate
4927 // that new content has been imported into
4928 // the triangulation
4929 signals.create();
4930}
4931
4932
4933
4934template <int dim, int spacedim>
4936inline unsigned int Triangulation<dim, spacedim>::
4938 const types::coarse_cell_id coarse_cell_id) const
4939{
4940 return coarse_cell_id;
4941}
4942
4943
4944
4945template <int dim, int spacedim>
4949 const unsigned int coarse_cell_index) const
4950{
4951 return coarse_cell_index;
4952}
4953
4954
4955
4956/* -------------- declaration of explicit specializations ------------- */
4957
4958template <>
4959unsigned int
4961template <>
4962unsigned int
4964template <>
4965unsigned int
4967
4968template <>
4969bool
4971template <>
4972bool
4974template <>
4975bool
4977
4978
4979// Declare the existence of explicit instantiations of the class
4980// above. This is not strictly necessary, but tells the compiler to
4981// avoid instantiating templates that we know are instantiated in
4982// .cc files and so can be referenced without implicit
4983// instantiations.
4984//
4985// Unfortunately, this does not seem to work when building modules
4986// with clang++ versions before 22 because they then just don't
4987// instantiate these classes at all, even though their members are
4988// defined and explicitly instantiated in a .cc file.
4989//
4990// See https://github.com/llvm/llvm-project/issues/153225 for the
4991// corresponding bug report.
4992# if !(defined(DEAL_II_BUILDING_CXX20_MODULE) && defined(__clang__) && \
4993 (__clang_major__ < 22))
4994extern template class Triangulation<1, 1>;
4995extern template class Triangulation<1, 2>;
4996extern template class Triangulation<1, 3>;
4997extern template class Triangulation<2, 2>;
4998extern template class Triangulation<2, 3>;
4999extern template class Triangulation<3, 3>;
5000# endif
5001
5002#endif // DOXYGEN
5003
5005
5006#endif
*  *  triangulation refine_global(n_initial_global_refinements)
CellStatus
Definition cell_status.h:29
@ cell_will_be_refined
@ children_will_be_coarsened
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
quad_iterator begin_quad(const unsigned int level=0) const
typename IteratorSelector::raw_line_iterator raw_line_iterator
Definition tria.h:4253
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:4629
bool anisotropic_refinement
Definition tria.h:4648
active_quad_iterator begin_active_quad(const unsigned int level=0) const
bool get_anisotropic_refinement_flag() const
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:4706
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)
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:4643
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:4052
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:4618
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
void fix_coarsen_flags()
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:4177
unsigned int n_cells(const unsigned int level) const
void save_user_pointers_line(std::vector< void * > &v) const
void save_user_flags_quad(std::vector< bool > &v) const
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)
unsigned int n_raw_lines() const
virtual std::size_t memory_consumption() const
std::vector< Point< spacedim > > vertices
Definition tria.h:4624
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
const bool check_for_distorted_cells
Definition tria.h:4655
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:4683
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()
std::vector< ReferenceCell< dim > > reference_cells
Definition tria.h:4160
void save_user_flags(std::ostream &out) const
std::vector< std::unique_ptr< ::internal::TriangulationImplementation::TriaLevel< dim, spacedim > > > levels
Definition tria.h:4610
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)
::CellStatus CellStatus
Definition tria.h:2318
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)
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
typename IteratorSelector::raw_quad_iterator raw_quad_iterator
Definition tria.h:4254
void load_user_pointers(const std::vector< void * > &v)
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:4666
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
std::vector< GridTools::PeriodicFacePair< cell_iterator > > periodic_face_pairs_level_0
Definition tria.h:4229
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:3986
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 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:4255
std::map< types::manifold_id, std::unique_ptr< const Manifold< dim, spacedim > > > manifolds
Definition tria.h:4635
void serialize(Archive &archive, const unsigned int version)
void load_refine_flags(const std::vector< bool > &v)
MeshSmoothing smooth_grid
Definition tria.h:4154
void save_refine_flags(std::ostream &out) const
Triangulation< dim, spacedim > & get_triangulation()
std::unique_ptr< Policy > policy
Definition tria.h:4220
void save_user_flags_quad(std::ostream &out) const
Signals signals
Definition tria.h:2603
internal::CellAttachedDataSerializer< dim, spacedim > data_serializer
Definition tria.h:4054
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:4238
unsigned int n_active_hexs(const unsigned int level) const
internal::TriangulationImplementation::Strides< dim > strides
Definition tria.h:4165
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 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)
active_cell_iterator begin_active(const unsigned int level=0) const
void execute_coarsening()
void save_refine_flags(std::vector< bool > &v) const
std::vector< char > dest_data_variable
Definition tria.h:600
std::vector< char > src_data_fixed
Definition tria.h:590
std::vector< char > dest_data_fixed
Definition tria.h:591
std::vector< int > src_sizes_variable
Definition tria.h:597
std::vector< unsigned int > sizes_fixed_cumulative
Definition tria.h:584
typename std::pair< cell_iterator, CellStatus > cell_relation_t
Definition tria.h:458
std::vector< int > dest_sizes_variable
Definition tria.h:598
std::vector< char > src_data_variable
Definition tria.h:599
#define DEAL_II_DEPRECATED
Definition config.h:294
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_CXX20_REQUIRES(condition)
Definition config.h:249
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39
Point< 2 > first
Definition grid_out.cc:4639
unsigned int level
Definition grid_out.cc:4642
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
#define DeclException0(Exception0)
#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 & ExcMessage(std::string arg1)
typename IteratorSelector::hex_iterator hex_iterator
Definition tria.h:1771
typename IteratorSelector::active_quad_iterator active_quad_iterator
Definition tria.h:1762
typename IteratorSelector::active_hex_iterator active_hex_iterator
Definition tria.h:1782
typename IteratorSelector::quad_iterator quad_iterator
Definition tria.h:1747
typename IteratorSelector::line_iterator line_iterator
Definition tria.h:1723
typename IteratorSelector::active_line_iterator active_line_iterator
Definition tria.h:1738
constexpr std::uint8_t max_n_levels
Definition types.h:415
STL namespace.
Definition types.h:30
global_cell_index coarse_cell_id
Definition types.h:145
std::uint8_t geometric_orientation
Definition types.h:38
T operator()(InputIterator first, InputIterator last) const
Definition tria.h:2361
virtual ~DistortedCellList() noexcept override
boost::signals2::signal< void()> mesh_movement
Definition tria.h:2418
boost::signals2::signal< void()> post_distributed_load
Definition tria.h:2592
boost::signals2::signal< void()> pre_distributed_save
Definition tria.h:2570
boost::signals2::signal< unsigned int(const cell_iterator &, const ::CellStatus), CellWeightSum< unsigned int > > weight
Definition tria.h:2516
boost::signals2::signal< void(const Triangulation< dim, spacedim > &destination_tria)> copy
Definition tria.h:2449
boost::signals2::signal< void()> pre_distributed_refinement
Definition tria.h:2529
boost::signals2::signal< void()> post_distributed_refinement
Definition tria.h:2548
boost::signals2::signal< void()> pre_refinement
Definition tria.h:2394
boost::signals2::signal< void()> any_change
Definition tria.h:2475
boost::signals2::signal< void()> create
Definition tria.h:2385
boost::signals2::signal< void()> clear
Definition tria.h:2464
boost::signals2::signal< void(const typename Triangulation< dim, spacedim >::cell_iterator &cell)> post_refinement_on_cell
Definition tria.h:2439
boost::signals2::signal< void(const typename Triangulation< dim, spacedim >::cell_iterator &cell)> pre_coarsening_on_cell
Definition tria.h:2429
boost::signals2::signal< void()> post_refinement
Definition tria.h:2401
boost::signals2::signal< void()> pre_partition
Definition tria.h:2409
boost::signals2::signal< void()> pre_distributed_repartition
Definition tria.h:2555
boost::signals2::signal< void()> pre_distributed_load
Definition tria.h:2585
boost::signals2::signal< void()> post_p4est_refinement
Definition tria.h:2538
boost::signals2::signal< void()> post_distributed_repartition
Definition tria.h:2562
boost::signals2::signal< void()> post_distributed_save
Definition tria.h:2577
std::vector< pack_callback_t > pack_callbacks_variable
Definition tria.h:427
unsigned int n_attached_deserialize
Definition tria.h:417
std::vector< pack_callback_t > pack_callbacks_fixed
Definition tria.h:426
unsigned int n_attached_data_sets
Definition tria.h:411
std::function< std::vector< char >(cell_iterator, CellStatus)> pack_callback_t
Definition tria.h:420
std::shared_ptr< const Utilities::MPI::Partitioner > active_cell_index_partitioner
Definition tria.h:185
void serialize(Archive &ar, const unsigned int version)
std::vector< unsigned int > n_active_lines_level
Definition tria.h:179
std::vector< std::shared_ptr< const Utilities::MPI::Partitioner > > level_cell_index_partitioners
Definition tria.h:191
std::vector< unsigned int > n_active_quads_level
Definition tria.h:249
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:308
Strides of various arrays in a Triangulation.
Definition tria.h:353