Reference documentation for deal.II version Git 803d21ff95 20201001 11:19:45 0600

#include <deal.II/hp/dof_handler.h>
Public Types  
using  cell_accessor = typename ActiveSelector::CellAccessor 
using  face_accessor = typename ActiveSelector::FaceAccessor 
using  line_iterator = typename ActiveSelector::line_iterator 
using  active_line_iterator = typename ActiveSelector::active_line_iterator 
using  quad_iterator = typename ActiveSelector::quad_iterator 
using  active_quad_iterator = typename ActiveSelector::active_quad_iterator 
using  hex_iterator = typename ActiveSelector::hex_iterator 
using  active_hex_iterator = typename ActiveSelector::active_hex_iterator 
using  active_cell_iterator = typename ActiveSelector::active_cell_iterator 
using  cell_iterator = typename ActiveSelector::cell_iterator 
using  face_iterator = typename ActiveSelector::face_iterator 
using  active_face_iterator = typename ActiveSelector::active_face_iterator 
using  level_cell_accessor = typename LevelSelector::CellAccessor 
using  level_face_accessor = typename LevelSelector::FaceAccessor 
using  level_cell_iterator = typename LevelSelector::cell_iterator 
using  level_face_iterator = typename LevelSelector::face_iterator 
using  active_fe_index_type = unsigned short int 
using  offset_type = unsigned int 
Public Member Functions  
DoFHandler ()  
DoFHandler (const Triangulation< dim, spacedim > &tria)  
DoFHandler (const DoFHandler &)=delete  
DoFHandler &  operator= (const DoFHandler &)=delete 
void  initialize (const Triangulation< dim, spacedim > &tria, const FiniteElement< dim, spacedim > &fe) 
void  initialize (const Triangulation< dim, spacedim > &tria, const hp::FECollection< dim, spacedim > &fe) 
void  set_fe (const FiniteElement< dim, spacedim > &fe) 
void  set_fe (const hp::FECollection< dim, spacedim > &fe) 
void  set_active_fe_indices (const std::vector< unsigned int > &active_fe_indices) 
void  get_active_fe_indices (std::vector< unsigned int > &active_fe_indices) const 
void  distribute_dofs (const FiniteElement< dim, spacedim > &fe) 
void  distribute_dofs (const hp::FECollection< dim, spacedim > &fe) 
void  distribute_mg_dofs () 
bool  has_level_dofs () const 
bool  has_active_dofs () const 
void  initialize_local_block_info () 
void  clear () 
void  renumber_dofs (const std::vector< types::global_dof_index > &new_numbers) 
void  renumber_dofs (const unsigned int level, const std::vector< types::global_dof_index > &new_numbers) 
unsigned int  max_couplings_between_dofs () const 
unsigned int  max_couplings_between_boundary_dofs () const 
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 
level_cell_iterator  begin_mg (const unsigned int level=0) const 
level_cell_iterator  end_mg (const unsigned int level) const 
level_cell_iterator  end_mg () const 
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 &  ExcInUse (int arg1, std::string arg2, std::string arg3) 
static ::ExceptionBase &  ExcNoSubscriber (std::string arg1, std::string arg2) 
Public Attributes  
const bool  hp_capability_enabled 
Static Public Attributes  
static const unsigned int  dimension = dim 
static const unsigned int  space_dimension = spacedim 
static const unsigned int  default_fe_index = 0 
static const unsigned int  invalid_fe_index = numbers::invalid_unsigned_int 
static const active_fe_index_type  invalid_active_fe_index 
Manage the distribution and numbering of the degrees of freedom for hp FEM algorithms. This class satisfies the MeshType concept requirements.
The purpose of this class is to allow for an enumeration of degrees of freedom in the same way as the DoFHandler class, but it allows to use a different finite element on every cell. To this end, one assigns an active_fe_index
to every cell that indicates which element within a collection of finite elements (represented by an object of type hp::FECollection) is the one that lives on this cell. The class then enumerates the degree of freedom associated with these finite elements on each cell of a triangulation and, if possible, identifies degrees of freedom at the interfaces of cells if they match. If neighboring cells have degrees of freedom along the common interface that do not immediate match (for example, if you have \(Q_2\) and \(Q_3\) elements meeting at a common face), then one needs to compute constraints to ensure that the resulting finite element space on the mesh remains conforming.
The whole process of working with objects of this type is explained in step27. Many of the algorithms this class implements are described in the hp paper.
The typical workflow for using this class is to create a mesh, assign an active FE index to every active cell, calls hp::DoFHandler::distribute_dofs(), and then assemble a linear system and solve a problem on this finite element space. However, one can skip assigning active FE indices upon mesh refinement in certain circumstances. In particular, the following rules apply:
When this class is used with either a parallel::shared::Triangulation or a parallel::distributed::Triangulation, you can only set active FE indices on cells that are locally owned, using a call such as cell>set_active_fe_index(...)
. On the other hand, setting the active FE index on ghost or artificial cells is not allowed.
Ghost cells do acquire the information what element is active on them, however: whenever you call hp::DoFHandler::distribute_dofs(), all processors that participate in the parallel mesh exchange information in such a way that the active FE index on ghost cells equals the active FE index that was set on that processor that owned that particular ghost cell. Consequently, one can query the active_fe_index
on ghost cells, just not set it by hand.
On artificial cells, no information is available about the active_fe_index
used there. That's because we don't even know whether these cells exist at all, and even if they did, the current processor does not know anything specific about them. See the glossary entry on artificial cells for more information.
During refinement and coarsening, information about the active_fe_index
of each cell will be automatically transferred.
However, using a parallel::distributed::Triangulation with an hp::DoFHandler requires additional attention during serialization, since no information on active FE indices will be automatically transferred. This has to be done manually using the prepare_for_serialization_of_active_fe_indices() and deserialize_active_fe_indices() functions. The former has to be called before parallel::distributed::Triangulation::save() is invoked, and the latter needs to be run after parallel::distributed::Triangulation::load(). If further data will be attached to the triangulation via the parallel::distributed::CellDataTransfer, parallel::distributed::SolutionTransfer, or Particles::ParticleHandler classes, all corresponding preparation and deserialization function calls need to happen in the same order. Consult the documentation of parallel::distributed::SolutionTransfer for more information.
Definition at line 125 of file dof_handler.h.

inherited 
Definition at line 404 of file dof_handler.h.

inherited 
Definition at line 405 of file dof_handler.h.

inherited 
Definition at line 407 of file dof_handler.h.

inherited 
Definition at line 408 of file dof_handler.h.

inherited 
The type in which we store the active FE index.
Definition at line 440 of file dof_handler.h.

inherited 
The type in which we store the offsets in the CRS data structures.
Definition at line 445 of file dof_handler.h.
DoFHandler< dim, spacedim >::DoFHandler  (  ) 
Default Constructor.
Definition at line 23 of file dof_handler.cc.
DoFHandler< dim, spacedim >::DoFHandler  (  const Triangulation< dim, spacedim > &  tria  ) 
Constructor. Take tria
as the triangulation to work on.
Definition at line 30 of file dof_handler.cc.

delete 
Copy constructor. DoFHandler objects are large and expensive. They should not be copied, in particular not by accident, but rather deliberately constructed. As a consequence, this constructor is explicitly removed from the interface of this class.

delete 
Copy operator. DoFHandler objects are large and expensive. They should not be copied, in particular not by accident, but rather deliberately constructed. As a consequence, this operator is explicitly removed from the interface of this class.

inherited 
Assign a Triangulation and a FiniteElement to the DoFHandler and compute the distribution of degrees of freedom over the mesh.
Definition at line 2068 of file dof_handler.cc.

inherited 
Same as above but taking an hp::FECollection object.
Definition at line 2078 of file dof_handler.cc.

inherited 
Assign a FiniteElement fe
to this object.
Definition at line 2439 of file dof_handler.cc.

inherited 
Same as above but taking an hp::FECollection object.
Definition at line 2448 of file dof_handler.cc.

inherited 
Go through the triangulation and set the active FE indices of all active cells to the values given in active_fe_indices
.
Definition at line 2999 of file dof_handler.cc.

inherited 
Go through the triangulation and store the active FE indices of all active cells to the vector active_fe_indices
. This vector is resized, if necessary.
Definition at line 3020 of file dof_handler.cc.

inherited 
Go through the triangulation and "distribute" the degrees of freedom needed for the given finite element. "Distributing" degrees of freedom involves allocating memory to store the indices on all entities on which degrees of freedom can be located (e.g., vertices, edges, faces, etc.) and to then enumerate all degrees of freedom. In other words, while the mesh and the finite element object by themselves simply define a finite element space \(V_h\), the process of distributing degrees of freedom makes sure that there is a basis for this space and that the shape functions of this basis are enumerated in an indexable, predictable way.
The exact order in which degrees of freedom on a mesh are ordered, i.e., the order in which basis functions of the finite element space are enumerated, is something that deal.II treats as an implementation detail. By and large, degrees of freedom are enumerated in the same order in which we traverse cells, but you should not rely on any specific numbering. In contrast, if you want a particular ordering, use the functions in namespace DoFRenumbering.
This function is first discussed in the introduction to the step2 tutorial program.
Definition at line 2487 of file dof_handler.cc.

inherited 
Same as above but taking an hp::FECollection object.
Definition at line 2497 of file dof_handler.cc.

inherited 
Distribute level degrees of freedom on each level for geometric multigrid. The active DoFs need to be distributed using distribute_dofs() before calling this function.
Definition at line 2612 of file dof_handler.cc.

inherited 
This function returns whether this DoFHandler has DoFs distributed on each multigrid level or in other words if distribute_mg_dofs() has been called.

inherited 
This function returns whether this DoFHandler has active DoFs. This is equivalent to asking whether (i) distribute_dofs() has been called and (ii) the finite element for which degrees of freedom have been distributed actually has degrees of freedom (which is not the case for FE_Nothing, for example).
If this object is based on a parallel::distributed::Triangulation, then the current function returns true if any partition of the parallel DoFHandler object has any degrees of freedom. In other words, the function returns true even if the Triangulation does not own any active cells on the current MPI process, but at least one process owns cells and at least this one process has any degrees of freedom associated with it.

inherited 
After distribute_dofs() with an FESystem element, the block structure of global and level vectors is stored in a BlockInfo object accessible with block_info(). This function initializes the local block structure on each cell in the same object.
Definition at line 2644 of file dof_handler.cc.

inherited 
Clear all data of this object.
Definition at line 2678 of file dof_handler.cc.

inherited 
Renumber degrees of freedom based on a list of new DoF indices for each of the degrees of freedom.
This function is called by the functions in DoFRenumbering function after computing a new ordering of the degree of freedom indices. However, it can of course also be called from user code.
i
is currently locally owned, then new_numbers[locally_owned_dofs().index_within_set(i)]
returns the new global DoF index of i
. Since the IndexSet of locally_owned_dofs() is complete in the sequential case, the latter convention for the content of the array reduces to the former in the case that only one processor participates in the mesh.true
) are of course affected by the exact renumbering performed here. For example, while the initial numbering of DoF indices done in distribute_dofs() yields a contiguous numbering, the renumbering performed by DoFRenumbering::component_wise() will, in general, not yield contiguous locally owned DoF indices. Definition at line 2740 of file dof_handler.cc.

inherited 
The same function as above, but renumber the degrees of freedom of a single level of a multigrid hierarchy.
Definition at line 2852 of file dof_handler.cc.

inherited 
Return the maximum number of degrees of freedom a degree of freedom in the given triangulation with the given finite element may couple with. This is the maximum number of entries per line in the system matrix; this information can therefore be used upon construction of the SparsityPattern object.
The returned number is not really the maximum number but an estimate based on the finite element and the maximum number of cells meeting at a vertex. The number holds for the constrained matrix as well.
The determination of the number of couplings can be done by simple picture drawing. An example can be found in the implementation of this function.
Definition at line 2929 of file dof_handler.cc.

inherited 
Return the number of degrees of freedom located on the boundary another dof on the boundary can couple with.
The number is the same as for max_couplings_between_dofs() in one dimension less.
Definition at line 2895 of file dof_handler.cc.

inherited 
Iterator to the first used cell on level level
.
Definition at line 2118 of file dof_handler.cc.

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.
Definition at line 2131 of file dof_handler.cc.

inherited 
Iterator past the end; this iterator serves for comparisons of iterators with pasttheend or beforethebeginning states.
Definition at line 2147 of file dof_handler.cc.

inherited 
Return an iterator which is the first iterator not on the given level. If level
is the last level, then this returns end()
.
Definition at line 2156 of file dof_handler.cc.

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()
.
Definition at line 2169 of file dof_handler.cc.

inherited 
Iterator to the first used cell on level level
. This returns a level_cell_iterator that returns level dofs when dof_indices() is called.
Definition at line 2182 of file dof_handler.cc.

inherited 
Iterator past the last cell on level level
. This returns a level_cell_iterator that returns level dofs when dof_indices() is called.
Definition at line 2198 of file dof_handler.cc.

inherited 
Iterator past the end; this iterator serves for comparisons of iterators with pasttheend or beforethebeginning states.
Definition at line 2214 of file dof_handler.cc.

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.

staticinherited 
Make the dimension available in function templates.
Definition at line 414 of file dof_handler.h.

staticinherited 
Make the space dimension available in function templates.
Definition at line 419 of file dof_handler.h.

inherited 
Boolean indicating whether or not the current DoFHander has hp capabilities.
Definition at line 425 of file dof_handler.h.

staticinherited 
The default index of the finite element to be used on a given cell.
Definition at line 430 of file dof_handler.h.

staticinherited 
Invalid index of the finite element to be used on a given cell.
Definition at line 435 of file dof_handler.h.

staticinherited 
Invalid active_fe_index which will be used as a default value to determine whether a future_fe_index has been set or not.
Definition at line 451 of file dof_handler.h.