CASM  1.1.0
A Clusters Approach to Statistical Mechanics
IrrepDecomposition.hh
Go to the documentation of this file.
1 #ifndef CASM_symmetry_IrrepDecomposition
2 #define CASM_symmetry_IrrepDecomposition
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 
19 struct IrrepInfo {
22  IrrepInfo(Eigen::MatrixXcd _trans_mat, Eigen::VectorXcd _characters);
23 
25  Index irrep_dim() const { return trans_mat.rows(); }
26 
27  // Dimension of initial vector space (greater than or equal to irrep_dim())
28  Index vector_dim() const { return trans_mat.cols(); }
29 
32  Eigen::MatrixXcd trans_mat;
33 
36  Eigen::VectorXcd characters;
37 
39  bool complex;
40 
45 
49 
54  std::vector<std::vector<Eigen::VectorXd>> directions;
55 };
56 
58 IrrepInfo make_dummy_irrep_info(Eigen::MatrixXcd const &trans_mat);
59 
62 
65 Eigen::MatrixXd full_trans_mat(std::vector<IrrepInfo> const &irreps);
66 
70  IrrepDecomposition(MatrixRep const &_fullspace_rep,
71  GroupIndices const &_head_group,
72  Eigen::MatrixXd const &_init_subspace,
73  GroupIndicesOrbitVector const &_cyclic_subgroups,
74  GroupIndicesOrbitVector const &_all_subgroups,
75  bool allow_complex);
76 
82 
85 
86  // Cyclic subgroups of head_group (only first group in each orbit is used)
88 
89  // All subgroups of head_group (only first group in each orbit is used)
91 
100 
106  std::vector<IrrepInfo> irreps;
107 
113 };
114 
115 } // namespace SymRepTools_v2
116 
117 class SymGroup;
118 class SymGroupRep;
119 
122  SymGroupRep const &rep, SymGroup const &head_group,
123  Eigen::MatrixXd const &_init_subspace, bool allow_complex);
124 
125 } // namespace CASM
126 
127 #endif
SymGroup is a collection of symmetry operations that satisfy the group property The symmetry operatio...
Definition: SymGroup.hh:42
SymGroupRep is an alternative representation of a SymGroup for something other than real space....
Definition: SymGroupRep.hh:31
IrrepInfo make_dummy_irrep_info(Eigen::MatrixXcd const &trans_mat)
Construct a "dummy" IrrepInfo with user specified transformtion matrix.
std::set< Index > GroupIndices
Eigen::MatrixXd full_trans_mat(std::vector< IrrepInfo > const &irreps)
Assumes that irreps are real, and concatenates their individual trans_mats to form larger trans_mat.
std::vector< GroupIndicesOrbit > GroupIndicesOrbitVector
std::set< GroupIndices > GroupIndicesOrbit
std::vector< Eigen::MatrixXd > MatrixRep
Main CASM namespace.
Definition: APICommand.hh:8
Eigen::MatrixXd MatrixXd
SymRepTools_v2::IrrepDecomposition make_irrep_decomposition(SymGroupRep const &rep, SymGroup const &head_group, Eigen::MatrixXd const &_init_subspace, bool allow_complex)
Make an IrrepDecompotion using CASM::SymGroupRep and CASM::SymGroup.
INDEX_TYPE Index
For long integer indexing:
Definition: definitions.hh:39
Performs irreducible subspace construction and symmetrization.
IrrepDecomposition(MatrixRep const &_fullspace_rep, GroupIndices const &_head_group, Eigen::MatrixXd const &_init_subspace, GroupIndicesOrbitVector const &_cyclic_subgroups, GroupIndicesOrbitVector const &_all_subgroups, bool allow_complex)
IrrepDecomposition constructor.
GroupIndices head_group
Group (as indices into fullspace_rep) used to find irreps.
IrrepInfo(Eigen::MatrixXcd _trans_mat, Eigen::VectorXcd _characters)
Construct an IrrepInfo with transformation matrix and vector of irreducible characters.
Index irrep_dim() const
Dimension of irreducible vector space (less than or equal to vector_dim())
bool complex
true if any character has non-zero imaginary component, false otherwise
std::vector< std::vector< Eigen::VectorXd > > directions