DUNE PDELab (git)

Classes

class  Dune::PDELab::AssemblerInterface
 The global assembler which performs the traversing of the integration parts. More...
 
class  Dune::PDELab::LocalAssemblerEngine
 The local assembler engine which handles the integration parts as provided by the global assemblers. More...
 
class  Dune::PDELab::LocalAssemblerInterface< B, CU, CV >
 The local assembler which provides the engines that drive the global assembler. More...
 
class  Dune::PDELab::GridOperatorInterface< GFSU, GFSV, MB, DF, RF, JF >
 The grid operator represents an operator mapping which corresponds to the (possibly nonlinear) algebraic problem resulting from the discretization of a PDE. More...
 
class  Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >
 Helper class for adding up matrix entries on border. More...
 
class  Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::PatternExtender< Pattern >
 A DataHandle class to exchange matrix sparsity patterns. More...
 
class  Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::EntryAccumulator
 A DataHandle class to exchange matrix entries. More...
 
class  Dune::PDELab::LocalAssemblerEngineBase
 Base class for LocalAssemblerEngine implementations to avoid boilerplate code. More...
 

Typedefs

typedef std::unordered_map< typename GFSV::Ordering::Traits::DOFIndex, std::unordered_set< GlobalDOFIndex > > Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::BorderPattern
 Data structure for storing border-border matrix pattern entries in a communication-optimized form.
 
typedef PatternMPIData Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::PatternExtender< Pattern >::DataType
 Export type of data for message buffer.
 
typedef ValueMPIData Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::EntryAccumulator::DataType
 Export type of data for message buffer.
 
typedef Empty Dune::PDELab::NoDataBorderDOFExchanger< GridOperator >::BorderPattern
 Data structure for storing border-border matrix pattern entries in a communication-optimized form.
 

Functions

 Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::NonOverlappingBorderDOFExchanger (const GridOperator &grid_operator)
 Constructor. Sets up the local to global relations. More...
 
template<typename Entity >
size_type Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::PatternExtender< Pattern >::size (Entity &e) const
 How many objects of type DataType have to be sent for a given entity.
 
template<typename MessageBuffer , typename Entity >
void Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::PatternExtender< Pattern >::gather (MessageBuffer &buff, const Entity &e) const
 Pack data from user to message buffer.
 
template<typename MessageBuffer , typename Entity >
void Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::PatternExtender< Pattern >::scatter (MessageBuffer &buff, const Entity &e, size_t n)
 Unpack data from message buffer to user.
 
template<typename MessageBuffer , typename Entity >
void Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::EntryAccumulator::scatter (MessageBuffer &buff, const Entity &e, size_type n)
 Unpack data from message buffer to user.
 
void Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::accumulateBorderEntries (const GridOperator &grid_operator, Matrix &matrix)
 Sums up the entries corresponding to border vertices. More...
 

Detailed Description

Grid Operator

Introduction

In the PDELab concept, the continuous PDE problem is reduced to an algebraic problem:

Find \( \mathbf{u}\in\mathbf{U} \) such that \( \mathcal{R}(\mathbf{u}) = \mathbf{0} \) .

For instationary problems a corresponding algebraic problem is setup for each time step or stage of a time step.

The grid operator object represents the operator mapping \( \mathcal{R} : \mathbf{U} \to \mathbf{V} \) . It is evaluated via the Dune::PDELab::GridOperatorInterface::residual() member method and its derivatives are aquired with the Dune::PDELab::GridOperatorInterface::jacobian() method.

Evaluating the grid operator and its jacobian matrix entails integrations over the computational domain during which the corresponding algebraic objects are assembled incrementally. The assembling is performed by two objects corresponding to the Dune::PDELab::AssemblerInterface and the Dune::PDELab::LocalAssemblerInterface . The former, the global assembler, provides the geometric objects, representing parts of the computational domain to be integrated. The latter, the local assembler, calls the local operator in an appropriate way to compute the local integrals and afterwards accumulates the results into the algebra objects.

The separation of these two tasks into different objects has significant advantages to a monolithic approach. It allows different implementations of the assembler interface to be used interchangeably in common implementations of time stepping schemes. The latter may link in between the global and the local assembler and thus apply the necessary modifications to the local integrations (like multiplying with the time step with or Runge-Kutta coefficients).

Furthermore, the separation provides a junction for caching objects. Such objects would provide the interface of the local assembler, while actually wrapping the true local assembler object.

Engines

In a simple stationary PDE problem, the assembling functionality provided by Dune::PDELab::AssemblerInterface and the Dune::PDELab::LocalAssemblerInterface will be used for at least three different purposes:

  • Evaluating the grid operator (usually corresponds to computing the problem's residual vector)
  • Setup of the jacobian matrix sparsity pattern
  • Computing the jacobian matrix

As these three tasks require rather different local operations (e.g. setting up of the jacobian matrix sparsity pattern does not require any evaluations of the local function spaces), the local assembler does not directly interact with the global assembler. Instead, it provides engines which drive the global assembler for each of the different tasks. Therefore, every local assembler is required to provide the engines:

  • LocalPatternAssemblerEngine
  • LocalResidualAssemblerEngine
  • LocalJacobianAssemblerEngine
  • LocalResidualJacobianAssemblerEngine

The last of the engines above allows a combined assembling of the residual and the jacobian matrix.

Instationary problems and composite grid operators

When given a instationary PDE problem which (after spatial discretization) results in an algebraic problem

\[ \partial_t \mathcal{R}_1(\mathbf{u}) + \mathcal{R}_0(\mathbf{u}) = \mathbf{0}, \]

then the PDELab approach is to define a grid operator for each \( \mathcal{R}_1 \) and \( \mathcal{R}_0 \) and then combine these grid operators in a composite grid operator which provides the additional functionality needed by the chosen time stepping method (e.g. for a Runge-Kutta scheme, the grid operator must be able to be evaluated for each of the Runge-Kutta stages). The class Dune::PDELab::OneStepGridOperator is a fairly general implementation which allows the appli cation of many different one step methods including all methods of Runge-Kutta type.

In general, such composite grid operators will apply multiple assembler engines in a combined assembling during a single grid traversion. This will usually result in both engines performing operations, which they could efficiently share or distribute. To allow such optimizations, the composite grid operator may inform his subordinate grid operators of their co-operators and the order in which they will be called during assembling. This is done via the Dune::PDELab::GridOperatorInterface::setupGridOperators method.

Function Documentation

◆ accumulateBorderEntries()

template<typename GridOperator >
void Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::accumulateBorderEntries ( const GridOperator grid_operator,
Matrix &  matrix 
)
inline

◆ NonOverlappingBorderDOFExchanger()

template<typename GridOperator >
Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::NonOverlappingBorderDOFExchanger ( const GridOperator grid_operator)
inline

Constructor. Sets up the local to global relations.

Parameters
[in]grid_operatorThe grid operator to access grid view and communication cache.
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.80.0 (May 1, 22:29, 2024)