Static symmetry group. More...
#include <StaticSymmetry.h>
Public Member Functions | |
template<typename Tensor_ , typename... IndexTypes> | |
internal::tensor_symmetry_value_setter< Tensor_, StaticSGroup< Gen... > > | operator() (Tensor_ &tensor, typename Tensor_::Index firstIndex, IndexTypes... otherIndices) const |
template<typename Tensor_ > | |
internal::tensor_symmetry_value_setter< Tensor_, StaticSGroup< Gen... > > | operator() (Tensor_ &tensor, std::array< typename Tensor_::Index, Tensor_::NumIndices > const &indices) const |
constexpr | StaticSGroup () |
constexpr | StaticSGroup (const StaticSGroup< Gen... > &) |
constexpr | StaticSGroup (StaticSGroup< Gen... > &&) |
Static Public Member Functions | |
template<typename Op , typename RV , typename Index , std::size_t N, typename... Args> | |
static RV | apply (const std::array< Index, N > &idx, RV initial, Args &&... args) |
template<typename Op , typename RV , typename Index , typename... Args> | |
static RV | apply (const std::vector< Index > &idx, RV initial, Args &&... args) |
static constexpr int | globalFlags () |
static constexpr std::size_t | size () |
Static Public Attributes | |
static constexpr std::size_t | static_size = ge::count |
Private Types | |
typedef group_elements::type | ge |
typedef internal::group_theory::enumerate_group_elements< internal::tensor_static_symgroup_multiply, internal::tensor_static_symgroup_equality, typename internal::tensor_static_symgroup_identity_ctor< NumIndices >::type, internal::type_list< typename internal::tensor_static_symgroup_element_ctor< Gen, NumIndices >::type... > > | group_elements |
Static Private Attributes | |
static constexpr std::size_t | NumIndices = internal::tensor_symmetry_num_indices<Gen...>::value |
Static symmetry group.
This class represents a symmetry group that is known and resolved completely at compile time. Ideally, no run-time penalty is incurred compared to the manual unrolling of the symmetry.
CAUTION:
Do not use this class directly for large symmetry groups. The compiler may run into a limit, or segfault or in the very least will take a very, very, very long time to compile the code. Use the SGroup class instead if you want a static group. That class contains logic that will automatically select the DynamicSGroup class instead if the symmetry group becomes too large. (In that case, unrolling may not even be beneficial.)
Definition at line 181 of file StaticSymmetry.h.
|
private |
Definition at line 190 of file StaticSymmetry.h.
private |
Definition at line 189 of file StaticSymmetry.h.
|
inline |
Definition at line 192 of file StaticSymmetry.h.
|
inline |
Definition at line 193 of file StaticSymmetry.h.
|
inline |
Definition at line 194 of file StaticSymmetry.h.
|
inlinestatic |
Definition at line 197 of file StaticSymmetry.h.
|
inlinestatic |
Definition at line 203 of file StaticSymmetry.h.
|
inlinestatic |
Definition at line 214 of file StaticSymmetry.h.
|
inline |
Definition at line 217 of file StaticSymmetry.h.
|
inline |
Definition at line 224 of file StaticSymmetry.h.
|
inlinestatic |
Definition at line 211 of file StaticSymmetry.h.
|
staticprivate |
Definition at line 183 of file StaticSymmetry.h.
|
static |
Definition at line 209 of file StaticSymmetry.h.