DUNE-ACFEM (unstable)
Traits class extracting structural information from a given PDE-model information. More...
#include <dune/acfem/models/modeltraits.hh>
Classes | |
struct | ExistsFunctor |
Helper functor for global property. More... | |
struct | IsAffineLinearFunctor |
Helper functor for global property. More... | |
struct | IsLinearFunctor |
Helper functor for global property. More... | |
struct | IsLoadFunctor |
Helper functor for global property. More... | |
struct | IsPiecewiseConstantFunctor |
Helper functor for global property. More... | |
Public Types | |
template<class Quadrature > | |
using | AllArguments = typename BaseType::AllArguments< Model, Quadrature > |
Generate the closure tuple of all possible arguments, given quadrature point. | |
template<MethodTag tag> | |
using | FilteredSignatures = typename BaseType::FilteredSignatures< Model, tag > |
For debugging: signatures found. | |
template<MethodTag tag> | |
using | ReturnType = TupleElement< tag, BaseType::MethodReturnType< Model > > |
Generate the return type for the given method tag. | |
using | Methods = typename BaseType::ModelMethods< Model > |
The index sequence with all implemented methods. More... | |
using | MethodCallSignatures = typename BaseType::MethodCallSignatures< Model > |
The index-sequence with all determined call-signatures, can be indexed by Get<I, Methods>::value. More... | |
template<std::size_t tag> | |
using | CallSignature = Get< CheckMethodTag< tag >::value, MethodCallSignatures > |
Get the call signature for the method specified by tag. | |
template<std::size_t tag> | |
using | CallSignatureClosure = ArgumentMask<(CallSignature< tag >::value|((tag==fluxDivergence||CallSignature< tag >::value !=(std::size_t) 0) ?(std::size_t) 0 :CallSignature< LinearizedTag< tag >::value >::value))> |
Compute the closure call-signature a call to the method designated by tag, taking into account that non-linear methods are default implemented by the linearized methods. | |
template<std::size_t tag> | |
using | HasMethod = BaseType::HasMethod< Model, CheckMethodTag< tag >::value > |
Decide whether just this method exists. | |
template<std::size_t tag> | |
using | Exists = typename ExistsFunctor::template Apply< MethodTag, CheckMethodTag< tag >::value > |
Linearized or non-linearized method is implemented. | |
template<std::size_t tag> | |
using | IsLoad = typename IsLoadFunctor::template Apply< MethodTag, CheckMethodTag< tag >::value > |
Method defines only a load contribution. | |
template<std::size_t tag> | |
using | IsPiecewiseConstant = typename IsPiecewiseConstantFunctor::template Apply< MethodTag, CheckMethodTag< tag >::value > |
Method does not depend on the quadrature point. | |
template<std::size_t tag> | |
using | IsLinear = typename IsLinearFunctor::template Apply< MethodTag, CheckMethodTag< tag >::value > |
Non-linear method is not implemented. | |
template<std::size_t tag> | |
using | IsAffineLinear = typename IsAffineLinearFunctor::template Apply< MethodTag, CheckMethodTag< tag >::value > |
Linear method does not need point of linearization. | |
Static Public Attributes | |
static constexpr std::size_t | methodsMask = sequenceMask(Methods{}) |
A bit mask, bit number N set if the method corresponding to (MethodTag)N is implemented. | |
GlobalStructure | |
Flags summarizing the over-all structure of the model. | |
static constexpr bool | isAffineLinear = AccumulateSequence<LogicalAndFunctor, TransformedSequence<IsAffineLinearFunctor, Methods> >::value |
Define to true if the model is affine-linear. | |
static constexpr bool | isLinear = AccumulateSequence<LogicalAndFunctor, TransformedSequence<IsLinearFunctor, Methods> >::value |
Define to true if the model is really linear. | |
static constexpr bool | isZero = Methods::size() == 0 |
Define to true if no methods are implemented. | |
static constexpr bool | isLoad = AccumulateSequence<LogicalAndFunctor, TransformedSequence<IsLoadFunctor, Methods> >::value |
Define to true is the model is "constant" and defines only a load-contribution. | |
static constexpr bool | isPiecewiseConstant = AccumulateSequence<LogicalAndFunctor, TransformedSequence<IsPiecewiseConstantFunctor, Methods> >::value |
Define to true is the model has constant coefficients in the sense that no contribution depends on the quadrature point. | |
Detailed Description
template<class Model>
struct Dune::ACFem::ModelIntrospection::Traits< Model, std::enable_if_t< IsModel< Model >::value &&IsDecay< Model >::value > >
Traits class extracting structural information from a given PDE-model information.
The class examines certain structure flags and in particular the call signatures of the implemented models and also determines if a method is implemented at all.
Member Typedef Documentation
◆ MethodCallSignatures
using Dune::ACFem::ModelIntrospection::Traits< Model, std::enable_if_t< IsModel< Model >::value &&IsDecay< Model >::value > >::MethodCallSignatures = typename BaseType::MethodCallSignatures<Model> |
The index-sequence with all determined call-signatures, can be indexed by Get<I, Methods>::value.
The signature for unimplemented methods is the 0-mask.
◆ Methods
using Dune::ACFem::ModelIntrospection::Traits< Model, std::enable_if_t< IsModel< Model >::value &&IsDecay< Model >::value > >::Methods = typename BaseType::ModelMethods<Model> |
The index sequence with all implemented methods.
The call signature of the respective method is found by lookup into MethodCallSignatures:
Get<Get<I, Methods>::value, MethodCallSignatures>
is the call signature of the I-th implemented method. The values of the integers stored in methods are given by the MethodTag enum (flux, linearizedFlux etc.).
The documentation for this struct was generated from the following file:
- dune/acfem/models/modeltraits.hh