1 #ifndef CASM_ScelOrbitGeneration_impl
2 #define CASM_ScelOrbitGeneration_impl
11 template <
typename _ElementType>
16 _scel.crystallography_tol()) {}
18 template <
typename _ElementType>
23 template <
typename _ElementType>
33 template <
typename _ElementType>
36 Element result = m_sym_compare.prepare(e);
37 auto it = supercell().sym_info().permute_begin();
38 auto end = supercell().sym_info().permute_end();
41 auto test = m_sym_compare.prepare(m_sym_compare.copy_apply(it.sym_op(), e));
42 if (m_sym_compare.compare(result, test)) {
55 template <
typename _ElementType>
56 template <
typename PermuteIteratorIt>
59 PermuteIteratorIt begin,
60 PermuteIteratorIt end)
const {
61 Element result = m_sym_compare.prepare(e);
65 auto test = m_sym_compare.prepare(m_sym_compare.copy_apply(it.sym_op(), e));
66 if (m_sym_compare.compare(result, test)) {
76 template <
typename _ElementType>
78 return m_to_canonical;
82 template <
typename _ElementType>
84 return to_canonical().
inverse();
87 template <
typename _ElementType>
91 _scel.crystallography_tol()) {}
93 template <
typename _ElementType>
98 template <
typename _ElementType>
101 return m_sym_compare;
105 template <
typename _ElementType>
107 return (*
this)(e, supercell().sym_info().permute_begin(),
108 supercell().sym_info().permute_end());
112 template <
typename _ElementType>
113 template <
typename PermuteIteratorIt>
115 PermuteIteratorIt begin,
116 PermuteIteratorIt end)
const {
118 auto test = m_sym_compare.prepare(m_sym_compare.copy_apply(it.sym_op(), e));
119 return m_sym_compare.compare(e, test);
122 return std::none_of(begin, end, less_than);
std::shared_ptr< Structure const > shared_prim
PermuteIterator inverse() const
PermuteIterator from_canonical() const
After using call operator, this can be checked.
const Supercell & supercell() const
Element operator()(const Element &e) const
Applies symmetry to return an equivalent Element in a canonical form.
const SymCompareType & sym_compare() const
PermuteIterator to_canonical() const
After using call operator, this can be checked.
ScelCanonicalGenerator(const Supercell &_scel)
Comparisons of clusters using supercell periodic symmetry, but without periodic images.
Represents a supercell of the primitive parent crystal structure.
Eigen::Matrix3l transf_mat(const Lattice &prim_lat, const Lattice &super_lat)
const Supercell & supercell() const
const SymCompareType & sym_compare() const
ScelIsCanonical(const Supercell &_scel)
bool operator()(const Element &e) const
Applies symmetry to check if any Element is greater than e.