Symmetry
AbstractSymmetry
Missing docstring for AbstractSymmetry. Check Documenter's build log for details.
FiniteTranslationSymmetry
LatticeTools.FiniteTranslationSymmetry — TypeFiniteTranslationSymmetryRepresent lattice translation symmetry.
julia> FiniteTranslationSymmetry([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.FiniteTranslationSymmetry — MethodFiniteTranslationSymmetry(shape::Matrix{<:Integer}; tol=√ϵ)LatticeTools.FiniteTranslationSymmetry — MethodFiniteTranslationSymmetry(lattice::Lattice; tol=√ϵ)LatticeTools.FiniteTranslationSymmetry — MethodFiniteTranslationSymmetry(hypercube::Hypercube; tol=√ϵ)LatticeTools.FiniteTranslationSymmetry — MethodFiniteTranslationSymmetry(hypercube::Hypercube, generators::AbstractMatrix{<:Integer}; tol::Real=Base.rtoldefault(Float64))Common Functions for Symmetry
LatticeTools.dimension — Methoddimension(sym::FiniteTranslationSymmetry)Spatial dimension of the translation symmetry
GroupTools.elements — Methodelements(sym::FiniteTranslationSymmetry)Get the elements of the translation symmetry.
GroupTools.element — Methodelement(sym::FiniteTranslationSymmetry, i)Get the ith element of the translation symmetry.
GroupTools.element_names — Methodelement_names(sym::FiniteTranslationSymmetry)Get the names of the elements of the translation symmetry.
GroupTools.element_name — Methodelement_name(sym::FiniteTranslationSymmetry, i)Get the name of the ith element of the translation symmetry.
GroupTools.group — Methodgroup(sym::FiniteTranslationSymmetry)Group structure of the translation symmetry
GroupTools.group_order — Methodgroup_order(sym::FiniteTranslationSymmetry, g...)Group order of the translation symmetry. Calls group_order(group(sym), g...)
GroupTools.group_multiplication_table — Methodgroup_multiplication_table(sym::FiniteTranslationSymmetry)Group multiplication table of the translation symmetry. Calls group_multiplication_table(group(sym))
LatticeTools.generator_indices — Methodgenerator_indices(sym::FiniteTranslationSymmetry)Return indices of the generating translations.
LatticeTools.generator_elements — Methodgenerator_elements(sym::FiniteTranslationSymmetry)Return the generating translation operations.
LatticeTools.symmetry_name — Methodsymmetry_name(sym::FiniteTranslationSymmetry)Name of the translation symmetry. Return FiniteTranslationSymmetry[(n11,n21)x(n12,n22)].
LatticeTools.symmetry_product — Methodsymmetry_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])Irreducible Representations
LatticeTools.character_table — Methodcharacter_table(sym::FiniteTranslationSymmetry)Return the character table of the translation symmetry.
LatticeTools.irreps — Methodirreps(sym::FiniteTranslationSymmetry)Return the irreducible representations of the translation symmetry
LatticeTools.irrep — Methodirrep(sym::FiniteTranslationSymmetry, idx)Return the idxth irreducible representation of the translation symmetry
LatticeTools.num_irreps — Methodnum_irreps(sym::FiniteTranslationSymmetry)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::FiniteTranslationSymmetry)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::FiniteTranslationSymmetry)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::FiniteTranslationSymmetry, 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::FiniteTranslationSymmetry, 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{<:FiniteTranslationSymmetry, 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
GroupTools.elements — Methodelements(sym::PointSymmetry)Return the elements of the point symmetry.
GroupTools.element — Methodelement(sym::PointSymmetry, i)Return the ith element of the point symmetry.
GroupTools.element_names — Methodelement_names(sym::PointSymmetry)Return the names of the elements of the point symmetry.
GroupTools.element_name — Methodelement_name(sym::PointSymmetry, i)Return the name of the ith element of the point symmetry.
GroupTools.group — Methodgroup(sym::PointSymmetry)Group structure of the point symmetry
GroupTools.group_order — Methodgroup_order(sym::PointSymmetry, g...)Group order of the point symmetry. Calls group_order(group(sym), g...)
GroupTools.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::FiniteTranslationSymmetry)Name of the point symmetry. Return FiniteTranslationSymmetry[<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{FiniteTranslationSymmetry}andPointSymmetry, orIrrepComponent{SymmetryEmbedding{FiniteTranslationSymmetry}}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::FiniteTranslationSymmetry: 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, 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.
iscompatible(hypercube, op::PointOperation{<:Integer})Check whether the point operation is compatible with the hypercube, i.e. leaves the superlattice invariant.
iscompatible(hypercube, symmetry::FiniteTranslationSymmetry)Check whether the translation symmetry is compatible with the hypercube, i.e. has the same superlattice.
iscompatible(hypercube, symmetry::PointSymmetry)Check whether the point symmetry is compatible with the hypercube, i.e. all of its elements leaves the superlattice invariant.
iscompatible(tsym::FiniteTranslationSymmetry, pop::PointOperation{<:Integer})Check whether the point operation is compatible with the translation symmetry, i.e. leaves the superlattice invariant.
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.
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.
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.
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.
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/
LatticeTools.PointSymmetryDatabase.find3d — Functionfind3d(group_name::AbstractString)Find a three-dimensional point group symmetry by Hermann-Mauguin name. Ref: https://www.cryst.ehu.es/
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.symmetry_product — Methodsymmetry_product(sym)Arguments
sym::SymmorphicSymmetry{FiniteTranslationSymmetry,PointSymmetry,S}) where {S<:SpaceOperation{<:Integer}}
GroupTools.group — Methodgroup(sym::SymmorphicSymmetry)Return FiniteGroup of the elements.
GroupTools.group_order — Methodgroup_order(sym::SymmorphicSymmetry)Group order of sym, which is the product of the subgroup and the normal subgroup.
GroupTools.group_multiplication_table — Methodgroup_multiplication_table(sym::SymmorphicSymmetry)Return group multiplication table of sym.
GroupTools.elements — Methodelements(sym::SymmorphicSymmetry)Return the elements of the symmorphic symmetry.
GroupTools.element — Methodelement(sym::SymmorphicSymmetry, g...)Return the ith element of the symmorphic symmetry.
GroupTools.element_names — Methodelement_names(sym::SymmorphicSymmetry)Return the element names of the symmorphic symmetry.
GroupTools.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{<:FiniteTranslationSymmetry, 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