1 #ifndef CASM_SupercellClusterOrbits_impl
2 #define CASM_SupercellClusterOrbits_impl
13 template <
typename PermuteIteratorIt>
15 PermuteIteratorIt end) {
16 std::vector<Permutation> inverse_permutations;
17 for (
auto permute_it = begin; permute_it != end; ++permute_it) {
18 inverse_permutations.push_back(permute_it->combined_permute().inverse());
20 return inverse_permutations;
25 template <
typename InversePermutationIterator>
27 InversePermutationIterator inverse_permutations_begin,
28 InversePermutationIterator inverse_permutations_end,
29 std::set<Index>
const &cluster_site_indices) {
30 auto max = cluster_site_indices;
31 auto ipermute_it = inverse_permutations_begin;
32 for (; ipermute_it != inverse_permutations_end; ++ipermute_it) {
70 template <
typename InversePermutationIterator,
typename ElementIterator>
71 std::set<std::set<Index>, ClusterSiteIndicesCompare>
74 InversePermutationIterator inverse_permutations_begin,
75 InversePermutationIterator inverse_permutations_end,
76 ElementIterator element_begin, ElementIterator element_end) {
84 for (
auto it = element_begin; it != element_end; ++it) {
87 inverse_permutations_begin, inverse_permutations_end, element);
88 orbit_generators.insert(canonical_element);
91 return orbit_generators;
A class that collects all symmetry information for for performing symmetry transformations on the sit...
std::set< std::set< Index >, ClusterSiteIndicesCompare > make_orbit_generators_under_periodic_boundary_conditions(SupercellSymInfo const &sym_info, InversePermutationIterator inverse_permutations_begin, InversePermutationIterator inverse_permutations_end, ElementIterator element_begin, ElementIterator element_end)
Return "within_scel" orbit generators, as sets of cluster site indices.
std::set< Index > make_canonical_cluster_site_indices(InversePermutationIterator inverse_permutations_begin, InversePermutationIterator inverse_permutations_end, std::set< Index > const &cluster_site_indices)
std::set< Index > make_cluster_site_indices(IntegralCluster const &cluster, SupercellSymInfo const &sym_info)
Return site indices of cluster sites.
std::vector< Permutation > make_inverse_permutations(PermuteIteratorIt begin, PermuteIteratorIt end)
Make inverse permutations.
T max(const T &A, const T &B)
std::set< Index > permute_cluster_site_indices(Permutation const &inverse_permute, std::set< Index > const &cluster_site_indices)
Rather than permute values, here we want to permute cluster site indices.
Sort std::set<Index> by size, then value (lexicographical compare)