1 #ifndef CASM_ClusterSpecs
2 #define CASM_ClusterSpecs
16 class SupercellSymInfo;
42 std::string
name()
const;
54 virtual std::string
_name()
const = 0;
78 template <
typename FunctorType>
80 std::vector<IntegralCluster>
const &generating_elements,
81 FunctorType
const &f);
94 template <
typename FunctorType>
96 FunctorType
const &f);
110 std::vector<double>
const &_max_length,
111 std::vector<IntegralClusterOrbitGenerator>
const
112 &_custom_generators = {});
145 std::string
_name()
const override;
163 std::vector<double>
const &_max_length,
164 std::vector<double>
const &_cutoff_radius,
165 bool _include_phenomenal_sites,
166 std::vector<IntegralClusterOrbitGenerator>
const
167 &_custom_generators = {});
213 std::string
_name()
const override;
229 std::
string _method_name,
std::shared_ptr<
Structure const> _shared_prim,
284 std::
string _method_name,
std::shared_ptr<
Structure const> _shared_prim,
370 bool include_phenomenal_sites =
false);
Template class to be specialized for comparisons with aperiodic symmetry.
CLUSTER_PERIODICITY_TYPE periodicity_type() const
virtual CLUSTER_PERIODICITY_TYPE _periodicity_type() const =0
std::vector< PrimPeriodicOrbit< IntegralCluster > > PeriodicOrbitVec
std::vector< IntegralCluster > IntegralClusterVec
virtual LocalOrbitVec _make_local_orbits(IntegralClusterVec const &generating_elements) const
std::vector< LocalOrbit< IntegralCluster > > LocalOrbitVec
PeriodicOrbitVec make_periodic_orbits(IntegralClusterVec const &generating_elements) const
std::string name() const
This is the orbit generation method name.
LocalOrbitVec make_local_orbits(IntegralClusterVec const &generating_elements) const
virtual PeriodicOrbitVec _make_periodic_orbits(IntegralClusterVec const &generating_elements) const
virtual std::string _name() const =0
SymCompareType sym_compare
The comparisons used for orbit generation.
std::vector< ClusterFilterFunction > cluster_filter
PeriodicOrbitVec _make_periodic_orbits(IntegralClusterVec const &generating_elements) const override
SiteFilterFunction site_filter
std::shared_ptr< Structure const > shared_prim
The prim.
std::vector< CandidateSitesFunction > candidate_sites
std::string _name() const override
SymGroup generating_group
The orbit generating group.
CLUSTER_PERIODICITY_TYPE _periodicity_type() const override
std::string m_method_name
std::vector< IntegralClusterOrbitGenerator > custom_generators
Specifies particular clusters that should be used to generate orbits.
Parameters most commonly used for local orbit generation.
LocalMaxLengthClusterSpecs(std::shared_ptr< Structure const > _shared_prim, SymGroup const &_generating_group, IntegralCluster const &_phenomenal, SiteFilterFunction const &_site_filter, std::vector< double > const &_max_length, std::vector< double > const &_cutoff_radius, bool _include_phenomenal_sites, std::vector< IntegralClusterOrbitGenerator > const &_custom_generators={})
static std::string const method_name
std::vector< double > max_length
std::vector< IntegralClusterOrbitGenerator > custom_generators
Specifies particular clusters that should be used to generate orbits.
IntegralCluster phenomenal
Phenomenal cluster, used to find local neighborhood.
SiteFilterFunction site_filter
bool include_phenomenal_sites
CLUSTER_PERIODICITY_TYPE _periodicity_type() const override
LocalSymCompare< IntegralCluster > sym_compare
The comparisons used for orbit generation.
SymGroup generating_group
std::shared_ptr< Structure const > shared_prim
The prim.
std::string _name() const override
std::vector< double > cutoff_radius
LocalOrbitVec _make_local_orbits(IntegralClusterVec const &generating_elements) const override
PrimPeriodicSymCompare< IntegralCluster > sym_compare
The comparisons used for orbit generation.
static std::string const method_name
SymGroup generating_group
PeriodicMaxLengthClusterSpecs(std::shared_ptr< Structure const > _shared_prim, SymGroup const &_generating_group, SiteFilterFunction const &_site_filter, std::vector< double > const &_max_length, std::vector< IntegralClusterOrbitGenerator > const &_custom_generators={})
Constructor.
SiteFilterFunction site_filter
std::vector< double > max_length
std::string _name() const override
std::shared_ptr< Structure const > shared_prim
The prim.
PeriodicOrbitVec _make_periodic_orbits(IntegralClusterVec const &generating_elements) const override
std::vector< IntegralClusterOrbitGenerator > custom_generators
Specifies particular clusters that should be used to generate orbits.
CLUSTER_PERIODICITY_TYPE _periodicity_type() const override
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...
#define ABSTRACT_CLONEABLE(T)
void for_all_orbits(ClusterSpecs const &cluster_specs, std::vector< IntegralCluster > const &generating_elements, FunctorType const &f)
std::function< bool(xtal::Site)> SiteFilterFunction
bool alloy_sites_filter(const xtal::Site &site)
Generate clusters using Site with site_occupant.size() > 1.
bool all_sites_filter(const xtal::Site &site)
Generate clusters using all Site.
std::function< std::vector< xtal::UnitCellCoord >Structure const &, SiteFilterFunction)> CandidateSitesFunction
CandidateSitesFunction origin_neighborhood()
Only sites in the origin unit cell {b, 0, 0, 0}.
ClusterFilterFunction all_clusters_filter()
Accept all clusters.
SiteFilterFunction dof_sites_filter(const std::vector< DoFKey > &dofs={})
Generate clusters using Site with specified DoF.
CandidateSitesFunction empty_neighborhood()
No sites (for null orbit, or global dof only)
CandidateSitesFunction cutoff_radius_neighborhood(IntegralCluster const &phenomenal, double cutoff_radius, bool include_phenomenal_sites=false)
Sites within cutoff_radius distance to any site in the phenomenal cluster.
CandidateSitesFunction max_length_neighborhood(double max_length)
ClusterFilterFunction max_length_cluster_filter(double max_length)
Accept clusters with max pair distance less than max_length.
std::function< bool(IntegralCluster)> ClusterFilterFunction