SpECTRE  v2024.03.19
TensorMetafunctions Namespace Reference

Contains all metafunctions related to Tensor manipulations. More...

Classes

struct  replace_frame_in_tag
 Replaces Tag with an equivalent Tag but in frame NewFrame. More...
 
struct  replace_frame_in_tag< ::Tags::deriv< Tag< DataType, Dim, Frame >, tmpl::size_t< Dim >, Frame >, NewFrame >
 
struct  replace_frame_in_tag< Tag< DataType >, NewFrame >
 
struct  replace_frame_in_tag< Tag< DataType, Dim, Frame >, NewFrame >
 

Typedefs

template<typename Symm , typename... IndexPack>
using check_index_symmetry = typename detail::check_index_symmetry_impl< tmpl::size< Symm >::value==0 or tmpl::size< Symm >::value==1 ? 0 :2 >::template f< Symm, tmpl::map<>, IndexPack... >
 Check that each of symmetric indices is in the same frame and have the same dimensionality.
 
template<typename Tensor , std::size_t VolumeDim, UpLo Ul, typename Fr = Frame::Grid>
using prepend_spatial_index = ::Tensor< typename Tensor::type, tmpl::push_front< typename Tensor::symmetry, tmpl::int32_t< 1+tmpl::fold< typename Tensor::symmetry, tmpl::int32_t< 0 >, tmpl::max< tmpl::_state, tmpl::_element > >::value > >, tmpl::push_front< typename Tensor::index_list, SpatialIndex< VolumeDim, Ul, Fr > > >
 Add a spatial index to the front of a Tensor. More...
 
template<typename Tensor , std::size_t VolumeDim, UpLo Ul, typename Fr = Frame::Grid>
using prepend_spacetime_index = ::Tensor< typename Tensor::type, tmpl::push_front< typename Tensor::symmetry, tmpl::int32_t< 1+tmpl::fold< typename Tensor::symmetry, tmpl::int32_t< 0 >, tmpl::max< tmpl::_state, tmpl::_element > >::value > >, tmpl::push_front< typename Tensor::index_list, SpacetimeIndex< VolumeDim, Ul, Fr > > >
 Add a spacetime index to the front of a Tensor. More...
 
template<typename Tensor >
using remove_first_index = ::Tensor< typename Tensor::type, tmpl::pop_front< typename Tensor::symmetry >, tmpl::pop_front< typename Tensor::index_list > >
 remove the first index of a tensor More...
 
template<typename Tensor >
using change_all_valences = ::Tensor< typename Tensor::type, typename Tensor::symmetry, tmpl::transform< typename Tensor::index_list, tmpl::bind< change_index_up_lo, tmpl::_1 > > >
 Swap the valences of all indices on a Tensor.
 
template<typename NewType , typename Tensor >
using swap_type = ::Tensor< NewType, typename Tensor::symmetry, typename Tensor::index_list >
 Swap the data type of a tensor for a new type. More...
 
template<typename Tensor , typename Frame >
using any_index_in_frame = tmpl::any< typename Tensor::index_list, tmpl::bind< detail::frame_is_the_same, tmpl::_1, Frame > >
 Return tmpl::true_type if any indices of the Tensor are in the frame Frame.
 
template<typename Tag , typename NewFrame >
using replace_frame_in_tag_t = typename replace_frame_in_tag< Tag, NewFrame >::type
 Replaces Tag with an equivalent Tag but in frame NewFrame.
 
template<typename TagList , typename NewFrame >
using replace_frame_in_taglist = tmpl::transform< TagList, tmpl::bind< replace_frame_in_tag_t, tmpl::_1, NewFrame > >
 Replaces every Tag in Taglist with an equivalent Tag but in frame NewFrame.
 

Variables

template<typename Symm , typename... IndexPack>
constexpr bool check_index_symmetry_v
 
template<typename Tensor , typename Frame >
constexpr bool any_index_in_frame_v = any_index_in_frame<Tensor, Frame>::value
 Return true if any indices of the Tensor are in the frame Frame.
 

Detailed Description

Contains all metafunctions related to Tensor manipulations.

Variable Documentation

◆ check_index_symmetry_v

template<typename Symm , typename... IndexPack>
constexpr bool TensorMetafunctions::check_index_symmetry_v
constexpr
Initial value:
=
check_index_symmetry<Symm, IndexPack...>::value
typename detail::check_index_symmetry_impl< tmpl::size< Symm >::value==0 or tmpl::size< Symm >::value==1 ? 0 :2 >::template f< Symm, tmpl::map<>, IndexPack... > check_index_symmetry
Check that each of symmetric indices is in the same frame and have the same dimensionality.
Definition: Metafunctions.hpp:66
constexpr T & value(T &t)
Returns t.value() if t is a std::optional otherwise returns t.
Definition: OptionalHelpers.hpp:32