DUNE-ACFEM (2.5.1)

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

A class defining an elliptic operator. More...

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

Public Member Functions

 EllipticOperator (const OperatorPartsType &parts, const ConstraintsOperatorType &constraints=ConstraintsOperatorType())
 contructor
 
virtual void operator() (const DomainFunctionType &u, RangeFunctionType &w) const
 application operator, works "on the fly"
 
virtual bool symmetric () const
 linear operator interface
 

Detailed Description

template<class OperatorParts, class DomainFunction, class RangeFunction = DomainFunction, class Constraints = EmptyBlockConstraints<RangeFunction>, template< class > class QuadratureTraits = DefaultQuadratureTraits>
class Dune::ACFem::EllipticOperator< OperatorParts, 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.

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 27, 22:29, 2024)