Symmetry

AbstractSymmetry

TranslationSymmetry

LatticeTools.TranslationSymmetryType
TranslationSymmetry

Represent lattice translation symmetry.

julia> TranslationSymmetry([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

LatticeTools.group_orderMethod
group_order(sym::TranslationSymmetry, g...)

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

source
LatticeTools.symmetry_nameMethod
symmetry_name(sym::TranslationSymmetry)

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

source
LatticeTools.symmetry_productMethod
symmetry_product(tsym::TranslationSymmetry)

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

julia> using LatticeTools

julia> tsym = TranslationSymmetry([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::TranslationSymmetry)

Return the irreducible representations of the translation symmetry

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

Return the idxth irreducible representation of the translation symmetry

source
LatticeTools.irrep_dimensionMethod
irrep_dimension(sym::TranslationSymmetry, 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::TranslationSymmetry, 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{<:TranslationSymmetry, 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

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{TranslationSymmetry} and PointSymmetry, or
  • IrrepComponent{SymmetryEmbedding{TranslationSymmetry}} 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::TranslationSymmetry: 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, operator::TranslationOperation{<:Integer})
source
iscompatible(hypercube, operator::PointOperation{<:Integer})
source
iscompatible(hypercube, symmetry::TranslationSymmetry)
source
iscompatible(hypercube, symmetry::PointSymmetry)
source
iscompatible(tsym::TranslationSymmetry, pop::PointOperation{<:Integer})
source
iscompatible(tsym::TranslationSymmetry, psym::PointSymmetry)
source
iscompatible(psym::PointSymmetry, tsym::TranslationSymmetry)
source
iscompatible(tsym, tsym_irrep_index, point_operation)
source
iscompatible(tsym, tsym_irrep_index, psym)
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
LatticeTools.PointSymmetryDatabase.find2dFunction
find2d(group_name::AbstractString)

Find a two-dimensional point group symmetry by Hermann-Mauguin name. Ref: https://www.cryst.ehu.es/

source
find2d(element_names::AbstractVector{<:AbstractString})

Find a two-dimensional point group symmetry by element names. The names must be "simplified", without any subscripts.

source
LatticeTools.PointSymmetryDatabase.find3dFunction
find3d(group_name::AbstractString)

Find a three-dimensional point group symmetry by Hermann-Mauguin name. Ref: https://www.cryst.ehu.es/

source
find3d(element_names::AbstractVector{<:AbstractString})

Find a three-dimensional point group symmetry by element names. The names must be "simplified", without any subscripts.

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.:⋊Function
⋊(normal::AbstractSymmetry, rest::AbstractSymmetry)

Return symmorphic symmetry normal ⋊ rest.

source
LatticeTools.:⋉Function
⋉(rest::AbstractSymmetry, normal::AbstractSymmetry)

Return symmorphic symmetry normal ⋊ rest.

source
LatticeTools.group_orderMethod
group_order(sym::SymmorphicSymmetry)

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

source
LatticeTools.fractional_momentumMethod
fractional_momentum(sym, g)

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

Arguments

  • sym::SymmorphicSymmetry{<:TranslationSymmetry, 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