DUNE-ACFEM (unstable)

Dune::ACFem::ModelIntrospection Namespace Reference

Deduce methods and call-signatures from an implemented model. More...

Classes

class  ArgumentMask
 Integral constant holding an argument mask. More...
 
struct  IsModel< Model, std::enable_if_t<(IsDecay< Model >::value &&std::is_base_of< ModelBase< typename Model::DomainFunctionSpaceType, typename Model::RangeFunctionSpaceType >, Model >::value)> >
 std::true_type if Model is derived from ModelBase. More...
 
struct  Traits< Model, std::enable_if_t< IsModel< Model >::value &&IsDecay< Model >::value > >
 Traits class extracting structural information from a given PDE-model information. More...
 

Typedefs

template<MethodTag tag>
using MethodTagConstant = Constant< MethodTag, tag >
 Wrap into integral_constant in order to have a type. More...
 
template<std::size_t tag>
using CheckMethodTag = MethodTagConstant<(MethodTag) tag >
 Alias, used where we want to express that we do check the value.
 
template<std::size_t tag>
using IsLinearMethodTag = BoolConstant< CheckMethodTag< tag >::value &1 >
 Evaluate to std::true_type for tags corresponding to linear methods.
 
template<std::size_t tag>
using LinearizedTag = CheckMethodTag<(IsLinearMethodTag< tag >::value ? tag :(tag==fluxDivergence ? linearizedFlux :tag+1))>
 Compute the tag value of the respective linearized method. More...
 
template<std::size_t tag>
using NonLinearTag = CheckMethodTag<(IsLinearMethodTag< tag >::value ?(tag-1) :tag==fluxDivergence ? flux :tag)>
 Compute the tag value of the respective non-linear method. More...
 
template<MethodTag... Tags>
using MethodTagSequence = Sequence< MethodTag, Tags... >
 Sequence alias for method-tags.
 
using AllMethodTags = MakeIndexSequence< numMethodTags >
 Sequence of all supported methods.
 
template<std::size_t methods>
using NonLinearMethodsClosure = IndexConstant< sequenceMask(FilteredSequence< NonLinearClosureFunctor< methods >, AllMethodTags >{})>
 Compute a bit-mask corresponding to the "closure" of non-linear methods. More...
 
template<MethodTag tag>
using MethodSignatures = typename TraitsHelper::SupportedCallSignatures< tag >::Type
 Type alias extracting the index_sequence holding all allowed call-signatures for the given tag.
 
template<std::size_t tag>
using MethodSignatureClosure = TraitsHelper::MethodSignatureClosure< CheckMethodTag< tag >::value >
 Type alias extracting the "closure" of all supported call-signatures.
 
using MethodSignaturesClosureType = TraitsHelper::MethodSignaturesClosureType
 A sequence with the closure patterns for each method.
 
template<class Model >
using Methods = TraitsHelper::template ModelMethods< std::decay_t< Model > >
 Shortcut to the methods implemented by the model.
 
template<class Model >
using MethodCallSignatures = TraitsHelper::template MethodCallSignatures< std::decay_t< Model > >
 Shortcut the the call-signature tuple.
 

Enumerations

enum  MethodTag
 An enum in order to parametrize the call-signature introspection. More...
 
enum  ArgumentPositions
 Positions of the respective arguments inside the argument closure tuple.
 

Variables

template<class Model >
constexpr bool isZero = Methods<Model>::size() == 0
 Shortcut identifying a zero model.
 

Detailed Description

Deduce methods and call-signatures from an implemented model.

Typedef Documentation

◆ LinearizedTag

template<std::size_t tag>
using Dune::ACFem::ModelIntrospection::LinearizedTag = typedef CheckMethodTag<( IsLinearMethodTag<tag>::value ? tag : (tag == fluxDivergence ? linearizedFlux : tag+1))>

Compute the tag value of the respective linearized method.

Act as identity if the tag already corresponds to a linearized method.

◆ MethodTagConstant

template<MethodTag tag>
using Dune::ACFem::ModelIntrospection::MethodTagConstant = typedef Constant<MethodTag, tag>

Wrap into integral_constant in order to have a type.

Check also the range of the supplied value. We use std::size_t as template arguments as you cannot (without compiler warning) do arithmetic with enum values.

◆ NonLinearMethodsClosure

template<std::size_t methods>
using Dune::ACFem::ModelIntrospection::NonLinearMethodsClosure = typedef IndexConstant<sequenceMask(FilteredSequence<NonLinearClosureFunctor<methods>, AllMethodTags>{})>

Compute a bit-mask corresponding to the "closure" of non-linear methods.

This means a bit is set if either the non-linear method or the linearized method is implemented as the latter is the default implementation for the non-linear method.

◆ NonLinearTag

template<std::size_t tag>
using Dune::ACFem::ModelIntrospection::NonLinearTag = typedef CheckMethodTag<(IsLinearMethodTag<tag>::value ? (tag-1) : tag == fluxDivergence ? flux : tag)>

Compute the tag value of the respective non-linear method.

Act as identity if the tag already corresponds to a non-linear method.

Enumeration Type Documentation

◆ MethodTag

An enum in order to parametrize the call-signature introspection.

One value for each method. Finally all introspections are defined in one call by expanding an index-sequence.

Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.80.0 (Apr 19, 22:31, 2024)