13 struct MakeInvariantSubgroup {
14 MakeInvariantSubgroup() {}
16 template <
typename SymOpIterator,
typename SymOpOutputIterator>
17 SymOpOutputIterator operator()(
const Lattice &lat, SymOpIterator begin,
19 SymOpOutputIterator result) {
27 "LatticeEnumEquivalents";
41 xtal::canonical::
equivalent(lat, super_g), super_g.begin(),
42 super_g.end(), MakeInvariantSubgroup()) {
43 if (!super_g.begin()->has_valid_master()) {
44 throw std::runtime_error(
45 "Error constructing LatticeEnumEquivalents: SymGroup has no "
Enumerate over all equivalents.
LatticeEnumEquivalents(const xtal::Lattice &lat, const SymGroup &super_g)
Constructor.
static const std::string enumerator_name
SymGroup is a collection of symmetry operations that satisfy the group property The symmetry operatio...
SymOp is the Coordinate representation of a symmetry operation it keeps fraction (FRAC) and Cartesian...
xtal::Coordinate copy_apply(const xtal::SymOp &op, xtal::Coordinate coord)
Copy and apply SymOp to a Coordinate.
SymGroup invariant_subgroup(const SymGroup &super_group, const xtal::Lattice &lat)
Returns the subgroup of the given group that keeps the lattice invariant.
Lattice equivalent(Lattice const &in_lat, SymOpVector const &point_grp, double compare_tol)