1 #ifndef CASM_ClusterOrbits
2 #define CASM_ClusterOrbits
19 template <
typename OrbitType>
20 struct OrbitGenerators;
21 class PermuteIterator;
45 typedef std::function<std::vector<xtal::UnitCellCoord>(
Structure const &,
51 bool _include_subclusters =
true);
63 template <
typename _OrbitType>
91 template <
typename SiteIterator>
93 SiteIterator _end,
const SymGroup &_generating_grp,
127 template <
typename OutputIterator>
130 OutputIterator result,
double xtal_tol);
134 template <
typename OutputIterator>
136 double cutoff_radius,
138 bool include_phenomenal_sites,
139 OutputIterator result,
double xtal_tol);
142 template <
typename OrbitType,
typename OutputIterator>
144 OutputIterator result);
147 template <
typename ClusterOrbitIterator,
typename OutputIterator>
149 ClusterOrbitIterator end,
150 OutputIterator result);
154 template <
typename OrbitType>
160 template <
typename OrbitType>
162 std::vector<OrbitType> &local_orbits,
163 const std::vector<Eigen::Matrix3i> &
transf_mat);
168 template <
typename OrbitType>
170 typename OrbitType::Element cluster,
178 template <
typename OrbitIterator>
179 std::pair<OrbitIterator, OrbitIterator>
orbit_branch(OrbitIterator begin,
187 template <
typename OrbitType,
typename OrbitOutputIterator>
190 std::ostream &status);
193 template <
typename OrbitType,
typename OrbitInputIterator,
194 typename OrbitOutputIterator>
196 OrbitInputIterator begin, OrbitInputIterator end,
198 std::ostream &status);
201 template <
typename OrbitBranchSpecsIterator,
typename OrbitOutputIterator>
203 OrbitBranchSpecsIterator begin, OrbitBranchSpecsIterator end,
204 const std::vector<IntegralClusterOrbitGenerator> &custom_generators,
205 OrbitOutputIterator result, std::ostream &status);
227 template <
typename OrbitOutputIterator>
229 std::shared_ptr<Structure const> prim_ptr,
231 OrbitOutputIterator result, std::ostream &status);
255 template <
typename OrbitOutputIterator>
257 std::shared_ptr<Structure const> prim_ptr,
258 std::vector<double>
const &max_length,
259 std::vector<IntegralClusterOrbitGenerator>
const &custom_generators,
261 OrbitOutputIterator result, std::ostream &status);
276 template <
typename OutputIterator>
291 template <
typename ClusterOrbitIterator,
typename OutputIterator>
293 ClusterOrbitIterator end,
294 OutputIterator result);
312 template <
typename OutputIterator,
typename OrbitType>
314 OutputIterator result);
329 template <
typename ClusterOrbitIterator,
typename OutputIterator>
331 ClusterOrbitIterator end,
332 OutputIterator result);
OrbitOutputIterator make_prim_periodic_orbits(std::shared_ptr< Structure const > prim_ptr, std::vector< double > const &max_length, std::vector< IntegralClusterOrbitGenerator > const &custom_generators, SiteFilterFunction const &site_filter, double xtal_tol, OrbitOutputIterator result, std::ostream &status)
Generate Orbit<IntegralCluster> by specifying max cluster length for each branch.
OrbitOutputIterator make_prim_periodic_asymmetric_unit(std::shared_ptr< Structure const > prim_ptr, SiteFilterFunction const &site_filter, double xtal_tol, OrbitOutputIterator result, std::ostream &status)
Generate the prim periodic asymmetric unit.
Store data used to generate an orbit branch of IntegralCluster.
std::pair< const_iterator, const_iterator > candidate_sites() const
std::vector< xtal::UnitCellCoord > Container
const SymGroup * m_generating_grp
OrbitType::SymCompareType SymCompareType
SymCompareType m_sym_compare
const PrimType & prim() const
const SymCompareType & sym_compare() const
std::function< bool(ClusterType)> Filter
Filter returns true for allowed ClusterType, false for unallowed.
Container::const_iterator const_iterator
Container m_candidate_sites
const SymGroup & generating_group() const
OrbitBranchSpecs(const PrimType &_prim, SiteIterator _begin, SiteIterator _end, const SymGroup &_generating_grp, Filter _filter, const SymCompareType &_sym_compare)
Constructor.
const PrimType * m_prim_ptr
OrbitType::Element ClusterType
Structure specifies the lattice and atomic basis of a crystal.
SymGroup is a collection of symmetry operations that satisfy the group property The symmetry operatio...
std::pair< OrbitIterator, OrbitIterator > orbit_branch(OrbitIterator begin, OrbitIterator end, Index size)
Returns the first range containing orbits of the requested orbit branch in the given range of Orbit.
OutputIterator neighborhood(Structure const &unit, double max_radius, SiteFilterFunction site_filter, OutputIterator result, double xtal_tol)
Output the neighborhood of UnitCellCoord within max_radius of any sites in unit cell.
OrbitGenerators< OrbitType > & insert_subcluster_generators(typename OrbitType::Element cluster, OrbitGenerators< OrbitType > &generators)
Given a cluster, generate all subcluster generators.
OutputIterator flower_neighborhood(OrbitType const &orbit, OutputIterator result)
Iterate over all sites in an orbit and insert a UnitCellCoord.
OrbitOutputIterator make_next_orbitbranch(OrbitInputIterator begin, OrbitInputIterator end, const OrbitBranchSpecs< OrbitType > &specs, OrbitOutputIterator result, std::ostream &status)
Use orbits of size n to generate orbits of size n+1.
OutputIterator local_orbit_neighborhood(const OrbitType &orbit, OutputIterator result)
Iterate over all sites in an orbit and insert a UnitCellCoord.
OutputIterator prim_periodic_orbit_neighborhood(const PrimPeriodicOrbit< IntegralCluster > &orbit, OutputIterator result)
Iterate over all sites in an orbit and insert a UnitCellCoord.
OutputIterator prim_periodic_neighborhood(ClusterOrbitIterator begin, ClusterOrbitIterator end, OutputIterator result)
Iterate over all sites in all orbits and insert a UnitCellCoord.
OutputIterator local_neighborhood(ClusterOrbitIterator begin, ClusterOrbitIterator end, OutputIterator result)
Iterate over all sites in all orbits and insert a UnitCellCoord.
Eigen::Matrix3l transf_mat(const Lattice &prim_lat, const Lattice &super_lat)
OrbitOutputIterator make_orbits(OrbitBranchSpecsIterator begin, OrbitBranchSpecsIterator end, const std::vector< IntegralClusterOrbitGenerator > &custom_generators, OrbitOutputIterator result, std::ostream &status)
Generate orbits of IntegralCluster using OrbitBranchSpecs.
bool has_local_neighborhood_overlap(std::vector< OrbitType > &local_orbits, const Eigen::Matrix3i &transf_mat)
Check if periodic images of sites in an orbit are overlapping in supercells defined by the given supe...
std::function< bool(xtal::Site)> SiteFilterFunction
std::vector< Eigen::Matrix3i > viable_supercells(std::vector< OrbitType > &local_orbits, const std::vector< Eigen::Matrix3i > &transf_mat)
Return superlattice transf. matrices for which has_local_neighborhood_overlap is false.
std::function< std::vector< xtal::UnitCellCoord >Structure const &, SiteFilterFunction)> CandidateSitesFunction
OrbitOutputIterator make_asymmetric_unit(const OrbitBranchSpecs< OrbitType > &specs, OrbitOutputIterator result, std::ostream &status)
Generate the asymmetric unit, using OrbitBranchSpecs.
INDEX_TYPE Index
For long integer indexing:
std::function< bool(IntegralCluster)> ClusterFilterFunction
IntegralClusterOrbitGenerator(const IntegralCluster &_prototype, bool _include_subclusters=true)
IntegralCluster prototype
Data structure that holds canonical generating elements and can then make sorted orbits.