1 #ifndef CASM_ClusterSymCompare
2 #define CASM_ClusterSymCompare
16 class PermuteIterator;
75 template <
typename Base>
79 using typename Base::Element;
83 using typename Base::InvariantsType;
97 const InvariantsType &B)
const;
127 template <
typename Element>
130 SymCompare<CRTPBase<AperiodicSymCompare<Element>>>> {
145 double tol()
const {
return this->m_tol; }
164 SymOp const &spatial_transform_impl()
const;
200 template <
typename Element>
203 SymCompare<CRTPBase<PrimPeriodicSymCompare<Element>>>> {
218 double tol()
const {
return this->m_tol; }
237 SymOp const &spatial_transform_impl()
const;
278 template <
typename Element>
281 SymCompare<CRTPBase<ScelPeriodicSymCompare<Element>>>> {
302 double tol()
const {
return this->m_tol; }
321 SymOp const &spatial_transform_impl()
const;
ClusterSymCompare< SymCompare< CRTPBase< AperiodicSymCompare< Element > > > > Base
const PrimType & prim() const
std::shared_ptr< PrimType const > PrimType_ptr
SymOp m_spatial_transform
Spatial transform that reproduces most recent application of SymCompare::spatial_prepare()
double tol() const
Return tolerance.
Template class to be specialized for comparisons with aperiodic symmetry.
CRTP Base class for common cluster symmetry and comparison implementations.
ClusterType copy_apply(PermuteIterator const &permute_it, ClusterType obj) const
Get SymOp from PermuteIterator and apply to cluster.
std::unique_ptr< SymOpRepresentation > canonical_transform_impl(ClusterType const &obj) const
Returns transformation that takes 'obj' to its prepared (canonical) form.
Base::MostDerived MostDerived
bool invariants_compare_impl(const InvariantsType &A, const InvariantsType &B) const
Orders 'prepared' elements in the same orbit.
bool compare_impl(const ClusterType &A, const ClusterType &B) const
Compares 'prepared' clusters.
ClusterType copy_apply_impl(SymOp const &op, ClusterType obj) const
Applies SymOp to cluster.
InvariantsType make_invariants_impl(const ClusterType &obj) const
Make orbit invariants from one element in the orbit.
const PrimType & prim() const
std::shared_ptr< PrimType const > PrimType_ptr
SymOp m_spatial_transform
Spatial transform that reproduces most recent application of SymCompare::spatial_prepare()
ClusterSymCompare< SymCompare< CRTPBase< PrimPeriodicSymCompare< Element > > > > Base
double tol() const
Return tolerance.
Template class to be specialized for comparisons with periodic symmetry of the primitive lattice.
std::shared_ptr< PrimType const > PrimType_ptr
xtal::IntegralCoordinateWithin_f m_bring_within_f
Bring UnitCellCoord within the supercell.
const PrimType & prim() const
double tol() const
Return tolerance.
transf_mat_type const & transf_mat() const
Prim to supercell transformation matrix.
Eigen::Matrix3l transf_mat_type
ClusterSymCompare< SymCompare< CRTPBase< ScelPeriodicSymCompare< Element > > > > Base
transf_mat_type m_transf_mat
Prim to supercell transformation matrix.
SymOp m_spatial_transform
Spatial transform that reproduces most recent application of SymCompare::spatial_prepare()
Template class to be specialized for comparisons with periodic symmetry of the supercell lattice.
Structure specifies the lattice and atomic basis of a crystal.
CRTP base class for implementing element and orbit comparison.
typename traits< MostDerived >::Element Element
SymOp is the Coordinate representation of a symmetry operation it keeps fraction (FRAC) and Cartesian...
Eigen::Matrix3l transf_mat(const Lattice &prim_lat, const Lattice &super_lat)
MappingNode copy_apply(PermuteIterator const &_it, MappingNode const &_node, bool transform_cost_mat=true)
Reorders the permutation and compounds the spatial isometry (rotation.
Matrix< long int, 3, 3 > Matrix3l
Derived::PlainObject representation_prepare_impl(Eigen::MatrixBase< Derived > const &obj, double _tol)
Prepare an element for comparison.