DUNE-ACFEM (unstable)
A class defining an elliptic operator. More...
#include <dune/acfem/operators/ellipticoperator.hh>
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
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
\[ \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] DiscreteFunction The underlying discrete function space. [in] Model A 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] Constraints A 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
|
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]
|
inline |
Constructor including constraints.
- Parameters
-
[in] model The PDE-model. The operator stores a copy of the model (not a reference). [in] constraints The 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]
|
inline |
Constructor excluding constraints.
- Parameters
-
[in] model The 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:
- dune/acfem/operators/ellipticoperator.hh