Symmetry
AbstractSymmetry
LatticeTools.AbstractSymmetry — TypeAbstractSymmetry{OperationType<:AbstractSpaceSymmetryOperation}Abstract symmetry whose elements are of type OperationType.
TranslationSymmetry
LatticeTools.TranslationSymmetry — TypeTranslationSymmetryRepresent lattice translation symmetry.
julia> TranslationSymmetry([3 0; 0 2])Fields
hypercube::Hypercubeelements::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}}}
Constructors
LatticeTools.TranslationSymmetry — MethodTranslationSymmetry(shape::Matrix{<:Integer}; tol=√ϵ)LatticeTools.TranslationSymmetry — MethodTranslationSymmetry(lattice::Lattice; tol=√ϵ)LatticeTools.TranslationSymmetry — MethodTranslationSymmetry(hypercube::Hypercube; tol=√ϵ)LatticeTools.TranslationSymmetry — MethodTranslationSymmetry(hypercube::Hypercube, generators::AbstractMatrix{<:Integer}; tol::Real=Base.rtoldefault(Float64))Common Functions for Symmetry
LatticeTools.dimension — Methoddimension(sym::TranslationSymmetry)Spatial dimension of the translation symmetry
LatticeTools.elements — Methodelements(sym::TranslationSymmetry)Get the elements of the translation symmetry.
LatticeTools.element — Methodelement(sym::TranslationSymmetry, i)Get the ith element of the translation symmetry.
LatticeTools.element_names — Methodelement_names(sym::TranslationSymmetry)Get the names of the elements of the translation symmetry.
LatticeTools.element_name — Methodelement_name(sym::TranslationSymmetry, i)Get the name of the ith element of the translation symmetry.
LatticeTools.group — Methodgroup(sym::TranslationSymmetry)Group structure of the translation symmetry
LatticeTools.group_order — Methodgroup_order(sym::TranslationSymmetry, g...)Group order of the translation symmetry. Calls group_order(group(sym), g...)
LatticeTools.group_multiplication_table — Methodgroup_multiplication_table(sym::TranslationSymmetry)Group multiplication table of the translation symmetry. Calls group_multiplication_table(group(sym))
LatticeTools.generator_indices — Methodgenerator_indices(sym::TranslationSymmetry)Return indices of the generating translations.
LatticeTools.generator_elements — Methodgenerator_elements(sym::TranslationSymmetry)Return the generating translation operations.
LatticeTools.symmetry_name — Methodsymmetry_name(sym::TranslationSymmetry)Name of the translation symmetry. Return TranslationSymmetry[(n11,n21)x(n12,n22)].
LatticeTools.symmetry_product — Methodsymmetry_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])Irreducible Representations
LatticeTools.character_table — Methodcharacter_table(sym::TranslationSymmetry)Return the character table of the translation symmetry.
LatticeTools.irreps — Methodirreps(sym::TranslationSymmetry)Return the irreducible representations of the translation symmetry
LatticeTools.irrep — Methodirrep(sym::TranslationSymmetry, idx)Return the idxth irreducible representation of the translation symmetry
LatticeTools.num_irreps — Methodnum_irreps(sym::TranslationSymmetry)Return the number of irreducible representations of the translation symmetry, i.e. number of allowed momentum points. Aliases: num_irreps, numirreps, irrepcount
LatticeTools.numirreps — Methodnumirreps(sym::TranslationSymmetry)Return the number of irreducible representations of the translation symmetry, i.e. number of allowed momentum points. Aliases: num_irreps, numirreps, irrepcount
LatticeTools.irrepcount — Methodirrepcount(sym::TranslationSymmetry)Return the number of irreducible representations of the translation symmetry, i.e. number of allowed momentum points. Aliases: num_irreps, numirreps, irrepcount
LatticeTools.irrep_dimension — Methodirrep_dimension(sym::TranslationSymmetry, idx::Integer)Dimension of the idxth irrep of the translation symmetry, which is always 1 for translation symmetry which is Abelian.
Functions Specific to Translation Symmetry
LatticeTools.fractional_momentum — Methodfractional_momentum(sym::TranslationSymmetry, g...)Return the gth fractional momentum of the translation symmetry.
fractional_momentum(sym, g)Return the gth fractional momentum of the normal (translation) symmetry.
Arguments
sym::SymmorphicSymmetry{<:TranslationSymmetry, S2, E}
LatticeTools.isbragg — Methodisbragg(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} × ....
LatticeTools.isbragg — Methodisbragg(shape, integer_momentum, identity_translations)Check for Bragg condition at the integer momentum for all the identity translations.
LatticeTools.isbragg — Methodisbragg(k, t)Check for Bragg condition at momentum k and translation t. Fractional momentum is normalized to 1, i.e. lies within [0, 1)ⁿ
LatticeTools.isbragg — Methodisbragg(k, translations)Check for Bragg condition at k for all the translations.
LatticeTools.isbragg — Methodisbragg(tsym, tsym_irrep_index, translation)Check for Bragg condition at momentum given by the tsym_irrep_index.
LatticeTools.isbragg — Methodisbragg(tsym, tsym_irrep_index, translations)Check for Bragg condition at momentum given by the tsym_irrep_index for all translations.
PointSymmetry
LatticeTools.PointSymmetry — TypePointSymmetryArguments
elements::Vector{PointOperation{Int}}group::FiniteGroupgenerators::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::Stringschoenflies::String
Common Functions for Symmetry
LatticeTools.dimension — Methoddimension(sym::PointSymmetry)Spatial dimension of the point symmetry
LatticeTools.elements — Methodelements(sym::PointSymmetry)Return the elements of the point symmetry.
LatticeTools.element — Methodelement(sym::PointSymmetry, i)Return the ith element of the point symmetry.
LatticeTools.element_names — Methodelement_names(sym::PointSymmetry)Return the names of the elements of the point symmetry.
LatticeTools.element_name — Methodelement_name(sym::PointSymmetry, i)Return the name of the ith element of the point symmetry.
LatticeTools.group — Methodgroup(sym::PointSymmetry)Group structure of the point symmetry
LatticeTools.group_order — Methodgroup_order(sym::PointSymmetry, g...)Group order of the point symmetry. Calls group_order(group(sym), g...)
LatticeTools.group_multiplication_table — Methodgroup_multiplication_table(sym::PointSymmetry)Group multiplication table of the point symmetry. Calls group_multiplication_table(group(sym))
LatticeTools.generator_indices — Methodgenerator_indices(sym::PointSymmetry)Return indices of the generating translations.
LatticeTools.generator_elements — Methodgenerator_elements(sym::PointSymmetry)Return the generating point operations.
LatticeTools.symmetry_name — Methodsymmetry_name(sym::TranslationSymmetry)Name of the point symmetry. Return TranslationSymmetry[<Hermann Mauguin>].
LatticeTools.symmetry_product — Methodsymmetry_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.
Irreducible Representations
LatticeTools.character_table — Methodcharacter_table(sym::PointSymmetry)Return the character table of the point symmetry.
LatticeTools.irreps — Methodirreps(sym::PointSymmetry)Return the irreducible representations of the point symmetry.
LatticeTools.irrep — Methodirrep(sym::PointSymmetry, idx::Integer)Return the idxth irreducible representation of the point symmetry.
LatticeTools.num_irreps — Methodnum_irreps(sym::PointSymmetry)Return the number of irreducible representations of the point symmetry. Aliases: num_irreps(::PointSymmetry), numirreps(::PointSymmetry), irrepcount(::PointSymmetry)
LatticeTools.numirreps — Methodnumirreps(sym::PointSymmetry)Return the number of irreducible representations of the point symmetry. Aliases: num_irreps(::PointSymmetry), numirreps(::PointSymmetry), irrepcount(::PointSymmetry)
LatticeTools.irrepcount — Methodirrepcount(sym::PointSymmetry)Return the number of irreducible representations of the point symmetry. Aliases: num_irreps(::PointSymmetry), numirreps(::PointSymmetry), irrepcount(::PointSymmetry)
LatticeTools.irrep_dimension — Methodirrep_dimension(sym::PointSymmetry, idx::Integer)Dimension of the idxth irrep of the point symmetry.
Projection to Subspace
LatticeTools.project — Methodproject(psym, projection; tol=√ϵ)Project psym to a subspace using projection
Arguments
psym::PointSymmetryprojection::AbstractMatrix{<:Integer}: n × d matrix, where d ≤ n.
Optional Arguments
tol::Real: singular values of projection must be 1 up to tolerance.
Little Symmetry
LatticeTools.little_group_elements — Functionlittle_group_elements(tsym, psym)Return elements of psym compatible with the translation symmetry tsym.
little_group_elements(tsym, tsym_irrep_index, psym)Return elements of psym compatible with the translation symmetry tsym at irrep tsym_irrep_index
little_group_elements(tsymbed, psymbed)little_group_elements(tsymbed, tsym_irrep_index, psymbed)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}andPointSymmetry, orIrrepComponent{SymmetryEmbedding{TranslationSymmetry}}andSymmetryEmbedding{PointSymmetry}
LatticeTools.little_group — Functionlittle_group(tsym, tsym_irrep_index, psym)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.
little_group(tsic, psym)Return the FiniteGroup object that corresponds to the little group of psym at tsic.
little_group(tsic, psymbed)Return the FiniteGroup object that corresponds to the little group of psymbed at tsic.
LatticeTools.little_symmetry — Functionlittle_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 symmetrypsym::PointSymmetry: point symmetrylg_elements::AbstractVector{<:Integer}: indices of the elements of the little group
little_symmetry(tsym, psym)little_symmetry(tsym, tsym_irrep_index, psym)little_symmetry(tsymbed, psymbed)little_symmetry(tsymbed, tsym_irrep_index, psymbed)little_symmetry(tsic, psym)Return the PointSymmetry object that corresponds to the little group of psym at tsic.
Compatibility
LatticeTools.iscompatible — Functioniscompatible(hypercube, operator::TranslationOperation{<:Integer})iscompatible(hypercube, operator::PointOperation{<:Integer})iscompatible(hypercube, symmetry::TranslationSymmetry)iscompatible(hypercube, symmetry::PointSymmetry)iscompatible(tsym::TranslationSymmetry, pop::PointOperation{<:Integer})iscompatible(tsym::TranslationSymmetry, psym::PointSymmetry)iscompatible(psym::PointSymmetry, tsym::TranslationSymmetry)iscompatible(tsym, tsym_irrep_index, point_operation)iscompatible(tsym, tsym_irrep_index, psym)iscompatible(lattice, translation_operation)iscompatible(lattice, point_operation)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.
iscompatible(lattice, point_symmetry)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".
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
iscompatible(tsic, psym)Test whether the point symmetry psym is compatible with the irrep component tsic (i.e. momentum) of the translation symmetry.
iscompatible(lattice::Lattice, ssym::SymmorphicSymmetry)PointSymmetryDatabase
LatticeTools.PointSymmetryDatabase — ModulePoint 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.
LatticeTools.PointSymmetryDatabase.get2d — Functionget2d(group_index::Integer)Get the group_indexth two-dimensional point group symmetry. Ref: [https://www.cryst.ehu.es]
LatticeTools.PointSymmetryDatabase.get3d — Functionget3d(group_index::Integer)Get the group_indexth three-dimensional point group symmetry. Ref: [https://www.cryst.ehu.es]
LatticeTools.PointSymmetryDatabase.find2d — Functionfind2d(group_name::AbstractString)Find a two-dimensional point group symmetry by Hermann-Mauguin name. Ref: https://www.cryst.ehu.es/
find2d(element_names::AbstractVector{<:AbstractString})Find a two-dimensional point group symmetry by element names. The names must be "simplified", without any subscripts.
LatticeTools.PointSymmetryDatabase.find3d — Functionfind3d(group_name::AbstractString)Find a three-dimensional point group symmetry by Hermann-Mauguin name. Ref: https://www.cryst.ehu.es/
find3d(element_names::AbstractVector{<:AbstractString})Find a three-dimensional point group symmetry by element names. The names must be "simplified", without any subscripts.
IrrepDatabase
LatticeTools.IrrepDatabase — ModuleIrrep datbase module. Provides irreducible representation data of point symmetries in three dimensions (and therefore two and one).
Symmorphic Symmetry
LatticeTools.SymmorphicSymmetry — TypeSymmorphicSymmetry{S1, S2, E}Symmorphic symmetry of symmetry S1 ⋊ S2, 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 subgrouprest::S2elements::Array{E}element_names::Array{String}
Operators
LatticeTools.:⋊ — Function⋊(normal::AbstractSymmetry, rest::AbstractSymmetry)Return symmorphic symmetry normal ⋊ rest.
LatticeTools.:⋉ — Function⋉(rest::AbstractSymmetry, normal::AbstractSymmetry)Return symmorphic symmetry normal ⋊ rest.
LatticeTools.symmetry_product — Methodsymmetry_product(sym)Arguments
sym::SymmorphicSymmetry{TranslationSymmetry,PointSymmetry,S}) where {S<:SpaceOperation{<:Integer}}
LatticeTools.group — Methodgroup(sym::SymmorphicSymmetry)Return FiniteGroup of the elements.
LatticeTools.group_order — Methodgroup_order(sym::SymmorphicSymmetry)Group order of sym, which is the product of the subgroup and the normal subgroup.
LatticeTools.group_multiplication_table — Methodgroup_multiplication_table(sym::SymmorphicSymmetry)Return group multiplication table of sym.
LatticeTools.elements — Methodelements(sym::SymmorphicSymmetry)Return the elements of the symmorphic symmetry.
LatticeTools.element — Methodelement(sym::SymmorphicSymmetry, g...)Return the ith element of the symmorphic symmetry.
LatticeTools.element_names — Methodelement_names(sym::SymmorphicSymmetry)Return the element names of the symmorphic symmetry.
LatticeTools.element_name — Methodelement_name(sym::SymmorphicSymmetry, g...)Return the name of the gth element of the symmorphic symmetry.
LatticeTools.fractional_momentum — Methodfractional_momentum(sym, g)Return the gth fractional momentum of the normal (translation) symmetry.
Arguments
sym::SymmorphicSymmetry{<:TranslationSymmetry, S2, E}
LatticeTools.generator_indices — Methodgenerator_indices(sym::SymmorphicSymmetry)Return the indices of the generators, which is a union of the generators of normal and rest.
LatticeTools.generator_elements — Methodgenerator_elements(sym::SymmorphicSymmetry)Return the generating elements