![]() |
|
Static symmetry group. More...
#include <StaticSymmetry.h>
Public Member Functions | |
constexpr | StaticSGroup () |
constexpr | StaticSGroup (const StaticSGroup< Gen... > &) |
constexpr | StaticSGroup (StaticSGroup< Gen... > &&) |
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 |
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 std::size_t | size () |
constexpr static int | globalFlags () |
Static Public Attributes | |
constexpr static std::size_t | static_size = ge::count |
Private Types | |
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 |
typedef group_elements::type | ge |
Static Private Attributes | |
constexpr static 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.)
|
private |
private |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlinestatic |
References compute_granudrum_aor::args.
Referenced by test_symgroups_selection(), and test_symgroups_static().
|
inlinestatic |
References compute_granudrum_aor::args, eigen_assert, and Eigen::StaticSGroup< Gen >::NumIndices.
|
inlinestaticconstexpr |
Referenced by test_symgroups_selection(), and test_symgroups_static().
|
inline |
|
inline |
|
inlinestaticconstexpr |
Referenced by test_symgroups_selection(), and test_symgroups_static().
|
staticconstexprprivate |
Referenced by Eigen::StaticSGroup< Gen >::apply().
|
staticconstexpr |