CASM  1.1.0
A Clusters Approach to Statistical Mechanics
VectorSymCompare_v2.hh
Go to the documentation of this file.
1 #ifndef CASM_symmetry_VectorSymCompare_v2
2 #define CASM_symmetry_VectorSymCompare_v2
3 
4 #include <set>
5 
7 #include "casm/external/Eigen/Core"
9 
10 namespace CASM {
11 
12 namespace SymRepTools_v2 {
13 
14 typedef std::vector<Eigen::MatrixXd> MatrixRep;
15 typedef std::set<Index> GroupIndices;
16 typedef std::set<GroupIndices> GroupIndicesOrbit;
17 typedef std::vector<GroupIndicesOrbit> GroupIndicesOrbitVector;
18 
21  public:
22  VectorInvariants(Eigen::VectorXcd const &vector);
23 
24  double cols() const;
25  double norm() const;
26 
27  private:
28  double m_cols;
29  double m_norm;
30 };
31 
32 } // namespace SymRepTools_v2
33 
34 bool almost_equal(SymRepTools_v2::VectorInvariants const &A_invariants,
35  SymRepTools_v2::VectorInvariants const &B_invariants,
36  double tol);
37 
38 bool compare(SymRepTools_v2::VectorInvariants const &A_invariants,
39  SymRepTools_v2::VectorInvariants const &B_invariants, double tol);
40 
41 namespace SymRepTools_v2 {
42 
45  VectorSymCompare(MatrixRep const &matrix_rep, double tol);
46 
48  typedef Eigen::VectorXcd Element;
50 
51  // lexicographical comparison (reversed, uses vector_B < vector_A)
52  bool compare(Eigen::VectorXcd const &vector_A,
53  Eigen::VectorXcd const &vector_B) const;
54 
55  // return VectorInvariants
56  VectorInvariants make_invariants(Eigen::VectorXcd const &vector) const;
57 
58  // apply matrix rep to vector
59  Eigen::VectorXcd copy_apply(Index const &op_index,
60  Eigen::VectorXcd vector) const;
61 
62  // no change needed to prepare for comparison
63  Eigen::VectorXcd prepare(Eigen::VectorXcd vector) const;
64 
65  // compare orbits by first comparing invariants, then orbit prototypes
66  bool inter_orbit_compare(Eigen::VectorXcd const &A_prototype,
67  VectorInvariants const &A_invariants,
68  Eigen::VectorXcd const &B_prototype,
69  VectorInvariants const &B_invariants) const;
70 
71  private:
73  double m_tol;
74 };
75 
77 Eigen::MatrixXcd vector_space_prepare(Eigen::MatrixXcd const &vector_space,
78  double tol);
79 
82  double tol);
83 
84 } // namespace SymRepTools_v2
85 
86 } // namespace CASM
87 
88 #endif
Used for generating SimpleOrbit of high symmetry direction vectors.
VectorInvariants(Eigen::VectorXcd const &vector)
std::set< Index > GroupIndices
std::vector< GroupIndicesOrbit > GroupIndicesOrbitVector
std::set< GroupIndices > GroupIndicesOrbit
Eigen::MatrixXcd vector_space_prepare(Eigen::MatrixXcd const &vector_space, double tol)
Vector space preparation for comparison.
std::vector< Eigen::MatrixXd > MatrixRep
Main CASM namespace.
Definition: APICommand.hh:8
bool almost_equal(ClusterInvariants const &A, ClusterInvariants const &B, double tol)
Check if ClusterInvariants are equal.
Eigen::MatrixXd MatrixXd
bool compare(ClusterInvariants const &A, ClusterInvariants const &B, double tol)
Compare ClusterInvariants.
INDEX_TYPE Index
For long integer indexing:
Definition: definitions.hh:39
Used for constructing SimpleOrbit of high symmetry direction vectors.
VectorInvariants make_invariants(Eigen::VectorXcd const &vector) const
bool compare(Eigen::VectorXcd const &vector_A, Eigen::VectorXcd const &vector_B) const
bool inter_orbit_compare(Eigen::VectorXcd const &A_prototype, VectorInvariants const &A_invariants, Eigen::VectorXcd const &B_prototype, VectorInvariants const &B_invariants) const
VectorSymCompare(MatrixRep const &matrix_rep, double tol)
Eigen::VectorXcd copy_apply(Index const &op_index, Eigen::VectorXcd vector) const
Eigen::VectorXcd prepare(Eigen::VectorXcd vector) const