DUNE-ACFEM (unstable)

TensorOperationTraits

Classes

struct  Dune::ACFem::Tensor::IsSubordinateTransposition< Perm, T, SFINAE >
 
struct  Dune::ACFem::Tensor::IsSubordinateTransposition< Perm, T, std::enable_if_t<(IsDecay< T >::value &&IsUnaryExpression< T >::value &&IsComponentWiseExpression< T >::value &&isPermutation(Perm{}) &&Perm::size()==TensorTraits< T >::rank)> >
 Component-wise unary operations are ok if the permutation operates on the signature. More...
 
struct  Dune::ACFem::Tensor::IsSubordinateTransposition< Perm, T, std::enable_if_t<(IsDecay< T >::value &&isPermutation(Perm{}) &&Perm::size()==TensorTraits< T >::rank &&IsEinsumExpression< T >::value)> >
 Inspect einsum expressions. More...
 
struct  Dune::ACFem::Tensor::IsSubordinateTransposition< Perm, T, std::enable_if_t<(IsDecay< T >::value &&isPermutation(Perm{}) &&Perm::size()==TensorTraits< T >::rank &&IsTensorProductExpression< T >::value)> >
 Inspect product expressions. More...
 
struct  Dune::ACFem::Tensor::TranspositionForOperandHelper< N, Perm, T, SFINAE >
 Construct the induced transposition for operand N if Perm is subordinate to the expression structure of T. More...
 
struct  Dune::ACFem::Tensor::TranspositionForOperandHelper< N, PermArg, T, std::enable_if_t<(IsSubordinateTransposition< PermArg, T >::value &&IsEinsumExpression< T >::value &&(N< Arity< T >::value))> >
 
struct  Dune::ACFem::Tensor::TranspositionForOperandHelper< N, Perm, T, std::enable_if_t<(IsSubordinateTransposition< Perm, T >::value &&IsTensorProductExpression< T >::value &&(N< Arity< T >::value))> >
 
struct  Dune::ACFem::Tensor::IsSelfTransposed< Perm, T, std::enable_if_t<(IsDecay< Perm >::value &&IsDecay< T >::value &&IsTensorOperand< T >::value &&isSimple(Perm{}))> >
 Ignore do-nothing permutations. More...
 
struct  Dune::ACFem::Tensor::IsSelfTransposed< Perm, ConstantTensor< F, Dims >, std::enable_if_t<(!isSimple(Perm{}) &&isInvariant(Dims{}, Perm{}))> >
 Don't transpose constant tensors if their dimenensions are invariant under the permutation. More...
 
struct  Dune::ACFem::Tensor::IsSelfTransposed< Perm, Eye< Dims, F >, std::enable_if_t<(!isSimple(Perm{}) &&isInvariant(Dims{}, Perm{}))> >
 Don't transpose eye tensors if their dimensions are invariant under the permutation. More...
 
struct  Dune::ACFem::Tensor::IsSelfTransposed< Seq< Perm... >, BlockEye< Rank, Dims, Field >, std::enable_if_t<(!isSimple(Seq< Perm... >{}) &&std::is_same< SequenceProd< Rank, MakeIndexSequence< Dims::size()> >, Seq< Get< Perm, SequenceProd< Rank, MakeIndexSequence< Dims::size()> > >::value... > >::value)> >
 Don't transpose constant tensors if their dimenensions are invariant under the permutation. More...
 
struct  Dune::ACFem::Tensor::IsSelfTransposed< Perm, KroneckerDelta< Dims, Index, Field >, std::enable_if_t<(!isSimple(Perm{}) &&isInvariant(Dims{}, Perm{}) &&isInvariant(Index{}, Perm{}))> >
 Don't transpose constant tensors. More...
 
struct  Dune::ACFem::Tensor::IsSelfTransposed< Perm, T, std::enable_if_t<(IsDecay< Perm >::value &&IsDecay< T >::value &&!isSimple(Perm{}) &&IsProductExpression< T >::value &&((TensorTraits< Expressions::Operand< 0, T > >::rank==0 &&HasSelfTransposedOperand< Perm, 1, T >::value)||(TensorTraits< Expressions::Operand< 1, T > >::rank==0 &&HasSelfTransposedOperand< Perm, 0, T >::value)))> >
 Products of scalars with self-transposed tensors remain self-transposed. More...
 
struct  Dune::ACFem::Tensor::IsSelfTransposed< Perm, T, std::enable_if_t<(IsDecay< Perm >::value &&IsDecay< T >::value &&!isSimple(Perm{}) &&IsBinaryExpression< T >::value &&IsComponentWiseExpression< T >::value &&HasSelfTransposedOperand< Perm, 0, T >::value &&HasSelfTransposedOperand< Perm, 1, T >::value)> >
 Sums- and differences of self-transposed tensors remain self-transposed. More...
 
struct  Dune::ACFem::Tensor::IsSelfTransposed< Perm, T, std::enable_if_t<(IsDecay< Perm >::value &&IsDecay< T >::value &&!isSimple(Perm{}) &&IsProductExpression< T >::value &&(TensorTraits< Expressions::Operand< 0, T > >::rank > 0 &&TensorTraits< Expressions::Operand< 1, T > >::rank > 0) &&HasSelfTransposedOperand< TranspositionForOperand< 0, Perm, T >, 0, T >::value &&HasSelfTransposedOperand< TranspositionForOperand< 1, Perm, T >, 1, T >::value)> >
 Products (ProductTensor, EinsteinSummation) are selftransposed if the permutation respects the product structure and the arguments are self-transposed with respect to the induced permutation. More...
 
struct  Dune::ACFem::Tensor::IsSelfTransposed< Perm, T, std::enable_if_t<(IsDecay< Perm >::value &&IsDecay< T >::value &&!isSimple(Perm{}) &&IsUnaryExpression< T >::value &&IsComponentWiseExpression< T >::value &&HasSelfTransposedOperand< Perm, 0, T >::value)> >
 Unary operations acting componentwise do not alter the self-transposedness. More...
 
struct  Dune::ACFem::Tensor::IsSelfTransposed< Perm, T, std::enable_if_t<(IsDecay< Perm >::value &&IsDecay< T >::value &&!isSimple(Perm{}) &&IsEinsumExpression< T >::value &&IsRuntimeEqualExpression< Operand< 0, T > >::value &&IsRuntimeEqualExpression< Operand< 1, T > >::value &&std::is_same< std::decay_t< Operand< 0, T > >, std::decay_t< Operand< 1, T > > >::value &&std::is_same< typename T::LeftIndexPositions, typename T::RightIndexPositions >::value &&std::is_same< Perm, SequenceCat< typename T::RightArgs, typename T::LeftArgs > >::value)> >
 Einsum operations over the same set of indices of identical tensors are self-transposed when exchanging the complete index set. More...
 

TranspositionTraits

template<std::size_t N, class Perm , class T >
using Dune::ACFem::Tensor::TranspositionForOperand = typename TranspositionForOperandHelper< N, Perm, T >::Type
 
template<std::size_t P0, std::size_t P1, std::size_t... RestPos, class T >
constexpr bool Dune::ACFem::Tensor::isSelfTransposed (T &&t, Seq< P0, P1, RestPos... >=Seq< P0, P1, RestPos... >{})
 
template<class T >
constexpr bool Dune::ACFem::Tensor::isSelfTransposed (T &&t)
 

Detailed Description

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