DUNE-ACFEM (unstable)

Dune::ACFem::EllipticOperator< Model, DomainFunction, RangeFunction, Constraints, QuadratureTraits > Class Template Reference

A class defining an elliptic operator. More...

#include <dune/acfem/operators/ellipticoperator.hh>

+ Collaboration diagram for Dune::ACFem::EllipticOperator< Model, DomainFunction, RangeFunction, Constraints, QuadratureTraits >:

Public Types

using DiscreteFunctionType = RangeFunctionType
 Alias for the range function type which is required to be a discrete function in order to provide storage for the coefficients of the result functional (in the dual basis of the underlying space).
 

Public Member Functions

template<class ConstraintsArg , std::enable_if_t< std::is_constructible< Constraints, ConstraintsArg >::value, int > = 0>
 EllipticOperator (const ModelType &model, ConstraintsArg &&constraints)
 Constructor including constraints. More...
 
 EllipticOperator (const ModelType &model)
 Constructor excluding constraints. More...
 
virtual void operator() (const DomainFunctionType &u, RangeFunctionType &w) const
 application operator, works "on the fly" More...
 
virtual bool symmetric () const
 linear operator interface
 

Protected Types

QuadratureTraits

Fetch the various quadrature type.

QuadratureTraits may provide a lumping quadrature in order to allow for mass-lumping.

typedef QuadratureTraits< GridPartType > QuadratureTraitsType
 Use IntersectionQuadrature to create appropriate face quadratures.
 
typedef QuadratureTraitsType::BulkQuadratureType QuadratureType
 Use IntersectionQuadrature to create appropriate face quadratures.
 
typedef QuadratureTraitsType::BulkMassQuadratureType MassQuadratureType
 Use IntersectionQuadrature to create appropriate face quadratures.
 
typedef QuadratureTraitsType::FaceQuadratureType FaceQuadratureType
 Use IntersectionQuadrature to create appropriate face quadratures.
 
typedef QuadratureTraitsType::FaceMassQuadratureType FaceMassQuadratureType
 Use IntersectionQuadrature to create appropriate face quadratures.
 
template<bool conforming>
using IntersectionQuadrature = typename QuadratureTraitsType::template IntersectionQuadrature< conforming >
 Use IntersectionQuadrature to create appropriate face quadratures.
 
typedef IntersectionQuadrature< true > BndryQuadratureType
 
typedef QuadratureTraitsType::template IntersectionMassQuadrature< true > BndryMassQuadratureType
 Use IntersectionQuadrature to create appropriate face quadratures.
 

Detailed Description

template<class Model, class DomainFunction, class RangeFunction = DomainFunction, class Constraints = EmptyBlockConstraints<typename RangeFunction::DiscreteFuncionSpaceType>, template< class GridPart > class QuadratureTraits = DefaultQuadratureTraits>
class Dune::ACFem::EllipticOperator< Model, DomainFunction, RangeFunction, Constraints, QuadratureTraits >

A class defining an elliptic operator.

A class defining an elliptic differential operator \(\Phi\) of second order of the following type:

\[ \Phi: g+X \rightarrow X^\ast: u\mapsto \Phi(u). \]

\(\Phi\) – in general – maps an affine linear space (e.g. shifted by Dirichlet boundary values) to the dual of the attached vector space. The idea is that one always – also for linear problems – searches for zeros of \(\Phi\), i.e. the goal is

Find \(u\in g+X\) with \(\Phi(u) = 0\in X^\ast\).

The strong and weak form of the problem class this construct is intended for reads then

The ModelInterface defines all the different parts needed to compute the weak form of a second order elliptic operator of the form

\[ \begin{split} -\nabla\cdot (A(x, u, \nabla u)\,\nabla u) + \nabla\cdot(b(x, u)\,u) + c(x, u)\,u &= f(x) + \Psi\quad \text{ in }\Omega,\\ u &= g_D \text{ on }\Gamma_D,\\ (A(x, u, \nabla u)\nabla u)\cdot\nu + \alpha(x, u)\,u &= g_N \text{ on }\Gamma_R,\\ (A(x, u, \nabla u)\nabla u)\cdot\nu &= g_N \text{ on }\Gamma_N,\\ \end{split} \]

In particular, \(\Psi\in H^{-1}\) models a functional, \(f\in L^2\) is the usual "right hand side".

The methods in this class provide all factors of the integrands not involving test functions. The multiplication by the test-functions is added in the class EllipticOperator. The weak formulation then reads:

\[ \int_\Omega (A(x,u,\nabla u)\,\nabla u)\cdot\nabla\phi\,dx + \int_\Omega (\nabla\cdot(b(x, u)\,u) + c(x, u)\,u)\,\phi\,dx + \int_{\Gamma_R} \alpha(x, u)\,u\,\phi\,do - \int_{\Gamma_N} g_N\,\phi\,do - \int_\Omega f(x)\,\phi\,dx - \langle\Psi,\,\phi\rangle = 0. \]

As the ModelInterface is potentially non-linear one has the option to leave the ModelInterface::BulkForcesFunctionType and ModelInterface::NeumannBoundaryFunctionType at zero and instead stuff the "right-hand-side" functions into the ModelInterface::robinFlux() and ModelInterface::source() methods. In principle even the functional \(\Psi\) could be expressed by a \(L^2\) scalar-product (don't shout at me: as the FEM-space is finite dimensional this is of course possible and one way to implement such a functional).

Nevertheless the different forces and other right-hand-side components are there and will be used by EllipticFemScheme and ParabolicFemScheme. Generally, the implementation checks for zero-objects (see ZeroExpression, ZeroGridFunction, ZeroFunctional, ZeroModel); the decision about which component has to be taken into account is taken at compile-time.

Parameters
[in]DiscreteFunctionThe underlying discrete function space.
[in]ModelA class defining the differential operator. See class ModelInterface for the interface definition. The module Model Building Blocks provides some standard models which can be chained together by means of expression-templates in natural notation. EllipticModel contains an implementation based on dynamic polymorphism; it is meant for demonstration purposes only.
[in]ConstraintsA class modelling the affine shift, for example by interpolating Dirichlet values into the DOFs belonging to the boundary. How this is done is left to the constraints-implementation. See BlockConstraintsOperatorInterface and DirichletConstraints.
Todo:
Does not allow for mapping between different function spaces. This could become important for systems like Stokes.

Member Typedef Documentation

◆ BndryQuadratureType

template<class Model , class DomainFunction , class RangeFunction = DomainFunction, class Constraints = EmptyBlockConstraints<typename RangeFunction::DiscreteFuncionSpaceType>, template< class GridPart > class QuadratureTraits = DefaultQuadratureTraits>
typedef IntersectionQuadrature<true> Dune::ACFem::EllipticOperator< Model, DomainFunction, RangeFunction, Constraints, QuadratureTraits >::BndryQuadratureType
protected

Deifne quadratures for integration over boundary intersections which are always conforming. The quadratures for the possibly non-conforming innner intersections are generated from the template above while iterating over the intersections.

Constructor & Destructor Documentation

◆ EllipticOperator() [1/2]

template<class Model , class DomainFunction , class RangeFunction = DomainFunction, class Constraints = EmptyBlockConstraints<typename RangeFunction::DiscreteFuncionSpaceType>, template< class GridPart > class QuadratureTraits = DefaultQuadratureTraits>
template<class ConstraintsArg , std::enable_if_t< std::is_constructible< Constraints, ConstraintsArg >::value, int > = 0>
Dune::ACFem::EllipticOperator< Model, DomainFunction, RangeFunction, Constraints, QuadratureTraits >::EllipticOperator ( const ModelType &  model,
ConstraintsArg &&  constraints 
)
inline

Constructor including constraints.

Parameters
[in]modelThe PDE-model. The operator stores a copy of the model (not a reference).
[in]constraintsThe DoF-constraints which is used to nail a sub-space of the discrete range space to predefined values, e.g. to prescribe Dirichlet boundary conditions by interpolation into the boundary DoFs. The operator always only stores a reference to this object, so it may not be a temporary.

◆ EllipticOperator() [2/2]

template<class Model , class DomainFunction , class RangeFunction = DomainFunction, class Constraints = EmptyBlockConstraints<typename RangeFunction::DiscreteFuncionSpaceType>, template< class GridPart > class QuadratureTraits = DefaultQuadratureTraits>
Dune::ACFem::EllipticOperator< Model, DomainFunction, RangeFunction, Constraints, QuadratureTraits >::EllipticOperator ( const ModelType &  model)
inline

Constructor excluding constraints.

Parameters
[in]modelThe PDE-model. The operator stores a copy of the model (not a reference).

As no constraints have been specified the operator will try to allocate an instance of ConstraintsOperatorType with its default constructor.


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.80.0 (Apr 19, 22:31, 2024)