20 class SymGroupRepHandle;
26 class SymGroupRep :
public Array<SymOpRepresentation *> {
47 std::cerr <<
"WARNING: SymGroupRep initialized without valid master_group! Bad things may happen!\n";
167 std::cerr <<
"Cannot perform default construction of SymGroupRep.\nExiting...\n";
191 SymGroupRep
permuted_direct_sum_rep(
const SymGroupRep &permute_rep,
const Array<SymGroupRep const *> &sum_reps);
192 SymGroupRep
kron_rep(
const SymGroupRep &LHS,
const SymGroupRep &RHS);
194 jsonParser &
to_json(
const SymGroupRep &rep, jsonParser &json);
197 void from_json(SymGroupRep &rep,
const jsonParser &json);
209 m_group_rep(nullptr) {}
212 m_group_rep(nullptr), m_subgroup_op_inds(head_group.op_indices()) {
213 if(head_group.
size() == 0 || !head_group[0].has_valid_master()) {
214 std::cerr <<
"CRITICAL ERROR: Requested representation of an improperly initialized SymGroup.\n"
218 assert(!symrep_ID.
empty());
225 return m_subgroup_op_inds.
size();
230 return (m_group_rep->get_MatrixXd(m_subgroup_op_inds[0]))->cols();
242 return m_group_rep->at(m_subgroup_op_inds[i]);
246 return (m_group_rep->master_group())[m_subgroup_op_inds[i]];
250 return m_subgroup_op_inds.
find((m_group_rep->master_group()).
ind_inverse(m_subgroup_op_inds[i]));
254 return m_subgroup_op_inds.
find((m_group_rep->master_group()).
ind_prod(m_subgroup_op_inds[i], m_subgroup_op_inds[j]));
263 assert(head_group.
size() && !symrep_ID.
empty() && head_group[0].has_valid_master());
jsonParser & to_json(jsonParser &json) const
ReturnArray< Eigen::MatrixXd > get_projection_operators() const
Index size() const
Size of the associate SymGroup.
std::vector< Eigen::MatrixXd > irreducible_wedges(const SymGroup &head_group, std::vector< Index > &multiplicities) const
Index ind_prod(Index i, Index j) const
void from_json(ClexDescription &desc, const jsonParser &json)
const MasterSymGroup & master_group() const
Type-safe ID object for communicating and accessing Symmetry representation info. ...
bool empty() const
Returns true if SymGroupRepID has not been initialized with valid group_index or rep_index.
jsonParser & to_json(const ClexDescription &desc, jsonParser &json)
ReturnArray< Index > num_each_irrep() const
SymGroupRep subset_permutation_rep(const SymGroupRep &permute_rep, const Array< Index >::X2 &subsets)
ReturnArray< Array< Eigen::VectorXd > > _calc_special_irrep_directions(const SymGroup &subgroup) const
SymGroupRep symmetry_adapted_copy(const SymGroup &head_group) const
SymGroupRep const * operator->() const
Eigen::MatrixXd block_shape_matrix() const
void from_json(const jsonParser &json)
ReturnArray< SymGroupRepID > get_irrep_IDs(const SymGroup &subgroup) const
SymGroupRep(const SymGroup &_head, SymGroupRepID _rep_ID=SymGroupRepID())
Eigen::MatrixXd get_irrep_trans_mat(const SymGroup &head_group) const
const SymOp & sym_op(Index i) const
void print_MatrixXd(std::ostream &stream) const
SymGroupRepHandle(const SymGroup &head_group, SymGroupRepID symrep_ID)
SymGroupRep kron_rep(const SymGroupRep &LHS, const SymGroupRep &RHS)
SymGroup is a collection of symmetry operations that satisfy the group property The symmetry operatio...
void calc_new_irreps(int max_iter=1000) const
MasterSymGroup const * m_master_group
Pointer to the home_group that generated this SymGroupRep.
bool has_valid_master() const
SymOp is the Coordinate representation of a symmetry operation it keeps fraction (FRAC) and Cartesian...
ReturnArray< Array< Eigen::MatrixXd > > calc_special_subspaces(const SymGroup &subgroup) const
typename multivector_impl::multivector_tmp< T, N >::type X
Eigen::MatrixXd const * get_MatrixXd(Index i) const
SymGroupRep(const MasterSymGroup *_home)
Pointer version of constructor is private for internal construction of master-less representations...
SymGroupRep const * m_group_rep
EigenIndex Index
For long integer indexing:
Index ind_inverse(Index i) const
void print_permutation(std::ostream &stream) const
bool operator==(const SymGroupRepHandle &RHS) const
SymGroupRep const * rep_ptr() const
Index dim() const
Matrix dimension of representation.
SymOpRepresentation is the base class for anything describes a symmetry operation.
SymGroupRepID add_copy_to_master() const
Adds copy of this representation its home_group.
SymGroupRep & operator=(const SymGroupRep &RHS)
Index find(const T &test_elem) const
void push_back_copy(const SymOpRepresentation &_pushed)
ReturnArray< Index > num_each_real_irrep(const SymGroup &subgroup, bool verbose=false) const
const MasterSymGroup & master_group() const
Permutation const * get_permutation(Index i) const
void set_rep(const SymGroup &head_group, SymGroupRepID symrep_ID)
SymGroupRep permuted_direct_sum_rep(const SymGroupRep &permute_rep, const Array< SymGroupRep const * > &sum_reps)
SymGroupRep coord_transformed_copy(const Eigen::MatrixXd &trans_mat) const
SymGroupRepHandle RemoteHandle
Eigen::MatrixXd _symmetrized_irrep_trans_mat(const SymGroup &subgroup) const
SymGroupRep is an alternative representation of a SymGroup for something other than real space...
SymGroupRepID get_ID() const
multivector< Eigen::VectorXd >::X< 3 > calc_special_total_directions(const SymGroup &subgroup) const
Eigen::MatrixXd get_irrep_trans_mat_blind(const SymGroup &head_group) const
void set_master_group(const MasterSymGroup &master, const SymGroupRepID &_rep_ID)
SymGroupRepID m_rep_ID
rep_ID is unique identifier of a specific SymGroupRep instantiation
SymGroupRep(SymGroupRep::NullInitializer init, Index _size)
SymOpRepresentation const * operator[](Index i) const
Array< Index > m_subgroup_op_inds
SymGroupRep * copy() const
Basic std::vector like container (deprecated)
ReturnArray< Index > op_indices() const
SymGroupRep const & representation(SymGroupRepID i) const
Const access of alternate Representations of a SymGroup.
void set_rep(const SymOpRepresentation &base_rep, const SymOpRepresentation &new_rep) const