DUNE-ACFEM (unstable)

Dune::ACFem::PDEModel::UnaryModelExpression< F, Model, IndexSequence< tag... >, Signatures > Class Template Reference

Index-pack expansion helper and actual implementation. More...

#include <dune/acfem/models/unaryexpression.hh>

+ Collaboration diagram for Dune::ACFem::PDEModel::UnaryModelExpression< F, Model, IndexSequence< tag... >, Signatures >:

Public Member Functions

template<class ModelArg , class FArg , std::enable_if_t< std::is_constructible< StorageType, FArg, ModelArg >::value, int > = 0>
 UnaryModelExpression (ModelArg &&model, FArg &&f)
 Constructor from given model and operation. More...
 
 UnaryModelExpression (const UnaryModelExpression &other)
 Copy constructor. More...
 
 UnaryModelExpression (UnaryModelExpression &&other)
 Move constructor. More...
 
template<class T , std::enable_if_t<(Expressions::EmitByValueV< T > &&std::is_same< T, ModelDecay >::value &&(IsIdentityOperation< OperationType >::value||IsClosureOperation< OperationType >::value)), int > = 0>
 operator T () const
 Type-cast to underlying model.
 
template<class T , std::enable_if_t<(!Expressions::EmitByValueV< T > &&std::is_same< T, ModelDecay >::value &&(IsIdentityOperation< OperationType >::value||IsClosureOperation< OperationType >::value)), int > = 0>
 operator T () &&
 Type-cast to underlying model.
 
template<class T , std::enable_if_t<(!Expressions::EmitByValueV< T > &&std::is_same< T, ModelDecay >::value &&(IsIdentityOperation< OperationType >::value||IsClosureOperation< OperationType >::value)), int > = 0>
 operator T& () &
 Type-cast to underlying model.
 
template<class T , std::enable_if_t<(!Expressions::EmitByValueV< T > &&std::is_same< T, ModelDecay >::value &&(IsIdentityOperation< OperationType >::value||IsClosureOperation< OperationType >::value)), int > = 0>
 operator const T & () const &
 Type-cast to underlying model.
 
template<std::size_t I, std::enable_if_t<!emitByValue_< I >, int > = 0>
OperandType< I > && operand (IndexConstant< I >=IndexConstant< I >{}) &&
 Return one of the stored operands in an rvalue context. More...
 
template<std::size_t I, std::enable_if_t<!emitByValue_< I >, int > = 0>
decltype(auto) operand (IndexConstant< I >=IndexConstant< I >{}) &
 Return one of the stored operands in a mutable reference context. More...
 
template<std::size_t I, std::enable_if_t<!emitByValue_< I >, int > = 0>
decltype(auto) operand (IndexConstant< I >=IndexConstant< I >{}) const &
 Return one of the stored operands in a const reference context. More...
 

Static Public Attributes

template<std::size_t I>
static constexpr bool emitByValue_ = EmitByValueV<OperandType<I> >
 Force some things to always be emitted as non-references.
 

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 = std::decay_t< Model >::RangeFunctionSpaceType
 The type returned by classifyBoundary().
 
using DomainFunctionSpaceType = std::decay_t< Model >::DomainFunctionSpaceType
 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().
 
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

template<class F, class Model, std::size_t... tag, class Signatures>
class Dune::ACFem::PDEModel::UnaryModelExpression< F, Model, IndexSequence< tag... >, Signatures >

Index-pack expansion helper and actual implementation.

Constructor & Destructor Documentation

◆ UnaryModelExpression() [1/3]

template<class F , class Model , std::size_t... tag, class Signatures >
template<class ModelArg , class FArg , std::enable_if_t< std::is_constructible< StorageType, FArg, ModelArg >::value, int > = 0>
Dune::ACFem::PDEModel::UnaryModelExpression< F, Model, IndexSequence< tag... >, Signatures >::UnaryModelExpression ( ModelArg &&  model,
FArg &&  f 
)
inline

Constructor from given model and operation.

Parameters
[in]modelThe model to operator on.
[in]fThe functor to apply to the model. The functor type defaults to OperationTraits<IdentityOperation> and the value for f defaults to the default-construction of the functor which need not exist. In the latter case a properly constructed functor object has to be passed to the constructor.

◆ UnaryModelExpression() [2/3]

template<class F , class Model , std::size_t... tag, class Signatures >
Dune::ACFem::PDEModel::UnaryModelExpression< F, Model, IndexSequence< tag... >, Signatures >::UnaryModelExpression ( const UnaryModelExpression< F, Model, IndexSequence< tag... >, Signatures > &  other)
inline

Copy constructor.

Copy model and functor from other and reconstruct the "method-providers".

◆ UnaryModelExpression() [3/3]

template<class F , class Model , std::size_t... tag, class Signatures >
Dune::ACFem::PDEModel::UnaryModelExpression< F, Model, IndexSequence< tag... >, Signatures >::UnaryModelExpression ( UnaryModelExpression< F, Model, IndexSequence< tag... >, Signatures > &&  other)
inline

Move constructor.

Move model and functor from other and reconstruct the "method-providers".

Member Function Documentation

◆ operand() [1/3]

template<class F , class... T>
template<std::size_t I, std::enable_if_t<!emitByValue_< I >, int > = 0>
decltype(auto) Dune::ACFem::Expressions::Storage< F, T >::operand ( IndexConstant< I >  = IndexConstant<I>{}) &
inlineinherited

Return one of the stored operands in a mutable reference context.

In this case we assume that it is safe to return a reference as the storage container should be alive in a real object.

As a special exception operands for which IsTypedValue evaluates to std::true_type are always returned as copy. It is assumed that those do not contain any runtime information.

◆ operand() [2/3]

template<class F , class... T>
template<std::size_t I, std::enable_if_t<!emitByValue_< I >, int > = 0>
OperandType<I>&& Dune::ACFem::Expressions::Storage< F, T >::operand ( IndexConstant< I >  = IndexConstant<I>{}) &&
inlineinherited

Return one of the stored operands in an rvalue context.

In this case exactly the contained type is returned, i.e. a copy for objects or a reference for references.

As a special exception operands for which IsTypedValue evaluates to std::true_type are always returned as copy. It is assumed that those do not contain any runtime information.

◆ operand() [3/3]

template<class F , class... T>
template<std::size_t I, std::enable_if_t<!emitByValue_< I >, int > = 0>
decltype(auto) Dune::ACFem::Expressions::Storage< F, T >::operand ( IndexConstant< I >  = IndexConstant<I>{}) const &
inlineinherited

Return one of the stored operands in a const reference context.

In this case we assume that it is safe to return a reference as the storage container should be alive in a real object.

As a special exception operands for which IsTypedValue evaluates to std::true_type are always returned as copy. It is assumed that those do not contain any runtime information.

Member Data Documentation

◆ domainDimRange

constexpr int Dune::ACFem::ModelBase< std::decay_t< Model >::DomainFunctionSpaceType , std::decay_t< Model >::RangeFunctionSpaceType >::domainDimRange
staticconstexprinherited

◆ rangeDimRange

constexpr int Dune::ACFem::ModelBase< std::decay_t< Model >::DomainFunctionSpaceType , std::decay_t< Model >::RangeFunctionSpaceType >::rangeDimRange
staticconstexprinherited

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 (May 16, 22:29, 2024)