Reference documentation for deal.II version Git 3ecc854 2017-02-27 14:34:24 -0500
Modules | Namespaces | Classes | Enumerations
Degrees of Freedom
Collaboration diagram for Degrees of Freedom:


 Constraints on degrees of freedom




class  BlockInfo
 A small class collecting the different BlockIndices involved in global, multilevel and local computations. More...
struct  internal::DoFAccessor::Inheritance< structdim, dim, spacedim >
class  DoFAccessor< structdim, DoFHandlerType, level_dof_access >
class  DoFCellAccessor< DoFHandlerType, level_dof_access >
class  internal::DoFHandler::DoFFaces< dim >
class  internal::DoFHandler::DoFFaces< 1 >
class  internal::DoFHandler::DoFFaces< 2 >
class  internal::DoFHandler::DoFFaces< 3 >
class  DoFHandler< dim, spacedim >
class  DoFHandler< dim, spacedim >::MGVertexDoFs
class  internal::DoFHandler::DoFObjects< dim >
struct  DoFRenumbering::CompareDownstream< Iterator, dim >
struct  DoFRenumbering::ComparePointwiseDownstream< dim >
class  internal::hp::DoFIndicesOnFaces< dim >
class  hp::DoFHandler< dim, spacedim >
class  ConstraintMatrix
struct  ConstraintMatrix::ConstraintLine


enum  DoFTools::Coupling { DoFTools::none, DoFTools::always, DoFTools::nonzero }

Detailed Description

This module groups classes and namespaces that have to do with handling degrees of freedom. The central class of this group is the DoFHandler class: it is built on top of a triangulation and a finite element class and allocated degrees of freedom on each cell of the triangulation as required for the finite element space described by the finite element object. There are other variants of the DoFHandler class such as hp::DoFHandler that do similar things for more special cases.

DoFHandler objects are used together with objects of type FiniteElement (or hp::FECollection in the case of hp::DoFHandler) to enumerate all the degrees of freedom that exist in a triangulation for this particular finite element. As such, the combination of mesh, finite element, and DoF handler object can be thought of as providing a basis of the finite element space: the mesh provides the locations at which basis functions are defined; the finite element describes what kinds of basis functions exist; and the DoF handler object provides an enumeration of the basis, i.e., it is provides a concrete structure of the space so that we can describe functions in this finite dimensional space by vectors of coefficients.

DoFHandlers extend Triangulation objects (and the other classes in the Grid classes module) in that they, too, offer iterators that run over all cells, faces, or other geometric objects that make up a triangulation. These iterators are derived from the triangulation iterators and therefore offer the same functionality, but they also offer additional functions. For example, they allow to query the indices of the degrees of freedom associated with the present cell. Note that DoFHandler classes are not derived from Triangulation, though they use Triangulation objects; the reason is that there can be more than one DoFHandler object that works on the same Triangulation object.

In addition to the DoF handler classes, this module holds a number of auxiliary classes not commonly used in application programs, as well as three classes that are not directly associated with the data structures of the DoFHandler class. The first of these is the ConstraintMatrix class that stores and treats the constraints associated with hanging nodes. Secondly, the DoFRenumbering namespace offers functions that can reorder degrees of freedom; among its functions are ones that sort degrees of freedom in downstream direction, for example, and ones that sort degrees of freedom in such a way that the bandwidth of associated matrices is minimized. Finally, the DoFTools namespace offers a variety of algorithms around handling degrees of freedom.

Enumeration Type Documentation

The flags used in tables by certain make_*_pattern functions to describe whether two components of the solution couple in the bilinear forms corresponding to cell or face terms. An example of using these flags is shown in the introduction of step-46.

In the descriptions of the individual elements below, remember that these flags are used as elements of tables of size FiniteElement::n_components times FiniteElement::n_components where each element indicates whether two components do or do not couple.


Two components do not couple.


Two components do couple.


Two components couple only if their shape functions are both nonzero on a given face. This flag is only used when computing integrals over faces of cells, e.g., in DoFTools::make_flux_sparsity_pattern().

Definition at line 190 of file dof_tools.h.