1 #ifndef CASM_enumerator_ClusterSitesSelector_impl
2 #define CASM_enumerator_ClusterSitesSelector_impl
14 template <
typename Inserter>
17 std::vector<PrimPeriodicIntegralClusterOrbit>
const &orbits,
19 if (orbits.size() == 0) {
32 orbits.begin()->sym_compare();
38 std::vector<IntegralCluster> prim_ref_supercell_generators;
44 prim_periodic_sym_compare,
45 std::back_inserter(prim_ref_supercell_generators));
54 std::vector<PermuteIterator> prim_ref_config_fg =
56 std::vector<IntegralCluster> prim_ref_config_orbit_generators;
59 prim_ref_supercell_sym_info.
permute_end(), prim_ref_config_fg.begin(),
60 prim_ref_config_fg.end(), prim_ref_supercell_generators.begin(),
61 prim_ref_supercell_generators.end(), prim_ref_supercell_sym_compare,
62 std::back_inserter(prim_ref_config_orbit_generators));
68 std::vector<PermuteIterator> ref_config_fg = ref_config.
factor_group();
69 std::vector<Permutation> ref_config_inverse_permutations =
71 auto ref_config_orbit_generators_pbc =
73 ref_supercell_sym_info, ref_config_inverse_permutations.begin(),
74 ref_config_inverse_permutations.end(),
75 prim_ref_config_orbit_generators.begin(),
76 prim_ref_config_orbit_generators.end());
79 for (
auto const &cluster_site_indices : ref_config_orbit_generators_pbc) {
std::shared_ptr< Structure const > shared_prim
Configuration primitive() const
Return the primitive Configuration.
const Supercell & supercell() const
Get the Supercell for this Configuration.
std::vector< PermuteIterator > factor_group() const
Returns the subgroup of the Supercell factor group that leaves the Configuration unchanged.
Template class to be specialized for comparisons with periodic symmetry of the supercell lattice.
std::shared_ptr< Structure const > const & shared_prim() const
const SupercellSymInfo & sym_info() const
A class that collects all symmetry information for for performing symmetry transformations on the sit...
SymGroup const & factor_group() const
Subgroup of primitive-cell factor group operations that leave supercell lattice invariant.
permute_const_iterator permute_end() const
permute_const_iterator permute_begin() const
Eigen::Matrix3l transformation_matrix_to_super() const
long-int transformation from primitive lattice vectors to supercell lattice vectors supercell_lattice...
Configuration const & configuration() const
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.
Inserter select_cluster_sites(ConfigEnumInput const &reference_config_enum_input, std::vector< PrimPeriodicIntegralClusterOrbit > const &orbits, Inserter result)
ElementOutputIterator make_suborbit_generators(GroupOpIterator group_begin, GroupOpIterator group_end, SubgroupOpIterator subgroup_begin, SubgroupOpIterator subgroup_end, ElementIterator element_begin, ElementIterator element_end, SymCompareType const &sym_compare, ElementOutputIterator result)
std::vector< Permutation > make_inverse_permutations(PermuteIteratorIt begin, PermuteIteratorIt end)
Make inverse permutations.
PrototypeIterator< OrbitIterator > prototype_iterator(OrbitIterator orbit_it)
Convert an Orbit iterator to a prototype iterator.