DUNE-ACFEM (unstable)

Dune::ACFem::ModelIntrospection::Traits< Model, std::enable_if_t< IsModel< Model >::value &&IsDecay< Model >::value > > Struct Template Reference

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

template<class Model >
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

template<class Model >
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:
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.80.0 (May 2, 22:35, 2024)