|
| Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::NonOverlappingBorderDOFExchanger (const GridOperator &grid_operator) |
| Constructor. Sets up the local to global relations. More...
|
|
void | Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::update (const GridOperator &grid_operator) |
|
| Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::CommunicationCache::CommunicationCache (const GridOperator &go) |
|
bool | Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::CommunicationCache::initialized () const |
|
void | Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::CommunicationCache::finishInitialization () |
|
void | Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::CommunicationCache::update () |
|
const BorderPattern & | Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::CommunicationCache::pattern () const |
|
template<typename LFSVCache , typename LFSUCache , typename LocalPattern > |
void | Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::CommunicationCache::addEntries (const LFSVCache &lfsv_cache, const LFSUCache &lfsu_cache, const LocalPattern &pattern) |
|
template<typename Entity > |
size_type | Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::CommunicationCache::size (const Entity &e) const |
|
template<typename Buffer , typename Entity > |
void | Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::CommunicationCache::gather_pattern (Buffer &buf, const Entity &e) const |
|
template<typename Buffer , typename Entity > |
void | Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::CommunicationCache::gather_data (Buffer &buf, const Entity &e, const M &matrix) const |
|
bool | Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::PatternExtender< Pattern >::contains (int dim, int codim) const |
|
bool | Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::PatternExtender< Pattern >::fixedsize (int dim, int codim) const |
|
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. More...
|
|
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. More...
|
|
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. More...
|
|
| Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::PatternExtender< Pattern >::PatternExtender (const NonOverlappingBorderDOFExchanger &dof_exchanger, const GFSU &gfsu, const GFSV &gfsv, Pattern &pattern) |
|
bool | Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::EntryAccumulator::contains (int dim, int codim) const |
|
bool | Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::EntryAccumulator::fixedsize (int dim, int codim) const |
|
template<typename Entity > |
size_type | Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::EntryAccumulator::size (Entity &e) const |
|
template<typename MessageBuffer , typename Entity > |
void | Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::EntryAccumulator::gather (MessageBuffer &buff, const Entity &e) const |
|
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. More...
|
|
| Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::EntryAccumulator::EntryAccumulator (const NonOverlappingBorderDOFExchanger &dof_exchanger, const GFSU &gfsu, const GFSV &gfsv, Matrix &matrix) |
|
void | Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::accumulateBorderEntries (const GridOperator &grid_operator, Matrix &matrix) |
| Sums up the entries corresponding to border vertices. More...
|
|
CommunicationCache & | Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::communicationCache () |
|
const CommunicationCache & | Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::communicationCache () const |
|
shared_ptr< CommunicationCache > | Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::communicationCacheStorage () |
|
const EntitySet & | Dune::PDELab::NonOverlappingBorderDOFExchanger< GridOperator >::entitySet () const |
|
| Dune::PDELab::NoDataBorderDOFExchanger< GridOperator >::NoDataBorderDOFExchanger () |
|
| Dune::PDELab::NoDataBorderDOFExchanger< GridOperator >::NoDataBorderDOFExchanger (const GridOperator &grid_operator) |
|
void | Dune::PDELab::NoDataBorderDOFExchanger< GridOperator >::accumulateBorderEntries (const GridOperator &grid_operator, typename GridOperator::Traits::Jacobian &matrix) |
|
CommunicationCache & | Dune::PDELab::NoDataBorderDOFExchanger< GridOperator >::communicationCache () |
|
const CommunicationCache & | Dune::PDELab::NoDataBorderDOFExchanger< GridOperator >::communicationCache () const |
|
void | Dune::PDELab::NoDataBorderDOFExchanger< GridOperator >::update (const GridOperator &grid_operator) |
|
| Dune::PDELab::OverlappingBorderDOFExchanger< GridOperator >::OverlappingBorderDOFExchanger () |
|
| Dune::PDELab::OverlappingBorderDOFExchanger< GridOperator >::OverlappingBorderDOFExchanger (const GridOperator &grid_operator) |
|
Introduction
In the PDELab concept, the continuous PDE problem is reduced to an algebraic problem:
Find
such that
.
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
. 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
then the PDELab approach is to define a grid operator for each
and
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.