Reference documentation for deal.II version 9.5.0

#include <deal.II/grid/persistent_tria.h>
Public Types  
enum  MeshSmoothing { none = 0x0 , limit_level_difference_at_vertices = 0x1 , eliminate_unrefined_islands = 0x2 , patch_level_1 = 0x4 , coarsest_level_1 = 0x8 , allow_anisotropic_smoothing = 0x10 , eliminate_refined_inner_islands = 0x100 , eliminate_refined_boundary_islands = 0x200 , do_not_produce_unrefined_islands = 0x400 , smoothing_on_refinement , smoothing_on_coarsening , maximum_smoothing = 0xffff ^ allow_anisotropic_smoothing } 
using  cell_iterator = TriaIterator< CellAccessor< dim, spacedim > > 
using  level_cell_iterator = cell_iterator 
using  active_cell_iterator = TriaActiveIterator< CellAccessor< dim, spacedim > > 
using  face_iterator = TriaIterator< TriaAccessor< dim  1, dim, spacedim > > 
using  active_face_iterator = TriaActiveIterator< TriaAccessor< dim  1, dim, spacedim > > 
using  vertex_iterator = TriaIterator<::TriaAccessor< 0, dim, spacedim > > 
using  active_vertex_iterator = TriaActiveIterator<::TriaAccessor< 0, dim, spacedim > > 
using  line_iterator = typename IteratorSelector::line_iterator 
using  active_line_iterator = typename IteratorSelector::active_line_iterator 
using  quad_iterator = typename IteratorSelector::quad_iterator 
using  active_quad_iterator = typename IteratorSelector::active_quad_iterator 
using  hex_iterator = typename IteratorSelector::hex_iterator 
using  active_hex_iterator = typename IteratorSelector::active_hex_iterator 
Public Member Functions  
PersistentTriangulation (const Triangulation< dim, spacedim > &coarse_grid)  
PersistentTriangulation (const PersistentTriangulation< dim, spacedim > &old_tria)  
virtual  ~PersistentTriangulation () override=default 
virtual void  execute_coarsening_and_refinement () override 
void  restore () 
void  restore (const unsigned int step_no) 
unsigned int  n_refinement_steps () const 
virtual void  copy_triangulation (const Triangulation< dim, spacedim > &tria) override 
virtual void  create_triangulation (const std::vector< Point< spacedim > > &vertices, const std::vector< CellData< dim > > &cells, const SubCellData &subcelldata) override 
virtual void  create_triangulation (const TriangulationDescription::Description< dim, spacedim > &construction_data) override 
virtual void  create_triangulation_compatibility (const std::vector< Point< spacedim > > &vertices, const std::vector< CellData< dim > > &cells, const SubCellData &subcelldata) override 
virtual void  write_flags (std::ostream &out) const 
virtual void  read_flags (std::istream &in) 
virtual void  clear_flags () 
virtual std::size_t  memory_consumption () const override 
virtual void  clear () 
virtual MPI_Comm  get_communicator () const 
virtual const std::weak_ptr< const Utilities::MPI::Partitioner >  global_active_cell_index_partitioner () const 
virtual const std::weak_ptr< const Utilities::MPI::Partitioner >  global_level_cell_index_partitioner (const unsigned int level) const 
virtual void  set_mesh_smoothing (const MeshSmoothing mesh_smoothing) 
virtual const MeshSmoothing &  get_mesh_smoothing () const 
void  set_manifold (const types::manifold_id number, const Manifold< dim, spacedim > &manifold_object) 
void  reset_manifold (const types::manifold_id manifold_number) 
void  reset_all_manifolds () 
void  set_all_manifold_ids (const types::manifold_id number) 
void  set_all_manifold_ids_on_boundary (const types::manifold_id number) 
void  set_all_manifold_ids_on_boundary (const types::boundary_id b_id, const types::manifold_id number) 
const Manifold< dim, spacedim > &  get_manifold (const types::manifold_id number) const 
virtual std::vector< types::boundary_id >  get_boundary_ids () const 
virtual std::vector< types::manifold_id >  get_manifold_ids () const 
void  flip_all_direction_flags () 
bool  prepare_coarsening_and_refinement () 
bool  prepare_coarsening_and_refinement () 
bool  prepare_coarsening_and_refinement () 
unsigned int  n_quads () const 
unsigned int  n_quads (const unsigned int) const 
unsigned int  n_quads () const 
unsigned int  n_quads (const unsigned int) const 
unsigned int  n_quads () const 
unsigned int  n_quads (const unsigned int) const 
unsigned int  n_active_quads (const unsigned int) const 
unsigned int  n_active_quads () const 
unsigned int  n_active_quads (const unsigned int) const 
unsigned int  n_active_quads () const 
unsigned int  n_active_quads (const unsigned int) const 
unsigned int  n_active_quads () const 
unsigned int  n_hexs () const 
unsigned int  n_hexs (const unsigned int level) const 
unsigned int  n_active_hexs () const 
unsigned int  n_active_hexs (const unsigned int level) const 
unsigned int  max_adjacent_cells () const 
unsigned int  max_adjacent_cells () const 
unsigned int  max_adjacent_cells () const 
unsigned int  n_raw_quads (const unsigned int) const 
unsigned int  n_raw_quads (const unsigned int) const 
unsigned int  n_raw_quads (const unsigned int) const 
unsigned int  n_raw_quads (const unsigned int level) const 
unsigned int  n_raw_quads (const unsigned int level) const 
unsigned int  n_raw_quads (const unsigned int) const 
unsigned int  n_raw_quads () const 
unsigned int  n_raw_hexs (const unsigned int) const 
unsigned int  n_raw_hexs (const unsigned int) const 
unsigned int  n_raw_hexs (const unsigned int) const 
unsigned int  n_raw_hexs (const unsigned int level) const 
Mesh refinement  
void  set_all_refine_flags () 
void  refine_global (const unsigned int times=1) 
void  coarsen_global (const unsigned int times=1) 
virtual bool  prepare_coarsening_and_refinement () 
History of a triangulation  
void  save_refine_flags (std::ostream &out) const 
void  save_refine_flags (std::vector< bool > &v) const 
void  load_refine_flags (std::istream &in) 
void  load_refine_flags (const std::vector< bool > &v) 
void  save_coarsen_flags (std::ostream &out) const 
void  save_coarsen_flags (std::vector< bool > &v) const 
void  load_coarsen_flags (std::istream &out) 
void  load_coarsen_flags (const std::vector< bool > &v) 
bool  get_anisotropic_refinement_flag () const 
User data  
void  clear_user_flags () 
void  save_user_flags (std::ostream &out) const 
void  save_user_flags (std::vector< bool > &v) const 
void  load_user_flags (std::istream &in) 
void  load_user_flags (const std::vector< bool > &v) 
void  clear_user_flags_line () 
void  save_user_flags_line (std::ostream &out) const 
void  save_user_flags_line (std::vector< bool > &v) const 
void  load_user_flags_line (std::istream &in) 
void  load_user_flags_line (const std::vector< bool > &v) 
void  clear_user_flags_quad () 
void  save_user_flags_quad (std::ostream &out) const 
void  save_user_flags_quad (std::vector< bool > &v) const 
void  load_user_flags_quad (std::istream &in) 
void  load_user_flags_quad (const std::vector< bool > &v) 
void  clear_user_flags_hex () 
void  save_user_flags_hex (std::ostream &out) const 
void  save_user_flags_hex (std::vector< bool > &v) const 
void  load_user_flags_hex (std::istream &in) 
void  load_user_flags_hex (const std::vector< bool > &v) 
void  clear_user_data () 
void  save_user_indices (std::vector< unsigned int > &v) const 
void  load_user_indices (const std::vector< unsigned int > &v) 
void  save_user_pointers (std::vector< void * > &v) const 
void  load_user_pointers (const std::vector< void * > &v) 
void  save_user_indices_line (std::vector< unsigned int > &v) const 
void  load_user_indices_line (const std::vector< unsigned int > &v) 
void  save_user_indices_quad (std::vector< unsigned int > &v) const 
void  load_user_indices_quad (const std::vector< unsigned int > &v) 
void  save_user_indices_hex (std::vector< unsigned int > &v) const 
void  load_user_indices_hex (const std::vector< unsigned int > &v) 
void  save_user_pointers_line (std::vector< void * > &v) const 
void  load_user_pointers_line (const std::vector< void * > &v) 
void  save_user_pointers_quad (std::vector< void * > &v) const 
void  load_user_pointers_quad (const std::vector< void * > &v) 
void  save_user_pointers_hex (std::vector< void * > &v) const 
void  load_user_pointers_hex (const std::vector< void * > &v) 
Cell iterator functions  
cell_iterator  begin (const unsigned int level=0) const 
active_cell_iterator  begin_active (const unsigned int level=0) const 
cell_iterator  end () const 
cell_iterator  end (const unsigned int level) const 
active_cell_iterator  end_active (const unsigned int level) const 
cell_iterator  last () const 
active_cell_iterator  last_active () const 
cell_iterator  create_cell_iterator (const CellId &cell_id) const 
Cell iterator functions returning ranges of iterators  
IteratorRange< cell_iterator >  cell_iterators () const 
IteratorRange< active_cell_iterator >  active_cell_iterators () const 
IteratorRange< cell_iterator >  cell_iterators_on_level (const unsigned int level) const 
IteratorRange< active_cell_iterator >  active_cell_iterators_on_level (const unsigned int level) const 
Face iterator functions  
face_iterator  begin_face () const 
active_face_iterator  begin_active_face () const 
face_iterator  end_face () const 
IteratorRange< active_face_iterator >  active_face_iterators () const 
Vertex iterator functions  
vertex_iterator  begin_vertex () const 
active_vertex_iterator  begin_active_vertex () const 
vertex_iterator  end_vertex () const 
Information about the triangulation  
unsigned int  n_lines () const 
unsigned int  n_lines (const unsigned int level) const 
unsigned int  n_active_lines () const 
unsigned int  n_active_lines (const unsigned int level) const 
unsigned int  n_quads () const 
unsigned int  n_quads (const unsigned int level) const 
unsigned int  n_active_quads () const 
unsigned int  n_active_quads (const unsigned int level) const 
unsigned int  n_hexs () const 
unsigned int  n_hexs (const unsigned int level) const 
unsigned int  n_active_hexs () const 
unsigned int  n_active_hexs (const unsigned int level) const 
unsigned int  n_cells () const 
unsigned int  n_cells (const unsigned int level) const 
unsigned int  n_active_cells () const 
unsigned int  n_active_cells (const unsigned int level) const 
virtual types::global_cell_index  n_global_active_cells () const 
virtual types::coarse_cell_id  n_global_coarse_cells () const 
unsigned int  n_faces () const 
unsigned int  n_active_faces () const 
unsigned int  n_levels () const 
virtual unsigned int  n_global_levels () const 
virtual bool  has_hanging_nodes () const 
unsigned int  n_vertices () const 
const std::vector< Point< spacedim > > &  get_vertices () const 
unsigned int  n_used_vertices () const 
bool  vertex_used (const unsigned int index) const 
const std::vector< bool > &  get_used_vertices () const 
unsigned int  max_adjacent_cells () const 
virtual types::subdomain_id  locally_owned_subdomain () const 
Triangulation< dim, spacedim > &  get_triangulation () 
const Triangulation< dim, spacedim > &  get_triangulation () const 
Internal information about the number of objects  
unsigned int  n_raw_lines () const 
unsigned int  n_raw_lines (const unsigned int level) const 
unsigned int  n_raw_quads () const 
unsigned int  n_raw_quads (const unsigned int level) const 
unsigned int  n_raw_hexs (const unsigned int level) const 
unsigned int  n_raw_cells (const unsigned int level) const 
unsigned int  n_raw_faces () const 
template<class Archive >  
void  save (Archive &ar, const unsigned int version) const 
template<class Archive >  
void  load (Archive &ar, const unsigned int version) 
virtual void  add_periodicity (const std::vector< GridTools::PeriodicFacePair< cell_iterator > > &) 
const std::map< std::pair< cell_iterator, unsigned int >, std::pair< std::pair< cell_iterator, unsigned int >, std::bitset< 3 > > > &  get_periodic_face_map () const 
const std::vector< ReferenceCell > &  get_reference_cells () const 
bool  all_reference_cells_are_hyper_cube () const 
bool  all_reference_cells_are_simplex () const 
bool  is_mixed_mesh () const 
template<class Archive >  
void  serialize (Archive &archive, const unsigned int version) 
Subscriptor functionality  
Classes derived from Subscriptor provide a facility to subscribe to this object. This is mostly used by the SmartPointer class.  
void  subscribe (std::atomic< bool > *const validity, const std::string &identifier="") const 
void  unsubscribe (std::atomic< bool > *const validity, const std::string &identifier="") const 
unsigned int  n_subscriptions () const 
template<typename StreamType >  
void  list_subscribers (StreamType &stream) const 
void  list_subscribers () const 
Static Public Member Functions  
static ::ExceptionBase &  ExcTriaNotEmpty () 
static ::ExceptionBase &  ExcFlagsNotCleared () 
static ::ExceptionBase &  ExcInUse (int arg1, std::string arg2, std::string arg3) 
static ::ExceptionBase &  ExcNoSubscriber (std::string arg1, std::string arg2) 
Static Public Attributes  
static constexpr unsigned int  dimension = dim 
static const unsigned int  spacedimension = spacedim 
static constexpr unsigned int  space_dimension = spacedim 
Private Types  
using  IteratorSelector = ::internal::TriangulationImplementation::Iterators< dim, spacedim > 
using  map_value_type = decltype(counter_map)::value_type 
using  map_iterator = decltype(counter_map)::iterator 
Private Member Functions  
void  check_no_subscribers () const noexcept 
Line iterator functions for internal use  
raw_line_iterator  begin_raw_line (const unsigned int level=0) const 
line_iterator  begin_line (const unsigned int level=0) const 
active_line_iterator  begin_active_line (const unsigned int level=0) const 
line_iterator  end_line () const 
Quad iterator functions for internal use  
raw_quad_iterator  begin_raw_quad (const unsigned int level=0) const 
quad_iterator  begin_quad (const unsigned int level=0) const 
active_quad_iterator  begin_active_quad (const unsigned int level=0) const 
quad_iterator  end_quad () const 
Private Attributes  
SmartPointer< const Triangulation< dim, spacedim >, PersistentTriangulation< dim, spacedim > >  coarse_grid 
std::vector< std::vector< bool > >  refine_flags 
std::vector< std::vector< bool > >  coarsen_flags 
std::atomic< unsigned int >  counter 
std::map< std::string, unsigned int >  counter_map 
std::vector< std::atomic< bool > * >  validity_pointers 
const std::type_info *  object_info 
Static Private Attributes  
static std::mutex  mutex 
Keeping up with what happens to a triangulation  
enum  CellStatus { CELL_PERSIST , CELL_REFINE , CELL_COARSEN , CELL_INVALID } 
Signals  signals 
Cell iterator functions for internal use  
using  raw_cell_iterator = TriaRawIterator< CellAccessor< dim, spacedim > > 
using  raw_face_iterator = TriaRawIterator< TriaAccessor< dim  1, dim, spacedim > > 
using  raw_vertex_iterator = TriaRawIterator<::TriaAccessor< 0, dim, spacedim > > 
using  raw_line_iterator = typename IteratorSelector::raw_line_iterator 
using  raw_quad_iterator = typename IteratorSelector::raw_quad_iterator 
using  raw_hex_iterator = typename IteratorSelector::raw_hex_iterator 
raw_cell_iterator  begin_raw (const unsigned int level=0) const 
raw_cell_iterator  end_raw (const unsigned int level) const 
This class handles the history of a triangulation and can rebuild it after it was deleted some time before. Its main purpose is support for time dependent problems where one frequently deletes a triangulation due to memory pressure and later wants to rebuild it; this class has all the information to rebuild it exactly as it was before including the mapping of cell numbers to the geometrical cells.
Basically, this is a dropin replacement for the triangulation. Since it is derived from the Triangulation class, it shares all the functionality, but it overrides some virtual functions and adds some functions, too. The main change to the base class is that it overrides the execute_coarsening_and_refinement
function, where the new version first stores all refinement and coarsening flags and only then calls the respective function of the base class. The stored flags may later be used to restore the grid just as it was before. Some other functions have been extended slightly as well, see their documentation for more information.
We note that since the triangulation is created in exactly the same state as it was before, other objects working on it should result in the same state as well. This holds in particular for the DoFHandler object, which will assign the same degrees of freedom to the original cells and the ones after reconstruction of the triangulation. You can therefore safely use data vectors computed on the original grid on the reconstructed grid as well.
You can use objects of this class almost in the same way as objects of the Triangulation class. One of the few differences is that you can only construct such an object by giving a coarse grid to the constructor. The coarse grid will be used to base the triangulation on, and therefore the lifetime of the coarse grid has to be longer than the lifetime of the object of this class.
Basically, usage looks like this:
Note that initially, the PersistentTriangulation object does not constitute a triangulation; it only becomes one after restore
is first called. Note also that the execute_coarsening_and_refinement
stores all necessary flags for later reconstruction using the restore
function. Triangulation::clear() resets the underlying triangulation to a virgin state, but does not affect the stored refinement flags needed for later reconstruction and does also not touch the coarse grid which is used within restore().
Definition at line 108 of file persistent_tria.h.

privateinherited 

inherited 

privateinherited 
Declare a number of iterator types for raw iterators, i.e., iterators that also iterate over holes in the list of cells left by cells that have been coarsened away in previous mesh refinement cycles.
Since users should never have to access these internal properties of how we store data, these iterator types are made private.

privateinherited 

privateinherited 

privateinherited 

privateinherited 

privateinherited 

privateinherited 
The data type used in counter_map.
Definition at line 230 of file subscriptor.h.

privateinherited 
The iterator type used in counter_map.
Definition at line 235 of file subscriptor.h.

inherited 
Declare some symbolic names for mesh smoothing algorithms. The meaning of these flags is documented in the Triangulation class.
Enumerator  

none  No mesh smoothing at all, except that meshes have to remain one irregular. 
limit_level_difference_at_vertices  It can be shown, that degradation of approximation occurs if the triangulation contains vertices which are member of cells with levels differing by more than one. One such example is the following: It would seem that in two space dimensions, the maximum jump in levels between cells sharing a common vertex is two (as in the example above). However, this is not true if more than four cells meet at a vertex. It is not uncommon that a coarse (initial) mesh contains vertices at which six or even eight cells meet, when small features of the domain have to be resolved even on the coarsest mesh. In that case, the maximum difference in levels is three or four, respectively. The problem gets even worse in three space dimensions. Looking at an interpolation of the second derivative of the finite element solution (assuming bilinear finite elements), one sees that the numerical solution is almost totally wrong, compared with the true second derivative. Indeed, on regular meshes, there exist sharp estimations that the H^{2}error is only of order one, so we should not be surprised; however, the numerical solution may show a value for the second derivative which may be a factor of ten away from the true value. These problems are located on the small cell adjacent to the center vertex, where cells of nonsubsequent levels meet, as well as on the upper and right neighbor of this cell (but with a less degree of deviation from the true value). If the smoothing indicator given to the constructor contains the bit for limit_level_difference_at_vertices, situations as the above one are eliminated by also marking the upper right cell for refinement. In case of anisotropic refinement, the level of a cell is not linked to the refinement of a cell as directly as in case of isotropic refinement. Furthermore, a cell can be strongly refined in one direction and not or at least much less refined in another. Therefore, it is very difficult to decide, which cases should be excluded from the refinement process. As a consequence, when using anisotropic refinement, the limit_level_difference_at_vertices flag must not be set. On the other hand, the implementation of multigrid methods in deal.II requires that this bit be set. 
eliminate_unrefined_islands  Single cells which are not refined and are surrounded by cells which are refined usually also lead to a sharp decline in approximation properties locally. The reason is that the nodes on the faces between unrefined and refined cells are not real degrees of freedom but carry constraints. The patch without additional degrees of freedom is thus significantly larger then the unrefined cell itself. If in the parameter passed to the constructor the bit for eliminate_unrefined_islands is set, all cells which are not flagged for refinement but which are surrounded by more refined cells than unrefined cells are flagged for refinement. Cells which are not yet refined but flagged for that are accounted for the number of refined neighbors. Cells on the boundary are not accounted for at all. An unrefined island is, by this definition also a cell which (in 2d) is surrounded by three refined cells and one unrefined one, or one surrounded by two refined cells, one unrefined one and is at the boundary on one side. It is thus not a true island, as the name of the flag may indicate. However, no better name came to mind to the author by now. 
patch_level_1  A triangulation of patch level 1 consists of patches, i.e. of cells that are refined once. This flag ensures that a mesh of patch level 1 is still of patch level 1 after coarsening and refinement. It is, however, the user's responsibility to ensure that the mesh is of patch level 1 before calling Triangulation::execute_coarsening_and_refinement() the first time. The easiest way to achieve this is by calling global_refine(1) straight after creation of the triangulation. It follows that if at least one of the children of a cell is or will be refined than all children need to be refined. If the patch_level_1 flag is set, than the flags eliminate_unrefined_islands, eliminate_refined_inner_islands and eliminate_refined_boundary_islands will be ignored as they will be fulfilled automatically. 
coarsest_level_1  Each coarse grid cell is refined at least once, i.e., the triangulation might have active cells on level 1 but not on level 0. This flag ensures that a mesh which has coarsest_level_1 has still coarsest_level_1 after coarsening and refinement. It is, however, the user's responsibility to ensure that the mesh has coarsest_level_1 before calling execute_coarsening_and_refinement the first time. The easiest way to achieve this is by calling global_refine(1) straight after creation of the triangulation. It follows that active cells on level 1 may not be coarsened. The main use of this flag is to ensure that each cell has at least one neighbor in each coordinate direction (i.e. each cell has at least a left or right, and at least an upper or lower neighbor in 2d). This is a necessary precondition for some algorithms that compute finite differences between cells. The DerivativeApproximation class is one of these algorithms that require that a triangulation is coarsest_level_1 unless all cells already have at least one neighbor in each coordinate direction on the coarsest level. 
allow_anisotropic_smoothing  This flag is not included in However, in many cases it is sufficient to refine the coarser of the two original cells in an anisotropic way to avoid the case of multiple hanging vertices on a single edge. Doing only the minimal anisotropic refinement can save cells and degrees of freedom. By specifying this flag, the library can produce these anisotropic refinements. The flag is not included by default since it may lead to anisotropically refined meshes even though no cell has ever been refined anisotropically explicitly by a user command. This surprising fact may lead to programs that do the wrong thing since they are not written for the additional cases that can happen with anisotropic meshes, see the discussion in the introduction to step30. 
eliminate_refined_inner_islands  This algorithm seeks for isolated cells which are refined or flagged for refinement. This definition is unlike that for eliminate_unrefined_islands, which would mean that an island is defined as a cell which is refined but more of its neighbors are not refined than are refined. For example, in 2d, a cell's refinement would be reverted if at most one of its neighbors is also refined (or refined but flagged for coarsening). The reason for the change in definition of an island is, that this option would be a bit dangerous, since if you consider a chain of refined cells (e.g. along a kink in the solution), the cells at the two ends would be coarsened, after which the next outermost cells would need to be coarsened. Therefore, only one loop of flagging cells like this could be done to avoid eating up the whole chain of refined cells (‘chain reaction’...). This algorithm also takes into account cells which are not actually refined but are flagged for refinement. If necessary, it takes away the refinement flag. Actually there are two versions of this flag, eliminate_refined_inner_islands and eliminate_refined_boundary_islands. The first eliminates islands defined by the definition above which are in the interior of the domain, while the second eliminates only those islands if the cell is at the boundary. The reason for this split of flags is that one often wants to eliminate such islands in the interior while those at the boundary may well be wanted, for example if one refines the mesh according to a criterion associated with a boundary integral or if one has rough boundary data. 
eliminate_refined_boundary_islands  The result of this flag is very similar to eliminate_refined_inner_islands. See the documentation there. 
do_not_produce_unrefined_islands  This flag prevents the occurrence of unrefined islands. In more detail: It prohibits the coarsening of a cell if 'most of the neighbors' will be refined after the step. 
smoothing_on_refinement  This flag sums up all smoothing algorithms which may be performed upon refinement by flagging some more cells for refinement. 
smoothing_on_coarsening  This flag sums up all smoothing algorithms which may be performed upon coarsening by flagging some more cells for coarsening. 
maximum_smoothing  This flag includes all the above ones (therefore combines all smoothing algorithms implemented), with the exception of anisotropic smoothing. 

inherited 
Used to inform functions in derived classes how the cell with the given cell_iterator is going to change. Note that this may me different than the refine_flag() and coarsen_flag() in the cell_iterator in parallel calculations because of refinement constraints that this machine does not see.
PersistentTriangulation< dim, spacedim >::PersistentTriangulation  (  const Triangulation< dim, spacedim > &  coarse_grid  ) 
Build up the triangulation from the coarse grid in future. Copy smoothing flags, etc from that grid as well. Note that the initial state of the triangulation is empty, until restore_grid
is called for the first time.
The coarse grid must persist until the end of this object, since it will be used upon reconstruction of the grid.
Definition at line 34 of file persistent_tria.cc.
PersistentTriangulation< dim, spacedim >::PersistentTriangulation  (  const PersistentTriangulation< dim, spacedim > &  old_tria  ) 
Copy constructor. This operation is only allowed, if the triangulation underlying the object to be copied is presently empty. Refinement flags as well as the pointer to the coarse grid are copied, however.
Definition at line 42 of file persistent_tria.cc.

overridevirtualdefault 
Destructor.

overridevirtual 
Overloaded version of the same function in the base class which stores the refinement and coarsening flags for later reconstruction of the triangulation and after that calls the respective function of the base class.
Reimplemented from Triangulation< dim, spacedim >.
Definition at line 59 of file persistent_tria.cc.
void PersistentTriangulation< dim, spacedim >::restore 
Restore the grid according to the saved data. For this, the coarse grid is copied and the grid is stepwise rebuilt using the saved flags.
Note that this function will result in an error if the underlying triangulation is not empty, i.e. it will only succeed if this object is newly created or the clear()
function of the base class was called on it before.
Repeatedly calls the restore(unsigned int)
function in a loop over all refinement steps.
Definition at line 78 of file persistent_tria.cc.
void PersistentTriangulation< dim, spacedim >::restore  (  const unsigned int  step_no  ) 
Differential restore. Performs the step_noth
local refinement and coarsening step. Step 0 stands for the copying of the coarse grid.
This function will only succeed if the triangulation is in just the state it were if restore would have been called from step=0...step_no1
before.
Definition at line 90 of file persistent_tria.cc.
unsigned int PersistentTriangulation< dim, spacedim >::n_refinement_steps 
Return the number of refinement and coarsening steps. This is given by the size of the refine_flags
vector.
Definition at line 116 of file persistent_tria.cc.

overridevirtual 
Overload this function to use tria
as a new coarse grid. The present triangulation and all refinement and coarsening flags storing its history are deleted, and the state of the underlying triangulation is reset to be empty, until restore_grid
is called the next time.
The coarse grid must persist until the end of this object, since it will be used upon reconstruction of the grid.
Reimplemented from Triangulation< dim, spacedim >.
Definition at line 125 of file persistent_tria.cc.

overridevirtual 
Throw an error, since this function is not useful in the context of this class.
Reimplemented from Triangulation< dim, spacedim >.
Definition at line 138 of file persistent_tria.cc.

overridevirtual 
Create a triangulation from a list of vertices and a list of cells, each of the latter being a list of 1<<dim
vertex indices. The triangulation must be empty upon calling this function and the cell list should be useful (connected domain, etc.). The result of calling this function is a coarse mesh.
Material data for the cells is given within the cells
array, while boundary information is given in the subcelldata
field.
The numbering of vertices within the cells
array is subject to some constraints; see the general class documentation for this.
For conditions when this function can generate a valid triangulation, see the documentation of this class, and the GridIn and GridReordering class.
If the check_for_distorted_cells
flag was specified upon creation of this object, at the very end of its operation, the current function walks over all cells and verifies that none of the cells is deformed (see the entry on distorted cells in the glossary), where we call a cell deformed if the determinant of the Jacobian of the mapping from reference cell to real cell is negative at least at one of the vertices (this computation is done using the GeometryInfo::jacobian_determinants_at_vertices function). If there are deformed cells, this function throws an exception of kind DistortedCellList. Since this happens after all data structures have been set up, you can catch and ignore this exception if you know what you do – for example, it may be that the determinant is zero (indicating that you have collapsed edges in a cell) but that this is ok because you didn't intend to integrate on this cell anyway. On the other hand, deformed cells are often a sign of a mesh that is too coarse to resolve the geometry of the domain, and in this case ignoring the exception is probably unwise.
Reimplemented from Triangulation< dim, spacedim >.
Definition at line 150 of file persistent_tria.cc.

overridevirtual 
An overload of the respective function of the base class.
Throw an error, since this function is not useful in the context of this class.
Reimplemented from Triangulation< dim, spacedim >.
Definition at line 162 of file persistent_tria.cc.

virtual 
Write all refine and coarsen flags to the ostream out
.
Definition at line 174 of file persistent_tria.cc.

virtual 
Reads all refine and coarsen flags that previously were written by write_flags(...)
. This is especially useful for rebuilding the triangulation after the end or breakdown of a program and its restart.
Definition at line 203 of file persistent_tria.cc.

virtual 
Clear all flags. Retains the same coarse grid.
Definition at line 241 of file persistent_tria.cc.

overridevirtual 
Determine an estimate for the memory consumption (in bytes) of this object.
Reimplemented from Triangulation< dim, spacedim >.
Definition at line 251 of file persistent_tria.cc.

virtualinherited 
Reset this triangulation into a virgin state by deleting all data.
Note that this operation is only allowed if no subscriptions to this object exist any more, such as DoFHandler objects using it.
Reimplemented in parallel::distributed::Triangulation< dim, spacedim >, parallel::DistributedTriangulationBase< dim, spacedim >, parallel::DistributedTriangulationBase< 1, spacedim >, and parallel::DistributedTriangulationBase< dim, dim >.

virtualinherited 
Return MPI communicator used by this triangulation. In the case of a serial Triangulation object, MPI_COMM_SELF is returned.
Reimplemented in parallel::TriangulationBase< dim, spacedim >, parallel::TriangulationBase< dim, dim >, and parallel::TriangulationBase< dim, spacedim >.

virtualinherited 
Return the partitioner for the global indices of the cells on the active level of the triangulation, which is returned by the function CellAccessor::global_active_cell_index().
Reimplemented in parallel::TriangulationBase< dim, spacedim >, parallel::TriangulationBase< dim, dim >, and parallel::TriangulationBase< dim, spacedim >.

virtualinherited 
Return the partitioner for the global indices of the cells on the given level
of the triangulation, which is returned by the function CellAccessor::global_level_cell_index().
Reimplemented in parallel::TriangulationBase< dim, spacedim >, parallel::TriangulationBase< dim, dim >, and parallel::TriangulationBase< dim, spacedim >.

virtualinherited 
Set the mesh smoothing to mesh_smoothing
. This overrides the MeshSmoothing given to the constructor. It is allowed to call this function only if the triangulation is empty.

virtualinherited 
Return the mesh smoothing requirements that are obeyed.

virtualinherited 
Return a vector containing all boundary indicators assigned to boundary faces of active cells of this Triangulation object. Note, that each boundary indicator is reported only once. The size of the return vector will represent the number of different indicators (which is greater or equal one).
Reimplemented in parallel::TriangulationBase< dim, spacedim >, parallel::TriangulationBase< dim, dim >, and parallel::TriangulationBase< dim, spacedim >.

inherited 
Revert or flip the direction_flags of a dim<spacedim triangulation, see GlossDirectionFlag.
This function throws an exception if dim equals spacedim.

inherited 
Flag all active cells for refinement. This will refine all cells of all levels which are not already refined (i.e. only cells are refined which do not yet have children). The cells are only flagged, not refined, thus you have the chance to save the refinement flags.

inherited 
Refine all cells times
times. In other words, in each one of the times
iterations, loop over all cells and refine each cell uniformly into \(2^\text{dim}\) children. In practice, this function repeats the following operations times
times: call set_all_refine_flags() followed by execute_coarsening_and_refinement(). The end result is that the number of cells increases by a factor of \((2^\text{dim})^\text{times}=2^{\text{dim} \times \text{times}}\).
The execute_coarsening_and_refinement() function called in this loop may throw an exception if it creates cells that are distorted (see its documentation for an explanation). This exception will be propagated through this function if that happens, and you may not get the actual number of refinement steps in that case.
times > 1
) . See the section on signals in the general documentation of this class.

inherited 
Coarsen all cells the given number of times.
In each of one of the times
iterations, all cells will be marked for coarsening. If an active cell is already on the coarsest level, it will be ignored.
times > 1
) . See the section on signals in the general documentation of this class.

virtualinherited 
Do both preparation for refinement and coarsening as well as mesh smoothing.
Regarding the refinement process it fixes the closure of the refinement in dim>=2
(make sure that no two cells are adjacent with a refinement level differing with more than one), etc. It performs some mesh smoothing if the according flag was given to the constructor of this class. The function returns whether additional cells have been flagged for refinement.
See the general doc of this class for more information on smoothing upon refinement.
Regarding the coarsening part, flagging and deflagging cells in preparation of the actual coarsening step are done. This includes deleting coarsen flags from cells which may not be deleted (e.g. because one neighbor is more refined than the cell), doing some smoothing, etc.
The effect is that only those cells are flagged for coarsening which will actually be coarsened. This includes the fact that all flagged cells belong to parent cells of which all children are flagged.
The function returns whether some cells' flagging has been changed in the process.
This function uses the user flags, so store them if you still need them afterwards.
Reimplemented in parallel::fullydistributed::Triangulation< dim, spacedim >, and parallel::distributed::Triangulation< dim, spacedim >.

inherited 

inherited 

inherited 

inherited 
Save the addresses of the cells which are flagged for refinement to out
. For usage, read the general documentation for this class.

inherited 
Same as above, but store the flags to a bitvector rather than to a file.

inherited 
Read the information stored by save_refine_flags
.

inherited 
Read the information stored by save_refine_flags
.

inherited 
Analogue to save_refine_flags
.

inherited 
Same as above, but store the flags to a bitvector rather than to a file.

inherited 
Analogue to load_refine_flags
.

inherited 
Analogue to load_refine_flags
.

inherited 
Return whether this triangulation has ever undergone anisotropic (as opposed to only isotropic) refinement.

inherited 
Clear all user flags. See also GlossUserFlags.

inherited 
Save all user flags. See the general documentation for this class and the documentation for the save_refine_flags
for more details. See also GlossUserFlags.

inherited 
Same as above, but store the flags to a bitvector rather than to a file. The output vector is resized if necessary. See also GlossUserFlags.

inherited 
Read the information stored by save_user_flags
. See also GlossUserFlags.

inherited 
Read the information stored by save_user_flags
. See also GlossUserFlags.

inherited 
Clear all user flags on lines. See also GlossUserFlags.

inherited 
Save the user flags on lines. See also GlossUserFlags.

inherited 
Same as above, but store the flags to a bitvector rather than to a file. The output vector is resized if necessary. See also GlossUserFlags.

inherited 
Load the user flags located on lines. See also GlossUserFlags.

inherited 
Load the user flags located on lines. See also GlossUserFlags.

inherited 
Clear all user flags on quads. See also GlossUserFlags.

inherited 
Save the user flags on quads. See also GlossUserFlags.

inherited 
Same as above, but store the flags to a bitvector rather than to a file. The output vector is resized if necessary. See also GlossUserFlags.

inherited 
Load the user flags located on quads. See also GlossUserFlags.

inherited 
Load the user flags located on quads. See also GlossUserFlags.

inherited 
Clear all user flags on quads. See also GlossUserFlags.

inherited 
Save the user flags on hexs. See also GlossUserFlags.

inherited 
Same as above, but store the flags to a bitvector rather than to a file. The output vector is resized if necessary. See also GlossUserFlags.

inherited 
Load the user flags located on hexs. See also GlossUserFlags.

inherited 
Load the user flags located on hexs. See also GlossUserFlags.

inherited 
Clear all user pointers and indices and allow the use of both for next access. See also GlossUserData.

inherited 
Save all user indices. The output vector is resized if necessary. See also GlossUserData.

inherited 
Read the information stored by save_user_indices(). See also GlossUserData.

inherited 
Save all user pointers. The output vector is resized if necessary. See also GlossUserData.

inherited 
Read the information stored by save_user_pointers(). See also GlossUserData.

inherited 
Save the user indices on lines. The output vector is resized if necessary. See also GlossUserData.

inherited 
Load the user indices located on lines. See also GlossUserData.

inherited 
Save the user indices on quads. The output vector is resized if necessary. See also GlossUserData.

inherited 
Load the user indices located on quads. See also GlossUserData.

inherited 
Save the user indices on hexes. The output vector is resized if necessary. See also GlossUserData.

inherited 
Load the user indices located on hexs. See also GlossUserData.

inherited 
Save the user indices on lines. The output vector is resized if necessary. See also GlossUserData.

inherited 
Load the user pointers located on lines. See also GlossUserData.

inherited 
Save the user pointers on quads. The output vector is resized if necessary. See also GlossUserData.

inherited 
Load the user pointers located on quads. See also GlossUserData.

inherited 
Save the user pointers on hexes. The output vector is resized if necessary. See also GlossUserData.

inherited 
Load the user pointers located on hexs. See also GlossUserData.

inherited 
Iterator to the first used cell on level level
.
level
argument needs to correspond to a level of the triangulation, i.e., should be less than the value returned by n_levels(). On the other hand, for parallel computations using a parallel::distributed::Triangulation object, it is often convenient to write loops over the cells of all levels of the global mesh, even if the local portion of the triangulation does not actually have cells at one of the higher levels. In those cases, the level
argument is accepted if it is less than what the n_global_levels() function returns. If the given level
is between the values returned by n_levels() and n_global_levels(), then no cells exist in the local portion of the triangulation at this level, and the function simply returns what end() would return.

inherited 
Iterator to the first active cell on level level
. If the given level does not contain any active cells (i.e., all cells on this level are further refined, then this function returns end_active(level)
so that loops of the kind
have zero iterations, as may be expected if there are no active cells on this level.
level
argument needs to correspond to a level of the triangulation, i.e., should be less than the value returned by n_levels(). On the other hand, for parallel computations using a parallel::distributed::Triangulation object, it is often convenient to write loops over the cells of all levels of the global mesh, even if the local portion of the triangulation does not actually have cells at one of the higher levels. In those cases, the level
argument is accepted if it is less than what the n_global_levels() function returns. If the given level
is between the values returned by n_levels() and n_global_levels(), then no cells exist in the local portion of the triangulation at this level, and the function simply returns what end() would return.

inherited 
Iterator past the end; this iterator serves for comparisons of iterators with pasttheend or beforethebeginning states.

inherited 
Return an iterator which is the first iterator not on level. If level
is the last level, then this returns end()
.
level
argument needs to correspond to a level of the triangulation, i.e., should be less than the value returned by n_levels(). On the other hand, for parallel computations using a parallel::distributed::Triangulation object, it is often convenient to write loops over the cells of all levels of the global mesh, even if the local portion of the triangulation does not actually have cells at one of the higher levels. In those cases, the level
argument is accepted if it is less than what the n_global_levels() function returns. If the given level
is between the values returned by n_levels() and n_global_levels(), then no cells exist in the local portion of the triangulation at this level, and the function simply returns what end() would return.

inherited 
Return an active iterator which is the first active iterator not on the given level. If level
is the last level, then this returns end()
.
level
argument needs to correspond to a level of the triangulation, i.e., should be less than the value returned by n_levels(). On the other hand, for parallel computations using a parallel::distributed::Triangulation object, it is often convenient to write loops over the cells of all levels of the global mesh, even if the local portion of the triangulation does not actually have cells at one of the higher levels. In those cases, the level
argument is accepted if it is less than what the n_global_levels() function returns. If the given level
is between the values returned by n_levels() and n_global_levels(), then no cells exist in the local portion of the triangulation at this level, and the function simply returns what end() would return.

inherited 
Return an iterator pointing to the last used cell.

inherited 
Return an iterator pointing to the last active cell.

inherited 
Return an iterator to a cell of this Triangulation object constructed from an independent CellId object.
If the given argument corresponds to a valid cell in this triangulation, this operation will always succeed for sequential triangulations where the current processor stores all cells that are part of the triangulation. On the other hand, if this is a parallel triangulation, then the current processor may not actually know about this cell. In this case, this operation will succeed for locally relevant cells, but may not for artificial cells that are less refined on the current processor.

inherited 
Iterator to the first used face.

inherited 
Iterator to the first active face.

inherited 
Iterator past the end; this iterator serves for comparisons of iterators with pasttheend or beforethebeginning states.

inherited 
Iterator to the first used vertex. This function can only be used if dim is not one.

inherited 
Iterator to the first active vertex. Because all vertices are active, begin_vertex() and begin_active_vertex() return the same vertex. This function can only be used if dim is not one.

inherited 
Iterator past the end; this iterator serves for comparisons of iterators with pasttheend or beforethebeginning states. This function can only be used if dim is not one.

inherited 
In the following, most functions are provided in two versions, with and without an argument describing the level. The versions with this argument are only applicable for objects describing the cells of the present triangulation. For example: in 2d n_lines(level)
cannot be called, only n_lines()
, as lines are faces in 2d and therefore have no level. Return the total number of used lines, active or not.

inherited 
Return the total number of used lines, active or not on level level
.

inherited 
Return the total number of active lines.

inherited 
Return the total number of active lines, on level level
.

inherited 
Return the total number of used quads, active or not.

inherited 
Return the total number of used quads, active or not on level level
.

inherited 

inherited 

inherited 

inherited 

inherited 

inherited 

inherited 
Return the total number of active quads, active or not.

inherited 
Return the total number of active quads, active or not on level level
.

inherited 

inherited 

inherited 

inherited 

inherited 

inherited 

inherited 
Return the total number of used hexahedra, active or not.

inherited 
Return the total number of used hexahedra, active or not on level level
.

inherited 

inherited 

inherited 
Return the total number of active hexahedra, active or not.

inherited 
Return the total number of active hexahedra, active or not on level level
.

inherited 

inherited 

inherited 
Return the total number of used cells, active or not. Maps to n_lines()
in one space dimension and so on.

inherited 
Return the total number of used cells, active or not, on level level
. Maps to n_lines(level)
in one space dimension and so on.

inherited 
Return the total number of active cells. Maps to n_active_lines()
in one space dimension and so on.

inherited 
Return the total number of active cells on level level
. Maps to n_active_lines(level)
in one space dimension and so on.

virtualinherited 
Return the total number of active cells. For the current class, this is the same as n_active_cells(). However, the function may be overloaded in derived classes (e.g., in parallel::distributed::Triangulation) where it may return a value greater than the number of active cells reported by the triangulation object on the current processor.
Reimplemented in parallel::TriangulationBase< dim, spacedim >, parallel::TriangulationBase< dim, dim >, and parallel::TriangulationBase< dim, spacedim >.

virtualinherited 
Return the total number of coarse cells. If the coarse mesh is replicated on each process, this simply returns n_cells(0)
.
Reimplemented in parallel::TriangulationBase< dim, spacedim >, parallel::TriangulationBase< dim, dim >, and parallel::TriangulationBase< dim, spacedim >.

inherited 

inherited 
Return the total number of active faces. In 2d, the result equals n_active_lines(), in 3d it equals n_active_quads(), while in 1d it equals the number of used vertices.

inherited 
Return the number of levels in this triangulation.

virtualinherited 
Return the number of levels in use. This function is equivalent to n_levels() for a serial Triangulation, but gives the maximum of n_levels() over all processors for a parallel::distributed::Triangulation and therefore can be larger than n_levels().
Reimplemented in parallel::TriangulationBase< dim, spacedim >, parallel::TriangulationBase< dim, dim >, and parallel::TriangulationBase< dim, spacedim >.

virtualinherited 
Return true if the triangulation has hanging nodes.
The function is made virtual since the result can be interpreted in different ways, depending on whether the triangulation lives only on a single processor, or may be distributed as done in the parallel::distributed::Triangulation class (see there for a description of what the function is supposed to do in the parallel context).
Reimplemented in parallel::DistributedTriangulationBase< dim, spacedim >, parallel::DistributedTriangulationBase< 1, spacedim >, and parallel::DistributedTriangulationBase< dim, dim >.

inherited 
Return the total number of vertices. Some of them may not be used, which usually happens upon coarsening of a triangulation when some vertices are discarded, but we do not want to renumber the remaining ones, leading to holes in the numbers of used vertices. You can get the number of used vertices using n_used_vertices
function.

inherited 
Return a constant reference to all the vertices present in this triangulation. Note that not necessarily all vertices in this array are actually used; for example, if you coarsen a mesh, then some vertices are deleted, but their positions in this array are unchanged as the indices of vertices are only allocated once. You can find out about which vertices are actually used by the function get_used_vertices().

inherited 
Return the number of vertices that are presently in use, i.e. belong to at least one used element.

inherited 
Return true
if the vertex with this index
is used.

inherited 
Return a constant reference to the array of bools
indicating whether an entry in the vertex array is used or not.

inherited 
Return the maximum number of cells meeting at a common vertex. Since this number is an invariant under refinement, only the cells on the coarsest level are considered. The operation is thus reasonably fast. The invariance is only true for sufficiently many cells in the coarsest triangulation (e.g. for a single cell one would be returned), so a minimum of four is returned in two dimensions, 8 in three dimensions, etc, which is how many cells meet if the triangulation is refined.
In one space dimension, two is returned.

inherited 

inherited 

inherited 

virtualinherited 
This function always returns invalid_subdomain_id
but is there for compatibility with the derived parallel::distributed::Triangulation
class. For distributed parallel triangulations this function returns the subdomain id of those cells that are owned by the current processor.
Reimplemented in parallel::TriangulationBase< dim, spacedim >, parallel::TriangulationBase< dim, dim >, and parallel::TriangulationBase< dim, spacedim >.

inherited 
Return a reference to the current object.
This doesn't seem to be very useful but allows to write code that can access the underlying triangulation for anything that satisfies the MeshType concept (which may not only be a triangulation, but also a DoFHandler, for example).

inherited 
Return a reference to the current object. This is the constversion of the previous function.

inherited 
Total number of lines, used or unused.

inherited 
Number of lines, used or unused, on the given level.

inherited 
Total number of quads, used or unused.

inherited 
Number of quads, used or unused, on the given level.

inherited 

inherited 

inherited 

inherited 

inherited 

inherited 

inherited 

inherited 
Number of hexs, used or unused, on the given level.

inherited 

inherited 

inherited 

inherited 

inherited 
Number of cells, used or unused, on the given level.

inherited 
Return the total number of faces, used or not. In 2d, the result equals n_raw_lines(), in 3d it equals n_raw_quads(), while in 1d it equals the number of vertices.

inherited 
Write the data of this object to a stream for the purpose of serialization using the BOOST serialization library.

inherited 
Read the data of this object from a stream for the purpose of serialization using the BOOST serialization library. Throw away the previous content.

virtualinherited 
Declare the (coarse) face pairs given in the argument of this function as periodic. This way it is possible to obtain neighbors across periodic boundaries.
The vector can be filled by the function GridTools::collect_periodic_faces.
For more information on periodic boundary conditions see GridTools::collect_periodic_faces, DoFTools::make_periodicity_constraints and step45.

inherited 
Return the periodic_face_map.

inherited 
Return vector filled with the used referencecell types of this triangulation.

inherited 
Indicate if the triangulation only consists of hypercubelike cells, i.e., lines, quadrilaterals, or hexahedra.

inherited 
Indicate if the triangulation only consists of simplexlike cells, i.e., lines, triangles, or tetrahedra.

inherited 
Indicate if the triangulation consists of different cell types (mix of simplices, hypercubes, ...) or different face types, as in the case of pyramids or wedges..

inherited 
Write and read the data of this object from a stream for the purpose of serialization. using the BOOST serialization library.

staticprotectedinherited 
Write a bool vector to the given stream, writing a pre and a postfix magic number. The vector is written in an almost binary format, i.e. the bool flags are packed but the data is written as ASCII text.
The flags are stored in a binary format: for each true
, a 1
bit is stored, a 0
bit otherwise. The bits are stored as unsigned char
, thus avoiding endianness. They are written to out
in plain text, thus amounting to 3.6 bits in the output per bits in the input on the average. Other information (magic numbers and number of elements of the input vector) is stored as plain text as well. The format should therefore be interplatform compatible.

staticprotectedinherited 
Reread a vector of bools previously written by write_bool_vector
and compare with the magic numbers.

protectedinherited 
Recreate information about periodic neighbors from periodic_face_pairs_level_0.

protectedvirtualinherited 
Update the internal reference_cells vector.
Reimplemented in parallel::TriangulationBase< dim, spacedim >, parallel::TriangulationBase< dim, dim >, and parallel::TriangulationBase< dim, spacedim >.

privateinherited 
Iterator to the first cell, used or not, on level level
. If a level has no cells, a pasttheend iterator is returned.

privateinherited 
Return a raw iterator which is the first iterator not on level. If level
is the last level, then this returns end()
.

privateinherited 
Iterator to the first line, used or not, on level level
. If a level has no lines, a pasttheend iterator is returned. If lines are no cells, i.e. for dim>1
no level
argument must be given. The same applies for all the other functions above, of course.

privateinherited 
Iterator to the first used line on level level
.
level
argument needs to correspond to a level of the triangulation, i.e., should be less than the value returned by n_levels(). On the other hand, for parallel computations using a parallel::distributed::Triangulation object, it is often convenient to write loops over the cells of all levels of the global mesh, even if the local portion of the triangulation does not actually have cells at one of the higher levels. In those cases, the level
argument is accepted if it is less than what the n_global_levels() function returns. If the given level
is between the values returned by n_levels() and n_global_levels(), then no cells exist in the local portion of the triangulation at this level, and the function simply returns what end() would return.

privateinherited 
Iterator to the first active line on level level
.
level
argument needs to correspond to a level of the triangulation, i.e., should be less than the value returned by n_levels(). On the other hand, for parallel computations using a parallel::distributed::Triangulation object, it is often convenient to write loops over the cells of all levels of the global mesh, even if the local portion of the triangulation does not actually have cells at one of the higher levels. In those cases, the level
argument is accepted if it is less than what the n_global_levels() function returns. If the given level
is between the values returned by n_levels() and n_global_levels(), then no cells exist in the local portion of the triangulation at this level, and the function simply returns what end() would return.

privateinherited 
Iterator past the end; this iterator serves for comparisons of iterators with pasttheend or beforethebeginning states.

privateinherited 
Iterator to the first quad, used or not, on the given level. If a level has no quads, a pasttheend iterator is returned. If quads are no cells, i.e. for \(dim>2\) no level argument must be given.
level
argument needs to correspond to a level of the triangulation, i.e., should be less than the value returned by n_levels(). On the other hand, for parallel computations using a parallel::distributed::Triangulation object, it is often convenient to write loops over the cells of all levels of the global mesh, even if the local portion of the triangulation does not actually have cells at one of the higher levels. In those cases, the level
argument is accepted if it is less than what the n_global_levels() function returns. If the given level
is between the values returned by n_levels() and n_global_levels(), then no cells exist in the local portion of the triangulation at this level, and the function simply returns what end() would return.

privateinherited 
Iterator to the first used quad on level level
.
level
argument needs to correspond to a level of the triangulation, i.e., should be less than the value returned by n_levels(). On the other hand, for parallel computations using a parallel::distributed::Triangulation object, it is often convenient to write loops over the cells of all levels of the global mesh, even if the local portion of the triangulation does not actually have cells at one of the higher levels. In those cases, the level
argument is accepted if it is less than what the n_global_levels() function returns. If the given level
is between the values returned by n_levels() and n_global_levels(), then no cells exist in the local portion of the triangulation at this level, and the function simply returns what end() would return.

privateinherited 
Iterator to the first active quad on level level
.
level
argument needs to correspond to a level of the triangulation, i.e., should be less than the value returned by n_levels(). On the other hand, for parallel computations using a parallel::distributed::Triangulation object, it is often convenient to write loops over the cells of all levels of the global mesh, even if the local portion of the triangulation does not actually have cells at one of the higher levels. In those cases, the level
argument is accepted if it is less than what the n_global_levels() function returns. If the given level
is between the values returned by n_levels() and n_global_levels(), then no cells exist in the local portion of the triangulation at this level, and the function simply returns what end() would return.

privateinherited 
Iterator past the end; this iterator serves for comparisons of iterators with pasttheend or beforethebeginning states.

privateinherited 
Iterator to the first hex, used or not, on level level
. If a level has no hexes, a pasttheend iterator is returned.
level
argument needs to correspond to a level of the triangulation, i.e., should be less than the value returned by n_levels(). On the other hand, for parallel computations using a parallel::distributed::Triangulation object, it is often convenient to write loops over the cells of all levels of the global mesh, even if the local portion of the triangulation does not actually have cells at one of the higher levels. In those cases, the level
argument is accepted if it is less than what the n_global_levels() function returns. If the given level
is between the values returned by n_levels() and n_global_levels(), then no cells exist in the local portion of the triangulation at this level, and the function simply returns what end() would return.

privateinherited 
Iterator to the first used hex on level level
.
level
argument needs to correspond to a level of the triangulation, i.e., should be less than the value returned by n_levels(). On the other hand, for parallel computations using a parallel::distributed::Triangulation object, it is often convenient to write loops over the cells of all levels of the global mesh, even if the local portion of the triangulation does not actually have cells at one of the higher levels. In those cases, the level
argument is accepted if it is less than what the n_global_levels() function returns. If the given level
is between the values returned by n_levels() and n_global_levels(), then no cells exist in the local portion of the triangulation at this level, and the function simply returns what end() would return.

privateinherited 
Iterator to the first active hex on level level
.
level
argument needs to correspond to a level of the triangulation, i.e., should be less than the value returned by n_levels(). On the other hand, for parallel computations using a parallel::distributed::Triangulation object, it is often convenient to write loops over the cells of all levels of the global mesh, even if the local portion of the triangulation does not actually have cells at one of the higher levels. In those cases, the level
argument is accepted if it is less than what the n_global_levels() function returns. If the given level
is between the values returned by n_levels() and n_global_levels(), then no cells exist in the local portion of the triangulation at this level, and the function simply returns what end() would return.

privateinherited 
Iterator past the end; this iterator serves for comparisons of iterators with pasttheend or beforethebeginning states.

privateinherited 
The (public) function clear() will only work when the triangulation is not subscribed to by other users. The clear_despite_subscriptions() function now allows the triangulation being cleared even when there are subscriptions.
Make sure, you know what you do, when calling this function, as its use is reasonable in very rare cases, only. For example, when the subscriptions were for the initially empty Triangulation and the Triangulation object wants to release its memory before throwing an assertion due to input errors (e.g. in the create_triangulation() function).

privateinherited 
Reset triangulation policy.

privateinherited 
For all cells, set the active cell indices so that active cells know the how manyth active cell they are, and all other cells have an invalid value. This function is called after mesh creation, refinement, and serialization.

privateinherited 
Reset global cell ids and global level cell ids.

privateinherited 
Reset cache for the cells' vertex indices.

privateinherited 
Refine all cells on all levels which were previously flagged for refinement.
Note, that this function uses the line>user_flags
for dim=2,3
and the quad>user_flags
for dim=3
.
The function returns a list of cells that have produced children that satisfy the criteria of distorted cells if the check_for_distorted_cells
flag was specified upon creation of this object, at

privateinherited 
Coarsen all cells which were flagged for coarsening, or rather: delete all children of those cells of which all child cells are flagged for coarsening and several other constraints hold (see the general doc of this class).

privateinherited 
Make sure that either all or none of the children of a cell are tagged for coarsening.

privatevirtualinherited 
Translate the unique id of a coarse cell to its index. See the glossary entry on coarse cell IDs for more information.
coarse_cell_id  Unique id of the coarse cell. 
Reimplemented in parallel::fullydistributed::Triangulation< dim, spacedim >, parallel::distributed::Triangulation< dim, spacedim >, and parallel::distributed::Triangulation< 1, spacedim >.

privatevirtualinherited 
Translate the index of coarse cell to its unique id. See the glossary entry on coarse cell IDs for more information.
coarse_cell_index  Index of the coarse cell. 
Reimplemented in parallel::fullydistributed::Triangulation< dim, spacedim >, parallel::distributed::Triangulation< dim, spacedim >, and parallel::distributed::Triangulation< 1, spacedim >.

inherited 
Subscribes a user of the object by storing the pointer validity
. The subscriber may be identified by text supplied as identifier
.
Definition at line 136 of file subscriptor.cc.

inherited 
Unsubscribes a user from the object.
identifier
and the validity
pointer must be the same as the one supplied to subscribe(). Definition at line 156 of file subscriptor.cc.

inlineinherited 
Return the present number of subscriptions to this object. This allows to use this class for reference counted lifetime determination where the last one to unsubscribe also deletes the object.
Definition at line 300 of file subscriptor.h.

inlineinherited 
List the subscribers to the input stream
.
Definition at line 317 of file subscriptor.h.

inherited 
List the subscribers to deallog
.
Definition at line 204 of file subscriptor.cc.

privatenoexceptinherited 
Check that there are no objects subscribing to this object. If this check passes then it is safe to destroy the current object. It this check fails then this function will either abort or print an error message to deallog (by using the AssertNothrow mechanism), but will not throw an exception.
Definition at line 53 of file subscriptor.cc.

staticconstexpr 
Make the dimension available in function templates.
Definition at line 114 of file persistent_tria.h.

static 
Definition at line 115 of file persistent_tria.h.

private 
This grid shall be used as coarse grid.
Definition at line 269 of file persistent_tria.h.

private 
Vectors holding the refinement and coarsening flags of the different sweeps on this time level. The vectors therefore hold the history of the grid.
Definition at line 276 of file persistent_tria.h.

private 
Definition at line 281 of file persistent_tria.h.

staticconstexprinherited 

mutableinherited 

protectedinherited 

protectedinherited 

privateinherited 

privateinherited 
If add_periodicity() is called, this variable stores the given periodic face pairs on level 0 for later access during the identification of ghost cells for the multigrid hierarchy and for setting up the periodic_face_map.

privateinherited 
If add_periodicity() is called, this variable stores the active periodic face pairs.

privateinherited 

privateinherited 

privateinherited 

privateinherited 

privateinherited 
Collection of manifold objects. We store only objects, which are not of type FlatManifold.

privateinherited 

privateinherited 

privateinherited 
Cache to hold the numbers of lines, quads, hexes, etc. These numbers are set at the end of the refinement and coarsening functions and enable faster access later on. In the old days, whenever one wanted to access one of these numbers, one had to perform a loop over all lines, e.g., and count the elements until we hit the end iterator. This is time consuming and since access to the number of lines etc is a rather frequent operation, this was not an optimal solution.

privateinherited 
A map that relates the number of a boundary vertex to the boundary indicator. This field is only used in 1d. We have this field because we store boundary indicator information with faces in 2d and higher where we have space in the structures that store data for faces, but in 1d there is no such space for faces.
The field is declared as a pointer for a rather mundane reason: all other fields of this class that can be modified by the TriaAccessor hierarchy are pointers, and so these accessor classes store a const pointer to the triangulation. We could no longer do so for TriaAccessor<0,1,spacedim> if this field (that can be modified by TriaAccessor::set_boundary_id) were not a pointer.

privateinherited 
A map that relates the number of a boundary vertex to the manifold indicator. This field is only used in 1d. We have this field because we store manifold indicator information with faces in 2d and higher where we have space in the structures that store data for faces, but in 1d there is no such space for faces.
The field is declared as a pointer for a rather mundane reason: all other fields of this class that can be modified by the TriaAccessor hierarchy are pointers, and so these accessor classes store a const pointer to the triangulation. We could no longer do so for TriaAccessor<0,1,spacedim> if this field (that can be modified by TriaAccessor::set_manifold_id) were not a pointer.

mutableprivateinherited 
Store the number of objects which subscribed to this object. Initially, this number is zero, and upon destruction it shall be zero again (i.e. all objects which subscribed should have unsubscribed again).
The creator (and owner) of an object is counted in the map below if HE manages to supply identification.
We use the mutable
keyword in order to allow subscription to constant objects also.
This counter may be read from and written to concurrently in multithreaded code: hence we use the std::atomic
class template.
Definition at line 219 of file subscriptor.h.

mutableprivateinherited 
In this map, we count subscriptions for each different identification string supplied to subscribe().
Definition at line 225 of file subscriptor.h.

mutableprivateinherited 
In this vector, we store pointers to the validity bool in the SmartPointer objects that subscribe to this class.
Definition at line 241 of file subscriptor.h.

mutableprivateinherited 
Pointer to the typeinfo object of this object, from which we can later deduce the class name. Since this information on the derived class is neither available in the destructor, nor in the constructor, we obtain it in between and store it here.
Definition at line 249 of file subscriptor.h.

staticprivateinherited 
A mutex used to ensure data consistency when printing out the list of subscribers.
Definition at line 271 of file subscriptor.h.