|
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...
|
|
|
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) |
|