1 #ifndef XTALSYMTOOLS_HH
2 #define XTALSYMTOOLS_HH
18 xtal::Lattice &
apply(
const xtal::SymOp &op, xtal::Lattice &lat);
21 xtal::Lattice
copy_apply(
const xtal::SymOp &op, xtal::Lattice lat_copy);
23 template <
typename ExternSymOp>
35 template <
typename ExternSymOpVector>
37 const Lattice &lat, ExternSymOpVector
const &super_grp) {
44 template <
typename OutputIt>
46 const std::vector<SymOp> &super_group,
51 for (
auto it = super_group.begin(); it != super_group.end(); ++it) {
73 const std::vector<SymOp> &enforced_group);
109 template <
typename Object,
typename OpIterator>
111 const Object &scel,
const Object &unit, OpIterator begin, OpIterator end,
113 std::pair<bool, Eigen::Matrix3d> res;
114 for (
auto it = begin; it != end; ++it) {
117 return std::make_pair(it, res.second);
120 return std::make_pair(end, res.second);
129 template <
typename LatIterator,
typename SymOpIterator>
131 SymOpIterator op_begin,
132 SymOpIterator op_end) {
134 for (
auto it = ++begin; it != end; ++it) {
136 for (
auto op_it = op_begin; op_it != op_end; ++op_it) {
138 if (std::abs(
volume(test)) < std::abs(
volume(tmp_best))) {
154 template <
typename StructureType,
typename ExternSymOpVector>
156 const ExternSymOpVector &enforced_group) {
Checks if operations are point group operations.
double volume(const Lattice &lat)
Returns the volume of a Lattice.
std::pair< bool, Eigen::Matrix3d > is_superlattice(const Lattice &scel, const Lattice &unit, double tol)
Check if scel is a superlattice of unitcell unit and some integer transformation matrix T.
Lattice make_superduperlattice(const Lattice &lat1, const Lattice &lat2)
returns Lattice that is smallest possible superlattice of both input Lattice
ConfigIO::GenericConfigFormatter< jsonParser > structure()
xtal::Coordinate copy_apply(const xtal::SymOp &op, xtal::Coordinate coord)
Copy and apply SymOp to a Coordinate.
xtal::Coordinate & apply(const xtal::SymOp &op, xtal::Coordinate &coord)
apply SymOp to a Coordinate
BasicStructure symmetrize(const BasicStructure &structure, const std::vector< SymOp > &enforced_group)
std::vector< Index > invariant_subgroup_indices(const Lattice &lat, SymOpVector const &super_grp)
Construct indices of the subgroup that leaves a lattice unchanged.
Lattice make_equivalent_superduperlattice(LatIterator begin, LatIterator end, SymOpIterator op_begin, SymOpIterator op_end)
returns Lattice that is smallest possible superlattice of all input Lattice
std::pair< OpIterator, Eigen::Matrix3d > is_equivalent_superlattice(const Object &scel, const Object &unit, OpIterator begin, OpIterator end, double tol)
std::vector< SymOp > make_point_group(Lattice const &_lat)
Populate.
std::vector< SymOp > SymOpVector
INDEX_TYPE Index
For long integer indexing: