15#ifndef dealii_tensor_accessors_h
16#define dealii_tensor_accessors_h
76 template <
int index,
int rank,
typename T>
78 template <
int position,
int rank>
80 template <
int no_contr,
int rank_1,
int rank_2,
int dim>
82 template <
int rank_1,
int rank_2,
int dim>
103 template <
typename T>
109 template <
typename T>
115 template <
typename T, std::
size_t N>
121 template <
typename T, std::
size_t N>
135 template <
int deref_steps,
typename T>
143 template <
typename T>
187 template <
int index,
int rank,
typename T>
191 static_assert(0 <= index && index < rank,
192 "The specified index must lie within the range [0,rank)");
219 template <
int rank,
typename T,
typename ArrayType>
266 template <
int no_contr,
274 contract(T1 &result,
const T2 &left,
const T3 &right)
276 static_assert(rank_1 >= no_contr,
277 "The rank of the left tensor must be "
278 "equal or greater than the number of "
280 static_assert(rank_2 >= no_contr,
281 "The rank of the right tensor must be "
282 "equal or greater than the number of "
286 template contract<T1, T2, T3>(result, left, right);
318 template <
int rank_1,
326 contract3(
const T2 &left,
const T3 &middle,
const T4 &right)
329 template contract3<T1, T2, T3, T4>(left, middle, right);
339 template <
int rank,
typename S>
341 template <
typename T>
343 template <
int no_contr,
int dim>
355 template <
typename T>
361 template <
int rank,
typename S>
367 template <
int index,
int rank,
typename T>
402 template <
int index,
int rank,
typename T>
436 template <
int rank,
typename T>
459 template <
typename T>
485 template <
typename T>
513 template <
int rank,
typename S>
536 return s_.apply(j)[
i_];
548 template <
typename S>
564 return s_.apply(j)[
i_];
580 template <
int position,
int rank>
583 template <
typename T,
typename ArrayType>
584 constexpr static typename ReturnType<rank - position, T>::value_type &
589 ArrayType>(t[indices[position]], indices);
598 template <
typename T,
typename ArrayType>
622 template <
int no_contr,
int rank_1,
int rank_2,
int dim>
626 template <
typename T1,
typename T2,
typename T3>
628 contract(T1 &result,
const T2 &left,
const T3 &right)
630 for (
unsigned int i = 0; i < dim; ++i)
652 template <
int no_contr,
int rank_2,
int dim>
656 template <
typename T1,
typename T2,
typename T3>
658 contract(T1 &result,
const T2 &left,
const T3 &right)
660 for (
unsigned int i = 0; i < dim; ++i)
682 template <
int no_contr,
int dim>
686 template <
typename T1,
typename T2,
typename T3>
688 contract(T1 &result,
const T2 &left,
const T3 &right)
698 template <
int no_contr,
int dim>
702 template <
typename T1,
typename T2,
typename T3>
716 Contract2<no_contr - 1, dim>::template contract2<T1>(left[0],
718 for (
unsigned int i = 1; i < dim; ++i)
734 template <
typename T1,
typename T2,
typename T3>
757 template <
int rank_1,
int rank_2,
int dim>
761 template <
typename T1,
typename T2,
typename T3,
typename T4>
762 constexpr static inline T1
763 contract3(
const T2 &left,
const T3 &middle,
const T4 &right)
768 for (
unsigned int i = 0; i < dim; ++i)
770 left[i], middle[i], right);
787 template <
int rank_2,
int dim>
791 template <
typename T1,
typename T2,
typename T3,
typename T4>
792 constexpr static inline T1
793 contract3(
const T2 &left,
const T3 &middle,
const T4 &right)
798 for (
unsigned int i = 0; i < dim; ++i)
814 template <
typename T1,
typename T2,
typename T3,
typename T4>
816 contract3(
const T2 &left,
const T3 &middle,
const T4 &right)
818 return left * middle * right;
static constexpr T1 contract2(const T2 &left, const T3 &right)
static constexpr T1 contract2(const T2 &left, const T3 &right)
static constexpr T1 contract3(const T2 &left, const T3 &middle, const T4 &right)
static constexpr T1 contract3(const T2 &left, const T3 &middle, const T4 &right)
static constexpr T1 contract3(const T2 &left, const T3 &middle, const T4 &right)
static constexpr void contract(T1 &result, const T2 &left, const T3 &right)
static constexpr void contract(T1 &result, const T2 &left, const T3 &right)
static constexpr void contract(T1 &result, const T2 &left, const T3 &right)
constexpr ReferenceType< return_type >::type apply(unsigned int j) const
constexpr Identity(typename ReferenceType< T >::type t)
typename ValueType< T >::value_type return_type
ReferenceType< T >::type t_
ReferenceType< T >::type t_
typename ReferenceType< typename ValueType< T >::value_type >::type value_type
constexpr value_type operator[](unsigned int j) const
constexpr ReorderedIndexView(typename ReferenceType< T >::type t)
constexpr value_type operator[](unsigned int j) const
ReferenceType< T >::type t_
constexpr ReorderedIndexView(typename ReferenceType< T >::type t)
ReorderedIndexView< index - 1, rank - 1, typename ValueType< T >::value_type > value_type
ReferenceType< T >::type t_
constexpr value_type operator[](unsigned int j) const
constexpr ReorderedIndexView(typename ReferenceType< T >::type t)
constexpr StoreIndex(S s, int i)
constexpr return_type & operator[](unsigned int j) const
typename ValueType< typename S::return_type >::value_type return_type
typename ValueType< typename S::return_type >::value_type return_type
constexpr StoreIndex(S s, int i)
constexpr value_type operator[](unsigned int j) const
StoreIndex< rank - 1, StoreIndex< rank, S > > value_type
constexpr ReferenceType< return_type >::type apply(unsigned int j) const
#define DEAL_II_ALWAYS_INLINE
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
constexpr ReturnType< rank, T >::value_type & extract(T &t, const ArrayType &indices)
constexpr internal::ReorderedIndexView< index, rank, T > reordered_index_view(T &t)
constexpr void contract(T1 &result, const T2 &left, const T3 &right)
constexpr T1 contract3(const T2 &left, const T3 &middle, const T4 &right)
typename ReturnType< deref_steps - 1, typename ValueType< T >::value_type >::value_type value_type
const typename T::value_type value_type
typename T::value_type value_type
static constexpr const T & value(const T &t)