DUNE-ACFEM (2.5.1)

Dune::ACFem::ParabolicEulerEstimator< OldSolutionFunction, TimeProvider, ImplicitModel, ExplicitModel > Class Template Reference

Residual estimator for the heat equation. More...

#include <dune/acfem/estimators/parabolicestimator.hh>

+ Collaboration diagram for Dune::ACFem::ParabolicEulerEstimator< OldSolutionFunction, TimeProvider, ImplicitModel, ExplicitModel >:

Public Member Functions

template<class DiscreteFunctionType >
RangeFieldType estimate (const DiscreteFunctionType &uh)
 calculate estimator
 

Protected Member Functions

template<class DiscreteFunctionType >
void estimateLocal (const ElementType &entity, const DiscreteFunctionType &uh)
 caclulate error on element
 
template<class DiscreteFunctionType >
void estimateIntersection (const IntersectionType &intersection, const ElementType &inside, const DiscreteFunctionType &uh, const typename DiscreteFunctionType::LocalFunctionType &uInside)
 caclulate error on element boundary intersections
 
template<bool conforming, class LocalFunctionType >
RangeFieldType estimateIntersection (const IntersectionType &intersection, const ElementType &inside, const LocalFunctionType &uInside, const ElementType &outside, const LocalFunctionType &uOutside) const
 caclulate error on element intersections
 
void communicateJumpContributions ()
 Helper function in order to add the jump contributions on inter-process boundaries.
 
template<class LocalFunctionType >
void estimateProcessBoundary (const IntersectionType &intersection, const ElementType &inside, const LocalFunctionType &uInside)
 Compute the jump contribution to the estimator on process-boundaries. More...
 
template<bool conforming, class LocalFunctionType >
void estimateProcessBoundary (const IntersectionType &intersection, const ElementType &inside, const LocalFunctionType &uInside)
 Helper function for estimateProcessBoundary() in order to distinguish between conforming and non-conforming intersection (only that we could not use non-conforming intersection anyway).
 
template<class LocalFunctionType >
void estimateBoundary (const IntersectionType &intersection, const ElementType &inside, const LocalFunctionType &uLocal, bool isNeumann, bool isRobin)
 caclulate error over a boundary segment; yields zero for Dirichlet boundary values, otherwise computes More...
 

Detailed Description

template<class OldSolutionFunction, class TimeProvider, class ImplicitModel, class ExplicitModel>
class Dune::ACFem::ParabolicEulerEstimator< OldSolutionFunction, TimeProvider, ImplicitModel, ExplicitModel >

Residual estimator for the heat equation.

For the moment we clone the code from ellipticestimator.hh because this is easier at the moment. To re-use the elliptic estimator we would have to wrap explicitModel.fluxDivergence() into a grid-function and use that to define a modified RHS.

The code is somewhat inefficient in order to arrive at some working code. The code complete ignores any boundary information which might be present in the explicitModel. Neumann and Robin boundary contributions are only computed with the implicit model.

Also: the old and current discrete solutions are (at least ...) evaluated twice.

This is an L2-error-estimator, just like implemented in ALBERTA. Note that the estimator will only work for the implicit Euler scheme, it will not be efficient for higher order time discretizations.

Bug:
The estimator reuses code from the EllipticErrorEstimator. We should somehow try to find some common base class for this.

Member Function Documentation

◆ estimateBoundary()

template<class OldSolutionFunction , class TimeProvider , class ImplicitModel , class ExplicitModel >
template<class LocalFunctionType >
void Dune::ACFem::ParabolicEulerEstimator< OldSolutionFunction, TimeProvider, ImplicitModel, ExplicitModel >::estimateBoundary ( const IntersectionType &  intersection,
const ElementType &  inside,
const LocalFunctionType &  uLocal,
bool  isNeumann,
bool  isRobin 
)
inlineprotected

caclulate error over a boundary segment; yields zero for Dirichlet boundary values, otherwise computes

\[ h\,||\nu\cdot(A\,\nabla u) + \alpha\,u - g_N||ˆ2 \]

Referenced by Dune::ACFem::ParabolicEulerEstimator< OldSolutionFunction, TimeProvider, ImplicitModel, ExplicitModel >::estimateLocal().

◆ estimateProcessBoundary()

template<class OldSolutionFunction , class TimeProvider , class ImplicitModel , class ExplicitModel >
template<class LocalFunctionType >
void Dune::ACFem::ParabolicEulerEstimator< OldSolutionFunction, TimeProvider, ImplicitModel, ExplicitModel >::estimateProcessBoundary ( const IntersectionType &  intersection,
const ElementType &  inside,
const LocalFunctionType &  uInside 
)
inlineprotected

Compute the jump contribution to the estimator on process-boundaries.

Note
This is like estimateIntersection but can only compute one half of the estimate as
  • we currently only live on the InteriorBorderPartition
  • according to Robert K. ghost entities are still buggy for conforming meshes

In principle this is quite crappy in terms of code maintainabilitz because we have to duplicate the code for the computation of the jumps. Sad story.

Referenced by Dune::ACFem::ParabolicEulerEstimator< OldSolutionFunction, TimeProvider, ImplicitModel, ExplicitModel >::estimateLocal().


The documentation for this class was generated from the following file:
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.111.3 (Nov 12, 23:30, 2024)