DUNE-ACFEM (unstable)
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
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
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
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
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.
