Static symmetry group. More...
Public Member Functions | |
template<typename Tensor_ > | |
internal::tensor_symmetry_value_setter< Tensor_, StaticSGroup< Gen... > > | operator() (Tensor_ &tensor, std::array< typename Tensor_::Index, Tensor_::NumIndices > const &indices) const |
template<typename Tensor_ , typename... IndexTypes> | |
internal::tensor_symmetry_value_setter< Tensor_, StaticSGroup< Gen... > > | operator() (Tensor_ &tensor, typename Tensor_::Index firstIndex, IndexTypes... otherIndices) 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) |
constexpr static int | globalFlags () |
constexpr static std::size_t | size () |
Static Public Attributes | |
constexpr static std::size_t | static_size |
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 | |
constexpr static std::size_t | NumIndices |
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 183 of file StaticSymmetry.h.
|
private |
Definition at line 192 of file StaticSymmetry.h.
|
private |
Definition at line 191 of file StaticSymmetry.h.
|
inlineconstexpr |
Definition at line 194 of file StaticSymmetry.h.
|
inlineconstexpr |
Definition at line 195 of file StaticSymmetry.h.
|
inlineconstexpr |
Definition at line 196 of file StaticSymmetry.h.
|
inlinestatic |
Definition at line 199 of file StaticSymmetry.h.
|
inlinestatic |
Definition at line 205 of file StaticSymmetry.h.
|
inlinestaticconstexpr |
Definition at line 216 of file StaticSymmetry.h.
|
inline |
Definition at line 226 of file StaticSymmetry.h.
|
inline |
Definition at line 219 of file StaticSymmetry.h.
|
inlinestaticconstexpr |
Definition at line 213 of file StaticSymmetry.h.
|
staticconstexprprivate |
Definition at line 185 of file StaticSymmetry.h.
|
staticconstexpr |
Definition at line 211 of file StaticSymmetry.h.