DUNE-ACFEM (unstable)

dependson.hh
1#ifndef __DUNE_ACFEM_TENSORS_OPERATIONS_DEPENDSON_HH__
2#define __DUNE_ACFEM_TENSORS_OPERATIONS_DEPENDSON_HH__
3
4#include "../../expressions/examine.hh"
5#include "derivative.hh"
6
7namespace Dune {
8
9 namespace ACFem {
10
11 namespace Tensor {
12
16 template<class T, class Id, class Signature, class SFINAE = void>
18 : FalseType
19 {};
20
24 template<class T, std::size_t Id, class Signature>
26 T, IndexConstant<Id>, Signature,
27 std::enable_if_t<(!IndeterminateMatch<T, IndexConstant<Id> >::value
28 && !IsPlaceholderExpression<T>::value
29 )> >
30 : FalseType
31 {};
32
33 template<class T, std::size_t Id, class Signature>
34 struct TerminalDependsOn<
35 T, IndexConstant<Id>, Signature,
36 std::enable_if_t<(IndeterminateMatch<T, IndexConstant<Id> >::value
37 || (IsPlaceholderExpression<T>::value
38 &&
39 !ExpressionTraits<decltype(doDerivative<Id, Signature>(std::declval<T>(), PriorityTag<42>{}))>::isZero)
40 )> >
41 : TrueType
42 {};
43
47 template<std::size_t Id, class Signature, class T>
48 using DependsOn = Expressions::ExamineOr<T, TerminalDependsOn, IndexConstant<Id>, Signature>;
49
50 template<class X, class T>
51 constexpr auto dependsOn(X&& x, T&& t)
52 {
53 using XType = EnclosedType<X>;
54 constexpr std::size_t id = IndeterminateTraits<XType>::id_;
55 using Signature = typename TensorTraits<XType>::Signature;
56
57 return DependsOn<id, Signature, T>{};
58 }
59
60 } // NS Tensor
61
62 } // NS Tensor
63
64} // NS Dune
65
66#endif // __DUNE_ACFEM_TENSORS_OPERATIONS_DEPENDSON_HH__
Constant< std::size_t, V > IndexConstant
Short-cut for integral constant of type std::size_t.
Definition: types.hh:44
BoolConstant< false > FalseType
Alias for std::false_type.
Definition: types.hh:110
BoolConstant< true > TrueType
Alias for std::true_type.
Definition: types.hh:107
STL namespace.
Definition: dependson.hh:19
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden & Uni Heidelberg  |  generated with Hugo v0.111.3 (Sep 4, 22:38, 2025)