DUNE-ACFEM (unstable)
The p-Laplacian-model. More...
#include <dune/acfem/models/modules/plaplacianmodel.hh>
Public Member Functions | |
auto | flux (const JacobianRangeType &jacobian) const |
Evaluate \(A(x, u)\nabla u(x)\) in local coordinates. More... | |
auto | linearizedFlux (const JacobianRangeType &DuBar, const JacobianRangeType &jacobian) const |
Evaluate the linearized flux in local coordinates. More... | |
auto | fluxDivergence (const JacobianRangeType &jacobian, const HessianRangeType &hessian) const |
Compute the point-wise value of the flux-part of the operator, meaning the part of the differential operator which is multiplied by the derivative of the test function. More... | |
FunctionSpaceTypes | |
Forward some basic type from the supplied function-spaces to the model class. Note that FunctionSpace is defined as a shortcut for RangeFunctionSpace in order to simplify the common case DomainFunctionSpace == RangeFunctionSpace. | |
using | HessianRangeSelector = typename std::conditional< std::is_convertible< typename FunctionSpace::RangeType, typename FunctionSpace::HessianRangeType >::value, Fem::ExplicitFieldVector< typename FunctionSpace::HessianRangeType::value_type, FunctionSpace::dimRange >, typename FunctionSpace::HessianRangeType >::type |
The type returned by classifyBoundary(). | |
using | RangeFunctionSpaceType = FunctionSpace |
The type returned by classifyBoundary(). | |
using | DomainFunctionSpaceType = FunctionSpace |
The type returned by classifyBoundary(). | |
using | FunctionSpaceType = RangeFunctionSpaceType |
The type returned by classifyBoundary(). | |
using | DomainType = typename FunctionSpaceType::DomainType |
The type returned by classifyBoundary(). | |
using | RangeType = typename FunctionSpaceType::RangeType |
The type returned by classifyBoundary(). | |
using | JacobianRangeType = typename FunctionSpaceType::JacobianRangeType |
The type returned by classifyBoundary(). | |
using | HessianRangeType = HessianRangeSelector< FunctionSpaceType > |
The type returned by classifyBoundary(). | |
using | DomainFieldType = typename FunctionSpaceType::DomainFieldType |
The type returned by classifyBoundary(). | |
using | RangeFieldType = typename FunctionSpaceType::RangeFieldType |
The type returned by classifyBoundary(). | |
using | DomainRangeType = typename DomainFunctionSpaceType::RangeType |
The type returned by classifyBoundary(). | |
using | DomainDomainType = typename DomainFunctionSpaceType::DomainType |
The type returned by classifyBoundary(). | |
using | DomainJacobianRangeType = typename DomainFunctionSpaceType::JacobianRangeType |
The type returned by classifyBoundary(). | |
using | DomainHessianRangeType = HessianRangeSelector< DomainFunctionSpaceType > |
The type returned by classifyBoundary(). | |
using | DomainDomainFieldType = typename DomainFunctionSpaceType::DomainFieldType |
The type returned by classifyBoundary(). | |
using | DomainRangeFieldType = typename DomainFunctionSpaceType::RangeFieldType |
The type returned by classifyBoundary(). | |
using | RangeRangeType = typename RangeFunctionSpaceType::RangeType |
The type returned by classifyBoundary(). | |
using | RangeDomainType = typename RangeFunctionSpaceType::DomainType |
The type returned by classifyBoundary(). | |
using | RangeJacobianRangeType = typename RangeFunctionSpaceType::JacobianRangeType |
The type returned by classifyBoundary(). | |
using | RangeHessianRangeType = HessianRangeSelector< RangeFunctionSpaceType > |
The type returned by classifyBoundary(). | |
using | RangeDomainFieldType = typename RangeFunctionSpaceType::DomainFieldType |
The type returned by classifyBoundary(). | |
using | RangeRangeFieldType = typename RangeFunctionSpaceType::RangeFieldType |
The type returned by classifyBoundary(). | |
using | BoundaryConditionsType = std::pair< bool, std::bitset< dimRange > > |
The type returned by classifyBoundary(). | |
void | bind (const Entity &entity) |
Bind to the given entity. More... | |
void | unbind () |
Unbind from the previously bound entity. More... | |
auto | classifyBoundary (const Intersection &intersection) |
Bind to the given intersection and classify the components w.r.t. More... | |
static constexpr int | dimDomain |
The type returned by classifyBoundary(). | |
static constexpr int | dimRange |
The type returned by classifyBoundary(). | |
static constexpr int | domainDimDomain |
The type returned by classifyBoundary(). | |
static constexpr int | domainDimRange |
static constexpr int | rangeDimDomain |
The type returned by classifyBoundary(). | |
static constexpr int | rangeDimRange |
Detailed Description
class Dune::ACFem::PDEModel::P_LaplacianModel< FunctionSpace, PField >
The p-Laplacian-model.
The flux-terms has the form
\[ \int_\Omega |\nabla U|^{p-2}\,\nabla U : \nabla \phi\quad\forall \phi \]
where \(U\) is the unknown und \(ß\phi\) denotes the test functions. This is the formal first variation of the functional
\[ U\mapsto \int_\Omega |\nabla U|^p = \int_\Omega (\nabla U : \nabla U)^{p/2}. \]
FIXME: use rather the following for the vector valud case?
\[ U\mapsto \int_\Omega \sum_{i=1}^r (\nabla U_i\cdot\nabla U_i)^{p/2}. \]
The second form yields a component-wise uncoupled p-Laplacian, the first yields a coupled version. We implement here the first, but this may not be what you want.
- Bug:
- This is totally untested. Cross check before using and then remove the comment.
Member Function Documentation
◆ bind()
|
inlineinherited |
Bind to the given entity.
- Parameters
-
[in] entity The entity to bind to.
- Warning
- Calling any other method without first binding the model results in undefined behaviour.
- Models needing this method need to reimplement it. This is just here to obey the "bindable" interface of Dune::Fem.
◆ classifyBoundary()
|
inlineinherited |
Bind to the given intersection and classify the components w.r.t.
to the kind of applicable boundary conditions.
- Warning
- Note that prior to calling this function the model has to be bound to the inside entity of the given intersection. Failing to do so generates undefined behaviour.
- The result of calling the other boundary related methods without binding to an intersection is undefined.
-
If RESULT.first is
false
, then the result of calling any of the other boundary related functions is undefined. Philosophically, they should return 0 in this case, but in order to have decent performance they give a damn and just don't care. -
If RESULT.first is
true
, then still you cannot rely on user-friendly behaviour:
- only if the respective bit of RESULT.second is set to 1, then the Dirichlet value in this compoment is well-defined.
- only if the respective bit of RESULT.second is set to 0, then the Robin value in this component is well defined.
- Parameters
-
[in] intersection The intersection to bind to.
- Returns
- A tuple. First component is a
bool
which istrue
iff any of the boundary related data functions would result in non trivial results. Second component is a bitset of sizedimRange
which istrue
if the given component of the system is subject to Dirichlet boundary conditions andfalse
if it is subject to Robin or Neumann boundary conditions. Iffirst
isfalse
then the contents of the bitset is undefined.
◆ unbind()
|
inlineinherited |
Unbind from the previously bound entity.
- Warning
- Calling this method on an unbound model may cause undefined behaviour.
- Models needing this method need to reimplement it. This is just here to obey the "bindable" interface of Dune::Fem.
Member Data Documentation
◆ domainDimRange
|
staticconstexprinherited |
◆ rangeDimRange
|
staticconstexprinherited |
The documentation for this class was generated from the following file:
- dune/acfem/models/modules/plaplacianmodel.hh