Symmetry

AbstractSymmetry

Missing docstring.

Missing docstring for AbstractSymmetry. Check Documenter's build log for details.

FiniteTranslationSymmetry

LatticeTools.FiniteTranslationSymmetryType
FiniteTranslationSymmetry

Represent lattice translation symmetry.

julia> FiniteTranslationSymmetry([3 0; 0 2])

Fields

  • hypercube::Hypercube
  • elements::Vector{TranslationOperation{Int}}
  • group::FiniteGroup

Additional Fields

  • generators::Vector{Int}
  • conjugacy_classes::Vector{Vector{Int}}
  • character_table::Matrix{ComplexF64}
  • irreps::Vector{Vector{Matrix{ComplexF64}}}
  • element_names::Vector{String}

Cache Fields

  • generator_translations::Matrix{Int}
  • coordinates::Vector{Vector{Int}}
  • orthogonal_shape::Vector{Int}
  • orthogonal_coordinates::Vector{Vector{Int}}
  • orthogonal_to_coordinate_map::Dict{Vector{Int}, Vector{Int}}
  • coordinate_to_orthogonal_map::Dict{Vector{Int}, Vector{Int}}
  • orthogonal_shape_matrix::Matrix{Int}
  • orthogonal_reduced_reciprocal_shape_matrix::Matrix{Rational{Int}}
  • fractional_momenta::Vector{Vector{Rational{Int}}}
source

Constructors

Common Functions for Symmetry

GroupTools.elementMethod
element(sym::FiniteTranslationSymmetry, i)

Get the ith element of the translation symmetry.

source
GroupTools.element_nameMethod
element_name(sym::FiniteTranslationSymmetry, i)

Get the name of the ith element of the translation symmetry.

source
GroupTools.groupMethod
group(sym::FiniteTranslationSymmetry)

Group structure of the translation symmetry

source
GroupTools.group_orderMethod
group_order(sym::FiniteTranslationSymmetry, g...)

Group order of the translation symmetry. Calls group_order(group(sym), g...)

source
LatticeTools.symmetry_nameMethod
symmetry_name(sym::FiniteTranslationSymmetry)

Name of the translation symmetry. Return FiniteTranslationSymmetry[(n11,n21)x(n12,n22)].

source
LatticeTools.symmetry_productMethod
symmetry_product(tsym::FiniteTranslationSymmetry)

Return a binary function which combines two translation operations, with the given periodic boundary condition.

julia> using LatticeTools

julia> tsym = FiniteTranslationSymmetry([3 0; 0 4]);

julia> p = symmetry_product(tsym);

julia> p(TranslationOperation([2, 1]), TranslationOperation([2, 3]))
TranslationOperation{Int64}([1, 0])
source

Irreducible Representations

LatticeTools.irrepsMethod
irreps(sym::FiniteTranslationSymmetry)

Return the irreducible representations of the translation symmetry

source
LatticeTools.irrepMethod
irrep(sym::FiniteTranslationSymmetry, idx)

Return the idxth irreducible representation of the translation symmetry

source
LatticeTools.irrep_dimensionMethod
irrep_dimension(sym::FiniteTranslationSymmetry, idx::Integer)

Dimension of the idxth irrep of the translation symmetry, which is always 1 for translation symmetry which is Abelian.

source

Functions Specific to Translation Symmetry

LatticeTools.fractional_momentumMethod
fractional_momentum(sym::FiniteTranslationSymmetry, g...)

Return the gth fractional momentum of the translation symmetry.

source
fractional_momentum(sym, g)

Return the gth fractional momentum of the normal (translation) symmetry.

Arguments

  • sym::SymmorphicSymmetry{<:FiniteTranslationSymmetry, S2, E}
source
LatticeTools.isbraggMethod
isbragg(shape, integer_momentum, identity_translation)

Test whether an orthogonal momentum is compatible with the identity translation. Since identity translation can only be in the trivial representation (otherwise the phases cancel), this function tests whether the phase is unity. The orthogonal momentum is given as an integer vector.

\[ t(\rho) \vert \psi(k) \rangle = exp(i k \cdot \rho ) \vert \psi(k) \rangle = \vert \psi(k) \rangle\]

When the orthogonal shape is [n₁, n₂, ...], orthogonal momentum is chosen from {0, 1, ..., n₁-1} × {0,1, ..., n₂-1} × ....

source
LatticeTools.isbraggMethod
isbragg(shape, integer_momentum, identity_translations)

Check for Bragg condition at the integer momentum for all the identity translations.

source
LatticeTools.isbraggMethod
isbragg(k, t)

Check for Bragg condition at momentum k and translation t. Fractional momentum is normalized to 1, i.e. lies within [0, 1)ⁿ

source
LatticeTools.isbraggMethod
isbragg(tsym, tsym_irrep_index, translation)

Check for Bragg condition at momentum given by the tsym_irrep_index.

source
LatticeTools.isbraggMethod
isbragg(tsym, tsym_irrep_index, translations)

Check for Bragg condition at momentum given by the tsym_irrep_index for all translations.

source

PointSymmetry

LatticeTools.PointSymmetryType
PointSymmetry

Arguments

  • elements::Vector{PointOperation{Int}}
  • group::FiniteGroup
  • generators::Vector{Int}
  • conjugacy_classes::Vector{Vector{Int}}
  • character_table::Matrix{ComplexF64}
  • irreps::Vector{Vector{Matrix{ComplexF64}}}
  • element_names::Vector{String}
  • matrix_representations::Vector{Matrix{Int}}
  • hermann_mauguin::String
  • schoenflies::String
source

Common Functions for Symmetry

GroupTools.group_orderMethod
group_order(sym::PointSymmetry, g...)

Group order of the point symmetry. Calls group_order(group(sym), g...)

source
LatticeTools.symmetry_nameMethod
symmetry_name(sym::FiniteTranslationSymmetry)

Name of the point symmetry. Return FiniteTranslationSymmetry[<Hermann Mauguin>].

source
LatticeTools.symmetry_productMethod
symmetry_product(psym::PointSymmetry)

Return a function which takes two point operations and combines them. Not really necessary, but is defined for consistency with translation symmetry.

source

Irreducible Representations

LatticeTools.irrepMethod
irrep(sym::PointSymmetry, idx::Integer)

Return the idxth irreducible representation of the point symmetry.

source

Projection to Subspace

LatticeTools.projectMethod
project(psym, projection; tol=√ϵ)

Project psym to a subspace using projection

Arguments

  • psym::PointSymmetry
  • projection::AbstractMatrix{<:Integer}: n × d matrix, where d ≤ n.

Optional Arguments

  • tol::Real: singular values of projection must be 1 up to tolerance.
source

Little Symmetry

LatticeTools.little_group_elementsFunction
little_group_elements(tsym, psym)

Return elements of psym compatible with the translation symmetry tsym.

source
little_group_elements(tsym, tsym_irrep_index, psym)

Return elements of psym compatible with the translation symmetry tsym at irrep tsym_irrep_index

source
little_group_elements(tsymbed, psymbed)
source
little_group_elements(tsymbed, tsym_irrep_index, psymbed)
source
little_group_elements(tsic, psym)

Return little group elements (i.e. indices) of psym corresponding to the irrep of translation symmetry specified by tsic. tsic and psym are either

  • IrrepComponent{FiniteTranslationSymmetry} and PointSymmetry, or
  • IrrepComponent{SymmetryEmbedding{FiniteTranslationSymmetry}} and SymmetryEmbedding{PointSymmetry}
source
LatticeTools.little_groupFunction
little_group(tsym, tsym_irrep_index, psym)
source
little_group(tsym, psym, elements)

Generate a little group with given elements. The elements of the little group, which may be sparse, are compressed into consecutive integers.

source
little_group(tsic, psym)

Return the FiniteGroup object that corresponds to the little group of psym at tsic.

source
little_group(tsic, psymbed)

Return the FiniteGroup object that corresponds to the little group of psymbed at tsic.

source
LatticeTools.little_symmetryFunction
little_symmetry(tsym, psym, lg_elements)

Generate a little symmetry. First generate a little group with lg_elements, look up PointSymmetryDatabase using the names of the elements, and then checks for group isomorphism.

Arguments

  • tsym::FiniteTranslationSymmetry: translation symmetry
  • psym::PointSymmetry: point symmetry
  • lg_elements::AbstractVector{<:Integer}: indices of the elements of the little group
source
little_symmetry(tsym, psym)
source
little_symmetry(tsym, tsym_irrep_index, psym)
source
little_symmetry(tsymbed, psymbed)
source
little_symmetry(tsymbed, tsym_irrep_index, psymbed)
source
little_symmetry(tsic, psym)

Return the PointSymmetry object that corresponds to the little group of psym at tsic.

source

Compatibility

LatticeTools.iscompatibleFunction
iscompatible(hypercube, op::TranslationOperation{<:Integer})

Check whether the translation operation is compatible with the hypercube, i.e. leaves the superlattice invariant. If the dimensions do not match, throw exception. Otherwise always return true.

source
iscompatible(hypercube, op::PointOperation{<:Integer})

Check whether the point operation is compatible with the hypercube, i.e. leaves the superlattice invariant.

source
iscompatible(hypercube, symmetry::FiniteTranslationSymmetry)

Check whether the translation symmetry is compatible with the hypercube, i.e. has the same superlattice.

source
iscompatible(hypercube, symmetry::PointSymmetry)

Check whether the point symmetry is compatible with the hypercube, i.e. all of its elements leaves the superlattice invariant.

source
iscompatible(tsym::FiniteTranslationSymmetry, pop::PointOperation{<:Integer})

Check whether the point operation is compatible with the translation symmetry, i.e. leaves the superlattice invariant.

source
iscompatible(tsym::FiniteTranslationSymmetry, psym::PointSymmetry)

Check whether the point symmetry is compatible with the translation symmetry, i.e. all of its elements leaves the superlattice invariant.

source
iscompatible(psym::PointSymmetry, tsym::FiniteTranslationSymmetry)

Check whether the point symmetry is compatible with the translation symmetry, i.e. all of its elements leaves the superlattice invariant.

source
iscompatible(tsym, tsym_irrep_index, point_operation)

Check whether the point operation is compatible with the given irrep of translation (a.k.a. momentum). In specific, check whether (1) the point operation is compatible with the translation symmetry, and (2) the momentum is invariant under the point operation.

source
iscompatible(tsym, tsym_irrep_index, psym)

Check whether the point symmetry is compatible with the given irrep of translation (a.k.a. momentum). In specific, check whether (1) the point operation is compatible with the translation symmetry, and (2) the momentum is invariant under all point operations.

source
iscompatible(lattice, translation_operation)
source
iscompatible(lattice, point_operation)
source
iscompatible(lattice, translation_symmetry)

Test whether lattice and the symmetry are compatible. For translation symmetry, this means that the hypercubic lattice for both are the same.

source
iscompatible(lattice, point_symmetry)
source
iscompatible(tsymbed, psymbed)

Check whether the point symmetry embedding psymbed is compatible with the translation symmetry embedding tsymbed, i.e. whether they have the same "lattice".

source
iscompatible(tsymbed, tsym_irrep_index, psymbed)

Check whether the point symmetry embedding psymbed is compatible with the translation symmetry irrep defined by tsym_irrep_index and symmetry(tsymbed). In other words, the little group elements

source
iscompatible(tsic, psym)

Test whether the point symmetry psym is compatible with the irrep component tsic (i.e. momentum) of the translation symmetry.

source
iscompatible(lattice::Lattice, ssym::SymmorphicSymmetry)
source

PointSymmetryDatabase

LatticeTools.PointSymmetryDatabaseModule

Point symmetry database module. Provides matrix representations (in units of lattice vectors) and other information about the point symmetries (Hermann-Mauguin notation, names of the elements, etc.), together with character tables and irreducible representations.

source

IrrepDatabase

LatticeTools.IrrepDatabaseModule

Irrep datbase module. Provides irreducible representation data of point symmetries in three dimensions (and therefore two and one).

source

Symmorphic Symmetry

LatticeTools.SymmorphicSymmetryType
SymmorphicSymmetry{S1, S2, E}

Symmorphic symmetry of symmetry S1S2, whose elements are of type E. For symmorphic space group, the normal symmetry S1 is translation symmetry, and S2 is point symmetry. S1 and S2 can either be AbstractSymmetry or SymmetryEmbedding.

Fields

  • normal::S1: normal subgroup
  • rest::S2
  • elements::Array{E}
  • element_names::Array{String}
source

Operators

LatticeTools.symmetry_productMethod
symmetry_product(sym)

Arguments

  • sym::SymmorphicSymmetry{FiniteTranslationSymmetry,PointSymmetry,S}) where {S<:SpaceOperation{<:Integer}}
source
GroupTools.group_orderMethod
group_order(sym::SymmorphicSymmetry)

Group order of sym, which is the product of the subgroup and the normal subgroup.

source
GroupTools.elementMethod
element(sym::SymmorphicSymmetry, g...)

Return the ith element of the symmorphic symmetry.

source
GroupTools.element_nameMethod
element_name(sym::SymmorphicSymmetry, g...)

Return the name of the gth element of the symmorphic symmetry.

source
LatticeTools.fractional_momentumMethod
fractional_momentum(sym, g)

Return the gth fractional momentum of the normal (translation) symmetry.

Arguments

  • sym::SymmorphicSymmetry{<:FiniteTranslationSymmetry, S2, E}
source
LatticeTools.generator_indicesMethod
generator_indices(sym::SymmorphicSymmetry)

Return the indices of the generators, which is a union of the generators of normal and rest.

source