CASM  1.1.0
A Clusters Approach to Statistical Mechanics
CASM::SymGroup Class Reference

#include <SymGroup.hh>

+ Inheritance diagram for CASM::SymGroup:

Detailed Description

SymGroup is a collection of symmetry operations that satisfy the group property The symmetry operations are stored as their coordinate representation, as described by the SymOp class i.e., if SymOps 'A' and 'B' are in SymGroup, C=A*B is also in SymGroup if 'A' is in SymGroup, then A.inverse() is in SymGroup SymGroup always contains an identity operation.

Definition at line 42 of file SymGroup.hh.

Public Types

typedef SymOp::vector_type vector_type
 
typedef SymOp::matrix_type matrix_type
 

Public Member Functions

 SymGroup (PERIODICITY_TYPE init_type=PERIODIC)
 Initialize by setting periodicity mode (default mode is PERIODIC) More...
 
 SymGroup (std::vector< SymOp > from_array, Lattice const *lat_ptr, PERIODICITY_TYPE init_type=PERIODIC)
 
template<typename IterType >
 SymGroup (IterType begin, IterType end, PERIODICITY_TYPE init_type=PERIODIC)
 
virtual ~SymGroup ()
 
virtual void push_back (const SymOp &new_op)
 
virtual void clear ()
 
virtual void clear_tables ()
 
void set_lattice (const Lattice &new_lat)
 Lattice used for periodic comparisons (for instance, to generate multiplcation table) More...
 
const Latticelattice () const
 Lattice used for periodic comparisons (for instance, to generate multiplcation table) More...
 
const MasterSymGroupmaster_group () const
 
std::vector< Indexop_indices () const
 
std::vector< Indexmaster_group_indices () const
 Return the MasterSymGroup indices of the operations in this SymGroup. More...
 
bool contains_periodic (const SymOp &test_op, double tol=TOL) const
 Check to see if a SymOp is contained in in SymGroup. More...
 
Index find_no_trans (const SymOp &test_op) const
 Check to see if a SymOp is contained in in SymGroup and return its index. More...
 
Index find_periodic (const SymOp &test_op, double tol=TOL) const
 
std::vector< Indexfind_all_periodic (const std::vector< SymOp > &subgroup, double tol=TOL) const
 
virtual void sort ()
 Sort SymOp in the SymGroup. More...
 
SymGroup get_union (const SymGroup &other_group) const
 Adds SymOps from 'other_group' and enforces the group property. More...
 
SymGroupapply_sym (const SymOp &op)
 Calls 'apply_sym' on all SymOps in the group. More...
 
Index ind_prod (Index i, Index j) const
 Get index of operation that is result of multiplication of at(i)*at(j) More...
 
Index ind_inverse (Index i) const
 Get index of operation that is inverse of operation at(i) More...
 
Index class_of_op (Index i) const
 Get conjugacy class index of operation at(i) More...
 
void set_irrep_ID (Index i, SymGroupRepID ID) const
 set symrep ID of a particular irrep More...
 
SymGroupRepID get_irrep_ID (Index i) const
 Get symrep ID of a particular irrep. More...
 
SymGroupRepID coord_rep_ID () const
 
SymGroupRep const & get_irrep (Index i) const
 Get symrep for a particular irrep. More...
 
SymGroupRepID allocate_representation () const
 Add a new empty representation. More...
 
void calc_space_group_in_cell (SymGroup &space_group, const Lattice &_cell) const
 
void calc_space_group_in_range (SymGroup &space_group, const Lattice &_cell, Eigen::Vector3i min_trans, Eigen::Vector3i max_trans) const
 
bool is_group (double tol=TOL) const
 Check to see if SymGroup satisfies the group property. More...
 
void enforce_group (double tol=TOL, Index max_size=200)
 Enforce group property by adding products of operations to the group. More...
 
void print_locations (std::ostream &stream) const
 print locations of the symmetry-generating element of each SymOp More...
 
void write (std::string filename, COORD_TYPE mode) const
 Write the SymGroup to a file. More...
 
void print (std::ostream &out, COORD_TYPE mode) const
 Print the SymGroup to a stream. More...
 
SymGroupoperator+= (const Eigen::Ref< const SymOp::vector_type > &shift)
 Cartesian translation of SymGroup origin by vector 'shift'. More...
 
SymGroupoperator-= (const Eigen::Ref< const SymOp::vector_type > &shift)
 
double max_error ()
 This returns the group's max_error. More...
 
std::vector< std::vector< Index > > left_cosets (const std::vector< SymOp > &subgroup, double tol=TOL) const
 
template<typename IterType >
std::vector< std::vector< Index > > left_cosets (IterType const &begin, IterType const &end) const
 
const std::vector< std::vector< Index > > & get_multi_table () const
 
const std::vector< std::vector< Index > > & get_alt_multi_table () const
 
void invalidate_multi_tables () const
 
const std::vector< std::vector< Index > > & get_conjugacy_classes () const
 
const std::string & get_name () const
 
const std::string & get_latex_name () const
 
PERIODICITY_TYPE periodicity () const
 
std::string possible_space_groups () const
 
const std::vector< std::set< std::set< Index > > > & subgroups () const
 
bool is_irreducible () const
 
std::vector< SymGroupunique_subgroups () const
 
SymGroup copy_no_trans (bool keep_repeated=false) const
 Fill up a SymGroup with *this minus the shifts. More...
 
SymInfo info (Index i) const
 
std::vector< std::set< std::set< Index > > > small_subgroups () const
 

Static Public Member Functions

static SymGroup lattice_point_group (Lattice const &_lat)
 

Protected Member Functions

void _generate_conjugacy_classes () const
 
void _generate_centralizers () const
 
void _generate_elem_order_table () const
 
void _generate_class_names () const
 
bool _generate_multi_table () const
 
void _generate_alt_multi_table () const
 
void _generate_subgroups () const
 
std::vector< std::set< std::set< Index > > > _small_subgroups () const
 

Protected Attributes

Lattice const * m_lat_ptr
 Pointer to a lattice for doing periodic comparisons. More...
 
PERIODICITY_TYPE m_group_periodicity
 Specifies whether to use lattice periodicity when testing for equivalence. More...
 
multivector< Index >::X< 2 > multi_table
 multi_table[i][j] gives index of operation that is result of at(i)*at(j) More...
 
multivector< Index >::X< 2 > alt_multi_table
 
std::vector< std::vector< Index > > conjugacy_classes
 
std::vector< std::string > class_names
 
std::vector< Indexindex2conjugacy_class
 
std::vector< SymGroupRepIDirrep_IDs
 
std::vector< std::set< std::set< Index > > > m_subgroups
 
multivector< Index >::X< 2 > centralizer_table
 
multivector< Index >::X< 2 > elem_order_table
 
std::string name
 
std::string latex_name
 
std::string comment
 
double m_max_error
 

Member Typedef Documentation

◆ matrix_type

Definition at line 45 of file SymGroup.hh.

◆ vector_type

Definition at line 44 of file SymGroup.hh.

Constructor & Destructor Documentation

◆ SymGroup() [1/2]

CASM::SymGroup::SymGroup ( PERIODICITY_TYPE  init_type = PERIODIC)
inline

Initialize by setting periodicity mode (default mode is PERIODIC)

Definition at line 50 of file SymGroup.hh.

◆ SymGroup() [2/2]

CASM::SymGroup::SymGroup ( std::vector< SymOp from_array,
Lattice const *  lat_ptr,
PERIODICITY_TYPE  init_type = PERIODIC 
)

Definition at line 806 of file SymGroup.cc.

◆ ~SymGroup()

CASM::SymGroup::~SymGroup ( )
virtual

Definition at line 773 of file SymGroup.cc.

Member Function Documentation

◆ _generate_alt_multi_table()

void CASM::SymGroup::_generate_alt_multi_table ( ) const
protected

Definition at line 1746 of file SymGroup.cc.

◆ _generate_centralizers()

void CASM::SymGroup::_generate_centralizers ( ) const
protected

The centralizer of a subset S of a group G is the set of elements of G that commute with each element of S. The centralizer is a subgroup of G.

In our specific case, the subsets are the conjugacy classes, so we fill the centralizer_table with subgroups of G that commute with the corresponding conjugacy class.qq

Definition at line 1227 of file SymGroup.cc.

◆ _generate_class_names()

void CASM::SymGroup::_generate_class_names ( ) const
protected

This will name your conjugacy classes according to some crazy convention, which is similar, but not exactly identical to the Schoenflies notation.

We start by finding the principal axes. Often, there will only be one. However, in cases like fcc, there can be several. All rotations that are about the principal axis will be named "XCn" if they are proper and "XSn" if they are improper. Here, X is the size of their conjugacy class, and n is the foldedness of the rotation, i.e. 60 degree rotations are 6-fold, while 120 degree rotations are 3-fold.

Definition at line 972 of file SymGroup.cc.

◆ _generate_conjugacy_classes()

void CASM::SymGroup::_generate_conjugacy_classes ( ) const
protected

The number of irreducible representations is equal to the number of conjugacy classes.

The number of elements in each conjugacy class must be a divisor of the number of symmetry group operations.

Definition at line 1487 of file SymGroup.cc.

◆ _generate_elem_order_table()

void CASM::SymGroup::_generate_elem_order_table ( ) const
protected

Definition at line 1253 of file SymGroup.cc.

◆ _generate_multi_table()

bool CASM::SymGroup::_generate_multi_table ( ) const
protected

Definition at line 1702 of file SymGroup.cc.

◆ _generate_subgroups()

void CASM::SymGroup::_generate_subgroups ( ) const
protected

Definition at line 1337 of file SymGroup.cc.

◆ _small_subgroups()

std::vector< std::set< std::set< Index > > > CASM::SymGroup::_small_subgroups ( ) const
protected

Definition at line 1281 of file SymGroup.cc.

◆ allocate_representation()

SymGroupRepID CASM::SymGroup::allocate_representation ( ) const

Add a new empty representation.

Definition at line 1601 of file SymGroup.cc.

◆ apply_sym()

SymGroup & CASM::SymGroup::apply_sym ( const SymOp op)

Calls 'apply_sym' on all SymOps in the group.

Definition at line 1867 of file SymGroup.cc.

◆ calc_space_group_in_cell()

void CASM::SymGroup::calc_space_group_in_cell ( SymGroup space_group,
const Lattice _cell 
) const

Gets all the space group operations in unit cell and stores them in space_group assuming that this SymGroup contains the factor group

Definition at line 1889 of file SymGroup.cc.

◆ calc_space_group_in_range()

void CASM::SymGroup::calc_space_group_in_range ( SymGroup space_group,
const Lattice _cell,
Eigen::Vector3i  min_trans,
Eigen::Vector3i  max_trans 
) const

gets all teh space group operations corresponding to translations in the specified range max_trans sets boundary of parillellipiped centered at origin.

Definition at line 1931 of file SymGroup.cc.

◆ class_of_op()

Index CASM::SymGroup::class_of_op ( Index  i) const

Get conjugacy class index of operation at(i)

Definition at line 1565 of file SymGroup.cc.

◆ clear()

void CASM::SymGroup::clear ( )
virtual

Reimplemented in CASM::MasterSymGroup.

Definition at line 871 of file SymGroup.cc.

◆ clear_tables()

void CASM::SymGroup::clear_tables ( )
virtual

Definition at line 826 of file SymGroup.cc.

◆ contains_periodic()

bool CASM::SymGroup::contains_periodic ( const SymOp test_op,
double  tol = TOL 
) const

Check to see if a SymOp is contained in in SymGroup.

Definition at line 1861 of file SymGroup.cc.

◆ coord_rep_ID()

SymGroupRepID CASM::SymGroup::coord_rep_ID ( ) const

Get symrep ID of the representation that stores the Cartesian symop matrices

Definition at line 1589 of file SymGroup.cc.

◆ copy_no_trans()

SymGroup CASM::SymGroup::copy_no_trans ( bool  keep_repeated = false) const

Fill up a SymGroup with *this minus the shifts.

Definition at line 928 of file SymGroup.cc.

◆ enforce_group()

void CASM::SymGroup::enforce_group ( double  tol = TOL,
Index  max_size = 200 
)

Enforce group property by adding products of operations to the group.

Definition at line 1821 of file SymGroup.cc.

◆ find_all_periodic()

std::vector< Index > CASM::SymGroup::find_all_periodic ( const std::vector< SymOp > &  subgroup,
double  tol = TOL 
) const

Definition at line 1790 of file SymGroup.cc.

◆ find_no_trans()

Index CASM::SymGroup::find_no_trans ( const SymOp test_op) const

Check to see if a SymOp is contained in in SymGroup and return its index.

Check to see if a SymOp matrix ONLY is contained in SymGroup and return the index of this operation. This was originally written for pruning the factor groups of primitive structures to construct the factor groups of their superstructures to be consistent with the supercell lattice point groups.

Definition at line 1767 of file SymGroup.cc.

◆ find_periodic()

Index CASM::SymGroup::find_periodic ( const SymOp test_op,
double  tol = TOL 
) const

This is meant for factor groups. It will compare the Cartesian matrix of the test_op with those of the SymOps in the group. Upon a successful matrix match, it will attempt to match the shift shift vector with min_dist.

Definition at line 1779 of file SymGroup.cc.

◆ get_alt_multi_table()

const std::vector< std::vector< Index > > & CASM::SymGroup::get_alt_multi_table ( ) const

Definition at line 1644 of file SymGroup.cc.

◆ get_conjugacy_classes()

const std::vector< std::vector< Index > > & CASM::SymGroup::get_conjugacy_classes ( ) const

Definition at line 1661 of file SymGroup.cc.

◆ get_irrep()

SymGroupRep const & CASM::SymGroup::get_irrep ( Index  i) const

Get symrep for a particular irrep.

Definition at line 1614 of file SymGroup.cc.

◆ get_irrep_ID()

SymGroupRepID CASM::SymGroup::get_irrep_ID ( Index  i) const

Get symrep ID of a particular irrep.

Definition at line 1581 of file SymGroup.cc.

◆ get_latex_name()

const std::string & CASM::SymGroup::get_latex_name ( ) const

Definition at line 1687 of file SymGroup.cc.

◆ get_multi_table()

const std::vector< std::vector< Index > > & CASM::SymGroup::get_multi_table ( ) const

Definition at line 1633 of file SymGroup.cc.

◆ get_name()

const std::string & CASM::SymGroup::get_name ( ) const

Definition at line 1668 of file SymGroup.cc.

◆ get_union()

SymGroup CASM::SymGroup::get_union ( const SymGroup other_group) const

Adds SymOps from 'other_group' and enforces the group property.

◆ ind_inverse()

Index CASM::SymGroup::ind_inverse ( Index  i) const

Get index of operation that is inverse of operation at(i)

Definition at line 1540 of file SymGroup.cc.

◆ ind_prod()

Index CASM::SymGroup::ind_prod ( Index  i,
Index  j 
) const

Get index of operation that is result of multiplication of at(i)*at(j)

Definition at line 1550 of file SymGroup.cc.

◆ info()

SymInfo CASM::SymGroup::info ( Index  i) const

Definition at line 942 of file SymGroup.cc.

◆ invalidate_multi_tables()

void CASM::SymGroup::invalidate_multi_tables ( ) const

Definition at line 1654 of file SymGroup.cc.

◆ is_group()

bool CASM::SymGroup::is_group ( double  tol = TOL) const

Check to see if SymGroup satisfies the group property.

Definition at line 1805 of file SymGroup.cc.

◆ is_irreducible()

bool CASM::SymGroup::is_irreducible ( ) const

Definition at line 2116 of file SymGroup.cc.

◆ lattice()

const Lattice & CASM::SymGroup::lattice ( ) const

Lattice used for periodic comparisons (for instance, to generate multiplcation table)

Definition at line 950 of file SymGroup.cc.

◆ lattice_point_group()

SymGroup CASM::SymGroup::lattice_point_group ( Lattice const &  _lat)
static

Definition at line 779 of file SymGroup.cc.

◆ left_cosets()

std::vector< std::vector< Index > > CASM::SymGroup::left_cosets ( const std::vector< SymOp > &  subgroup,
double  tol = TOL 
) const

Definition at line 1625 of file SymGroup.cc.

◆ master_group()

const MasterSymGroup& CASM::SymGroup::master_group ( ) const
inline

Definition at line 73 of file SymGroup.hh.

◆ master_group_indices()

std::vector< Index > CASM::SymGroup::master_group_indices ( ) const

Return the MasterSymGroup indices of the operations in this SymGroup.

Definition at line 857 of file SymGroup.cc.

◆ max_error()

double CASM::SymGroup::max_error ( )

This returns the group's max_error.

Definition at line 946 of file SymGroup.cc.

◆ op_indices()

std::vector< Index > CASM::SymGroup::op_indices ( ) const

Return the MasterSymGroup indices of the operations in this SymGroup (equivalent to master_group_indices)

Definition at line 850 of file SymGroup.cc.

◆ operator+=()

SymGroup & CASM::SymGroup::operator+= ( const Eigen::Ref< const SymOp::vector_type > &  shift)

Cartesian translation of SymGroup origin by vector 'shift'.

Translation operators for origin shift need to be defined.

Definition at line 2132 of file SymGroup.cc.

◆ operator-=()

SymGroup & CASM::SymGroup::operator-= ( const Eigen::Ref< const SymOp::vector_type > &  shift)

Definition at line 2140 of file SymGroup.cc.

◆ periodicity()

PERIODICITY_TYPE CASM::SymGroup::periodicity ( ) const
inline

Definition at line 191 of file SymGroup.hh.

◆ possible_space_groups()

std::string CASM::SymGroup::possible_space_groups ( ) const
inline

Definition at line 193 of file SymGroup.hh.

◆ print()

void CASM::SymGroup::print ( std::ostream &  out,
COORD_TYPE  mode 
) const

Print the SymGroup to a stream.

Definition at line 1874 of file SymGroup.cc.

◆ print_locations()

void CASM::SymGroup::print_locations ( std::ostream &  stream) const

print locations of the symmetry-generating element of each SymOp

Definition at line 1958 of file SymGroup.cc.

◆ push_back()

void CASM::SymGroup::push_back ( const SymOp new_op)
virtual

Reimplemented in CASM::MasterSymGroup.

Definition at line 818 of file SymGroup.cc.

◆ set_irrep_ID()

void CASM::SymGroup::set_irrep_ID ( Index  i,
SymGroupRepID  ID 
) const

set symrep ID of a particular irrep

Definition at line 1572 of file SymGroup.cc.

◆ set_lattice()

void CASM::SymGroup::set_lattice ( const Lattice new_lat)

Lattice used for periodic comparisons (for instance, to generate multiplcation table)

Definition at line 814 of file SymGroup.cc.

◆ small_subgroups()

std::vector<std::set<std::set<Index> > > CASM::SymGroup::small_subgroups ( ) const
inline

Definition at line 206 of file SymGroup.hh.

◆ sort()

void CASM::SymGroup::sort ( )
virtual

Sort SymOp in the SymGroup.

  • If multiplication table can be generated:
    • Generate conjugacy classes
    • Sort SymOp in each conjugacy class
    • Sort each conjugacy class by the first SymOp in the class
  • Else:

SymOp are sorted by lexicographical comparison of: (-det, -trace, angle, axis, tau)

  • angle is positive
  • axis[0] is positive

Reimplemented in CASM::MasterSymGroup.

Definition at line 2016 of file SymGroup.cc.

◆ subgroups()

const std::vector< std::set< std::set< Index > > > & CASM::SymGroup::subgroups ( ) const

Definition at line 1695 of file SymGroup.cc.

◆ unique_subgroups()

std::vector< SymGroup > CASM::SymGroup::unique_subgroups ( ) const

Definition at line 1403 of file SymGroup.cc.

◆ write()

void CASM::SymGroup::write ( std::string  filename,
COORD_TYPE  mode 
) const

Write the SymGroup to a file.

Member Data Documentation

◆ alt_multi_table

multivector<Index>::X<2> CASM::SymGroup::alt_multi_table
mutableprotected

alt_multi_table[i][j] gives index of operation that is result of at(i).inverse()*at(j)

Definition at line 236 of file SymGroup.hh.

◆ centralizer_table

multivector<Index>::X<2> CASM::SymGroup::centralizer_table
mutableprotected

Definition at line 251 of file SymGroup.hh.

◆ class_names

std::vector<std::string> CASM::SymGroup::class_names
mutableprotected

Definition at line 241 of file SymGroup.hh.

◆ comment

std::string CASM::SymGroup::comment
mutableprotected

Definition at line 256 of file SymGroup.hh.

◆ conjugacy_classes

std::vector<std::vector<Index> > CASM::SymGroup::conjugacy_classes
mutableprotected

Definition at line 240 of file SymGroup.hh.

◆ elem_order_table

multivector<Index>::X<2> CASM::SymGroup::elem_order_table
mutableprotected

Definition at line 252 of file SymGroup.hh.

◆ index2conjugacy_class

std::vector<Index> CASM::SymGroup::index2conjugacy_class
mutableprotected

Definition at line 242 of file SymGroup.hh.

◆ irrep_IDs

std::vector<SymGroupRepID> CASM::SymGroup::irrep_IDs
mutableprotected

Definition at line 245 of file SymGroup.hh.

◆ latex_name

std::string CASM::SymGroup::latex_name
mutableprotected

Definition at line 255 of file SymGroup.hh.

◆ m_group_periodicity

PERIODICITY_TYPE CASM::SymGroup::m_group_periodicity
protected

Specifies whether to use lattice periodicity when testing for equivalence.

Definition at line 229 of file SymGroup.hh.

◆ m_lat_ptr

Lattice const* CASM::SymGroup::m_lat_ptr
protected

Pointer to a lattice for doing periodic comparisons.

Definition at line 226 of file SymGroup.hh.

◆ m_max_error

double CASM::SymGroup::m_max_error
mutableprotected

Definition at line 258 of file SymGroup.hh.

◆ m_subgroups

std::vector<std::set<std::set<Index> > > CASM::SymGroup::m_subgroups
mutableprotected

Definition at line 249 of file SymGroup.hh.

◆ multi_table

multivector<Index>::X<2> CASM::SymGroup::multi_table
mutableprotected

multi_table[i][j] gives index of operation that is result of at(i)*at(j)

Definition at line 232 of file SymGroup.hh.

◆ name

std::string CASM::SymGroup::name
mutableprotected

Definition at line 254 of file SymGroup.hh.


The documentation for this class was generated from the following files: