Reference documentation for deal.II version 9.1.0-pre
Public Member Functions | Static Public Member Functions | Static Public Attributes | Private Attributes | List of all members
PersistentTriangulation< dim, spacedim > Class Template Reference

#include <deal.II/grid/persistent_tria.h>

Inheritance diagram for PersistentTriangulation< dim, spacedim >:
[legend]

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_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
 
- Public Member Functions inherited from Triangulation< dim, spacedim >
 Triangulation (const MeshSmoothing smooth_grid=none, const bool check_for_distorted_cells=false)
 
 Triangulation (const Triangulation< dim, spacedim > &)=delete
 
 Triangulation (Triangulation< dim, spacedim > &&tria) noexcept
 
Triangulationoperator= (Triangulation< dim, spacedim > &&tria) noexcept
 
virtual ~Triangulation () override
 
virtual void clear ()
 
virtual void set_mesh_smoothing (const MeshSmoothing mesh_smoothing)
 
virtual const MeshSmoothingget_mesh_smoothing () const
 
void set_manifold (const types::manifold_id number, const Manifold< dim, spacedim > &manifold_object)
 
void set_manifold (const types::manifold_id number)
 
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
 
std::vector< types::boundary_idget_boundary_ids () const
 
std::vector< types::manifold_idget_manifold_ids () const
 
void flip_all_direction_flags ()
 
void set_all_refine_flags ()
 
void refine_global (const unsigned int times=1)
 
virtual bool prepare_coarsening_and_refinement ()
 
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
 
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 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
 
IteratorRange< cell_iteratorcell_iterators () const
 
IteratorRange< active_cell_iteratoractive_cell_iterators () const
 
IteratorRange< cell_iteratorcell_iterators_on_level (const unsigned int level) const
 
IteratorRange< active_cell_iteratoractive_cell_iterators_on_level (const unsigned int level) const
 
face_iterator begin_face () const
 
active_face_iterator begin_active_face () const
 
face_iterator end_face () const
 
vertex_iterator begin_vertex () const
 
active_vertex_iterator begin_active_vertex () const
 
vertex_iterator end_vertex () const
 
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
 
virtual types::global_dof_index n_global_active_cells () const
 
unsigned int n_active_cells (const unsigned int level) 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
 
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
 
- Public Member Functions inherited from Subscriptor
 Subscriptor ()
 
 Subscriptor (const Subscriptor &)
 
 Subscriptor (Subscriptor &&) noexcept
 
virtual ~Subscriptor ()
 
Subscriptoroperator= (const Subscriptor &)
 
Subscriptoroperator= (Subscriptor &&) noexcept
 
void subscribe (const char *identifier=nullptr) const
 
void unsubscribe (const char *identifier=nullptr) const
 
unsigned int n_subscriptions () const
 
template<typename StreamType >
void list_subscribers (StreamType &stream) const
 
void list_subscribers () const
 
template<class Archive >
void serialize (Archive &ar, const unsigned int version)
 

Static Public Member Functions

static::ExceptionBase & ExcTriaNotEmpty ()
 
static::ExceptionBase & ExcFlagsNotCleared ()
 
- Static Public Member Functions inherited from Triangulation< dim, spacedim >
static::ExceptionBase & ExcInvalidLevel (int arg1)
 
static::ExceptionBase & ExcTriangulationNotEmpty (int arg1, int arg2)
 
static::ExceptionBase & ExcGridReadError ()
 
static::ExceptionBase & ExcFacesHaveNoLevel ()
 
static::ExceptionBase & ExcEmptyLevel (int arg1)
 
static::ExceptionBase & ExcNonOrientableTriangulation ()
 
static::ExceptionBase & ExcBoundaryIdNotFound (types::boundary_id arg1)
 
- Static Public Member Functions inherited from Subscriptor
static::ExceptionBase & ExcInUse (int arg1, std::string arg2, std::string arg3)
 
static::ExceptionBase & ExcNoSubscriber (std::string arg1, std::string arg2)
 

Static Public Attributes

static const unsigned int dimension = dim
 
- Static Public Attributes inherited from Triangulation< dim, spacedim >
static const unsigned int dimension = dim
 
static const unsigned int space_dimension = spacedim
 

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
 

Additional Inherited Members

- Public Types inherited from Triangulation< dim, spacedim >
using cell_iterator = TriaIterator< CellAccessor< dim, spacedim >>
 
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 >>
 
- Public Attributes inherited from Triangulation< dim, spacedim >
Signals signals
 
- Protected Member Functions inherited from Triangulation< dim, spacedim >
void update_periodic_face_map ()
 
- Static Protected Member Functions inherited from Triangulation< dim, spacedim >
static void write_bool_vector (const unsigned int magic_number1, const std::vector< bool > &v, const unsigned int magic_number2, std::ostream &out)
 
static void read_bool_vector (const unsigned int magic_number1, std::vector< bool > &v, const unsigned int magic_number2, std::istream &in)
 
- Protected Attributes inherited from Triangulation< dim, spacedim >
MeshSmoothing smooth_grid
 

Detailed Description

template<int dim, int spacedim = dim>
class PersistentTriangulation< dim, spacedim >

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 drop-in 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.

Usage

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:

... // initialize coarse grid
PersistentTriangulation<dim> grid (coarse_grid);
for (...)
{
// restore grid from coarse grid
// and stored refinement flags
grid.restore ();
... // do something with the grid
... // flag some cells for refinement
// or coarsening
grid.execute_coarsening_and_refinement ();
// actually refine grid and store
// the flags
... // so something more with the grid
grid.clear (); // delete the grid, but keep the
// refinement flags for later use
// in grid.restore() above
... // do something where the grid
// is not needed anymore, e.g.
// working with another grid
};

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().

Author
Wolfgang Bangerth, 1999

Definition at line 109 of file persistent_tria.h.

Constructor & Destructor Documentation

template<int dim, int spacedim>
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.

template<int dim, int spacedim>
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.

template<int dim, int spacedim = dim>
virtual PersistentTriangulation< dim, spacedim >::~PersistentTriangulation ( )
overridevirtualdefault

Destructor.

Member Function Documentation

template<int dim, int spacedim>
void PersistentTriangulation< dim, spacedim >::execute_coarsening_and_refinement ( )
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.

template<int dim, int spacedim>
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.

template<int dim, int spacedim>
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_no-1 before.

Definition at line 90 of file persistent_tria.cc.

template<int dim, int spacedim>
unsigned int PersistentTriangulation< dim, spacedim >::n_refinement_steps ( ) const

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.

template<int dim, int spacedim>
void PersistentTriangulation< dim, spacedim >::copy_triangulation ( const Triangulation< dim, spacedim > &  tria)
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.

template<int dim, int spacedim>
void PersistentTriangulation< dim, spacedim >::create_triangulation ( const std::vector< Point< spacedim >> &  vertices,
const std::vector< CellData< dim >> &  cells,
const SubCellData subcelldata 
)
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.

template<int dim, int spacedim>
void PersistentTriangulation< dim, spacedim >::create_triangulation_compatibility ( const std::vector< Point< spacedim >> &  vertices,
const std::vector< CellData< dim >> &  cells,
const SubCellData subcelldata 
)
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 150 of file persistent_tria.cc.

template<int dim, int spacedim>
void PersistentTriangulation< dim, spacedim >::write_flags ( std::ostream &  out) const
virtual

Write all refine and coarsen flags to the ostream out.

Definition at line 162 of file persistent_tria.cc.

template<int dim, int spacedim>
void PersistentTriangulation< dim, spacedim >::read_flags ( std::istream &  in)
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 191 of file persistent_tria.cc.

template<int dim, int spacedim>
void PersistentTriangulation< dim, spacedim >::clear_flags ( )
virtual

Clear all flags. Retains the same coarse grid.

Definition at line 229 of file persistent_tria.cc.

template<int dim, int spacedim>
std::size_t PersistentTriangulation< dim, spacedim >::memory_consumption ( ) const
overridevirtual

Determine an estimate for the memory consumption (in bytes) of this object.

Reimplemented from Triangulation< dim, spacedim >.

Definition at line 239 of file persistent_tria.cc.

Member Data Documentation

template<int dim, int spacedim = dim>
const unsigned int PersistentTriangulation< dim, spacedim >::dimension = dim
static

Make the dimension available in function templates.

Definition at line 115 of file persistent_tria.h.

template<int dim, int spacedim = dim>
SmartPointer<const Triangulation<dim, spacedim>, PersistentTriangulation<dim, spacedim> > PersistentTriangulation< dim, spacedim >::coarse_grid
private

This grid shall be used as coarse grid.

Definition at line 259 of file persistent_tria.h.

template<int dim, int spacedim = dim>
std::vector<std::vector<bool> > PersistentTriangulation< dim, spacedim >::refine_flags
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 266 of file persistent_tria.h.

template<int dim, int spacedim = dim>
std::vector<std::vector<bool> > PersistentTriangulation< dim, spacedim >::coarsen_flags
private

refine_flags

Definition at line 271 of file persistent_tria.h.


The documentation for this class was generated from the following files: