Template Class Z2Algebra

Class Documentation

template<typename Group>
class Z2Algebra

IRREP algebra for Z2 groups (D2h and its subgroups) that supports symbolic IRREPs. Products are formed by XOR-ing the concrete parts and forming the symmetric difference of the symbols (as every IRREP is its own inverse).

Optionally, relations between symbolic (and concrete) IRREPs can be specified (e.g. My1*My2 = My3). Without relations, symbols are treated as independent of each other and products of symbols remain unevaluated. With relations, every IRREP is reduced to the representation with the fewest symbols among all representations that are equivalent under the given relations (ties broken by the IRREP ordering). This makes the representation unique and e.g. turns My1*My2 into My3. Note that the cost of this reduction grows exponentially with the number of independent relations.

Public Types

using group_type = Group
using irrep_type = Z2Irrep<Group>

Public Functions

Z2Algebra() = default

Creates an algebra without any relations between symbols.

inline explicit Z2Algebra(const std::vector<std::pair<irrep_type, irrep_type>> &identities)
Parameters:

identities – Relations of the form lhs = rhs between IRREPs

Throws:

Exception – if the relations imply an identity between different concrete IRREPs or if there are more than max_relations independent relations

inline irrep_type totally_symmetric() const
inline IrrepSet<irrep_type> product(const irrep_type &lhs, const irrep_type &rhs) const
inline irrep_type conjugate(const irrep_type &irrep) const
inline irrep_type reduce(const irrep_type &irrep) const
Returns:

The canonical representation of the given IRREP under this algebra’s relations

Public Static Attributes

static constexpr std::size_t max_relations = 16

The maximum number of independent relations.